aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/musb/omap2430.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/musb/omap2430.c')
-rw-r--r--drivers/usb/musb/omap2430.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index 2f6cd431fb1c..fd5dd46039ad 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -227,11 +227,21 @@ static int musb_otg_notifications(struct notifier_block *nb,
227 unsigned long event, void *unused) 227 unsigned long event, void *unused)
228{ 228{
229 struct musb *musb = container_of(nb, struct musb, nb); 229 struct musb *musb = container_of(nb, struct musb, nb);
230
231 musb->xceiv_event = event;
232 schedule_work(&musb->otg_notifier_work);
233
234 return 0;
235}
236
237static void musb_otg_notifier_work(struct work_struct *data_notifier_work)
238{
239 struct musb *musb = container_of(data_notifier_work, struct musb, otg_notifier_work);
230 struct device *dev = musb->controller; 240 struct device *dev = musb->controller;
231 struct musb_hdrc_platform_data *pdata = dev->platform_data; 241 struct musb_hdrc_platform_data *pdata = dev->platform_data;
232 struct omap_musb_board_data *data = pdata->board_data; 242 struct omap_musb_board_data *data = pdata->board_data;
233 243
234 switch (event) { 244 switch (musb->xceiv_event) {
235 case USB_EVENT_ID: 245 case USB_EVENT_ID:
236 dev_dbg(musb->controller, "ID GND\n"); 246 dev_dbg(musb->controller, "ID GND\n");
237 247
@@ -296,6 +306,8 @@ static int omap2430_musb_init(struct musb *musb)
296 return -ENODEV; 306 return -ENODEV;
297 } 307 }
298 308
309 INIT_WORK(&musb->otg_notifier_work, musb_otg_notifier_work);
310
299 status = pm_runtime_get_sync(dev); 311 status = pm_runtime_get_sync(dev);
300 if (status < 0) { 312 if (status < 0) {
301 dev_err(dev, "pm_runtime_get_sync FAILED"); 313 dev_err(dev, "pm_runtime_get_sync FAILED");