greybus: control: implement disconnecting operation

Implement the new disconnecting control operation needed for proper
connection tear down.

Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Johan Hovold 2016-05-27 17:26:26 +02:00 committed by Greg Kroah-Hartman
parent aca7aab39a
commit 197616e227
3 changed files with 20 additions and 0 deletions

View File

@ -149,6 +149,18 @@ int gb_control_disconnected_operation(struct gb_control *control, u16 cport_id)
sizeof(request), NULL, 0); sizeof(request), NULL, 0);
} }
int gb_control_disconnecting_operation(struct gb_control *control,
u16 cport_id)
{
struct gb_control_disconnecting_request request;
request.cport_id = cpu_to_le16(cport_id);
return gb_operation_sync(control->connection,
GB_CONTROL_TYPE_DISCONNECTING, &request,
sizeof(request), NULL, 0);
}
int gb_control_mode_switch_operation(struct gb_control *control) int gb_control_mode_switch_operation(struct gb_control *control)
{ {
return gb_operation_unidirectional(control->connection, return gb_operation_unidirectional(control->connection,

View File

@ -36,6 +36,8 @@ void gb_control_put(struct gb_control *control);
int gb_control_get_bundle_versions(struct gb_control *control); int gb_control_get_bundle_versions(struct gb_control *control);
int gb_control_connected_operation(struct gb_control *control, u16 cport_id); int gb_control_connected_operation(struct gb_control *control, u16 cport_id);
int gb_control_disconnected_operation(struct gb_control *control, u16 cport_id); int gb_control_disconnected_operation(struct gb_control *control, u16 cport_id);
int gb_control_disconnecting_operation(struct gb_control *control,
u16 cport_id);
int gb_control_mode_switch_operation(struct gb_control *control); int gb_control_mode_switch_operation(struct gb_control *control);
int gb_control_get_manifest_size_operation(struct gb_interface *intf); int gb_control_get_manifest_size_operation(struct gb_interface *intf);
int gb_control_get_manifest_operation(struct gb_interface *intf, void *manifest, int gb_control_get_manifest_operation(struct gb_interface *intf, void *manifest,

View File

@ -123,6 +123,7 @@ struct gb_protocol_version_response {
#define GB_CONTROL_TYPE_TIMESYNC_AUTHORITATIVE 0x09 #define GB_CONTROL_TYPE_TIMESYNC_AUTHORITATIVE 0x09
/* Unused 0x0a */ /* Unused 0x0a */
#define GB_CONTROL_TYPE_BUNDLE_VERSION 0x0b #define GB_CONTROL_TYPE_BUNDLE_VERSION 0x0b
#define GB_CONTROL_TYPE_DISCONNECTING 0x0c
#define GB_CONTROL_TYPE_TIMESYNC_GET_LAST_EVENT 0x0d #define GB_CONTROL_TYPE_TIMESYNC_GET_LAST_EVENT 0x0d
#define GB_CONTROL_TYPE_MODE_SWITCH 0x0e #define GB_CONTROL_TYPE_MODE_SWITCH 0x0e
@ -160,6 +161,11 @@ struct gb_control_connected_request {
__le16 cport_id; __le16 cport_id;
} __packed; } __packed;
struct gb_control_disconnecting_request {
__le16 cport_id;
} __packed;
/* disconnecting response has no payload */
struct gb_control_disconnected_request { struct gb_control_disconnected_request {
__le16 cport_id; __le16 cport_id;
} __packed; } __packed;