diff options
author | Arun Murthy <arun.murthy@stericsson.com> | 2011-07-07 12:26:58 +0530 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@stericsson.com> | 2011-09-19 16:00:09 +0200 |
commit | 9845af739b4f2c86078885986f0252239161a557 (patch) | |
tree | d19dd87964b830bebaf6af10a48bb8e40c1ff513 | |
parent | e20c899d79327f5ef94b3bc8a34d0deaeb8018ad (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.c | 35 |
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 */ |