From 9f77b80fdfeb72bdecf7855bb526ef14b6ed2ba8 Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Wed, 10 Aug 2016 12:58:46 +0200 Subject: [PATCH] greybus: control: make disconnecting a core operation Make the control-protocol disconnecting operation a "core" operation. This is needed to be able to use the operation in the new connection tear-down sequence of control connections, which moves disconnecting after the flush barrier. Signed-off-by: Johan Hovold Reviewed-by: Viresh Kumar Acked-by: Sandeep Patil Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/control.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/drivers/staging/greybus/control.c b/drivers/staging/greybus/control.c index 658f8a641ee2..4716190e740a 100644 --- a/drivers/staging/greybus/control.c +++ b/drivers/staging/greybus/control.c @@ -152,13 +152,29 @@ int gb_control_disconnected_operation(struct gb_control *control, u16 cport_id) int gb_control_disconnecting_operation(struct gb_control *control, u16 cport_id) { - struct gb_control_disconnecting_request request; + struct gb_control_disconnecting_request *request; + struct gb_operation *operation; + int ret; - request.cport_id = cpu_to_le16(cport_id); + operation = gb_operation_create_core(control->connection, + GB_CONTROL_TYPE_DISCONNECTING, + sizeof(*request), 0, 0, + GFP_KERNEL); + if (!operation) + return -ENOMEM; - return gb_operation_sync(control->connection, - GB_CONTROL_TYPE_DISCONNECTING, &request, - sizeof(request), NULL, 0); + request = operation->request->payload; + request->cport_id = cpu_to_le16(cport_id); + + ret = gb_operation_request_send_sync(operation); + if (ret) { + dev_err(&control->dev, "failed to send disconnecting: %d\n", + ret); + } + + gb_operation_put(operation); + + return ret; } int gb_control_mode_switch_operation(struct gb_control *control)