usb: renesas_usbhs: modify pipe direction flags
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 6 Jun 2011 05:17:56 +0000 (14:17 +0900)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 7 Jun 2011 16:10:06 +0000 (09:10 -0700)
Current driver had pipe direction flag
which came from usb_endpoint_dir_in().
It means "input direction" for HOST,
and "out direction" for Gadget.
But driver needs "input direction for pipe".
This patch adds IS_DIR_HOST flags and care
both "input direction for HOST" and "input direction for pipe"

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/renesas_usbhs/pipe.c
drivers/usb/renesas_usbhs/pipe.h

index bc4521c542616ff2541bded421f7ad0de5b5d197..80fc4add6af220df3030e680de9d4737277769b9 100644 (file)
@@ -550,12 +550,15 @@ static u16 usbhsp_setup_pipecfg(struct usbhs_pipe *pipe,
 
        /* DIR */
        if (usb_endpoint_dir_in(desc))
-               usbhsp_flags_set(pipe, IS_DIR_IN);
+               usbhsp_flags_set(pipe, IS_DIR_HOST);
 
        if ((is_host  && usb_endpoint_dir_out(desc)) ||
            (!is_host && usb_endpoint_dir_in(desc)))
                dir |= DIR_OUT;
 
+       if (!dir)
+               usbhsp_flags_set(pipe, IS_DIR_IN);
+
        /* SHTNAK */
        if (usbhsp_type_is(pipe, USB_ENDPOINT_XFER_BULK) &&
            !dir)
@@ -678,6 +681,11 @@ int usbhs_pipe_is_dir_in(struct usbhs_pipe *pipe)
        return usbhsp_flags_has(pipe, IS_DIR_IN);
 }
 
+int usbhs_pipe_is_dir_host(struct usbhs_pipe *pipe)
+{
+       return usbhsp_flags_has(pipe, IS_DIR_HOST);
+}
+
 void usbhs_pipe_clear_sequence(struct usbhs_pipe *pipe)
 {
        usbhsp_pipectrl_set(pipe, SQCLR, SQCLR);
index 1cca9b7fb266e8a00c77e8669bc10654da4caca2..c906eb646d24fc1154204b70697da221ea0cc6f4 100644 (file)
@@ -30,6 +30,7 @@ struct usbhs_pipe {
        u32 flags;
 #define USBHS_PIPE_FLAGS_IS_USED               (1 << 0)
 #define USBHS_PIPE_FLAGS_IS_DIR_IN             (1 << 1)
+#define USBHS_PIPE_FLAGS_IS_DIR_HOST           (1 << 2)
 
        void *mod_private;
 };
@@ -89,6 +90,7 @@ struct usbhs_pipe
                   const struct usb_endpoint_descriptor *desc);
 
 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);
 int usbhs_pipe_get_maxpacket(struct usbhs_pipe *pipe);
 void usbhs_pipe_clear_sequence(struct usbhs_pipe *pipe);