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: Greg Kroah-Hartman <greg@kroah.com> Reviewed-by: Alex Elder <elder@linaro.org>
This commit is contained in:
parent
d5671a6a24
commit
ac3d249302
|
@ -42,35 +42,6 @@ struct gb_vibrator_on_request {
|
||||||
__le16 timeout_ms;
|
__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,
|
* This request only uses the connection field, and if successful,
|
||||||
* fills in the major and minor protocol version of the target.
|
* 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;
|
struct gb_vibrator_proto_version_response version_response;
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
retval = request_operation(connection,
|
retval = gb_operation_sync(connection,
|
||||||
GB_VIBRATOR_TYPE_PROTOCOL_VERSION,
|
GB_VIBRATOR_TYPE_PROTOCOL_VERSION,
|
||||||
|
NULL, 0,
|
||||||
&version_response, sizeof(version_response));
|
&version_response, sizeof(version_response));
|
||||||
if (retval)
|
if (retval)
|
||||||
return 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)
|
static int turn_on(struct gb_vibrator_device *vib, u16 timeout_ms)
|
||||||
{
|
{
|
||||||
struct gb_connection *connection = vib->connection;
|
struct gb_vibrator_on_request request;
|
||||||
struct gb_operation *operation;
|
|
||||||
struct gb_vibrator_on_request *request;
|
|
||||||
int retval;
|
|
||||||
|
|
||||||
operation = gb_operation_create(connection, GB_VIBRATOR_TYPE_ON,
|
request.timeout_ms = cpu_to_le16(timeout_ms);
|
||||||
sizeof(*request), 0);
|
return gb_operation_sync(vib->connection, GB_VIBRATOR_TYPE_ON,
|
||||||
if (!operation)
|
&request, sizeof(request), NULL, 0);
|
||||||
return -ENOMEM;
|
|
||||||
request = operation->request->payload;
|
|
||||||
request->timeout_ms = cpu_to_le16(timeout_ms);
|
|
||||||
|
|
||||||
/* 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int turn_off(struct gb_vibrator_device *vib)
|
static int turn_off(struct gb_vibrator_device *vib)
|
||||||
{
|
{
|
||||||
struct gb_connection *connection = vib->connection;
|
return gb_operation_sync(vib->connection, GB_VIBRATOR_TYPE_OFF,
|
||||||
|
NULL, 0, NULL, 0);
|
||||||
return request_operation(connection, GB_VIBRATOR_TYPE_OFF, NULL, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t timeout_store(struct device *dev, struct device_attribute *attr,
|
static ssize_t timeout_store(struct device *dev, struct device_attribute *attr,
|
||||||
|
|
Loading…
Reference in a new issue