Message ID | 1308928443-15352-1-git-send-email-m-sonasath@ti.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Felipe Balbi |
Headers | show |
On Fri, Jun 24, 2011 at 10:14:03AM -0500, Moiz Sonasath wrote: ... > + if (enabled) > + twl->vbus_enable = 1; > + else > + twl->vbus_enable = 0; > + Suggest twl->vbus_enable = enabled; > /* > * Start driving VBUS. Set OPA_MODE bit in CHARGERUSB_CTRL1 > * register. This enables boost mode. > */ > - if (enabled) > - twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE , 0x40, > - CHARGERUSB_CTRL1); > - else > - twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE , 0x00, > - CHARGERUSB_CTRL1); > + > + schedule_work(&twl->set_vbus_work); > + Suggest also moving the comments together with the new location of the code to write CHARGERUSB_CTRL1. Add a cancel_work_sync(&twl->set_vbus_work) at twl6030_usb_remove(), prior to kfree(twl). -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Todd, On Sat, Jun 25, 2011 at 1:31 AM, Todd Poynor <toddpoynor@google.com> wrote: > On Fri, Jun 24, 2011 at 10:14:03AM -0500, Moiz Sonasath wrote: > ... >> + if (enabled) >> + twl->vbus_enable = 1; >> + else >> + twl->vbus_enable = 0; >> + > > Suggest twl->vbus_enable = enabled; > >> /* >> * Start driving VBUS. Set OPA_MODE bit in CHARGERUSB_CTRL1 >> * register. This enables boost mode. >> */ >> - if (enabled) >> - twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE , 0x40, >> - CHARGERUSB_CTRL1); >> - else >> - twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE , 0x00, >> - CHARGERUSB_CTRL1); >> + >> + schedule_work(&twl->set_vbus_work); >> + > > Suggest also moving the comments together with the new location of > the code to write CHARGERUSB_CTRL1. > > Add a cancel_work_sync(&twl->set_vbus_work) at twl6030_usb_remove(), > prior to kfree(twl). > Thank you for the feedback, have posted a V2 of the patch.
diff --git a/drivers/usb/otg/twl6030-usb.c b/drivers/usb/otg/twl6030-usb.c index cfb5aa7..857de79 100644 --- a/drivers/usb/otg/twl6030-usb.c +++ b/drivers/usb/otg/twl6030-usb.c @@ -95,11 +95,15 @@ struct twl6030_usb { struct regulator *usb3v3; + /* used to set vbus, in atomic path */ + struct work_struct set_vbus_work; + int irq1; int irq2; u8 linkstat; u8 asleep; bool irq_enabled; + bool vbus_enable; unsigned long features; }; @@ -370,20 +374,35 @@ static int twl6030_enable_irq(struct otg_transceiver *x) return 0; } +static void otg_set_vbus_work(struct work_struct *data) +{ + struct twl6030_usb *twl = container_of(data, struct twl6030_usb, + set_vbus_work); + + if (twl->vbus_enable) + twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE , 0x40, + CHARGERUSB_CTRL1); + else + twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE , 0x00, + CHARGERUSB_CTRL1); +} + static int twl6030_set_vbus(struct otg_transceiver *x, bool enabled) { struct twl6030_usb *twl = xceiv_to_twl(x); + if (enabled) + twl->vbus_enable = 1; + else + twl->vbus_enable = 0; + /* * Start driving VBUS. Set OPA_MODE bit in CHARGERUSB_CTRL1 * register. This enables boost mode. */ - if (enabled) - twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE , 0x40, - CHARGERUSB_CTRL1); - else - twl6030_writeb(twl, TWL_MODULE_MAIN_CHARGE , 0x00, - CHARGERUSB_CTRL1); + + schedule_work(&twl->set_vbus_work); + return 0; } @@ -444,6 +463,8 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev) ATOMIC_INIT_NOTIFIER_HEAD(&twl->otg.notifier); + INIT_WORK(&twl->set_vbus_work, otg_set_vbus_work); + twl->irq_enabled = true; status = request_threaded_irq(twl->irq1, NULL, twl6030_usbotg_irq, IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,