Merge branch 'fix/kconfig' into for-linus
[pandora-kernel.git] / drivers / usb / renesas_usbhs / mod_gadget.c
1 /*
2  * Renesas USB driver
3  *
4  * Copyright (C) 2011 Renesas Solutions Corp.
5  * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
15  *
16  */
17 #include <linux/io.h>
18 #include <linux/module.h>
19 #include <linux/platform_device.h>
20 #include <linux/usb/ch9.h>
21 #include <linux/usb/gadget.h>
22 #include "common.h"
23
24 /*
25  *              struct
26  */
27 struct usbhsg_request {
28         struct usb_request      req;
29         struct usbhs_pkt        pkt;
30 };
31
32 #define EP_NAME_SIZE 8
33 struct usbhsg_gpriv;
34 struct usbhsg_uep {
35         struct usb_ep            ep;
36         struct usbhs_pipe       *pipe;
37
38         char ep_name[EP_NAME_SIZE];
39
40         struct usbhsg_gpriv *gpriv;
41         struct usbhs_pkt_handle *handler;
42 };
43
44 struct usbhsg_gpriv {
45         struct usb_gadget        gadget;
46         struct usbhs_mod         mod;
47         struct list_head         link;
48
49         struct usbhsg_uep       *uep;
50         int                      uep_size;
51
52         struct usb_gadget_driver        *driver;
53
54         u32     status;
55 #define USBHSG_STATUS_STARTED           (1 << 0)
56 #define USBHSG_STATUS_REGISTERD         (1 << 1)
57 #define USBHSG_STATUS_WEDGE             (1 << 2)
58 };
59
60 struct usbhsg_recip_handle {
61         char *name;
62         int (*device)(struct usbhs_priv *priv, struct usbhsg_uep *uep,
63                       struct usb_ctrlrequest *ctrl);
64         int (*interface)(struct usbhs_priv *priv, struct usbhsg_uep *uep,
65                          struct usb_ctrlrequest *ctrl);
66         int (*endpoint)(struct usbhs_priv *priv, struct usbhsg_uep *uep,
67                         struct usb_ctrlrequest *ctrl);
68 };
69
70 /*
71  *              macro
72  */
73 #define usbhsg_priv_to_gpriv(priv)                      \
74         container_of(                                   \
75                 usbhs_mod_get(priv, USBHS_GADGET),      \
76                 struct usbhsg_gpriv, mod)
77
78 #define __usbhsg_for_each_uep(start, pos, g, i) \
79         for (i = start, pos = (g)->uep;         \
80              i < (g)->uep_size;                 \
81              i++, pos = (g)->uep + i)
82
83 #define usbhsg_for_each_uep(pos, gpriv, i)      \
84         __usbhsg_for_each_uep(1, pos, gpriv, i)
85
86 #define usbhsg_for_each_uep_with_dcp(pos, gpriv, i)     \
87         __usbhsg_for_each_uep(0, pos, gpriv, i)
88
89 #define usbhsg_gadget_to_gpriv(g)\
90         container_of(g, struct usbhsg_gpriv, gadget)
91
92 #define usbhsg_req_to_ureq(r)\
93         container_of(r, struct usbhsg_request, req)
94
95 #define usbhsg_ep_to_uep(e)             container_of(e, struct usbhsg_uep, ep)
96 #define usbhsg_gpriv_to_dev(gp)         usbhs_priv_to_dev((gp)->mod.priv)
97 #define usbhsg_gpriv_to_priv(gp)        ((gp)->mod.priv)
98 #define usbhsg_gpriv_to_dcp(gp)         ((gp)->uep)
99 #define usbhsg_gpriv_to_nth_uep(gp, i)  ((gp)->uep + i)
100 #define usbhsg_uep_to_gpriv(u)          ((u)->gpriv)
101 #define usbhsg_uep_to_pipe(u)           ((u)->pipe)
102 #define usbhsg_pipe_to_uep(p)           ((p)->mod_private)
103 #define usbhsg_is_dcp(u)                ((u) == usbhsg_gpriv_to_dcp((u)->gpriv))
104
105 #define usbhsg_ureq_to_pkt(u)           (&(u)->pkt)
106 #define usbhsg_pkt_to_ureq(i)   \
107         container_of(i, struct usbhsg_request, pkt)
108
109 #define usbhsg_is_not_connected(gp) ((gp)->gadget.speed == USB_SPEED_UNKNOWN)
110
111 /* status */
112 #define usbhsg_status_init(gp)   do {(gp)->status = 0; } while (0)
113 #define usbhsg_status_set(gp, b) (gp->status |=  b)
114 #define usbhsg_status_clr(gp, b) (gp->status &= ~b)
115 #define usbhsg_status_has(gp, b) (gp->status &   b)
116
117 /* controller */
118 LIST_HEAD(the_controller_link);
119
120 #define usbhsg_for_each_controller(gpriv)\
121         list_for_each_entry(gpriv, &the_controller_link, link)
122 #define usbhsg_controller_register(gpriv)\
123         list_add_tail(&(gpriv)->link, &the_controller_link)
124 #define usbhsg_controller_unregister(gpriv)\
125         list_del_init(&(gpriv)->link)
126
127 /*
128  *              queue push/pop
129  */
130 static void usbhsg_queue_push(struct usbhsg_uep *uep,
131                               struct usbhsg_request *ureq)
132 {
133         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
134         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
135         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
136         struct usbhs_pkt *pkt = usbhsg_ureq_to_pkt(ureq);
137         struct usb_request *req = &ureq->req;
138
139         req->actual = 0;
140         req->status = -EINPROGRESS;
141         usbhs_pkt_push(pipe, pkt, uep->handler,
142                        req->buf, req->length, req->zero);
143
144         dev_dbg(dev, "pipe %d : queue push (%d)\n",
145                 usbhs_pipe_number(pipe),
146                 req->length);
147 }
148
149 static void usbhsg_queue_pop(struct usbhsg_uep *uep,
150                              struct usbhsg_request *ureq,
151                              int status)
152 {
153         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
154         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
155         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
156
157         dev_dbg(dev, "pipe %d : queue pop\n", usbhs_pipe_number(pipe));
158
159         ureq->req.status = status;
160         ureq->req.complete(&uep->ep, &ureq->req);
161 }
162
163 static void usbhsg_queue_done(struct usbhs_pkt *pkt)
164 {
165         struct usbhs_pipe *pipe = pkt->pipe;
166         struct usbhsg_uep *uep = usbhsg_pipe_to_uep(pipe);
167         struct usbhsg_request *ureq = usbhsg_pkt_to_ureq(pkt);
168
169         ureq->req.actual = pkt->actual;
170
171         usbhsg_queue_pop(uep, ureq, 0);
172 }
173
174 /*
175  *              dma map/unmap
176  */
177 static int usbhsg_dma_map(struct device *dev,
178                           struct usbhs_pkt *pkt,
179                           enum dma_data_direction dir)
180 {
181         struct usbhsg_request *ureq = usbhsg_pkt_to_ureq(pkt);
182         struct usb_request *req = &ureq->req;
183
184         if (pkt->dma != DMA_ADDR_INVALID) {
185                 dev_err(dev, "dma is already mapped\n");
186                 return -EIO;
187         }
188
189         if (req->dma == DMA_ADDR_INVALID) {
190                 pkt->dma = dma_map_single(dev, pkt->buf, pkt->length, dir);
191         } else {
192                 dma_sync_single_for_device(dev, req->dma, req->length, dir);
193                 pkt->dma = req->dma;
194         }
195
196         if (dma_mapping_error(dev, pkt->dma)) {
197                 dev_err(dev, "dma mapping error %x\n", pkt->dma);
198                 return -EIO;
199         }
200
201         return 0;
202 }
203
204 static int usbhsg_dma_unmap(struct device *dev,
205                             struct usbhs_pkt *pkt,
206                             enum dma_data_direction dir)
207 {
208         struct usbhsg_request *ureq = usbhsg_pkt_to_ureq(pkt);
209         struct usb_request *req = &ureq->req;
210
211         if (pkt->dma == DMA_ADDR_INVALID) {
212                 dev_err(dev, "dma is not mapped\n");
213                 return -EIO;
214         }
215
216         if (req->dma == DMA_ADDR_INVALID)
217                 dma_unmap_single(dev, pkt->dma, pkt->length, dir);
218         else
219                 dma_sync_single_for_cpu(dev, req->dma, req->length, dir);
220
221         pkt->dma = DMA_ADDR_INVALID;
222
223         return 0;
224 }
225
226 static int usbhsg_dma_map_ctrl(struct usbhs_pkt *pkt, int map)
227 {
228         struct usbhs_pipe *pipe = pkt->pipe;
229         struct usbhsg_uep *uep = usbhsg_pipe_to_uep(pipe);
230         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
231         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
232         enum dma_data_direction dir;
233
234         dir = usbhs_pipe_is_dir_in(pipe) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
235
236         if (map)
237                 return usbhsg_dma_map(dev, pkt, dir);
238         else
239                 return usbhsg_dma_unmap(dev, pkt, dir);
240 }
241
242 /*
243  *              USB_TYPE_STANDARD / clear feature functions
244  */
245 static int usbhsg_recip_handler_std_control_done(struct usbhs_priv *priv,
246                                                  struct usbhsg_uep *uep,
247                                                  struct usb_ctrlrequest *ctrl)
248 {
249         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
250         struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
251         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(dcp);
252
253         usbhs_dcp_control_transfer_done(pipe);
254
255         return 0;
256 }
257
258 static int usbhsg_recip_handler_std_clear_endpoint(struct usbhs_priv *priv,
259                                                    struct usbhsg_uep *uep,
260                                                    struct usb_ctrlrequest *ctrl)
261 {
262         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
263         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
264
265         if (!usbhsg_status_has(gpriv, USBHSG_STATUS_WEDGE)) {
266                 usbhs_pipe_disable(pipe);
267                 usbhs_pipe_clear_sequence(pipe);
268                 usbhs_pipe_enable(pipe);
269         }
270
271         usbhsg_recip_handler_std_control_done(priv, uep, ctrl);
272
273         return 0;
274 }
275
276 struct usbhsg_recip_handle req_clear_feature = {
277         .name           = "clear feature",
278         .device         = usbhsg_recip_handler_std_control_done,
279         .interface      = usbhsg_recip_handler_std_control_done,
280         .endpoint       = usbhsg_recip_handler_std_clear_endpoint,
281 };
282
283 /*
284  *              USB_TYPE handler
285  */
286 static int usbhsg_recip_run_handle(struct usbhs_priv *priv,
287                                    struct usbhsg_recip_handle *handler,
288                                    struct usb_ctrlrequest *ctrl)
289 {
290         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
291         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
292         struct usbhsg_uep *uep;
293         struct usbhs_pipe *pipe;
294         int recip = ctrl->bRequestType & USB_RECIP_MASK;
295         int nth = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
296         int ret;
297         int (*func)(struct usbhs_priv *priv, struct usbhsg_uep *uep,
298                     struct usb_ctrlrequest *ctrl);
299         char *msg;
300
301         uep = usbhsg_gpriv_to_nth_uep(gpriv, nth);
302         pipe = usbhsg_uep_to_pipe(uep);
303         if (!pipe) {
304                 dev_err(dev, "wrong recip request\n");
305                 ret = -EINVAL;
306                 goto usbhsg_recip_run_handle_end;
307         }
308
309         switch (recip) {
310         case USB_RECIP_DEVICE:
311                 msg     = "DEVICE";
312                 func    = handler->device;
313                 break;
314         case USB_RECIP_INTERFACE:
315                 msg     = "INTERFACE";
316                 func    = handler->interface;
317                 break;
318         case USB_RECIP_ENDPOINT:
319                 msg     = "ENDPOINT";
320                 func    = handler->endpoint;
321                 break;
322         default:
323                 dev_warn(dev, "unsupported RECIP(%d)\n", recip);
324                 func = NULL;
325                 ret = -EINVAL;
326         }
327
328         if (func) {
329                 unsigned long flags;
330
331                 dev_dbg(dev, "%s (pipe %d :%s)\n", handler->name, nth, msg);
332
333                 /********************  spin lock ********************/
334                 usbhs_lock(priv, flags);
335                 ret = func(priv, uep, ctrl);
336                 usbhs_unlock(priv, flags);
337                 /********************  spin unlock ******************/
338         }
339
340 usbhsg_recip_run_handle_end:
341         usbhs_pkt_start(pipe);
342
343         return ret;
344 }
345
346 /*
347  *              irq functions
348  *
349  * it will be called from usbhs_interrupt
350  */
351 static int usbhsg_irq_dev_state(struct usbhs_priv *priv,
352                                 struct usbhs_irq_state *irq_state)
353 {
354         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
355         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
356
357         gpriv->gadget.speed = usbhs_status_get_usb_speed(irq_state);
358
359         dev_dbg(dev, "state = %x : speed : %d\n",
360                 usbhs_status_get_device_state(irq_state),
361                 gpriv->gadget.speed);
362
363         return 0;
364 }
365
366 static int usbhsg_irq_ctrl_stage(struct usbhs_priv *priv,
367                                  struct usbhs_irq_state *irq_state)
368 {
369         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
370         struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
371         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(dcp);
372         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
373         struct usb_ctrlrequest ctrl;
374         struct usbhsg_recip_handle *recip_handler = NULL;
375         int stage = usbhs_status_get_ctrl_stage(irq_state);
376         int ret = 0;
377
378         dev_dbg(dev, "stage = %d\n", stage);
379
380         /*
381          * see Manual
382          *
383          *  "Operation"
384          *  - "Interrupt Function"
385          *    - "Control Transfer Stage Transition Interrupt"
386          *      - Fig. "Control Transfer Stage Transitions"
387          */
388
389         switch (stage) {
390         case READ_DATA_STAGE:
391                 dcp->handler = &usbhs_fifo_pio_push_handler;
392                 break;
393         case WRITE_DATA_STAGE:
394                 dcp->handler = &usbhs_fifo_pio_pop_handler;
395                 break;
396         case NODATA_STATUS_STAGE:
397                 dcp->handler = &usbhs_ctrl_stage_end_handler;
398                 break;
399         default:
400                 return ret;
401         }
402
403         /*
404          * get usb request
405          */
406         usbhs_usbreq_get_val(priv, &ctrl);
407
408         switch (ctrl.bRequestType & USB_TYPE_MASK) {
409         case USB_TYPE_STANDARD:
410                 switch (ctrl.bRequest) {
411                 case USB_REQ_CLEAR_FEATURE:
412                         recip_handler = &req_clear_feature;
413                         break;
414                 }
415         }
416
417         /*
418          * setup stage / run recip
419          */
420         if (recip_handler)
421                 ret = usbhsg_recip_run_handle(priv, recip_handler, &ctrl);
422         else
423                 ret = gpriv->driver->setup(&gpriv->gadget, &ctrl);
424
425         if (ret < 0)
426                 usbhs_pipe_stall(pipe);
427
428         return ret;
429 }
430
431 /*
432  *
433  *              usb_dcp_ops
434  *
435  */
436 static int usbhsg_pipe_disable(struct usbhsg_uep *uep)
437 {
438         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
439         struct usbhs_pkt *pkt;
440
441         usbhs_pipe_disable(pipe);
442
443         while (1) {
444                 pkt = usbhs_pkt_pop(pipe, NULL);
445                 if (!pkt)
446                         break;
447         }
448
449         return 0;
450 }
451
452 static void usbhsg_uep_init(struct usbhsg_gpriv *gpriv)
453 {
454         int i;
455         struct usbhsg_uep *uep;
456
457         usbhsg_for_each_uep_with_dcp(uep, gpriv, i)
458                 uep->pipe = NULL;
459 }
460
461 /*
462  *
463  *              usb_ep_ops
464  *
465  */
466 static int usbhsg_ep_enable(struct usb_ep *ep,
467                          const struct usb_endpoint_descriptor *desc)
468 {
469         struct usbhsg_uep *uep   = usbhsg_ep_to_uep(ep);
470         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
471         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
472         struct usbhs_pipe *pipe;
473         int ret = -EIO;
474
475         /*
476          * if it already have pipe,
477          * nothing to do
478          */
479         if (uep->pipe) {
480                 usbhs_pipe_clear(uep->pipe);
481                 usbhs_pipe_clear_sequence(uep->pipe);
482                 return 0;
483         }
484
485         pipe = usbhs_pipe_malloc(priv, desc);
486         if (pipe) {
487                 uep->pipe               = pipe;
488                 pipe->mod_private       = uep;
489
490                 /*
491                  * usbhs_fifo_dma_push/pop_handler try to
492                  * use dmaengine if possible.
493                  * It will use pio handler if impossible.
494                  */
495                 if (usb_endpoint_dir_in(desc))
496                         uep->handler = &usbhs_fifo_dma_push_handler;
497                 else
498                         uep->handler = &usbhs_fifo_dma_pop_handler;
499
500                 ret = 0;
501         }
502
503         return ret;
504 }
505
506 static int usbhsg_ep_disable(struct usb_ep *ep)
507 {
508         struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
509
510         return usbhsg_pipe_disable(uep);
511 }
512
513 static struct usb_request *usbhsg_ep_alloc_request(struct usb_ep *ep,
514                                                    gfp_t gfp_flags)
515 {
516         struct usbhsg_request *ureq;
517
518         ureq = kzalloc(sizeof *ureq, gfp_flags);
519         if (!ureq)
520                 return NULL;
521
522         usbhs_pkt_init(usbhsg_ureq_to_pkt(ureq));
523
524         ureq->req.dma = DMA_ADDR_INVALID;
525
526         return &ureq->req;
527 }
528
529 static void usbhsg_ep_free_request(struct usb_ep *ep,
530                                    struct usb_request *req)
531 {
532         struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
533
534         WARN_ON(!list_empty(&ureq->pkt.node));
535         kfree(ureq);
536 }
537
538 static int usbhsg_ep_queue(struct usb_ep *ep, struct usb_request *req,
539                           gfp_t gfp_flags)
540 {
541         struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
542         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
543         struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
544         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
545
546         /* param check */
547         if (usbhsg_is_not_connected(gpriv)      ||
548             unlikely(!gpriv->driver)            ||
549             unlikely(!pipe))
550                 return -ESHUTDOWN;
551
552         usbhsg_queue_push(uep, ureq);
553
554         return 0;
555 }
556
557 static int usbhsg_ep_dequeue(struct usb_ep *ep, struct usb_request *req)
558 {
559         struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
560         struct usbhsg_request *ureq = usbhsg_req_to_ureq(req);
561         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
562
563         usbhs_pkt_pop(pipe, usbhsg_ureq_to_pkt(ureq));
564         usbhsg_queue_pop(uep, ureq, -ECONNRESET);
565
566         return 0;
567 }
568
569 static int __usbhsg_ep_set_halt_wedge(struct usb_ep *ep, int halt, int wedge)
570 {
571         struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
572         struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
573         struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
574         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
575         struct device *dev = usbhsg_gpriv_to_dev(gpriv);
576         unsigned long flags;
577
578         usbhsg_pipe_disable(uep);
579
580         dev_dbg(dev, "set halt %d (pipe %d)\n",
581                 halt, usbhs_pipe_number(pipe));
582
583         /********************  spin lock ********************/
584         usbhs_lock(priv, flags);
585
586         if (halt)
587                 usbhs_pipe_stall(pipe);
588         else
589                 usbhs_pipe_disable(pipe);
590
591         if (halt && wedge)
592                 usbhsg_status_set(gpriv, USBHSG_STATUS_WEDGE);
593         else
594                 usbhsg_status_clr(gpriv, USBHSG_STATUS_WEDGE);
595
596         usbhs_unlock(priv, flags);
597         /********************  spin unlock ******************/
598
599         return 0;
600 }
601
602 static int usbhsg_ep_set_halt(struct usb_ep *ep, int value)
603 {
604         return __usbhsg_ep_set_halt_wedge(ep, value, 0);
605 }
606
607 static int usbhsg_ep_set_wedge(struct usb_ep *ep)
608 {
609         return __usbhsg_ep_set_halt_wedge(ep, 1, 1);
610 }
611
612 static struct usb_ep_ops usbhsg_ep_ops = {
613         .enable         = usbhsg_ep_enable,
614         .disable        = usbhsg_ep_disable,
615
616         .alloc_request  = usbhsg_ep_alloc_request,
617         .free_request   = usbhsg_ep_free_request,
618
619         .queue          = usbhsg_ep_queue,
620         .dequeue        = usbhsg_ep_dequeue,
621
622         .set_halt       = usbhsg_ep_set_halt,
623         .set_wedge      = usbhsg_ep_set_wedge,
624 };
625
626 /*
627  *              usb module start/end
628  */
629 static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
630 {
631         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
632         struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
633         struct usbhs_mod *mod = usbhs_mod_get_current(priv);
634         struct device *dev = usbhs_priv_to_dev(priv);
635         unsigned long flags;
636         int ret = 0;
637
638         /********************  spin lock ********************/
639         usbhs_lock(priv, flags);
640
641         usbhsg_status_set(gpriv, status);
642         if (!(usbhsg_status_has(gpriv, USBHSG_STATUS_STARTED) &&
643               usbhsg_status_has(gpriv, USBHSG_STATUS_REGISTERD)))
644                 ret = -1; /* not ready */
645
646         usbhs_unlock(priv, flags);
647         /********************  spin unlock ********************/
648
649         if (ret < 0)
650                 return 0; /* not ready is not error */
651
652         /*
653          * enable interrupt and systems if ready
654          */
655         dev_dbg(dev, "start gadget\n");
656
657         /*
658          * pipe initialize and enable DCP
659          */
660         usbhs_pipe_init(priv,
661                         usbhsg_queue_done,
662                         usbhsg_dma_map_ctrl);
663         usbhs_fifo_init(priv);
664         usbhsg_uep_init(gpriv);
665
666         /* dcp init */
667         dcp->pipe               = usbhs_dcp_malloc(priv);
668         dcp->pipe->mod_private  = dcp;
669
670         /*
671          * system config enble
672          * - HI speed
673          * - function
674          * - usb module
675          */
676         usbhs_sys_hispeed_ctrl(priv, 1);
677         usbhs_sys_function_ctrl(priv, 1);
678         usbhs_sys_usb_ctrl(priv, 1);
679
680         /*
681          * enable irq callback
682          */
683         mod->irq_dev_state      = usbhsg_irq_dev_state;
684         mod->irq_ctrl_stage     = usbhsg_irq_ctrl_stage;
685         usbhs_irq_callback_update(priv, mod);
686
687         return 0;
688 }
689
690 static int usbhsg_try_stop(struct usbhs_priv *priv, u32 status)
691 {
692         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
693         struct usbhs_mod *mod = usbhs_mod_get_current(priv);
694         struct usbhsg_uep *dcp = usbhsg_gpriv_to_dcp(gpriv);
695         struct device *dev = usbhs_priv_to_dev(priv);
696         unsigned long flags;
697         int ret = 0;
698
699         /********************  spin lock ********************/
700         usbhs_lock(priv, flags);
701
702         usbhsg_status_clr(gpriv, status);
703         if (!usbhsg_status_has(gpriv, USBHSG_STATUS_STARTED) &&
704             !usbhsg_status_has(gpriv, USBHSG_STATUS_REGISTERD))
705                 ret = -1; /* already done */
706
707         usbhs_unlock(priv, flags);
708         /********************  spin unlock ********************/
709
710         if (ret < 0)
711                 return 0; /* already done is not error */
712
713         /*
714          * disable interrupt and systems if 1st try
715          */
716         usbhs_fifo_quit(priv);
717
718         /* disable all irq */
719         mod->irq_dev_state      = NULL;
720         mod->irq_ctrl_stage     = NULL;
721         usbhs_irq_callback_update(priv, mod);
722
723         gpriv->gadget.speed = USB_SPEED_UNKNOWN;
724
725         /* disable sys */
726         usbhs_sys_hispeed_ctrl(priv, 0);
727         usbhs_sys_function_ctrl(priv, 0);
728         usbhs_sys_usb_ctrl(priv, 0);
729
730         usbhsg_pipe_disable(dcp);
731
732         if (gpriv->driver &&
733             gpriv->driver->disconnect)
734                 gpriv->driver->disconnect(&gpriv->gadget);
735
736         dev_dbg(dev, "stop gadget\n");
737
738         return 0;
739 }
740
741 /*
742  *
743  *              linux usb function
744  *
745  */
746 static int usbhsg_gadget_start(struct usb_gadget_driver *driver,
747                             int (*bind)(struct usb_gadget *))
748 {
749         struct usbhsg_gpriv *gpriv;
750         struct usbhs_priv *priv;
751         struct device *dev;
752         int ret;
753
754         if (!bind               ||
755             !driver             ||
756             !driver->setup      ||
757             driver->speed != USB_SPEED_HIGH)
758                 return -EINVAL;
759
760         /*
761          * find unused controller
762          */
763         usbhsg_for_each_controller(gpriv) {
764                 if (!gpriv->driver)
765                         goto find_unused_controller;
766         }
767         return -ENODEV;
768
769 find_unused_controller:
770
771         dev  = usbhsg_gpriv_to_dev(gpriv);
772         priv = usbhsg_gpriv_to_priv(gpriv);
773
774         /* first hook up the driver ... */
775         gpriv->driver = driver;
776         gpriv->gadget.dev.driver = &driver->driver;
777
778         ret = device_add(&gpriv->gadget.dev);
779         if (ret) {
780                 dev_err(dev, "device_add error %d\n", ret);
781                 goto add_fail;
782         }
783
784         ret = bind(&gpriv->gadget);
785         if (ret) {
786                 dev_err(dev, "bind to driver %s error %d\n",
787                         driver->driver.name, ret);
788                 goto bind_fail;
789         }
790
791         dev_dbg(dev, "bind %s\n", driver->driver.name);
792
793         return usbhsg_try_start(priv, USBHSG_STATUS_REGISTERD);
794
795 bind_fail:
796         device_del(&gpriv->gadget.dev);
797 add_fail:
798         gpriv->driver = NULL;
799         gpriv->gadget.dev.driver = NULL;
800
801         return ret;
802 }
803
804 static int usbhsg_gadget_stop(struct usb_gadget_driver *driver)
805 {
806         struct usbhsg_gpriv *gpriv;
807         struct usbhs_priv *priv;
808         struct device *dev;
809
810         if (!driver             ||
811             !driver->unbind)
812                 return -EINVAL;
813
814         /*
815          * find controller
816          */
817         usbhsg_for_each_controller(gpriv) {
818                 if (gpriv->driver == driver)
819                         goto find_matching_controller;
820         }
821         return -ENODEV;
822
823 find_matching_controller:
824
825         dev  = usbhsg_gpriv_to_dev(gpriv);
826         priv = usbhsg_gpriv_to_priv(gpriv);
827
828         usbhsg_try_stop(priv, USBHSG_STATUS_REGISTERD);
829         device_del(&gpriv->gadget.dev);
830         gpriv->driver = NULL;
831
832         if (driver->disconnect)
833                 driver->disconnect(&gpriv->gadget);
834
835         driver->unbind(&gpriv->gadget);
836         dev_dbg(dev, "unbind %s\n", driver->driver.name);
837
838         return 0;
839 }
840
841 /*
842  *              usb gadget ops
843  */
844 static int usbhsg_get_frame(struct usb_gadget *gadget)
845 {
846         struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
847         struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
848
849         return usbhs_frame_get_num(priv);
850 }
851
852 static struct usb_gadget_ops usbhsg_gadget_ops = {
853         .get_frame              = usbhsg_get_frame,
854         .start                  = usbhsg_gadget_start,
855         .stop                   = usbhsg_gadget_stop,
856 };
857
858 static int usbhsg_start(struct usbhs_priv *priv)
859 {
860         return usbhsg_try_start(priv, USBHSG_STATUS_STARTED);
861 }
862
863 static int usbhsg_stop(struct usbhs_priv *priv)
864 {
865         return usbhsg_try_stop(priv, USBHSG_STATUS_STARTED);
866 }
867
868 int __devinit usbhs_mod_gadget_probe(struct usbhs_priv *priv)
869 {
870         struct usbhsg_gpriv *gpriv;
871         struct usbhsg_uep *uep;
872         struct device *dev = usbhs_priv_to_dev(priv);
873         int pipe_size = usbhs_get_dparam(priv, pipe_size);
874         int i;
875         int ret;
876
877         gpriv = kzalloc(sizeof(struct usbhsg_gpriv), GFP_KERNEL);
878         if (!gpriv) {
879                 dev_err(dev, "Could not allocate gadget priv\n");
880                 return -ENOMEM;
881         }
882
883         uep = kzalloc(sizeof(struct usbhsg_uep) * pipe_size, GFP_KERNEL);
884         if (!uep) {
885                 dev_err(dev, "Could not allocate ep\n");
886                 ret = -ENOMEM;
887                 goto usbhs_mod_gadget_probe_err_gpriv;
888         }
889
890         /*
891          * CAUTION
892          *
893          * There is no guarantee that it is possible to access usb module here.
894          * Don't accesses to it.
895          * The accesse will be enable after "usbhsg_start"
896          */
897
898         /*
899          * register itself
900          */
901         usbhs_mod_register(priv, &gpriv->mod, USBHS_GADGET);
902
903         /* init gpriv */
904         gpriv->mod.name         = "gadget";
905         gpriv->mod.start        = usbhsg_start;
906         gpriv->mod.stop         = usbhsg_stop;
907         gpriv->uep              = uep;
908         gpriv->uep_size         = pipe_size;
909         usbhsg_status_init(gpriv);
910
911         /*
912          * init gadget
913          */
914         device_initialize(&gpriv->gadget.dev);
915         dev_set_name(&gpriv->gadget.dev, "gadget");
916         gpriv->gadget.dev.parent        = dev;
917         gpriv->gadget.name              = "renesas_usbhs_udc";
918         gpriv->gadget.ops               = &usbhsg_gadget_ops;
919         gpriv->gadget.is_dualspeed      = 1;
920
921         INIT_LIST_HEAD(&gpriv->gadget.ep_list);
922
923         /*
924          * init usb_ep
925          */
926         usbhsg_for_each_uep_with_dcp(uep, gpriv, i) {
927                 uep->gpriv      = gpriv;
928                 snprintf(uep->ep_name, EP_NAME_SIZE, "ep%d", i);
929
930                 uep->ep.name            = uep->ep_name;
931                 uep->ep.ops             = &usbhsg_ep_ops;
932                 INIT_LIST_HEAD(&uep->ep.ep_list);
933
934                 /* init DCP */
935                 if (usbhsg_is_dcp(uep)) {
936                         gpriv->gadget.ep0 = &uep->ep;
937                         uep->ep.maxpacket = 64;
938                 }
939                 /* init normal pipe */
940                 else {
941                         uep->ep.maxpacket = 512;
942                         list_add_tail(&uep->ep.ep_list, &gpriv->gadget.ep_list);
943                 }
944         }
945
946         usbhsg_controller_register(gpriv);
947
948         ret = usb_add_gadget_udc(dev, &gpriv->gadget);
949         if (ret)
950                 goto err_add_udc;
951
952
953         dev_info(dev, "gadget probed\n");
954
955         return 0;
956 err_add_udc:
957         kfree(gpriv->uep);
958
959 usbhs_mod_gadget_probe_err_gpriv:
960         kfree(gpriv);
961
962         return ret;
963 }
964
965 void __devexit usbhs_mod_gadget_remove(struct usbhs_priv *priv)
966 {
967         struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
968
969         usb_del_gadget_udc(&gpriv->gadget);
970
971         usbhsg_controller_unregister(gpriv);
972
973         kfree(gpriv->uep);
974         kfree(gpriv);
975 }