From 7acc7cbd88dc39276aa7a30eff8c9b14d86a2ded Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Mon, 16 Aug 2010 17:14:44 +0200 Subject: [PATCH] --- yaml --- r: 220574 b: refs/heads/master c: b8e9cf0b28173fc25dae9f3ac44de6fc4e9fc385 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/gpio/stmpe-gpio.c | 5 +++++ trunk/include/linux/mfd/stmpe.h | 6 ++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 4d563ed30031..15e9b87c92fa 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8c96aefbe79becf940d27cd8ad2c5aba48322162 +refs/heads/master: b8e9cf0b28173fc25dae9f3ac44de6fc4e9fc385 diff --git a/trunk/drivers/gpio/stmpe-gpio.c b/trunk/drivers/gpio/stmpe-gpio.c index 4e1f1b9d5e67..65b996083918 100644 --- a/trunk/drivers/gpio/stmpe-gpio.c +++ b/trunk/drivers/gpio/stmpe-gpio.c @@ -30,6 +30,7 @@ struct stmpe_gpio { struct mutex irq_lock; int irq_base; + unsigned norequest_mask; /* Caches of interrupt control registers for bus_lock */ u8 regs[CACHE_NR_REGS][CACHE_NR_BANKS]; @@ -103,6 +104,9 @@ static int stmpe_gpio_request(struct gpio_chip *chip, unsigned offset) struct stmpe_gpio *stmpe_gpio = to_stmpe_gpio(chip); struct stmpe *stmpe = stmpe_gpio->stmpe; + if (stmpe_gpio->norequest_mask & (1 << offset)) + return -EINVAL; + return stmpe_set_altfunc(stmpe, 1 << offset, STMPE_BLOCK_GPIO); } @@ -302,6 +306,7 @@ static int __devinit stmpe_gpio_probe(struct platform_device *pdev) stmpe_gpio->dev = &pdev->dev; stmpe_gpio->stmpe = stmpe; + stmpe_gpio->norequest_mask = pdata ? pdata->norequest_mask : 0; stmpe_gpio->chip = template_chip; stmpe_gpio->chip.ngpio = stmpe->num_gpios; diff --git a/trunk/include/linux/mfd/stmpe.h b/trunk/include/linux/mfd/stmpe.h index 39ca7588659b..e762c270d8d4 100644 --- a/trunk/include/linux/mfd/stmpe.h +++ b/trunk/include/linux/mfd/stmpe.h @@ -112,13 +112,19 @@ struct stmpe_keypad_platform_data { bool no_autorepeat; }; +#define STMPE_GPIO_NOREQ_811_TOUCH (0xf0) + /** * struct stmpe_gpio_platform_data - STMPE GPIO platform data * @gpio_base: first gpio number assigned. A maximum of * %STMPE_NR_GPIOS GPIOs will be allocated. + * @norequest_mask: bitmask specifying which GPIOs should _not_ be + * requestable due to different usage (e.g. touch, keypad) + * STMPE_GPIO_NOREQ_* macros can be used here. */ struct stmpe_gpio_platform_data { int gpio_base; + unsigned norequest_mask; void (*setup)(struct stmpe *stmpe, unsigned gpio_base); void (*remove)(struct stmpe *stmpe, unsigned gpio_base); };