Hi George, On 10/15/2013 01:40 PM, George Cherian wrote: > Laxman/Chanwoo/Kishon, > > Any comments on this!! > Regards > -George > On 10/11/2013 12:18 AM, George Cherian wrote: >> Always cross check with the ID state and the source of interrupt. >> Also add a case in which ID Source is ID_GND but LATCH state is set >> wrongly. This uses the previous Link stat to determine the new state. >> >> Signed-off-by: George Cherian <george.cherian@xxxxxx> >> --- >> drivers/extcon/extcon-palmas.c | 15 ++++++++++++--- >> 1 file changed, 12 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c >> index 6e83e9a..2aea4bc 100644 >> --- a/drivers/extcon/extcon-palmas.c >> +++ b/drivers/extcon/extcon-palmas.c >> @@ -78,20 +78,24 @@ static irqreturn_t palmas_vbus_irq_handler(int irq, void *_palmas_usb) >> static irqreturn_t palmas_id_irq_handler(int irq, void *_palmas_usb) >> { >> - unsigned int set; >> + unsigned int set, id_src; >> struct palmas_usb *palmas_usb = _palmas_usb; >> palmas_read(palmas_usb->palmas, PALMAS_USB_OTG_BASE, >> PALMAS_USB_ID_INT_LATCH_SET, &set); >> + palmas_read(palmas_usb->palmas, PALMAS_USB_OTG_BASE, >> + PALMAS_USB_ID_INT_SRC, &id_src); >> - if (set & PALMAS_USB_ID_INT_SRC_ID_GND) { >> + if ((set & PALMAS_USB_ID_INT_SRC_ID_GND) && >> + (id_src & PALMAS_USB_ID_INT_SRC_ID_GND)) { >> palmas_write(palmas_usb->palmas, PALMAS_USB_OTG_BASE, >> PALMAS_USB_ID_INT_LATCH_CLR, >> PALMAS_USB_ID_INT_EN_HI_CLR_ID_GND); >> palmas_usb->linkstat = PALMAS_USB_STATE_ID; >> extcon_set_cable_state(&palmas_usb->edev, "USB-HOST", true); >> dev_info(palmas_usb->dev, "USB-HOST cable is attached\n"); >> - } else if (set & PALMAS_USB_ID_INT_SRC_ID_FLOAT) { >> + } else if ((set & PALMAS_USB_ID_INT_SRC_ID_FLOAT) && >> + (id_src & PALMAS_USB_ID_INT_SRC_ID_FLOAT)) { >> palmas_write(palmas_usb->palmas, PALMAS_USB_OTG_BASE, >> PALMAS_USB_ID_INT_LATCH_CLR, >> PALMAS_USB_ID_INT_EN_HI_CLR_ID_FLOAT); >> @@ -103,6 +107,11 @@ static irqreturn_t palmas_id_irq_handler(int irq, void *_palmas_usb) >> palmas_usb->linkstat = PALMAS_USB_STATE_DISCONNECT; >> extcon_set_cable_state(&palmas_usb->edev, "USB-HOST", false); >> dev_info(palmas_usb->dev, "USB-HOST cable is detached\n"); >> + } else if ((palmas_usb->linkstat == PALMAS_USB_STATE_DISCONNECT) && >> + (id_src & PALMAS_USB_ID_INT_SRC_ID_GND)) { >> + palmas_usb->linkstat = PALMAS_USB_STATE_ID; >> + extcon_set_cable_state(&palmas_usb->edev, "USB-HOST", true); >> + dev_info(palmas_usb->dev, " USB-HOST cable is attached\n"); >> } >> return IRQ_HANDLED; > > Applied it on next branch. Thanks. Chanwoo Choi -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html