]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/usb/phy/phy-mv-usb.c
usb: hcd: move controller wakeup setting initialization to individual driver
[karo-tx-linux.git] / drivers / usb / phy / phy-mv-usb.c
1 /*
2  * Copyright (C) 2011 Marvell International Ltd. All rights reserved.
3  * Author: Chao Xie <chao.xie@marvell.com>
4  *         Neil Zhang <zhangwm@marvell.com>
5  *
6  * This program is free software; you can redistribute  it and/or modify it
7  * under  the terms of  the GNU General  Public License as published by the
8  * Free Software Foundation;  either version 2 of the  License, or (at your
9  * option) any later version.
10  */
11
12 #include <linux/module.h>
13 #include <linux/kernel.h>
14 #include <linux/init.h>
15 #include <linux/io.h>
16 #include <linux/uaccess.h>
17 #include <linux/device.h>
18 #include <linux/proc_fs.h>
19 #include <linux/clk.h>
20 #include <linux/workqueue.h>
21 #include <linux/platform_device.h>
22
23 #include <linux/usb.h>
24 #include <linux/usb/ch9.h>
25 #include <linux/usb/otg.h>
26 #include <linux/usb/gadget.h>
27 #include <linux/usb/hcd.h>
28 #include <linux/platform_data/mv_usb.h>
29
30 #include "phy-mv-usb.h"
31
32 #define DRIVER_DESC     "Marvell USB OTG transceiver driver"
33 #define DRIVER_VERSION  "Jan 20, 2010"
34
35 MODULE_DESCRIPTION(DRIVER_DESC);
36 MODULE_VERSION(DRIVER_VERSION);
37 MODULE_LICENSE("GPL");
38
39 static const char driver_name[] = "mv-otg";
40
41 static char *state_string[] = {
42         "undefined",
43         "b_idle",
44         "b_srp_init",
45         "b_peripheral",
46         "b_wait_acon",
47         "b_host",
48         "a_idle",
49         "a_wait_vrise",
50         "a_wait_bcon",
51         "a_host",
52         "a_suspend",
53         "a_peripheral",
54         "a_wait_vfall",
55         "a_vbus_err"
56 };
57
58 static int mv_otg_set_vbus(struct usb_otg *otg, bool on)
59 {
60         struct mv_otg *mvotg = container_of(otg->phy, struct mv_otg, phy);
61         if (mvotg->pdata->set_vbus == NULL)
62                 return -ENODEV;
63
64         return mvotg->pdata->set_vbus(on);
65 }
66
67 static int mv_otg_set_host(struct usb_otg *otg,
68                            struct usb_bus *host)
69 {
70         otg->host = host;
71
72         return 0;
73 }
74
75 static int mv_otg_set_peripheral(struct usb_otg *otg,
76                                  struct usb_gadget *gadget)
77 {
78         otg->gadget = gadget;
79
80         return 0;
81 }
82
83 static void mv_otg_run_state_machine(struct mv_otg *mvotg,
84                                      unsigned long delay)
85 {
86         dev_dbg(&mvotg->pdev->dev, "transceiver is updated\n");
87         if (!mvotg->qwork)
88                 return;
89
90         queue_delayed_work(mvotg->qwork, &mvotg->work, delay);
91 }
92
93 static void mv_otg_timer_await_bcon(unsigned long data)
94 {
95         struct mv_otg *mvotg = (struct mv_otg *) data;
96
97         mvotg->otg_ctrl.a_wait_bcon_timeout = 1;
98
99         dev_info(&mvotg->pdev->dev, "B Device No Response!\n");
100
101         if (spin_trylock(&mvotg->wq_lock)) {
102                 mv_otg_run_state_machine(mvotg, 0);
103                 spin_unlock(&mvotg->wq_lock);
104         }
105 }
106
107 static int mv_otg_cancel_timer(struct mv_otg *mvotg, unsigned int id)
108 {
109         struct timer_list *timer;
110
111         if (id >= OTG_TIMER_NUM)
112                 return -EINVAL;
113
114         timer = &mvotg->otg_ctrl.timer[id];
115
116         if (timer_pending(timer))
117                 del_timer(timer);
118
119         return 0;
120 }
121
122 static int mv_otg_set_timer(struct mv_otg *mvotg, unsigned int id,
123                             unsigned long interval,
124                             void (*callback) (unsigned long))
125 {
126         struct timer_list *timer;
127
128         if (id >= OTG_TIMER_NUM)
129                 return -EINVAL;
130
131         timer = &mvotg->otg_ctrl.timer[id];
132         if (timer_pending(timer)) {
133                 dev_err(&mvotg->pdev->dev, "Timer%d is already running\n", id);
134                 return -EBUSY;
135         }
136
137         init_timer(timer);
138         timer->data = (unsigned long) mvotg;
139         timer->function = callback;
140         timer->expires = jiffies + interval;
141         add_timer(timer);
142
143         return 0;
144 }
145
146 static int mv_otg_reset(struct mv_otg *mvotg)
147 {
148         unsigned int loops;
149         u32 tmp;
150
151         /* Stop the controller */
152         tmp = readl(&mvotg->op_regs->usbcmd);
153         tmp &= ~USBCMD_RUN_STOP;
154         writel(tmp, &mvotg->op_regs->usbcmd);
155
156         /* Reset the controller to get default values */
157         writel(USBCMD_CTRL_RESET, &mvotg->op_regs->usbcmd);
158
159         loops = 500;
160         while (readl(&mvotg->op_regs->usbcmd) & USBCMD_CTRL_RESET) {
161                 if (loops == 0) {
162                         dev_err(&mvotg->pdev->dev,
163                                 "Wait for RESET completed TIMEOUT\n");
164                         return -ETIMEDOUT;
165                 }
166                 loops--;
167                 udelay(20);
168         }
169
170         writel(0x0, &mvotg->op_regs->usbintr);
171         tmp = readl(&mvotg->op_regs->usbsts);
172         writel(tmp, &mvotg->op_regs->usbsts);
173
174         return 0;
175 }
176
177 static void mv_otg_init_irq(struct mv_otg *mvotg)
178 {
179         u32 otgsc;
180
181         mvotg->irq_en = OTGSC_INTR_A_SESSION_VALID
182             | OTGSC_INTR_A_VBUS_VALID;
183         mvotg->irq_status = OTGSC_INTSTS_A_SESSION_VALID
184             | OTGSC_INTSTS_A_VBUS_VALID;
185
186         if (mvotg->pdata->vbus == NULL) {
187                 mvotg->irq_en |= OTGSC_INTR_B_SESSION_VALID
188                     | OTGSC_INTR_B_SESSION_END;
189                 mvotg->irq_status |= OTGSC_INTSTS_B_SESSION_VALID
190                     | OTGSC_INTSTS_B_SESSION_END;
191         }
192
193         if (mvotg->pdata->id == NULL) {
194                 mvotg->irq_en |= OTGSC_INTR_USB_ID;
195                 mvotg->irq_status |= OTGSC_INTSTS_USB_ID;
196         }
197
198         otgsc = readl(&mvotg->op_regs->otgsc);
199         otgsc |= mvotg->irq_en;
200         writel(otgsc, &mvotg->op_regs->otgsc);
201 }
202
203 static void mv_otg_start_host(struct mv_otg *mvotg, int on)
204 {
205 #ifdef CONFIG_USB
206         struct usb_otg *otg = mvotg->phy.otg;
207         struct usb_hcd *hcd;
208
209         if (!otg->host)
210                 return;
211
212         dev_info(&mvotg->pdev->dev, "%s host\n", on ? "start" : "stop");
213
214         hcd = bus_to_hcd(otg->host);
215
216         if (on) {
217                 usb_add_hcd(hcd, hcd->irq, IRQF_SHARED);
218                 device_wakeup_enable(hcd->self.controller);
219         } else {
220                 usb_remove_hcd(hcd);
221         }
222 #endif /* CONFIG_USB */
223 }
224
225 static void mv_otg_start_periphrals(struct mv_otg *mvotg, int on)
226 {
227         struct usb_otg *otg = mvotg->phy.otg;
228
229         if (!otg->gadget)
230                 return;
231
232         dev_info(mvotg->phy.dev, "gadget %s\n", on ? "on" : "off");
233
234         if (on)
235                 usb_gadget_vbus_connect(otg->gadget);
236         else
237                 usb_gadget_vbus_disconnect(otg->gadget);
238 }
239
240 static void otg_clock_enable(struct mv_otg *mvotg)
241 {
242         clk_prepare_enable(mvotg->clk);
243 }
244
245 static void otg_clock_disable(struct mv_otg *mvotg)
246 {
247         clk_disable_unprepare(mvotg->clk);
248 }
249
250 static int mv_otg_enable_internal(struct mv_otg *mvotg)
251 {
252         int retval = 0;
253
254         if (mvotg->active)
255                 return 0;
256
257         dev_dbg(&mvotg->pdev->dev, "otg enabled\n");
258
259         otg_clock_enable(mvotg);
260         if (mvotg->pdata->phy_init) {
261                 retval = mvotg->pdata->phy_init(mvotg->phy_regs);
262                 if (retval) {
263                         dev_err(&mvotg->pdev->dev,
264                                 "init phy error %d\n", retval);
265                         otg_clock_disable(mvotg);
266                         return retval;
267                 }
268         }
269         mvotg->active = 1;
270
271         return 0;
272
273 }
274
275 static int mv_otg_enable(struct mv_otg *mvotg)
276 {
277         if (mvotg->clock_gating)
278                 return mv_otg_enable_internal(mvotg);
279
280         return 0;
281 }
282
283 static void mv_otg_disable_internal(struct mv_otg *mvotg)
284 {
285         if (mvotg->active) {
286                 dev_dbg(&mvotg->pdev->dev, "otg disabled\n");
287                 if (mvotg->pdata->phy_deinit)
288                         mvotg->pdata->phy_deinit(mvotg->phy_regs);
289                 otg_clock_disable(mvotg);
290                 mvotg->active = 0;
291         }
292 }
293
294 static void mv_otg_disable(struct mv_otg *mvotg)
295 {
296         if (mvotg->clock_gating)
297                 mv_otg_disable_internal(mvotg);
298 }
299
300 static void mv_otg_update_inputs(struct mv_otg *mvotg)
301 {
302         struct mv_otg_ctrl *otg_ctrl = &mvotg->otg_ctrl;
303         u32 otgsc;
304
305         otgsc = readl(&mvotg->op_regs->otgsc);
306
307         if (mvotg->pdata->vbus) {
308                 if (mvotg->pdata->vbus->poll() == VBUS_HIGH) {
309                         otg_ctrl->b_sess_vld = 1;
310                         otg_ctrl->b_sess_end = 0;
311                 } else {
312                         otg_ctrl->b_sess_vld = 0;
313                         otg_ctrl->b_sess_end = 1;
314                 }
315         } else {
316                 otg_ctrl->b_sess_vld = !!(otgsc & OTGSC_STS_B_SESSION_VALID);
317                 otg_ctrl->b_sess_end = !!(otgsc & OTGSC_STS_B_SESSION_END);
318         }
319
320         if (mvotg->pdata->id)
321                 otg_ctrl->id = !!mvotg->pdata->id->poll();
322         else
323                 otg_ctrl->id = !!(otgsc & OTGSC_STS_USB_ID);
324
325         if (mvotg->pdata->otg_force_a_bus_req && !otg_ctrl->id)
326                 otg_ctrl->a_bus_req = 1;
327
328         otg_ctrl->a_sess_vld = !!(otgsc & OTGSC_STS_A_SESSION_VALID);
329         otg_ctrl->a_vbus_vld = !!(otgsc & OTGSC_STS_A_VBUS_VALID);
330
331         dev_dbg(&mvotg->pdev->dev, "%s: ", __func__);
332         dev_dbg(&mvotg->pdev->dev, "id %d\n", otg_ctrl->id);
333         dev_dbg(&mvotg->pdev->dev, "b_sess_vld %d\n", otg_ctrl->b_sess_vld);
334         dev_dbg(&mvotg->pdev->dev, "b_sess_end %d\n", otg_ctrl->b_sess_end);
335         dev_dbg(&mvotg->pdev->dev, "a_vbus_vld %d\n", otg_ctrl->a_vbus_vld);
336         dev_dbg(&mvotg->pdev->dev, "a_sess_vld %d\n", otg_ctrl->a_sess_vld);
337 }
338
339 static void mv_otg_update_state(struct mv_otg *mvotg)
340 {
341         struct mv_otg_ctrl *otg_ctrl = &mvotg->otg_ctrl;
342         struct usb_phy *phy = &mvotg->phy;
343         int old_state = phy->state;
344
345         switch (old_state) {
346         case OTG_STATE_UNDEFINED:
347                 phy->state = OTG_STATE_B_IDLE;
348                 /* FALL THROUGH */
349         case OTG_STATE_B_IDLE:
350                 if (otg_ctrl->id == 0)
351                         phy->state = OTG_STATE_A_IDLE;
352                 else if (otg_ctrl->b_sess_vld)
353                         phy->state = OTG_STATE_B_PERIPHERAL;
354                 break;
355         case OTG_STATE_B_PERIPHERAL:
356                 if (!otg_ctrl->b_sess_vld || otg_ctrl->id == 0)
357                         phy->state = OTG_STATE_B_IDLE;
358                 break;
359         case OTG_STATE_A_IDLE:
360                 if (otg_ctrl->id)
361                         phy->state = OTG_STATE_B_IDLE;
362                 else if (!(otg_ctrl->a_bus_drop) &&
363                          (otg_ctrl->a_bus_req || otg_ctrl->a_srp_det))
364                         phy->state = OTG_STATE_A_WAIT_VRISE;
365                 break;
366         case OTG_STATE_A_WAIT_VRISE:
367                 if (otg_ctrl->a_vbus_vld)
368                         phy->state = OTG_STATE_A_WAIT_BCON;
369                 break;
370         case OTG_STATE_A_WAIT_BCON:
371                 if (otg_ctrl->id || otg_ctrl->a_bus_drop
372                     || otg_ctrl->a_wait_bcon_timeout) {
373                         mv_otg_cancel_timer(mvotg, A_WAIT_BCON_TIMER);
374                         mvotg->otg_ctrl.a_wait_bcon_timeout = 0;
375                         phy->state = OTG_STATE_A_WAIT_VFALL;
376                         otg_ctrl->a_bus_req = 0;
377                 } else if (!otg_ctrl->a_vbus_vld) {
378                         mv_otg_cancel_timer(mvotg, A_WAIT_BCON_TIMER);
379                         mvotg->otg_ctrl.a_wait_bcon_timeout = 0;
380                         phy->state = OTG_STATE_A_VBUS_ERR;
381                 } else if (otg_ctrl->b_conn) {
382                         mv_otg_cancel_timer(mvotg, A_WAIT_BCON_TIMER);
383                         mvotg->otg_ctrl.a_wait_bcon_timeout = 0;
384                         phy->state = OTG_STATE_A_HOST;
385                 }
386                 break;
387         case OTG_STATE_A_HOST:
388                 if (otg_ctrl->id || !otg_ctrl->b_conn
389                     || otg_ctrl->a_bus_drop)
390                         phy->state = OTG_STATE_A_WAIT_BCON;
391                 else if (!otg_ctrl->a_vbus_vld)
392                         phy->state = OTG_STATE_A_VBUS_ERR;
393                 break;
394         case OTG_STATE_A_WAIT_VFALL:
395                 if (otg_ctrl->id
396                     || (!otg_ctrl->b_conn && otg_ctrl->a_sess_vld)
397                     || otg_ctrl->a_bus_req)
398                         phy->state = OTG_STATE_A_IDLE;
399                 break;
400         case OTG_STATE_A_VBUS_ERR:
401                 if (otg_ctrl->id || otg_ctrl->a_clr_err
402                     || otg_ctrl->a_bus_drop) {
403                         otg_ctrl->a_clr_err = 0;
404                         phy->state = OTG_STATE_A_WAIT_VFALL;
405                 }
406                 break;
407         default:
408                 break;
409         }
410 }
411
412 static void mv_otg_work(struct work_struct *work)
413 {
414         struct mv_otg *mvotg;
415         struct usb_phy *phy;
416         struct usb_otg *otg;
417         int old_state;
418
419         mvotg = container_of(to_delayed_work(work), struct mv_otg, work);
420
421 run:
422         /* work queue is single thread, or we need spin_lock to protect */
423         phy = &mvotg->phy;
424         otg = phy->otg;
425         old_state = phy->state;
426
427         if (!mvotg->active)
428                 return;
429
430         mv_otg_update_inputs(mvotg);
431         mv_otg_update_state(mvotg);
432
433         if (old_state != phy->state) {
434                 dev_info(&mvotg->pdev->dev, "change from state %s to %s\n",
435                          state_string[old_state],
436                          state_string[phy->state]);
437
438                 switch (phy->state) {
439                 case OTG_STATE_B_IDLE:
440                         otg->default_a = 0;
441                         if (old_state == OTG_STATE_B_PERIPHERAL)
442                                 mv_otg_start_periphrals(mvotg, 0);
443                         mv_otg_reset(mvotg);
444                         mv_otg_disable(mvotg);
445                         break;
446                 case OTG_STATE_B_PERIPHERAL:
447                         mv_otg_enable(mvotg);
448                         mv_otg_start_periphrals(mvotg, 1);
449                         break;
450                 case OTG_STATE_A_IDLE:
451                         otg->default_a = 1;
452                         mv_otg_enable(mvotg);
453                         if (old_state == OTG_STATE_A_WAIT_VFALL)
454                                 mv_otg_start_host(mvotg, 0);
455                         mv_otg_reset(mvotg);
456                         break;
457                 case OTG_STATE_A_WAIT_VRISE:
458                         mv_otg_set_vbus(otg, 1);
459                         break;
460                 case OTG_STATE_A_WAIT_BCON:
461                         if (old_state != OTG_STATE_A_HOST)
462                                 mv_otg_start_host(mvotg, 1);
463                         mv_otg_set_timer(mvotg, A_WAIT_BCON_TIMER,
464                                          T_A_WAIT_BCON,
465                                          mv_otg_timer_await_bcon);
466                         /*
467                          * Now, we directly enter A_HOST. So set b_conn = 1
468                          * here. In fact, it need host driver to notify us.
469                          */
470                         mvotg->otg_ctrl.b_conn = 1;
471                         break;
472                 case OTG_STATE_A_HOST:
473                         break;
474                 case OTG_STATE_A_WAIT_VFALL:
475                         /*
476                          * Now, we has exited A_HOST. So set b_conn = 0
477                          * here. In fact, it need host driver to notify us.
478                          */
479                         mvotg->otg_ctrl.b_conn = 0;
480                         mv_otg_set_vbus(otg, 0);
481                         break;
482                 case OTG_STATE_A_VBUS_ERR:
483                         break;
484                 default:
485                         break;
486                 }
487                 goto run;
488         }
489 }
490
491 static irqreturn_t mv_otg_irq(int irq, void *dev)
492 {
493         struct mv_otg *mvotg = dev;
494         u32 otgsc;
495
496         otgsc = readl(&mvotg->op_regs->otgsc);
497         writel(otgsc, &mvotg->op_regs->otgsc);
498
499         /*
500          * if we have vbus, then the vbus detection for B-device
501          * will be done by mv_otg_inputs_irq().
502          */
503         if (mvotg->pdata->vbus)
504                 if ((otgsc & OTGSC_STS_USB_ID) &&
505                     !(otgsc & OTGSC_INTSTS_USB_ID))
506                         return IRQ_NONE;
507
508         if ((otgsc & mvotg->irq_status) == 0)
509                 return IRQ_NONE;
510
511         mv_otg_run_state_machine(mvotg, 0);
512
513         return IRQ_HANDLED;
514 }
515
516 static irqreturn_t mv_otg_inputs_irq(int irq, void *dev)
517 {
518         struct mv_otg *mvotg = dev;
519
520         /* The clock may disabled at this time */
521         if (!mvotg->active) {
522                 mv_otg_enable(mvotg);
523                 mv_otg_init_irq(mvotg);
524         }
525
526         mv_otg_run_state_machine(mvotg, 0);
527
528         return IRQ_HANDLED;
529 }
530
531 static ssize_t
532 get_a_bus_req(struct device *dev, struct device_attribute *attr, char *buf)
533 {
534         struct mv_otg *mvotg = dev_get_drvdata(dev);
535         return scnprintf(buf, PAGE_SIZE, "%d\n",
536                          mvotg->otg_ctrl.a_bus_req);
537 }
538
539 static ssize_t
540 set_a_bus_req(struct device *dev, struct device_attribute *attr,
541               const char *buf, size_t count)
542 {
543         struct mv_otg *mvotg = dev_get_drvdata(dev);
544
545         if (count > 2)
546                 return -1;
547
548         /* We will use this interface to change to A device */
549         if (mvotg->phy.state != OTG_STATE_B_IDLE
550             && mvotg->phy.state != OTG_STATE_A_IDLE)
551                 return -1;
552
553         /* The clock may disabled and we need to set irq for ID detected */
554         mv_otg_enable(mvotg);
555         mv_otg_init_irq(mvotg);
556
557         if (buf[0] == '1') {
558                 mvotg->otg_ctrl.a_bus_req = 1;
559                 mvotg->otg_ctrl.a_bus_drop = 0;
560                 dev_dbg(&mvotg->pdev->dev,
561                         "User request: a_bus_req = 1\n");
562
563                 if (spin_trylock(&mvotg->wq_lock)) {
564                         mv_otg_run_state_machine(mvotg, 0);
565                         spin_unlock(&mvotg->wq_lock);
566                 }
567         }
568
569         return count;
570 }
571
572 static DEVICE_ATTR(a_bus_req, S_IRUGO | S_IWUSR, get_a_bus_req,
573                    set_a_bus_req);
574
575 static ssize_t
576 set_a_clr_err(struct device *dev, struct device_attribute *attr,
577               const char *buf, size_t count)
578 {
579         struct mv_otg *mvotg = dev_get_drvdata(dev);
580         if (!mvotg->phy.otg->default_a)
581                 return -1;
582
583         if (count > 2)
584                 return -1;
585
586         if (buf[0] == '1') {
587                 mvotg->otg_ctrl.a_clr_err = 1;
588                 dev_dbg(&mvotg->pdev->dev,
589                         "User request: a_clr_err = 1\n");
590         }
591
592         if (spin_trylock(&mvotg->wq_lock)) {
593                 mv_otg_run_state_machine(mvotg, 0);
594                 spin_unlock(&mvotg->wq_lock);
595         }
596
597         return count;
598 }
599
600 static DEVICE_ATTR(a_clr_err, S_IWUSR, NULL, set_a_clr_err);
601
602 static ssize_t
603 get_a_bus_drop(struct device *dev, struct device_attribute *attr,
604                char *buf)
605 {
606         struct mv_otg *mvotg = dev_get_drvdata(dev);
607         return scnprintf(buf, PAGE_SIZE, "%d\n",
608                          mvotg->otg_ctrl.a_bus_drop);
609 }
610
611 static ssize_t
612 set_a_bus_drop(struct device *dev, struct device_attribute *attr,
613                const char *buf, size_t count)
614 {
615         struct mv_otg *mvotg = dev_get_drvdata(dev);
616         if (!mvotg->phy.otg->default_a)
617                 return -1;
618
619         if (count > 2)
620                 return -1;
621
622         if (buf[0] == '0') {
623                 mvotg->otg_ctrl.a_bus_drop = 0;
624                 dev_dbg(&mvotg->pdev->dev,
625                         "User request: a_bus_drop = 0\n");
626         } else if (buf[0] == '1') {
627                 mvotg->otg_ctrl.a_bus_drop = 1;
628                 mvotg->otg_ctrl.a_bus_req = 0;
629                 dev_dbg(&mvotg->pdev->dev,
630                         "User request: a_bus_drop = 1\n");
631                 dev_dbg(&mvotg->pdev->dev,
632                         "User request: and a_bus_req = 0\n");
633         }
634
635         if (spin_trylock(&mvotg->wq_lock)) {
636                 mv_otg_run_state_machine(mvotg, 0);
637                 spin_unlock(&mvotg->wq_lock);
638         }
639
640         return count;
641 }
642
643 static DEVICE_ATTR(a_bus_drop, S_IRUGO | S_IWUSR,
644                    get_a_bus_drop, set_a_bus_drop);
645
646 static struct attribute *inputs_attrs[] = {
647         &dev_attr_a_bus_req.attr,
648         &dev_attr_a_clr_err.attr,
649         &dev_attr_a_bus_drop.attr,
650         NULL,
651 };
652
653 static struct attribute_group inputs_attr_group = {
654         .name = "inputs",
655         .attrs = inputs_attrs,
656 };
657
658 static int mv_otg_remove(struct platform_device *pdev)
659 {
660         struct mv_otg *mvotg = platform_get_drvdata(pdev);
661
662         sysfs_remove_group(&mvotg->pdev->dev.kobj, &inputs_attr_group);
663
664         if (mvotg->qwork) {
665                 flush_workqueue(mvotg->qwork);
666                 destroy_workqueue(mvotg->qwork);
667         }
668
669         mv_otg_disable(mvotg);
670
671         usb_remove_phy(&mvotg->phy);
672
673         return 0;
674 }
675
676 static int mv_otg_probe(struct platform_device *pdev)
677 {
678         struct mv_usb_platform_data *pdata = dev_get_platdata(&pdev->dev);
679         struct mv_otg *mvotg;
680         struct usb_otg *otg;
681         struct resource *r;
682         int retval = 0, i;
683
684         if (pdata == NULL) {
685                 dev_err(&pdev->dev, "failed to get platform data\n");
686                 return -ENODEV;
687         }
688
689         mvotg = devm_kzalloc(&pdev->dev, sizeof(*mvotg), GFP_KERNEL);
690         if (!mvotg) {
691                 dev_err(&pdev->dev, "failed to allocate memory!\n");
692                 return -ENOMEM;
693         }
694
695         otg = devm_kzalloc(&pdev->dev, sizeof(*otg), GFP_KERNEL);
696         if (!otg)
697                 return -ENOMEM;
698
699         platform_set_drvdata(pdev, mvotg);
700
701         mvotg->pdev = pdev;
702         mvotg->pdata = pdata;
703
704         mvotg->clk = devm_clk_get(&pdev->dev, NULL);
705         if (IS_ERR(mvotg->clk))
706                 return PTR_ERR(mvotg->clk);
707
708         mvotg->qwork = create_singlethread_workqueue("mv_otg_queue");
709         if (!mvotg->qwork) {
710                 dev_dbg(&pdev->dev, "cannot create workqueue for OTG\n");
711                 return -ENOMEM;
712         }
713
714         INIT_DELAYED_WORK(&mvotg->work, mv_otg_work);
715
716         /* OTG common part */
717         mvotg->pdev = pdev;
718         mvotg->phy.dev = &pdev->dev;
719         mvotg->phy.otg = otg;
720         mvotg->phy.label = driver_name;
721         mvotg->phy.state = OTG_STATE_UNDEFINED;
722
723         otg->phy = &mvotg->phy;
724         otg->set_host = mv_otg_set_host;
725         otg->set_peripheral = mv_otg_set_peripheral;
726         otg->set_vbus = mv_otg_set_vbus;
727
728         for (i = 0; i < OTG_TIMER_NUM; i++)
729                 init_timer(&mvotg->otg_ctrl.timer[i]);
730
731         r = platform_get_resource_byname(mvotg->pdev,
732                                          IORESOURCE_MEM, "phyregs");
733         if (r == NULL) {
734                 dev_err(&pdev->dev, "no phy I/O memory resource defined\n");
735                 retval = -ENODEV;
736                 goto err_destroy_workqueue;
737         }
738
739         mvotg->phy_regs = devm_ioremap(&pdev->dev, r->start, resource_size(r));
740         if (mvotg->phy_regs == NULL) {
741                 dev_err(&pdev->dev, "failed to map phy I/O memory\n");
742                 retval = -EFAULT;
743                 goto err_destroy_workqueue;
744         }
745
746         r = platform_get_resource_byname(mvotg->pdev,
747                                          IORESOURCE_MEM, "capregs");
748         if (r == NULL) {
749                 dev_err(&pdev->dev, "no I/O memory resource defined\n");
750                 retval = -ENODEV;
751                 goto err_destroy_workqueue;
752         }
753
754         mvotg->cap_regs = devm_ioremap(&pdev->dev, r->start, resource_size(r));
755         if (mvotg->cap_regs == NULL) {
756                 dev_err(&pdev->dev, "failed to map I/O memory\n");
757                 retval = -EFAULT;
758                 goto err_destroy_workqueue;
759         }
760
761         /* we will acces controller register, so enable the udc controller */
762         retval = mv_otg_enable_internal(mvotg);
763         if (retval) {
764                 dev_err(&pdev->dev, "mv otg enable error %d\n", retval);
765                 goto err_destroy_workqueue;
766         }
767
768         mvotg->op_regs =
769                 (struct mv_otg_regs __iomem *) ((unsigned long) mvotg->cap_regs
770                         + (readl(mvotg->cap_regs) & CAPLENGTH_MASK));
771
772         if (pdata->id) {
773                 retval = devm_request_threaded_irq(&pdev->dev, pdata->id->irq,
774                                                 NULL, mv_otg_inputs_irq,
775                                                 IRQF_ONESHOT, "id", mvotg);
776                 if (retval) {
777                         dev_info(&pdev->dev,
778                                  "Failed to request irq for ID\n");
779                         pdata->id = NULL;
780                 }
781         }
782
783         if (pdata->vbus) {
784                 mvotg->clock_gating = 1;
785                 retval = devm_request_threaded_irq(&pdev->dev, pdata->vbus->irq,
786                                                 NULL, mv_otg_inputs_irq,
787                                                 IRQF_ONESHOT, "vbus", mvotg);
788                 if (retval) {
789                         dev_info(&pdev->dev,
790                                  "Failed to request irq for VBUS, "
791                                  "disable clock gating\n");
792                         mvotg->clock_gating = 0;
793                         pdata->vbus = NULL;
794                 }
795         }
796
797         if (pdata->disable_otg_clock_gating)
798                 mvotg->clock_gating = 0;
799
800         mv_otg_reset(mvotg);
801         mv_otg_init_irq(mvotg);
802
803         r = platform_get_resource(mvotg->pdev, IORESOURCE_IRQ, 0);
804         if (r == NULL) {
805                 dev_err(&pdev->dev, "no IRQ resource defined\n");
806                 retval = -ENODEV;
807                 goto err_disable_clk;
808         }
809
810         mvotg->irq = r->start;
811         if (devm_request_irq(&pdev->dev, mvotg->irq, mv_otg_irq, IRQF_SHARED,
812                         driver_name, mvotg)) {
813                 dev_err(&pdev->dev, "Request irq %d for OTG failed\n",
814                         mvotg->irq);
815                 mvotg->irq = 0;
816                 retval = -ENODEV;
817                 goto err_disable_clk;
818         }
819
820         retval = usb_add_phy(&mvotg->phy, USB_PHY_TYPE_USB2);
821         if (retval < 0) {
822                 dev_err(&pdev->dev, "can't register transceiver, %d\n",
823                         retval);
824                 goto err_disable_clk;
825         }
826
827         retval = sysfs_create_group(&pdev->dev.kobj, &inputs_attr_group);
828         if (retval < 0) {
829                 dev_dbg(&pdev->dev,
830                         "Can't register sysfs attr group: %d\n", retval);
831                 goto err_remove_phy;
832         }
833
834         spin_lock_init(&mvotg->wq_lock);
835         if (spin_trylock(&mvotg->wq_lock)) {
836                 mv_otg_run_state_machine(mvotg, 2 * HZ);
837                 spin_unlock(&mvotg->wq_lock);
838         }
839
840         dev_info(&pdev->dev,
841                  "successful probe OTG device %s clock gating.\n",
842                  mvotg->clock_gating ? "with" : "without");
843
844         return 0;
845
846 err_remove_phy:
847         usb_remove_phy(&mvotg->phy);
848 err_disable_clk:
849         mv_otg_disable_internal(mvotg);
850 err_destroy_workqueue:
851         flush_workqueue(mvotg->qwork);
852         destroy_workqueue(mvotg->qwork);
853
854         return retval;
855 }
856
857 #ifdef CONFIG_PM
858 static int mv_otg_suspend(struct platform_device *pdev, pm_message_t state)
859 {
860         struct mv_otg *mvotg = platform_get_drvdata(pdev);
861
862         if (mvotg->phy.state != OTG_STATE_B_IDLE) {
863                 dev_info(&pdev->dev,
864                          "OTG state is not B_IDLE, it is %d!\n",
865                          mvotg->phy.state);
866                 return -EAGAIN;
867         }
868
869         if (!mvotg->clock_gating)
870                 mv_otg_disable_internal(mvotg);
871
872         return 0;
873 }
874
875 static int mv_otg_resume(struct platform_device *pdev)
876 {
877         struct mv_otg *mvotg = platform_get_drvdata(pdev);
878         u32 otgsc;
879
880         if (!mvotg->clock_gating) {
881                 mv_otg_enable_internal(mvotg);
882
883                 otgsc = readl(&mvotg->op_regs->otgsc);
884                 otgsc |= mvotg->irq_en;
885                 writel(otgsc, &mvotg->op_regs->otgsc);
886
887                 if (spin_trylock(&mvotg->wq_lock)) {
888                         mv_otg_run_state_machine(mvotg, 0);
889                         spin_unlock(&mvotg->wq_lock);
890                 }
891         }
892         return 0;
893 }
894 #endif
895
896 static struct platform_driver mv_otg_driver = {
897         .probe = mv_otg_probe,
898         .remove = mv_otg_remove,
899         .driver = {
900                    .owner = THIS_MODULE,
901                    .name = driver_name,
902                    },
903 #ifdef CONFIG_PM
904         .suspend = mv_otg_suspend,
905         .resume = mv_otg_resume,
906 #endif
907 };
908 module_platform_driver(mv_otg_driver);