aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2015-01-13 02:00:29 -0500
committerLinus Walleij <linus.walleij@linaro.org>2015-01-20 05:03:22 -0500
commit1dfb4a0d7615811ec4a61b0a7631c8ddc0baf335 (patch)
treee5c551306d8e6eb4bc62ea1f0c9f76e0c6fce73a /drivers/gpio
parentee65ef609aa81539ac3792df88f04bfe29a77546 (diff)
gpio: stmpe: enforce device tree only mode
Require that device tree be used with STMPE (all platforms use this) and enforce OF_GPIO, then delete the platform data. Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio')
-rw-r--r--drivers/gpio/Kconfig1
-rw-r--r--drivers/gpio/gpio-stmpe.c23
2 files changed, 4 insertions, 20 deletions
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 4187fcbc88fd..22b46567b3bb 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -644,6 +644,7 @@ config GPIO_SX150X
644config GPIO_STMPE 644config GPIO_STMPE
645 bool "STMPE GPIOs" 645 bool "STMPE GPIOs"
646 depends on MFD_STMPE 646 depends on MFD_STMPE
647 depends on OF_GPIO
647 select GPIOLIB_IRQCHIP 648 select GPIOLIB_IRQCHIP
648 help 649 help
649 This enables support for the GPIOs found on the STMPE I/O 650 This enables support for the GPIOs found on the STMPE I/O
diff --git a/drivers/gpio/gpio-stmpe.c b/drivers/gpio/gpio-stmpe.c
index 85c5b1974294..dabfb99dddef 100644
--- a/drivers/gpio/gpio-stmpe.c
+++ b/drivers/gpio/gpio-stmpe.c
@@ -30,7 +30,7 @@ struct stmpe_gpio {
30 struct stmpe *stmpe; 30 struct stmpe *stmpe;
31 struct device *dev; 31 struct device *dev;
32 struct mutex irq_lock; 32 struct mutex irq_lock;
33 unsigned norequest_mask; 33 u32 norequest_mask;
34 /* Caches of interrupt control registers for bus_lock */ 34 /* Caches of interrupt control registers for bus_lock */
35 u8 regs[CACHE_NR_REGS][CACHE_NR_BANKS]; 35 u8 regs[CACHE_NR_REGS][CACHE_NR_BANKS];
36 u8 oldregs[CACHE_NR_REGS][CACHE_NR_BANKS]; 36 u8 oldregs[CACHE_NR_REGS][CACHE_NR_BANKS];
@@ -340,13 +340,10 @@ static int stmpe_gpio_probe(struct platform_device *pdev)
340{ 340{
341 struct stmpe *stmpe = dev_get_drvdata(pdev->dev.parent); 341 struct stmpe *stmpe = dev_get_drvdata(pdev->dev.parent);
342 struct device_node *np = pdev->dev.of_node; 342 struct device_node *np = pdev->dev.of_node;
343 struct stmpe_gpio_platform_data *pdata;
344 struct stmpe_gpio *stmpe_gpio; 343 struct stmpe_gpio *stmpe_gpio;
345 int ret; 344 int ret;
346 int irq = 0; 345 int irq = 0;
347 346
348 pdata = stmpe->pdata->gpio;
349
350 irq = platform_get_irq(pdev, 0); 347 irq = platform_get_irq(pdev, 0);
351 348
352 stmpe_gpio = kzalloc(sizeof(struct stmpe_gpio), GFP_KERNEL); 349 stmpe_gpio = kzalloc(sizeof(struct stmpe_gpio), GFP_KERNEL);
@@ -360,19 +357,14 @@ static int stmpe_gpio_probe(struct platform_device *pdev)
360 stmpe_gpio->chip = template_chip; 357 stmpe_gpio->chip = template_chip;
361 stmpe_gpio->chip.ngpio = stmpe->num_gpios; 358 stmpe_gpio->chip.ngpio = stmpe->num_gpios;
362 stmpe_gpio->chip.dev = &pdev->dev; 359 stmpe_gpio->chip.dev = &pdev->dev;
363#ifdef CONFIG_OF
364 stmpe_gpio->chip.of_node = np; 360 stmpe_gpio->chip.of_node = np;
365#endif
366 stmpe_gpio->chip.base = -1; 361 stmpe_gpio->chip.base = -1;
367 362
368 if (IS_ENABLED(CONFIG_DEBUG_FS)) 363 if (IS_ENABLED(CONFIG_DEBUG_FS))
369 stmpe_gpio->chip.dbg_show = stmpe_dbg_show; 364 stmpe_gpio->chip.dbg_show = stmpe_dbg_show;
370 365
371 if (pdata) 366 of_property_read_u32(np, "st,norequest-mask",
372 stmpe_gpio->norequest_mask = pdata->norequest_mask; 367 &stmpe_gpio->norequest_mask);
373 else if (np)
374 of_property_read_u32(np, "st,norequest-mask",
375 &stmpe_gpio->norequest_mask);
376 368
377 if (irq < 0) 369 if (irq < 0)
378 dev_info(&pdev->dev, 370 dev_info(&pdev->dev,
@@ -414,9 +406,6 @@ static int stmpe_gpio_probe(struct platform_device *pdev)
414 NULL); 406 NULL);
415 } 407 }
416 408
417 if (pdata && pdata->setup)
418 pdata->setup(stmpe, stmpe_gpio->chip.base);
419
420 platform_set_drvdata(pdev, stmpe_gpio); 409 platform_set_drvdata(pdev, stmpe_gpio);
421 410
422 return 0; 411 return 0;
@@ -433,15 +422,9 @@ static int stmpe_gpio_remove(struct platform_device *pdev)
433{ 422{
434 struct stmpe_gpio *stmpe_gpio = platform_get_drvdata(pdev); 423 struct stmpe_gpio *stmpe_gpio = platform_get_drvdata(pdev);
435 struct stmpe *stmpe = stmpe_gpio->stmpe; 424 struct stmpe *stmpe = stmpe_gpio->stmpe;
436 struct stmpe_gpio_platform_data *pdata = stmpe->pdata->gpio;
437
438 if (pdata && pdata->remove)
439 pdata->remove(stmpe, stmpe_gpio->chip.base);
440 425
441 gpiochip_remove(&stmpe_gpio->chip); 426 gpiochip_remove(&stmpe_gpio->chip);
442
443 stmpe_disable(stmpe, STMPE_BLOCK_GPIO); 427 stmpe_disable(stmpe, STMPE_BLOCK_GPIO);
444
445 kfree(stmpe_gpio); 428 kfree(stmpe_gpio);
446 429
447 return 0; 430 return 0;