};
/**
- * struct mtk_data - state container for
+ * struct mtk - state container for
* data of the platform driver. It is 3
* separate gpio-chip each one with its
* own irq_chip.
* @dev: device instance
- * @gpio_membase: memory base address
+ * @base: memory base address
* @gpio_irq: irq number from the device tree
* @gc_map: array of the gpio chips
*/
-struct mtk_data {
+struct mtk {
struct device *dev;
- void __iomem *gpio_membase;
+ void __iomem *base;
int gpio_irq;
struct mtk_gc gc_map[MTK_BANK_CNT];
};
mtk_gpio_w32(struct mtk_gc *rg, u32 offset, u32 val)
{
struct gpio_chip *gc = &rg->chip;
- struct mtk_data *gpio_data = gpiochip_get_data(gc);
+ struct mtk *mtk = gpiochip_get_data(gc);
offset = (rg->bank * GPIO_BANK_STRIDE) + offset;
- gc->write_reg(gpio_data->gpio_membase + offset, val);
+ gc->write_reg(mtk->base + offset, val);
}
static inline u32
mtk_gpio_r32(struct mtk_gc *rg, u32 offset)
{
struct gpio_chip *gc = &rg->chip;
- struct mtk_data *gpio_data = gpiochip_get_data(gc);
+ struct mtk *mtk = gpiochip_get_data(gc);
offset = (rg->bank * GPIO_BANK_STRIDE) + offset;
- return gc->read_reg(gpio_data->gpio_membase + offset);
+ return gc->read_reg(mtk->base + offset);
}
static irqreturn_t
}
static int
-mediatek_gpio_bank_probe(struct platform_device *pdev,
+mediatek_gpio_bank_probe(struct device *dev,
struct device_node *node, int bank)
{
- struct mtk_data *gpio = dev_get_drvdata(&pdev->dev);
+ struct mtk *mtk = dev_get_drvdata(dev);
struct mtk_gc *rg;
void __iomem *dat, *set, *ctrl, *diro;
int ret;
- rg = &gpio->gc_map[bank];
+ rg = &mtk->gc_map[bank];
memset(rg, 0, sizeof(*rg));
spin_lock_init(&rg->lock);
rg->chip.of_node = node;
rg->bank = bank;
- dat = gpio->gpio_membase + GPIO_REG_DATA +
- (rg->bank * GPIO_BANK_STRIDE);
- set = gpio->gpio_membase + GPIO_REG_DSET +
- (rg->bank * GPIO_BANK_STRIDE);
- ctrl = gpio->gpio_membase + GPIO_REG_DCLR +
- (rg->bank * GPIO_BANK_STRIDE);
- diro = gpio->gpio_membase + GPIO_REG_CTRL +
- (rg->bank * GPIO_BANK_STRIDE);
+ dat = mtk->base + GPIO_REG_DATA + (rg->bank * GPIO_BANK_STRIDE);
+ set = mtk->base + GPIO_REG_DSET + (rg->bank * GPIO_BANK_STRIDE);
+ ctrl = mtk->base + GPIO_REG_DCLR + (rg->bank * GPIO_BANK_STRIDE);
+ diro = mtk->base + GPIO_REG_CTRL + (rg->bank * GPIO_BANK_STRIDE);
- ret = bgpio_init(&rg->chip, &pdev->dev, 4,
+ ret = bgpio_init(&rg->chip, dev, 4,
dat, set, ctrl, diro, NULL, 0);
if (ret) {
- dev_err(&pdev->dev, "bgpio_init() failed\n");
+ dev_err(dev, "bgpio_init() failed\n");
return ret;
}
rg->chip.of_gpio_n_cells = 2;
rg->chip.of_xlate = mediatek_gpio_xlate;
- rg->chip.label = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s-bank%d",
- dev_name(&pdev->dev), bank);
+ rg->chip.label = devm_kasprintf(dev, GFP_KERNEL, "%s-bank%d",
+ dev_name(dev), bank);
- ret = devm_gpiochip_add_data(&pdev->dev, &rg->chip, gpio);
+ ret = devm_gpiochip_add_data(dev, &rg->chip, mtk);
if (ret < 0) {
- dev_err(&pdev->dev, "Could not register gpio %d, ret=%d\n",
+ dev_err(dev, "Could not register gpio %d, ret=%d\n",
rg->chip.ngpio, ret);
return ret;
}
- if (gpio->gpio_irq) {
+ if (mtk->gpio_irq) {
/*
* Manually request the irq here instead of passing
* a flow-handler to gpiochip_set_chained_irqchip,
* because the irq is shared.
*/
- ret = devm_request_irq(&pdev->dev, gpio->gpio_irq,
+ ret = devm_request_irq(dev, mtk->gpio_irq,
mediatek_gpio_irq_handler, IRQF_SHARED,
rg->chip.label, &rg->chip);
if (ret) {
- dev_err(&pdev->dev, "Error requesting IRQ %d: %d\n",
- gpio->gpio_irq, ret);
+ dev_err(dev, "Error requesting IRQ %d: %d\n",
+ mtk->gpio_irq, ret);
return ret;
}
ret = gpiochip_irqchip_add(&rg->chip, &mediatek_gpio_irq_chip,
0, handle_simple_irq, IRQ_TYPE_NONE);
if (ret) {
- dev_err(&pdev->dev, "failed to add gpiochip_irqchip\n");
+ dev_err(dev, "failed to add gpiochip_irqchip\n");
return ret;
}
gpiochip_set_chained_irqchip(&rg->chip, &mediatek_gpio_irq_chip,
- gpio->gpio_irq, NULL);
+ mtk->gpio_irq, NULL);
}
/* set polarity to low for all gpios */
mtk_gpio_w32(rg, GPIO_REG_POL, 0);
- dev_info(&pdev->dev, "registering %d gpios\n", rg->chip.ngpio);
+ dev_info(dev, "registering %d gpios\n", rg->chip.ngpio);
return 0;
}
static int
mediatek_gpio_probe(struct platform_device *pdev)
{
- struct device_node *np = pdev->dev.of_node;
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- struct mtk_data *gpio_data;
+ struct device *dev = &pdev->dev;
+ struct device_node *np = dev->of_node;
+ struct mtk *mtk;
int i;
- gpio_data = devm_kzalloc(&pdev->dev, sizeof(*gpio_data), GFP_KERNEL);
- if (!gpio_data)
+ mtk = devm_kzalloc(dev, sizeof(*mtk), GFP_KERNEL);
+ if (!mtk)
return -ENOMEM;
- gpio_data->gpio_membase = devm_ioremap_resource(&pdev->dev, res);
- if (IS_ERR(gpio_data->gpio_membase))
- return PTR_ERR(gpio_data->gpio_membase);
+ mtk->base = devm_ioremap_resource(dev, res);
+ if (IS_ERR(mtk->base))
+ return PTR_ERR(mtk->base);
- gpio_data->gpio_irq = irq_of_parse_and_map(np, 0);
- gpio_data->dev = &pdev->dev;
- platform_set_drvdata(pdev, gpio_data);
- mediatek_gpio_irq_chip.name = dev_name(&pdev->dev);
+ mtk->gpio_irq = irq_of_parse_and_map(np, 0);
+ mtk->dev = dev;
+ platform_set_drvdata(pdev, mtk);
+ mediatek_gpio_irq_chip.name = dev_name(dev);
for (i = 0; i < MTK_BANK_CNT; i++)
- mediatek_gpio_bank_probe(pdev, np, i);
+ mediatek_gpio_bank_probe(dev, np, i);
return 0;
}