Commit ac3d2493 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

greybus: vibrator-gb: convert to use gb_operation_sync

This converts the vibrator protocol driver to use gb_operation_sync,
removing the hand-rolled version of the same function, as well as
removing an open-coded version for a request when turning on the
vibrator motor.
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
Reviewed-by: default avatarAlex Elder <elder@linaro.org>
parent d5671a6a
......@@ -42,35 +42,6 @@ struct gb_vibrator_on_request {
__le16 timeout_ms;
};
/*
* The get_version and turn_off vibrator operations have no payload.
* This function implements these requests by allowing the caller to
* supply a buffer into which the operation response should be
* copied. The turn_off operation, there is no response either.
* If there is an error, the response buffer is left alone.
*/
static int request_operation(struct gb_connection *connection, int type,
void *response, int response_size)
{
struct gb_operation *operation;
int ret;
operation = gb_operation_create(connection, type, 0, response_size);
if (!operation)
return -ENOMEM;
/* Synchronous operation--no callback */
ret = gb_operation_request_send(operation, NULL);
if (ret)
pr_err("version operation failed (%d)\n", ret);
else if (response_size && response)
memcpy(response, operation->response->payload,
response_size);
gb_operation_destroy(operation);
return ret;
}
/*
* This request only uses the connection field, and if successful,
* fills in the major and minor protocol version of the target.
......@@ -81,8 +52,9 @@ static int get_version(struct gb_vibrator_device *vib)
struct gb_vibrator_proto_version_response version_response;
int retval;
retval = request_operation(connection,
retval = gb_operation_sync(connection,
GB_VIBRATOR_TYPE_PROTOCOL_VERSION,
NULL, 0,
&version_response, sizeof(version_response));
if (retval)
return retval;
......@@ -101,33 +73,17 @@ static int get_version(struct gb_vibrator_device *vib)
static int turn_on(struct gb_vibrator_device *vib, u16 timeout_ms)
{
struct gb_connection *connection = vib->connection;
struct gb_operation *operation;
struct gb_vibrator_on_request *request;
int retval;
operation = gb_operation_create(connection, GB_VIBRATOR_TYPE_ON,
sizeof(*request), 0);
if (!operation)
return -ENOMEM;
request = operation->request->payload;
request->timeout_ms = cpu_to_le16(timeout_ms);
struct gb_vibrator_on_request request;
/* Synchronous operation--no callback */
retval = gb_operation_request_send(operation, NULL);
if (retval)
dev_err(&connection->dev,
"send data operation failed (%d)\n", retval);
gb_operation_destroy(operation);
return retval;
request.timeout_ms = cpu_to_le16(timeout_ms);
return gb_operation_sync(vib->connection, GB_VIBRATOR_TYPE_ON,
&request, sizeof(request), NULL, 0);
}
static int turn_off(struct gb_vibrator_device *vib)
{
struct gb_connection *connection = vib->connection;
return request_operation(connection, GB_VIBRATOR_TYPE_OFF, NULL, 0);
return gb_operation_sync(vib->connection, GB_VIBRATOR_TYPE_OFF,
NULL, 0, NULL, 0);
}
static ssize_t timeout_store(struct device *dev, struct device_attribute *attr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment