diff options
| -rw-r--r-- | drivers/mfd/stmpe.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/mfd/stmpe.c b/drivers/mfd/stmpe.c index c94f521f392c..ad13cb00a749 100644 --- a/drivers/mfd/stmpe.c +++ b/drivers/mfd/stmpe.c | |||
| @@ -310,14 +310,10 @@ static struct mfd_cell stmpe_gpio_cell_noirq = { | |||
| 310 | static struct resource stmpe_keypad_resources[] = { | 310 | static struct resource stmpe_keypad_resources[] = { |
| 311 | { | 311 | { |
| 312 | .name = "KEYPAD", | 312 | .name = "KEYPAD", |
| 313 | .start = 0, | ||
| 314 | .end = 0, | ||
| 315 | .flags = IORESOURCE_IRQ, | 313 | .flags = IORESOURCE_IRQ, |
| 316 | }, | 314 | }, |
| 317 | { | 315 | { |
| 318 | .name = "KEYPAD_OVER", | 316 | .name = "KEYPAD_OVER", |
| 319 | .start = 1, | ||
| 320 | .end = 1, | ||
| 321 | .flags = IORESOURCE_IRQ, | 317 | .flags = IORESOURCE_IRQ, |
| 322 | }, | 318 | }, |
| 323 | }; | 319 | }; |
| @@ -397,14 +393,10 @@ static struct stmpe_variant_info stmpe801_noirq = { | |||
| 397 | static struct resource stmpe_ts_resources[] = { | 393 | static struct resource stmpe_ts_resources[] = { |
| 398 | { | 394 | { |
| 399 | .name = "TOUCH_DET", | 395 | .name = "TOUCH_DET", |
| 400 | .start = 0, | ||
| 401 | .end = 0, | ||
| 402 | .flags = IORESOURCE_IRQ, | 396 | .flags = IORESOURCE_IRQ, |
| 403 | }, | 397 | }, |
| 404 | { | 398 | { |
| 405 | .name = "FIFO_TH", | 399 | .name = "FIFO_TH", |
| 406 | .start = 1, | ||
| 407 | .end = 1, | ||
| 408 | .flags = IORESOURCE_IRQ, | 400 | .flags = IORESOURCE_IRQ, |
| 409 | }, | 401 | }, |
| 410 | }; | 402 | }; |
| @@ -959,10 +951,10 @@ static int __devinit stmpe_chip_init(struct stmpe *stmpe) | |||
| 959 | } | 951 | } |
| 960 | 952 | ||
| 961 | static int __devinit stmpe_add_device(struct stmpe *stmpe, | 953 | static int __devinit stmpe_add_device(struct stmpe *stmpe, |
| 962 | struct mfd_cell *cell, int irq) | 954 | struct mfd_cell *cell) |
| 963 | { | 955 | { |
| 964 | return mfd_add_devices(stmpe->dev, stmpe->pdata->id, cell, 1, | 956 | return mfd_add_devices(stmpe->dev, stmpe->pdata->id, cell, 1, |
| 965 | NULL, stmpe->irq_base + irq, NULL); | 957 | NULL, stmpe->irq_base, NULL); |
| 966 | } | 958 | } |
| 967 | 959 | ||
| 968 | static int __devinit stmpe_devices_init(struct stmpe *stmpe) | 960 | static int __devinit stmpe_devices_init(struct stmpe *stmpe) |
| @@ -970,7 +962,7 @@ static int __devinit stmpe_devices_init(struct stmpe *stmpe) | |||
| 970 | struct stmpe_variant_info *variant = stmpe->variant; | 962 | struct stmpe_variant_info *variant = stmpe->variant; |
| 971 | unsigned int platform_blocks = stmpe->pdata->blocks; | 963 | unsigned int platform_blocks = stmpe->pdata->blocks; |
| 972 | int ret = -EINVAL; | 964 | int ret = -EINVAL; |
| 973 | int i; | 965 | int i, j; |
| 974 | 966 | ||
| 975 | for (i = 0; i < variant->num_blocks; i++) { | 967 | for (i = 0; i < variant->num_blocks; i++) { |
| 976 | struct stmpe_variant_block *block = &variant->blocks[i]; | 968 | struct stmpe_variant_block *block = &variant->blocks[i]; |
| @@ -978,8 +970,17 @@ static int __devinit stmpe_devices_init(struct stmpe *stmpe) | |||
| 978 | if (!(platform_blocks & block->block)) | 970 | if (!(platform_blocks & block->block)) |
| 979 | continue; | 971 | continue; |
| 980 | 972 | ||
| 973 | for (j = 0; j < block->cell->num_resources; j++) { | ||
| 974 | struct resource *res = | ||
| 975 | (struct resource *) &block->cell->resources[j]; | ||
| 976 | |||
| 977 | /* Dynamically fill in a variant's IRQ. */ | ||
| 978 | if (res->flags & IORESOURCE_IRQ) | ||
| 979 | res->start = res->end = block->irq + j; | ||
| 980 | } | ||
| 981 | |||
| 981 | platform_blocks &= ~block->block; | 982 | platform_blocks &= ~block->block; |
| 982 | ret = stmpe_add_device(stmpe, block->cell, block->irq); | 983 | ret = stmpe_add_device(stmpe, block->cell); |
| 983 | if (ret) | 984 | if (ret) |
| 984 | return ret; | 985 | return ret; |
| 985 | } | 986 | } |
