greybus: es2: implement the fct flow control requests

Implement the control requests enabling/disabling the flow of FCT on APBA.

Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Fabien Parent <fparent@baylibre.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Fabien Parent 2016-02-23 18:46:10 +01:00 committed by Greg Kroah-Hartman
parent 48a1730305
commit e70055b3fb

View file

@ -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 */