Commit e70055b3 authored by Fabien Parent's avatar Fabien Parent Committed by Greg Kroah-Hartman
Browse files

greybus: es2: implement the fct flow control requests



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

Reviewed-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarFabien Parent <fparent@baylibre.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 48a17303
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -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 */