提交 e70055b3 编写于 作者: F Fabien Parent 提交者: Greg Kroah-Hartman

greybus: es2: implement the fct flow control requests

Implement the control requests enabling/disabling the flow of FCT on APBA.
Reviewed-by: NJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: NFabien Parent <fparent@baylibre.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@google.com>
上级 48a17303
......@@ -574,6 +574,41 @@ static int latency_tag_disable(struct gb_host_device *hd, u16 cport_id)
return retval;
}
static int fct_flow_enable(struct gb_host_device *hd, u16 cport_id)
{
int retval;
struct es2_ap_dev *es2 = hd_to_es2(hd);
struct usb_device *udev = es2->usb_dev;
retval = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
GB_APB_REQUEST_FCT_FLOW_EN,
USB_DIR_OUT | USB_TYPE_VENDOR |
USB_RECIP_INTERFACE, cport_id, 0, NULL,
0, ES2_TIMEOUT);
if (retval < 0)
dev_err(&udev->dev, "Cannot enable FCT flow for cport %u: %d\n",
cport_id, retval);
return retval;
}
static int fct_flow_disable(struct gb_host_device *hd, u16 cport_id)
{
int retval;
struct es2_ap_dev *es2 = hd_to_es2(hd);
struct usb_device *udev = es2->usb_dev;
retval = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
GB_APB_REQUEST_FCT_FLOW_DIS,
USB_DIR_OUT | USB_TYPE_VENDOR |
USB_RECIP_INTERFACE, cport_id, 0, NULL,
0, ES2_TIMEOUT);
if (retval < 0)
dev_err(&udev->dev,
"Cannot disable FCT flow for cport %u: %d\n",
cport_id, retval);
return retval;
}
static struct gb_hd_driver es2_driver = {
.hd_priv_size = sizeof(struct es2_ap_dev),
.message_send = message_send,
......@@ -582,6 +617,8 @@ static struct gb_hd_driver es2_driver = {
.latency_tag_enable = latency_tag_enable,
.latency_tag_disable = latency_tag_disable,
.output = output,
.fct_flow_enable = fct_flow_enable,
.fct_flow_disable = fct_flow_disable,
};
/* Common function to report consistent warnings based on URB status */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册