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