Commit 9e9dc7d9 authored by Linus Walleij's avatar Linus Walleij Committed by Lee Jones

mfd: stmpe: root out static GPIO and IRQ assignments

The only platform using the STMPE expander now boots from
device tree using all-dynamic GPIO and IRQ number assignments, so
remove the mechanism to pass this from the device tree entirely.
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 9c9e3214
...@@ -23,7 +23,8 @@ ...@@ -23,7 +23,8 @@
enum { REG_RE, REG_FE, REG_IE }; enum { REG_RE, REG_FE, REG_IE };
#define CACHE_NR_REGS 3 #define CACHE_NR_REGS 3
#define CACHE_NR_BANKS (STMPE_NR_GPIOS / 8) /* No variant has more than 24 GPIOs */
#define CACHE_NR_BANKS (24 / 8)
struct stmpe_gpio { struct stmpe_gpio {
struct gpio_chip chip; struct gpio_chip chip;
...@@ -31,8 +32,6 @@ struct stmpe_gpio { ...@@ -31,8 +32,6 @@ struct stmpe_gpio {
struct device *dev; struct device *dev;
struct mutex irq_lock; struct mutex irq_lock;
struct irq_domain *domain; struct irq_domain *domain;
int irq_base;
unsigned norequest_mask; unsigned norequest_mask;
/* Caches of interrupt control registers for bus_lock */ /* Caches of interrupt control registers for bus_lock */
...@@ -311,13 +310,8 @@ static const struct irq_domain_ops stmpe_gpio_irq_simple_ops = { ...@@ -311,13 +310,8 @@ static const struct irq_domain_ops stmpe_gpio_irq_simple_ops = {
static int stmpe_gpio_irq_init(struct stmpe_gpio *stmpe_gpio, static int stmpe_gpio_irq_init(struct stmpe_gpio *stmpe_gpio,
struct device_node *np) struct device_node *np)
{ {
int base = 0;
if (!np)
base = stmpe_gpio->irq_base;
stmpe_gpio->domain = irq_domain_add_simple(np, stmpe_gpio->domain = irq_domain_add_simple(np,
stmpe_gpio->chip.ngpio, base, stmpe_gpio->chip.ngpio, 0,
&stmpe_gpio_irq_simple_ops, stmpe_gpio); &stmpe_gpio_irq_simple_ops, stmpe_gpio);
if (!stmpe_gpio->domain) { if (!stmpe_gpio->domain) {
dev_err(stmpe_gpio->dev, "failed to create irqdomain\n"); dev_err(stmpe_gpio->dev, "failed to create irqdomain\n");
...@@ -354,7 +348,7 @@ static int stmpe_gpio_probe(struct platform_device *pdev) ...@@ -354,7 +348,7 @@ static int stmpe_gpio_probe(struct platform_device *pdev)
#ifdef CONFIG_OF #ifdef CONFIG_OF
stmpe_gpio->chip.of_node = np; stmpe_gpio->chip.of_node = np;
#endif #endif
stmpe_gpio->chip.base = pdata ? pdata->gpio_base : -1; stmpe_gpio->chip.base = -1;
if (pdata) if (pdata)
stmpe_gpio->norequest_mask = pdata->norequest_mask; stmpe_gpio->norequest_mask = pdata->norequest_mask;
...@@ -362,9 +356,7 @@ static int stmpe_gpio_probe(struct platform_device *pdev) ...@@ -362,9 +356,7 @@ static int stmpe_gpio_probe(struct platform_device *pdev)
of_property_read_u32(np, "st,norequest-mask", of_property_read_u32(np, "st,norequest-mask",
&stmpe_gpio->norequest_mask); &stmpe_gpio->norequest_mask);
if (irq >= 0) if (irq < 0)
stmpe_gpio->irq_base = stmpe->irq_base + STMPE_INT_GPIO(0);
else
dev_info(&pdev->dev, dev_info(&pdev->dev,
"device configured in no-irq mode; " "device configured in no-irq mode; "
"irqs are not available\n"); "irqs are not available\n");
......
...@@ -996,9 +996,6 @@ static int stmpe_irq_init(struct stmpe *stmpe, struct device_node *np) ...@@ -996,9 +996,6 @@ static int stmpe_irq_init(struct stmpe *stmpe, struct device_node *np)
int base = 0; int base = 0;
int num_irqs = stmpe->variant->num_irqs; int num_irqs = stmpe->variant->num_irqs;
if (!np)
base = stmpe->irq_base;
stmpe->domain = irq_domain_add_simple(np, num_irqs, base, stmpe->domain = irq_domain_add_simple(np, num_irqs, base,
&stmpe_irq_ops, stmpe); &stmpe_irq_ops, stmpe);
if (!stmpe->domain) { if (!stmpe->domain) {
...@@ -1077,7 +1074,7 @@ static int stmpe_chip_init(struct stmpe *stmpe) ...@@ -1077,7 +1074,7 @@ static int stmpe_chip_init(struct stmpe *stmpe)
static int stmpe_add_device(struct stmpe *stmpe, const struct mfd_cell *cell) static int stmpe_add_device(struct stmpe *stmpe, const struct mfd_cell *cell)
{ {
return mfd_add_devices(stmpe->dev, stmpe->pdata->id, cell, 1, return mfd_add_devices(stmpe->dev, stmpe->pdata->id, cell, 1,
NULL, stmpe->irq_base, stmpe->domain); NULL, 0, stmpe->domain);
} }
static int stmpe_devices_init(struct stmpe *stmpe) static int stmpe_devices_init(struct stmpe *stmpe)
...@@ -1181,7 +1178,6 @@ int stmpe_probe(struct stmpe_client_info *ci, int partnum) ...@@ -1181,7 +1178,6 @@ int stmpe_probe(struct stmpe_client_info *ci, int partnum)
stmpe->dev = ci->dev; stmpe->dev = ci->dev;
stmpe->client = ci->client; stmpe->client = ci->client;
stmpe->pdata = pdata; stmpe->pdata = pdata;
stmpe->irq_base = pdata->irq_base;
stmpe->ci = ci; stmpe->ci = ci;
stmpe->partnum = partnum; stmpe->partnum = partnum;
stmpe->variant = stmpe_variant_info[partnum]; stmpe->variant = stmpe_variant_info[partnum];
......
...@@ -76,7 +76,6 @@ struct stmpe_client_info; ...@@ -76,7 +76,6 @@ struct stmpe_client_info;
* @regs: list of addresses of registers which are at different addresses on * @regs: list of addresses of registers which are at different addresses on
* different variants. Indexed by one of STMPE_IDX_*. * different variants. Indexed by one of STMPE_IDX_*.
* @irq: irq number for stmpe * @irq: irq number for stmpe
* @irq_base: starting IRQ number for internal IRQs
* @num_gpios: number of gpios, differs for variants * @num_gpios: number of gpios, differs for variants
* @ier: cache of IER registers for bus_lock * @ier: cache of IER registers for bus_lock
* @oldier: cache of IER registers for bus_lock * @oldier: cache of IER registers for bus_lock
...@@ -96,7 +95,6 @@ struct stmpe { ...@@ -96,7 +95,6 @@ struct stmpe {
const u8 *regs; const u8 *regs;
int irq; int irq;
int irq_base;
int num_gpios; int num_gpios;
u8 ier[2]; u8 ier[2];
u8 oldier[2]; u8 oldier[2];
...@@ -137,8 +135,6 @@ struct stmpe_keypad_platform_data { ...@@ -137,8 +135,6 @@ struct stmpe_keypad_platform_data {
/** /**
* struct stmpe_gpio_platform_data - STMPE GPIO platform data * 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 * @norequest_mask: bitmask specifying which GPIOs should _not_ be
* requestable due to different usage (e.g. touch, keypad) * requestable due to different usage (e.g. touch, keypad)
* STMPE_GPIO_NOREQ_* macros can be used here. * STMPE_GPIO_NOREQ_* macros can be used here.
...@@ -146,7 +142,6 @@ struct stmpe_keypad_platform_data { ...@@ -146,7 +142,6 @@ struct stmpe_keypad_platform_data {
* @remove: board specific remove callback * @remove: board specific remove callback
*/ */
struct stmpe_gpio_platform_data { struct stmpe_gpio_platform_data {
int gpio_base;
unsigned norequest_mask; unsigned norequest_mask;
void (*setup)(struct stmpe *stmpe, unsigned gpio_base); void (*setup)(struct stmpe *stmpe, unsigned gpio_base);
void (*remove)(struct stmpe *stmpe, unsigned gpio_base); void (*remove)(struct stmpe *stmpe, unsigned gpio_base);
...@@ -200,8 +195,6 @@ struct stmpe_ts_platform_data { ...@@ -200,8 +195,6 @@ struct stmpe_ts_platform_data {
* @irq_trigger: IRQ trigger to use for the interrupt to the host * @irq_trigger: IRQ trigger to use for the interrupt to the host
* @autosleep: bool to enable/disable stmpe autosleep * @autosleep: bool to enable/disable stmpe autosleep
* @autosleep_timeout: inactivity timeout in milliseconds for autosleep * @autosleep_timeout: inactivity timeout in milliseconds for autosleep
* @irq_base: base IRQ number. %STMPE_NR_IRQS irqs will be used, or
* %STMPE_NR_INTERNAL_IRQS if the GPIO driver is not used.
* @irq_over_gpio: true if gpio is used to get irq * @irq_over_gpio: true if gpio is used to get irq
* @irq_gpio: gpio number over which irq will be requested (significant only if * @irq_gpio: gpio number over which irq will be requested (significant only if
* irq_over_gpio is true) * irq_over_gpio is true)
...@@ -212,7 +205,6 @@ struct stmpe_ts_platform_data { ...@@ -212,7 +205,6 @@ struct stmpe_ts_platform_data {
struct stmpe_platform_data { struct stmpe_platform_data {
int id; int id;
unsigned int blocks; unsigned int blocks;
int irq_base;
unsigned int irq_trigger; unsigned int irq_trigger;
bool autosleep; bool autosleep;
bool irq_over_gpio; bool irq_over_gpio;
...@@ -224,10 +216,4 @@ struct stmpe_platform_data { ...@@ -224,10 +216,4 @@ struct stmpe_platform_data {
struct stmpe_ts_platform_data *ts; struct stmpe_ts_platform_data *ts;
}; };
#define STMPE_NR_INTERNAL_IRQS 9
#define STMPE_INT_GPIO(x) (STMPE_NR_INTERNAL_IRQS + (x))
#define STMPE_NR_GPIOS 24
#define STMPE_NR_IRQS STMPE_INT_GPIO(STMPE_NR_GPIOS)
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment