usb: gadget: renesas_usbhs: modify pipe sequence settings
renesas_usbhs can manually set DATA0/DATA1. This patch is prepare for mod_host support Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
Родитель
654c35ab5e
Коммит
6e6db82ba9
|
@ -187,8 +187,9 @@ struct usbhs_priv;
|
|||
#define BSTS (1 << 15) /* Buffer Status */
|
||||
#define SUREQ (1 << 14) /* Sending SETUP Token */
|
||||
#define CSSTS (1 << 12) /* CSSTS Status */
|
||||
#define SQCLR (1 << 8) /* Toggle Bit Clear */
|
||||
#define ACLRM (1 << 9) /* Buffer Auto-Clear Mode */
|
||||
#define SQCLR (1 << 8) /* Toggle Bit Clear */
|
||||
#define SQSET (1 << 7) /* Toggle Bit Set */
|
||||
#define PBUSY (1 << 5) /* Pipe Busy */
|
||||
#define PID_MASK (0x3) /* Response PID */
|
||||
#define PID_NAK 0
|
||||
|
|
|
@ -265,7 +265,7 @@ static int usbhsg_recip_handler_std_clear_endpoint(struct usbhs_priv *priv,
|
|||
|
||||
if (!usbhsg_status_has(gpriv, USBHSG_STATUS_WEDGE)) {
|
||||
usbhs_pipe_disable(pipe);
|
||||
usbhs_pipe_clear_sequence(pipe);
|
||||
usbhs_pipe_sequence_data0(pipe);
|
||||
usbhs_pipe_enable(pipe);
|
||||
}
|
||||
|
||||
|
@ -479,7 +479,7 @@ static int usbhsg_ep_enable(struct usb_ep *ep,
|
|||
*/
|
||||
if (uep->pipe) {
|
||||
usbhs_pipe_clear(uep->pipe);
|
||||
usbhs_pipe_clear_sequence(uep->pipe);
|
||||
usbhs_pipe_sequence_data0(uep->pipe);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -471,9 +471,12 @@ 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)
|
||||
void usbhs_pipe_data_sequence(struct usbhs_pipe *pipe, int data)
|
||||
{
|
||||
usbhsp_pipectrl_set(pipe, SQCLR, SQCLR);
|
||||
u16 mask = (SQCLR | SQSET);
|
||||
u16 val = (data) ? SQSET : SQCLR;
|
||||
|
||||
usbhsp_pipectrl_set(pipe, mask, val);
|
||||
}
|
||||
|
||||
void usbhs_pipe_clear(struct usbhs_pipe *pipe)
|
||||
|
@ -584,7 +587,7 @@ struct usbhs_pipe *usbhs_pipe_malloc(struct usbhs_priv *priv,
|
|||
usbhsp_pipe_cfg_set(pipe, 0xFFFF, pipecfg);
|
||||
usbhsp_pipe_buf_set(pipe, 0xFFFF, pipebuf);
|
||||
|
||||
usbhs_pipe_clear_sequence(pipe);
|
||||
usbhs_pipe_sequence_data0(pipe);
|
||||
|
||||
dev_dbg(dev, "enable pipe %d : %s (%s)\n",
|
||||
usbhs_pipe_number(pipe),
|
||||
|
|
|
@ -82,7 +82,6 @@ int usbhs_pipe_is_dir_host(struct usbhs_pipe *pipe);
|
|||
void usbhs_pipe_init(struct usbhs_priv *priv,
|
||||
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);
|
||||
void usbhs_pipe_clear(struct usbhs_pipe *pipe);
|
||||
int usbhs_pipe_is_accessible(struct usbhs_pipe *pipe);
|
||||
void usbhs_pipe_enable(struct usbhs_pipe *pipe);
|
||||
|
@ -92,6 +91,10 @@ void usbhs_pipe_select_fifo(struct usbhs_pipe *pipe, struct usbhs_fifo *fifo);
|
|||
void usbhs_pipe_config_update(struct usbhs_pipe *pipe, u16 devsel,
|
||||
u16 epnum, u16 maxp);
|
||||
|
||||
#define usbhs_pipe_sequence_data0(pipe) usbhs_pipe_data_sequence(pipe, 0)
|
||||
#define usbhs_pipe_sequence_data1(pipe) usbhs_pipe_data_sequence(pipe, 1)
|
||||
void usbhs_pipe_data_sequence(struct usbhs_pipe *pipe, int data);
|
||||
|
||||
#define usbhs_pipe_to_priv(p) ((p)->priv)
|
||||
#define usbhs_pipe_number(p) (int)((p) - (p)->priv->pipe_info.pipe)
|
||||
#define usbhs_pipe_is_dcp(p) ((p)->priv->pipe_info.pipe == (p))
|
||||
|
|
Загрузка…
Ссылка в новой задаче