usb: renesas_usbhs: gadget: add usb_gadget_ops :: pullup support
authorkuninori.morimoto.gx@renesas.com <kuninori.morimoto.gx@renesas.com>
Tue, 16 Oct 2012 06:24:19 +0000 (23:24 -0700)
committerFelipe Balbi <balbi@ti.com>
Tue, 16 Oct 2012 10:09:50 +0000 (13:09 +0300)
This patch adds usbhs_sys_function_pullup() to control
D+ line for USB function, and enabled pullup support on mod_gadget.

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

index 072edc1cc55f8ec020c3cb5f75bec072e9091a63..3bf922ab045e9669e07ba515b656bb15e55e1474 100644 (file)
@@ -132,6 +132,11 @@ void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable)
        usbhs_bset(priv, SYSCFG, mask, enable ? val : 0);
 }
 
+void usbhs_sys_function_pullup(struct usbhs_priv *priv, int enable)
+{
+       usbhs_bset(priv, SYSCFG, DPRPU, enable ? DPRPU : 0);
+}
+
 void usbhs_sys_set_test_mode(struct usbhs_priv *priv, u16 mode)
 {
        usbhs_write(priv, TESTMODE, mode);
index dddf40a59dedc456d3cc0f270b950b5dcb3b4671..c69dd2fba3603259b4591d21a11dda0fafc5e2b8 100644 (file)
@@ -285,6 +285,7 @@ void usbhs_bset(struct usbhs_priv *priv, u32 reg, u16 mask, u16 data);
  */
 void usbhs_sys_host_ctrl(struct usbhs_priv *priv, int enable);
 void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable);
+void usbhs_sys_function_pullup(struct usbhs_priv *priv, int enable);
 void usbhs_sys_set_test_mode(struct usbhs_priv *priv, u16 mode);
 
 /*
index 28478ce26c3429c59289dfabbdc5f6cd2b61a846..dd41f61893ef87484fbfc233dc338427bcfcede6 100644 (file)
@@ -883,6 +883,16 @@ static int usbhsg_get_frame(struct usb_gadget *gadget)
        return usbhs_frame_get_num(priv);
 }
 
+static int usbhsg_pullup(struct usb_gadget *gadget, int is_on)
+{
+       struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
+       struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
+
+       usbhs_sys_function_pullup(priv, is_on);
+
+       return 0;
+}
+
 static int usbhsg_set_selfpowered(struct usb_gadget *gadget, int is_self)
 {
        struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
@@ -900,6 +910,7 @@ static struct usb_gadget_ops usbhsg_gadget_ops = {
        .set_selfpowered        = usbhsg_set_selfpowered,
        .udc_start              = usbhsg_gadget_start,
        .udc_stop               = usbhsg_gadget_stop,
+       .pullup                 = usbhsg_pullup,
 };
 
 static int usbhsg_start(struct usbhs_priv *priv)