summaryrefslogtreecommitdiff
path: root/drivers/gpio
diff options
context:
space:
mode:
authorBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>2026-05-13 15:44:51 +0200
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>2026-05-13 15:44:51 +0200
commitcccecb5cbe72dd68dda93ad8c9e2f61c095a8ea3 (patch)
tree8c09ba360b8a0b9e42ae681058b8431bdc50514e /drivers/gpio
parenteeb1d6dfd89344b17afe845d4839b79e37fdd547 (diff)
parent061bc966cfe97314b9f4dcd849fc7042fb12122f (diff)
Merge tag 'ib-mfd-gpio-v7.2' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd into gpio/for-next
Immutable branch between MFD and GPIO due for the v7.2 merge window
Diffstat (limited to 'drivers/gpio')
-rw-r--r--drivers/gpio/gpio-timberdale.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/gpio/gpio-timberdale.c b/drivers/gpio/gpio-timberdale.c
index f488939dd00a..78fe133f5d32 100644
--- a/drivers/gpio/gpio-timberdale.c
+++ b/drivers/gpio/gpio-timberdale.c
@@ -14,7 +14,6 @@
#include <linux/platform_device.h>
#include <linux/irq.h>
#include <linux/io.h>
-#include <linux/timb_gpio.h>
#include <linux/interrupt.h>
#include <linux/slab.h>
@@ -225,19 +224,21 @@ static int timbgpio_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev;
struct gpio_chip *gc;
struct timbgpio *tgpio;
- struct timbgpio_platform_data *pdata = dev_get_platdata(&pdev->dev);
int irq = platform_get_irq(pdev, 0);
- if (!pdata || pdata->nr_pins > 32) {
- dev_err(dev, "Invalid platform data\n");
- return -EINVAL;
- }
-
tgpio = devm_kzalloc(dev, sizeof(*tgpio), GFP_KERNEL);
if (!tgpio)
return -EINVAL;
- tgpio->irq_base = pdata->irq_base;
+ gc = &tgpio->gpio;
+
+ err = device_property_read_u32(dev, "irq-base", &tgpio->irq_base);
+ if (err)
+ return err;
+
+ err = device_property_read_u32(dev, "gpio-base", &gc->base);
+ if (err)
+ return err;
spin_lock_init(&tgpio->lock);
@@ -245,8 +246,6 @@ static int timbgpio_probe(struct platform_device *pdev)
if (IS_ERR(tgpio->membase))
return PTR_ERR(tgpio->membase);
- gc = &tgpio->gpio;
-
gc->label = dev_name(&pdev->dev);
gc->owner = THIS_MODULE;
gc->parent = &pdev->dev;
@@ -256,21 +255,22 @@ static int timbgpio_probe(struct platform_device *pdev)
gc->set = timbgpio_gpio_set;
gc->to_irq = (irq >= 0 && tgpio->irq_base > 0) ? timbgpio_to_irq : NULL;
gc->dbg_show = NULL;
- gc->base = pdata->gpio_base;
- gc->ngpio = pdata->nr_pins;
gc->can_sleep = false;
err = devm_gpiochip_add_data(&pdev->dev, gc, tgpio);
if (err)
return err;
+ if (gc->ngpio > 32)
+ return dev_err_probe(dev, -EINVAL, "Invalid number of pins\n");
+
/* make sure to disable interrupts */
iowrite32(0x0, tgpio->membase + TGPIO_IER);
if (irq < 0 || tgpio->irq_base <= 0)
return 0;
- for (i = 0; i < pdata->nr_pins; i++) {
+ for (i = 0; i < gc->ngpio; i++) {
irq_set_chip_and_handler(tgpio->irq_base + i,
&timbgpio_irqchip, handle_simple_irq);
irq_set_chip_data(tgpio->irq_base + i, tgpio);