From c51729969ba5b5cd49d0f7e5aea868f8dcf5c4fd Mon Sep 17 00:00:00 2001 From: Greg Meiste Date: Fri, 28 May 2010 10:36:48 -0500 Subject: [PATCH] mfd: cpcap: Fix VUSB issues 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 --- drivers/mfd/cpcap-core.c | 7 +------ drivers/mfd/cpcap-whisper.c | 8 ++++++-- drivers/regulator/cpcap-regulator.c | 6 ------ 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/drivers/mfd/cpcap-core.c b/drivers/mfd/cpcap-core.c index 858c0cf33c8c..78b4fbb9efc3 100644 --- a/drivers/mfd/cpcap-core.c +++ b/drivers/mfd/cpcap-core.c @@ -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)); diff --git a/drivers/mfd/cpcap-whisper.c b/drivers/mfd/cpcap-whisper.c index 094790d44f0a..14819d3067fa 100644 --- a/drivers/mfd/cpcap-whisper.c +++ b/drivers/mfd/cpcap-whisper.c @@ -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, diff --git a/drivers/regulator/cpcap-regulator.c b/drivers/regulator/cpcap-regulator.c index b15986949cd0..4163f2b9177e 100644 --- a/drivers/regulator/cpcap-regulator.c +++ b/drivers/regulator/cpcap-regulator.c @@ -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; } -- 2.34.1