Commit dfbb7f4f authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Felipe Balbi

usb: renesas_usbhs: add test-mode support

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 91b158f4
...@@ -132,6 +132,11 @@ void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable) ...@@ -132,6 +132,11 @@ void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable)
usbhs_bset(priv, SYSCFG, mask, enable ? val : 0); usbhs_bset(priv, SYSCFG, mask, enable ? val : 0);
} }
void usbhs_sys_set_test_mode(struct usbhs_priv *priv, u16 mode)
{
usbhs_write(priv, TESTMODE, mode);
}
/* /*
* frame functions * frame functions
*/ */
......
...@@ -33,6 +33,7 @@ struct usbhs_priv; ...@@ -33,6 +33,7 @@ struct usbhs_priv;
#define SYSCFG 0x0000 #define SYSCFG 0x0000
#define BUSWAIT 0x0002 #define BUSWAIT 0x0002
#define DVSTCTR 0x0008 #define DVSTCTR 0x0008
#define TESTMODE 0x000C
#define CFIFO 0x0014 #define CFIFO 0x0014
#define CFIFOSEL 0x0020 #define CFIFOSEL 0x0020
#define CFIFOCTR 0x0022 #define CFIFOCTR 0x0022
...@@ -283,6 +284,7 @@ void usbhs_bset(struct usbhs_priv *priv, u32 reg, u16 mask, u16 data); ...@@ -283,6 +284,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_host_ctrl(struct usbhs_priv *priv, int enable);
void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable); void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable);
void usbhs_sys_set_test_mode(struct usbhs_priv *priv, u16 mode);
/* /*
* usb request * usb request
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* *
*/ */
#include <linux/delay.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -286,6 +287,24 @@ struct usbhsg_recip_handle req_clear_feature = { ...@@ -286,6 +287,24 @@ struct usbhsg_recip_handle req_clear_feature = {
/* /*
* USB_TYPE_STANDARD / set feature functions * USB_TYPE_STANDARD / set feature functions
*/ */
static int usbhsg_recip_handler_std_set_device(struct usbhs_priv *priv,
struct usbhsg_uep *uep,
struct usb_ctrlrequest *ctrl)
{
switch (le16_to_cpu(ctrl->wValue)) {
case USB_DEVICE_TEST_MODE:
usbhsg_recip_handler_std_control_done(priv, uep, ctrl);
udelay(100);
usbhs_sys_set_test_mode(priv, le16_to_cpu(ctrl->wIndex >> 8));
break;
default:
usbhsg_recip_handler_std_control_done(priv, uep, ctrl);
break;
}
return 0;
}
static int usbhsg_recip_handler_std_set_endpoint(struct usbhs_priv *priv, static int usbhsg_recip_handler_std_set_endpoint(struct usbhs_priv *priv,
struct usbhsg_uep *uep, struct usbhsg_uep *uep,
struct usb_ctrlrequest *ctrl) struct usb_ctrlrequest *ctrl)
...@@ -301,7 +320,7 @@ static int usbhsg_recip_handler_std_set_endpoint(struct usbhs_priv *priv, ...@@ -301,7 +320,7 @@ static int usbhsg_recip_handler_std_set_endpoint(struct usbhs_priv *priv,
struct usbhsg_recip_handle req_set_feature = { struct usbhsg_recip_handle req_set_feature = {
.name = "set feature", .name = "set feature",
.device = usbhsg_recip_handler_std_control_done, .device = usbhsg_recip_handler_std_set_device,
.interface = usbhsg_recip_handler_std_control_done, .interface = usbhsg_recip_handler_std_control_done,
.endpoint = usbhsg_recip_handler_std_set_endpoint, .endpoint = usbhsg_recip_handler_std_set_endpoint,
}; };
...@@ -849,6 +868,7 @@ static int usbhsg_try_stop(struct usbhs_priv *priv, u32 status) ...@@ -849,6 +868,7 @@ static int usbhsg_try_stop(struct usbhs_priv *priv, u32 status)
gpriv->gadget.speed = USB_SPEED_UNKNOWN; gpriv->gadget.speed = USB_SPEED_UNKNOWN;
/* disable sys */ /* disable sys */
usbhs_sys_set_test_mode(priv, 0);
usbhs_sys_function_ctrl(priv, 0); usbhs_sys_function_ctrl(priv, 0);
usbhsg_pipe_disable(dcp); usbhsg_pipe_disable(dcp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment