aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/db8500-prcmu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mfd/db8500-prcmu.c')
-rw-r--r--drivers/mfd/db8500-prcmu.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
index 5be32489714..671c8bc14bb 100644
--- a/drivers/mfd/db8500-prcmu.c
+++ b/drivers/mfd/db8500-prcmu.c
@@ -2720,6 +2720,7 @@ static struct regulator_consumer_supply db8500_vape_consumers[] = {
2720 REGULATOR_SUPPLY("v-i2c", "nmk-i2c.1"), 2720 REGULATOR_SUPPLY("v-i2c", "nmk-i2c.1"),
2721 REGULATOR_SUPPLY("v-i2c", "nmk-i2c.2"), 2721 REGULATOR_SUPPLY("v-i2c", "nmk-i2c.2"),
2722 REGULATOR_SUPPLY("v-i2c", "nmk-i2c.3"), 2722 REGULATOR_SUPPLY("v-i2c", "nmk-i2c.3"),
2723 REGULATOR_SUPPLY("v-i2c", "nmk-i2c.4"),
2723 /* "v-mmc" changed to "vcore" in the mainline kernel */ 2724 /* "v-mmc" changed to "vcore" in the mainline kernel */
2724 REGULATOR_SUPPLY("vcore", "sdi0"), 2725 REGULATOR_SUPPLY("vcore", "sdi0"),
2725 REGULATOR_SUPPLY("vcore", "sdi1"), 2726 REGULATOR_SUPPLY("vcore", "sdi1"),
@@ -2958,9 +2959,10 @@ static struct mfd_cell db8500_prcmu_devs[] = {
2958 * prcmu_fw_init - arch init call for the Linux PRCMU fw init logic 2959 * prcmu_fw_init - arch init call for the Linux PRCMU fw init logic
2959 * 2960 *
2960 */ 2961 */
2961static int __init db8500_prcmu_probe(struct platform_device *pdev) 2962static int __devinit db8500_prcmu_probe(struct platform_device *pdev)
2962{ 2963{
2963 int err = 0; 2964 struct device_node *np = pdev->dev.of_node;
2965 int irq = 0, err = 0;
2964 2966
2965 if (ux500_is_svp()) 2967 if (ux500_is_svp())
2966 return -ENODEV; 2968 return -ENODEV;
@@ -2970,8 +2972,14 @@ static int __init db8500_prcmu_probe(struct platform_device *pdev)
2970 /* Clean up the mailbox interrupts after pre-kernel code. */ 2972 /* Clean up the mailbox interrupts after pre-kernel code. */
2971 writel(ALL_MBOX_BITS, PRCM_ARM_IT1_CLR); 2973 writel(ALL_MBOX_BITS, PRCM_ARM_IT1_CLR);
2972 2974
2973 err = request_threaded_irq(IRQ_DB8500_PRCMU1, prcmu_irq_handler, 2975 if (np)
2974 prcmu_irq_thread_fn, IRQF_NO_SUSPEND, "prcmu", NULL); 2976 irq = platform_get_irq(pdev, 0);
2977
2978 if (!np || irq <= 0)
2979 irq = IRQ_DB8500_PRCMU1;
2980
2981 err = request_threaded_irq(irq, prcmu_irq_handler,
2982 prcmu_irq_thread_fn, IRQF_NO_SUSPEND, "prcmu", NULL);
2975 if (err < 0) { 2983 if (err < 0) {
2976 pr_err("prcmu: Failed to allocate IRQ_DB8500_PRCMU1.\n"); 2984 pr_err("prcmu: Failed to allocate IRQ_DB8500_PRCMU1.\n");
2977 err = -EBUSY; 2985 err = -EBUSY;
@@ -2981,14 +2989,16 @@ static int __init db8500_prcmu_probe(struct platform_device *pdev)
2981 if (cpu_is_u8500v20_or_later()) 2989 if (cpu_is_u8500v20_or_later())
2982 prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET); 2990 prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET);
2983 2991
2984 err = mfd_add_devices(&pdev->dev, 0, db8500_prcmu_devs, 2992 if (!np) {
2985 ARRAY_SIZE(db8500_prcmu_devs), NULL, 2993 err = mfd_add_devices(&pdev->dev, 0, db8500_prcmu_devs,
2986 0); 2994 ARRAY_SIZE(db8500_prcmu_devs), NULL, 0);
2995 if (err) {
2996 pr_err("prcmu: Failed to add subdevices\n");
2997 return err;
2998 }
2999 }
2987 3000
2988 if (err) 3001 pr_info("DB8500 PRCMU initialized\n");
2989 pr_err("prcmu: Failed to add subdevices\n");
2990 else
2991 pr_info("DB8500 PRCMU initialized\n");
2992 3002
2993no_irq_return: 3003no_irq_return:
2994 return err; 3004 return err;
@@ -2999,11 +3009,12 @@ static struct platform_driver db8500_prcmu_driver = {
2999 .name = "db8500-prcmu", 3009 .name = "db8500-prcmu",
3000 .owner = THIS_MODULE, 3010 .owner = THIS_MODULE,
3001 }, 3011 },
3012 .probe = db8500_prcmu_probe,
3002}; 3013};
3003 3014
3004static int __init db8500_prcmu_init(void) 3015static int __init db8500_prcmu_init(void)
3005{ 3016{
3006 return platform_driver_probe(&db8500_prcmu_driver, db8500_prcmu_probe); 3017 return platform_driver_register(&db8500_prcmu_driver);
3007} 3018}
3008 3019
3009arch_initcall(db8500_prcmu_init); 3020arch_initcall(db8500_prcmu_init);