From: Johan Hovold <johan@hovoldconsulting.com>
Date: Tue, 14 Jul 2015 13:43:37 +0000 (+0200)
Subject: greybus: operation: add gb_operation_sync_timeout helper
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=129a06f541d3ff4228589b4b9f0a4681dafb0042;p=linux.git

greybus: operation: add gb_operation_sync_timeout helper

Add gb_operation_sync_timeout convenience function, which allows drivers
to configure the operation timeout.

Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
---

diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c
index 63c4a5b8b0f17..a99505cc21fa4 100644
--- a/drivers/staging/greybus/operation.c
+++ b/drivers/staging/greybus/operation.c
@@ -978,6 +978,7 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno)
  * @request_size: size of @request
  * @response: pointer to a memory buffer to copy the response to
  * @response_size: the size of @response.
+ * @timeout: operation timeout in milliseconds
  *
  * This function implements a simple synchronous Greybus operation.  It sends
  * the provided operation request and waits (sleeps) until the corresponding
@@ -992,9 +993,10 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno)
  *
  * If there is an error, the response buffer is left alone.
  */
-int gb_operation_sync(struct gb_connection *connection, int type,
-		      void *request, int request_size,
-		      void *response, int response_size)
+int gb_operation_sync_timeout(struct gb_connection *connection, int type,
+				void *request, int request_size,
+				void *response, int response_size,
+				unsigned int timeout)
 {
 	struct gb_operation *operation;
 	int ret;
@@ -1012,7 +1014,7 @@ int gb_operation_sync(struct gb_connection *connection, int type,
 	if (request_size)
 		memcpy(operation->request->payload, request, request_size);
 
-	ret = gb_operation_request_send_sync(operation);
+	ret = gb_operation_request_send_sync_timeout(operation, timeout);
 	if (ret) {
 		dev_err(&connection->dev, "synchronous operation failed: %d\n",
 			ret);
@@ -1026,7 +1028,7 @@ int gb_operation_sync(struct gb_connection *connection, int type,
 
 	return ret;
 }
-EXPORT_SYMBOL_GPL(gb_operation_sync);
+EXPORT_SYMBOL_GPL(gb_operation_sync_timeout);
 
 int __init gb_operation_init(void)
 {
diff --git a/drivers/staging/greybus/operation.h b/drivers/staging/greybus/operation.h
index f06dd11e0afb4..6854703494606 100644
--- a/drivers/staging/greybus/operation.h
+++ b/drivers/staging/greybus/operation.h
@@ -186,9 +186,19 @@ void gb_operation_cancel_incoming(struct gb_operation *operation, int errno);
 void greybus_message_sent(struct greybus_host_device *hd,
 				struct gb_message *message, int status);
 
-int gb_operation_sync(struct gb_connection *connection, int type,
+int gb_operation_sync_timeout(struct gb_connection *connection, int type,
+				void *request, int request_size,
+				void *response, int response_size,
+				unsigned int timeout);
+
+static inline int gb_operation_sync(struct gb_connection *connection, int type,
 		      void *request, int request_size,
-		      void *response, int response_size);
+		      void *response, int response_size)
+{
+	return gb_operation_sync_timeout(connection, type,
+			request, request_size, response, response_size,
+			GB_OPERATION_TIMEOUT_DEFAULT);
+}
 
 int gb_operation_init(void);
 void gb_operation_exit(void);