]> git.karo-electronics.de Git - linux-beck.git/commitdiff
usb: gadget: renesas_usbhs: move done callback to struct usbhs_pkt
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tue, 11 Oct 2011 05:04:41 +0000 (22:04 -0700)
committerFelipe Balbi <balbi@ti.com>
Thu, 13 Oct 2011 17:41:44 +0000 (20:41 +0300)
transfer done function was registered in struct struct usbhs_pipe_info.
It was good for mod_gadget, but not good for mod_host.
This function move it to struct usbhs_pkt.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/renesas_usbhs/fifo.c
drivers/usb/renesas_usbhs/fifo.h
drivers/usb/renesas_usbhs/mod_gadget.c
drivers/usb/renesas_usbhs/pipe.c
drivers/usb/renesas_usbhs/pipe.h

index 9bf3a437ea0b36970a65c5548fd0b993c9e164ad..8b40726ba9661ac939a6ee105f756c4c98899339 100644 (file)
@@ -54,6 +54,8 @@ static struct usbhs_pkt_handle usbhsf_null_handler = {
 };
 
 void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt,
+                   void (*done)(struct usbhs_priv *priv,
+                                struct usbhs_pkt *pkt),
                    void *buf, int len, int zero)
 {
        struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
@@ -63,6 +65,11 @@ void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt,
        /********************  spin lock ********************/
        usbhs_lock(priv, flags);
 
+       if (!done) {
+               dev_err(dev, "no done function\n");
+               return;
+       }
+
        if (!pipe->handler) {
                dev_err(dev, "no handler function\n");
                pipe->handler = &usbhsf_null_handler;
@@ -82,6 +89,7 @@ void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt,
        pkt->length     = len;
        pkt->zero       = zero;
        pkt->actual     = 0;
+       pkt->done       = done;
 
        usbhs_unlock(priv, flags);
        /********************  spin unlock ******************/
@@ -131,7 +139,6 @@ enum {
 static int usbhsf_pkt_handler(struct usbhs_pipe *pipe, int type)
 {
        struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
-       struct usbhs_pipe_info *info = usbhs_priv_to_pipeinfo(priv);
        struct usbhs_pkt *pkt;
        struct device *dev = usbhs_priv_to_dev(priv);
        int (*func)(struct usbhs_pkt *pkt, int *is_done);
@@ -171,7 +178,7 @@ __usbhs_pkt_handler_end:
        /********************  spin unlock ******************/
 
        if (is_done) {
-               info->done(priv, pkt);
+               pkt->done(priv, pkt);
                usbhs_pkt_start(pipe);
        }
 
index 60aa20fd303efe9cba87a2a2f13d953761ab53f5..0e82d67a025705128ba691f48e215f9b8846d2e6 100644 (file)
@@ -51,6 +51,8 @@ struct usbhs_pkt {
        struct list_head node;
        struct usbhs_pipe *pipe;
        struct usbhs_pkt_handle *handler;
+       void (*done)(struct usbhs_priv *priv,
+                    struct usbhs_pkt *pkt);
        dma_addr_t dma;
        void *buf;
        int length;
@@ -86,6 +88,8 @@ extern struct usbhs_pkt_handle usbhs_fifo_dma_pop_handler;
 
 void usbhs_pkt_init(struct usbhs_pkt *pkt);
 void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt,
+                   void (*done)(struct usbhs_priv *priv,
+                                struct usbhs_pkt *pkt),
                    void *buf, int len, int zero);
 struct usbhs_pkt *usbhs_pkt_pop(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt);
 void usbhs_pkt_start(struct usbhs_pipe *pipe);
index d5f80c4457e53f95916b339f25283b82b6fd7475..563128531e659ce8f1b4c165d823eaeacb0e0e13 100644 (file)
@@ -127,24 +127,6 @@ LIST_HEAD(the_controller_link);
 /*
  *             queue push/pop
  */
-static void usbhsg_queue_push(struct usbhsg_uep *uep,
-                             struct usbhsg_request *ureq)
-{
-       struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
-       struct device *dev = usbhsg_gpriv_to_dev(gpriv);
-       struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
-       struct usbhs_pkt *pkt = usbhsg_ureq_to_pkt(ureq);
-       struct usb_request *req = &ureq->req;
-
-       req->actual = 0;
-       req->status = -EINPROGRESS;
-       usbhs_pkt_push(pipe, pkt, req->buf, req->length, req->zero);
-
-       dev_dbg(dev, "pipe %d : queue push (%d)\n",
-               usbhs_pipe_number(pipe),
-               req->length);
-}
-
 static void usbhsg_queue_pop(struct usbhsg_uep *uep,
                             struct usbhsg_request *ureq,
                             int status)
@@ -170,6 +152,25 @@ static void usbhsg_queue_done(struct usbhs_priv *priv, struct usbhs_pkt *pkt)
        usbhsg_queue_pop(uep, ureq, 0);
 }
 
+static void usbhsg_queue_push(struct usbhsg_uep *uep,
+                             struct usbhsg_request *ureq)
+{
+       struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
+       struct device *dev = usbhsg_gpriv_to_dev(gpriv);
+       struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
+       struct usbhs_pkt *pkt = usbhsg_ureq_to_pkt(ureq);
+       struct usb_request *req = &ureq->req;
+
+       req->actual = 0;
+       req->status = -EINPROGRESS;
+       usbhs_pkt_push(pipe, pkt, usbhsg_queue_done,
+                      req->buf, req->length, req->zero);
+
+       dev_dbg(dev, "pipe %d : queue push (%d)\n",
+               usbhs_pipe_number(pipe),
+               req->length);
+}
+
 /*
  *             dma map/unmap
  */
@@ -664,7 +665,6 @@ static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
         * pipe initialize and enable DCP
         */
        usbhs_pipe_init(priv,
-                       usbhsg_queue_done,
                        usbhsg_dma_map_ctrl);
        usbhs_fifo_init(priv);
        usbhsg_uep_init(gpriv);
index 7636f2353b9de57e5438506abf396545631202f5..6bc9e33270640f414a88bc213dfd9c48b7d66b0a 100644 (file)
@@ -514,20 +514,12 @@ static struct usbhs_pipe *usbhsp_get_pipe(struct usbhs_priv *priv, u32 type)
 }
 
 void usbhs_pipe_init(struct usbhs_priv *priv,
-                    void (*done)(struct usbhs_priv *priv,
-                                 struct usbhs_pkt *pkt),
                     int (*dma_map_ctrl)(struct usbhs_pkt *pkt, int map))
 {
        struct usbhs_pipe_info *info = usbhs_priv_to_pipeinfo(priv);
-       struct device *dev = usbhs_priv_to_dev(priv);
        struct usbhs_pipe *pipe;
        int i;
 
-       if (!done) {
-               dev_err(dev, "no done function\n");
-               return;
-       }
-
        /*
         * FIXME
         *
@@ -554,7 +546,6 @@ void usbhs_pipe_init(struct usbhs_priv *priv,
                usbhs_pipe_clear(pipe);
        }
 
-       info->done = done;
        info->dma_map_ctrl = dma_map_ctrl;
 }
 
index 37018351f47c7ad453e088394811a3c26fcacf5b..ddbd3193c1fbdb2755f2feacdecab57c7622e5f9 100644 (file)
@@ -47,7 +47,6 @@ struct usbhs_pipe_info {
        int size;       /* array size of "pipe" */
        int bufnmb_last;        /* FIXME : driver needs good allocator */
 
-       void (*done)(struct usbhs_priv *priv, struct usbhs_pkt *pkt);
        int (*dma_map_ctrl)(struct usbhs_pkt *pkt, int map);
 };
 
@@ -81,8 +80,6 @@ void usbhs_pipe_remove(struct usbhs_priv *priv);
 int usbhs_pipe_is_dir_in(struct usbhs_pipe *pipe);
 int usbhs_pipe_is_dir_host(struct usbhs_pipe *pipe);
 void usbhs_pipe_init(struct usbhs_priv *priv,
-                    void (*done)(struct usbhs_priv *priv,
-                                 struct usbhs_pkt *pkt),
                     int (*dma_map_ctrl)(struct usbhs_pkt *pkt, int map));
 int usbhs_pipe_get_maxpacket(struct usbhs_pipe *pipe);
 void usbhs_pipe_clear_sequence(struct usbhs_pipe *pipe);