summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Murthy <arun.murthy@stericsson.com>2011-07-07 12:26:58 +0530
committerUlf Hansson <ulf.hansson@stericsson.com>2011-09-19 16:00:09 +0200
commit9845af739b4f2c86078885986f0252239161a557 (patch)
treed19dd87964b830bebaf6af10a48bb8e40c1ff513
parente20c899d79327f5ef94b3bc8a34d0deaeb8018ad (diff)
power: ab5500-power: usb type detection
usb type can be detected based on the usb line status register. USB line status register gets updated on receiving usb line status interrupt. This usb line status interrupt is obtained after doing a chip select in usb rising edge interrupt handler and this is done by the usb driver. Now on getting usb rising edge interrupt, if the usb line status register is read, it ends up with unknown device connected. USB line status register must be read only after getting the usb line status interrupt, else will not be updated. ST-Ericsson Linux next: Not Tested ST-Ericsson ID: ER350732 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: Ibca3a8e8032e23fb2b52ac45f9172269f868ae42 Signed-off-by: Arun Murthy <arun.murthy@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/26709 Reviewed-by: QATEST Reviewed-by: Johan PALSSON <johan.palsson@stericsson.com> Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
-rw-r--r--drivers/power/ab5500_charger.c35
1 files changed, 1 insertions, 34 deletions
diff --git a/drivers/power/ab5500_charger.c b/drivers/power/ab5500_charger.c
index 1eee43a5c8f..69b808f06d7 100644
--- a/drivers/power/ab5500_charger.c
+++ b/drivers/power/ab5500_charger.c
@@ -401,32 +401,6 @@ static int ab5500_charger_read_usb_type(struct ab5500_charger *di)
return ret;
}
-/**
- * ab5500_charger_detect_usb_type() - get the type of usb connected
- * @di: pointer to the ab5500_charger structure
- *
- * Detect the type of the plugged USB
- * Returns error code in case of failure else 0 on success
- */
-static int ab5500_charger_detect_usb_type(struct ab5500_charger *di)
-{
- int ret;
- u8 val;
-
- ret = abx500_get_register_interruptible(di->dev,
- AB5500_BANK_USB, AB5500_USB_LINE_STATUS, &val);
- if (ret < 0) {
- dev_err(di->dev, "%s ab5500 read failed\n", __func__);
- return ret;
- }
- /* get the USB type */
- val = (val & AB5500_USB_LINK_STATUS) >> 3;
- ret = ab5500_charger_max_usb_curr(di,
- (enum ab5500_charger_link_status) val);
-
- return ret;
-}
-
static int ab5500_charger_voltage_map[] = {
3500 ,
3525 ,
@@ -1075,13 +1049,6 @@ void ab5500_charger_detect_usb_type_work(struct work_struct *work)
power_supply_changed(&di->usb_chg.psy);
} else {
di->vbus_detected = 1;
-
- ret = ab5500_charger_detect_usb_type(di);
- if (!ret) {
- di->usb.charger_connected = 1;
- power_supply_changed(&di->usb_chg.psy);
- }
-
}
}
@@ -1713,7 +1680,7 @@ static int __devinit ab5500_charger_probe(struct platform_device *pdev)
di->vbus_detected = true;
di->vbus_detected_start = true;
queue_work(di->charger_wq,
- &di->detect_usb_type_work);
+ &di->usb_link_status_work);
}
/* Register interrupts */