diff options
author | Yi Zhang <yizhang@marvell.com> | 2013-06-14 01:21:45 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2013-06-17 19:05:52 -0400 |
commit | 618fa57512c724d1d1a446162ad853249f8ac717 (patch) | |
tree | 7568b24b34cd808c41f753f597838f883df2e564 /drivers/mfd/88pm800.c | |
parent | dc7d48635dd3c3fd5360238f7d2c697ff13abe7b (diff) |
mfd: 88pm800: Fix NULL pointer dereference
Move "device_800_init" to fix NULL pointer error when
calling "device_gpadc_init" as it needs "subchip->regmap_gpadc"
to set registers via regmap interface
Signed-off-by: Yi Zhang <yizhang@marvell.com>
Signed-off-by: Chao Xie <chao.xie@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/88pm800.c')
-rw-r--r-- | drivers/mfd/88pm800.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c index 582bda543520..b2f9f0f9deb3 100644 --- a/drivers/mfd/88pm800.c +++ b/drivers/mfd/88pm800.c | |||
@@ -528,24 +528,26 @@ static int pm800_probe(struct i2c_client *client, | |||
528 | subchip->gpadc_page_addr = pdata->gpadc_page_addr; | 528 | subchip->gpadc_page_addr = pdata->gpadc_page_addr; |
529 | chip->subchip = subchip; | 529 | chip->subchip = subchip; |
530 | 530 | ||
531 | ret = device_800_init(chip, pdata); | ||
532 | if (ret) { | ||
533 | dev_err(chip->dev, "%s id 0x%x failed!\n", __func__, chip->id); | ||
534 | goto err_subchip_alloc; | ||
535 | } | ||
536 | |||
537 | ret = pm800_pages_init(chip); | 531 | ret = pm800_pages_init(chip); |
538 | if (ret) { | 532 | if (ret) { |
539 | dev_err(&client->dev, "pm800_pages_init failed!\n"); | 533 | dev_err(&client->dev, "pm800_pages_init failed!\n"); |
540 | goto err_page_init; | 534 | goto err_page_init; |
541 | } | 535 | } |
542 | 536 | ||
537 | ret = device_800_init(chip, pdata); | ||
538 | if (ret) { | ||
539 | dev_err(chip->dev, "%s id 0x%x failed!\n", __func__, chip->id); | ||
540 | goto err_device_init; | ||
541 | } | ||
542 | |||
543 | if (pdata->plat_config) | 543 | if (pdata->plat_config) |
544 | pdata->plat_config(chip, pdata); | 544 | pdata->plat_config(chip, pdata); |
545 | 545 | ||
546 | return 0; | ||
547 | |||
548 | err_device_init: | ||
549 | pm800_pages_exit(chip); | ||
546 | err_page_init: | 550 | err_page_init: |
547 | mfd_remove_devices(chip->dev); | ||
548 | device_irq_exit_800(chip); | ||
549 | err_subchip_alloc: | 551 | err_subchip_alloc: |
550 | pm80x_deinit(); | 552 | pm80x_deinit(); |
551 | out_init: | 553 | out_init: |