mfd: cpcap: Fix VUSB issues
authorGreg Meiste <w30289@motorola.com>
Fri, 28 May 2010 15:36:48 +0000 (10:36 -0500)
committerColin Cross <ccross@android.com>
Wed, 6 Oct 2010 23:33:02 +0000 (16:33 -0700)
VUSB was being left enabled even when no accessories were attached.
Part of the fix includes removing SW5 as VUSB's parent supply.

Change-Id: I01cc7dcc416c9b9d8ece7975bc1a801e839e1f46
Signed-off-by: Greg Meiste <w30289@motorola.com>
drivers/mfd/cpcap-core.c
drivers/mfd/cpcap-whisper.c
drivers/regulator/cpcap-regulator.c

index 858c0cf33c8cbdfa1810ccd2c6e6c508e15ef762..78b4fbb9efc38b9b9b40444528233feeddcfdb39 100644 (file)
@@ -288,13 +288,8 @@ static int __devinit cpcap_probe(struct spi_device *spi)
                cpcap->regulator_pdev[i] = pdev;
        }
 
-       for (i = 0; i < CPCAP_NUM_REGULATORS; i++) {
-               /* vusb has to be added after sw5 so skip it for now,
-                * it will be added from probe of sw5 */
-               if (i == CPCAP_VUSB)
-                       continue;
+       for (i = 0; i < CPCAP_NUM_REGULATORS; i++)
                platform_device_add(cpcap->regulator_pdev[i]);
-       }
 
        platform_add_devices(cpcap_devices, ARRAY_SIZE(cpcap_devices));
 
index 094790d44f0ac9198aba9ff8adedb3698b90ac18..14819d3067fafe2544a095078270d176b80268ae 100644 (file)
@@ -497,8 +497,12 @@ static int __init cpcap_whisper_probe(struct platform_device *pdev)
        }
        regulator_set_voltage(data->regulator, 3300000, 3300000);
 
-       retval = cpcap_irq_register(data->cpcap, CPCAP_IRQ_CHRG_DET,
-                                   whisper_int_handler, data);
+       retval = cpcap_irq_clear(data->cpcap, CPCAP_IRQ_CHRG_DET);
+       retval |= cpcap_irq_clear(data->cpcap, CPCAP_IRQ_IDFLOAT);
+       retval |= cpcap_irq_clear(data->cpcap, CPCAP_IRQ_IDGND);
+
+       retval |= cpcap_irq_register(data->cpcap, CPCAP_IRQ_CHRG_DET,
+                                    whisper_int_handler, data);
        retval |= cpcap_irq_register(data->cpcap, CPCAP_IRQ_IDFLOAT,
                                     whisper_int_handler, data);
        retval |= cpcap_irq_register(data->cpcap, CPCAP_IRQ_IDGND,
index b15986949cd0b347e5f03202700c2957c60b713e..4163f2b9177e98525fda3aa26b1b8c7e7528f3f9 100644 (file)
@@ -560,12 +560,6 @@ static int __devinit cpcap_regulator_probe(struct platform_device *pdev)
        /* this is ok since the cpcap is still reachable from the rdev */
        platform_set_drvdata(pdev, rdev);
 
-       if (pdev->id == CPCAP_SW5) {
-               init = cpcap->regulator_pdev[CPCAP_VUSB]->dev.platform_data;
-               init->supply_regulator_dev = rdev_get_dev(rdev);
-               platform_device_add(cpcap->regulator_pdev[CPCAP_VUSB]);
-       }
-
        return 0;
 }