summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Hovold <johan@hovoldconsulting.com>2016-05-11 11:17:56 +0300
committerGreg Kroah-Hartman <gregkh@google.com>2016-05-13 16:30:05 +0300
commitca1f8f809024db5fb1434d7e864a356fd5132c03 (patch)
treeaf90354353b00609bcad5cd7c6cb403605450b6c
parent0e9b41ab98ec8065263e6def8baebff1c1cd2c31 (diff)
downloadlinux-ca1f8f809024db5fb1434d7e864a356fd5132c03.tar.xz
greybus: connection: add offloaded connection flag
Add an offloaded connection flag, which is used to mark a connection as offloaded and prevent drivers from initiating operation over it. This will be used for the audio and camera data connections. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
-rw-r--r--drivers/staging/greybus/connection.h6
-rw-r--r--drivers/staging/greybus/operation.c8
2 files changed, 12 insertions, 2 deletions
diff --git a/drivers/staging/greybus/connection.h b/drivers/staging/greybus/connection.h
index bb25abf188f3..c740c3816f0d 100644
--- a/drivers/staging/greybus/connection.h
+++ b/drivers/staging/greybus/connection.h
@@ -15,6 +15,7 @@
#define GB_CONNECTION_FLAG_CSD BIT(0)
#define GB_CONNECTION_FLAG_NO_FLOWCTRL BIT(1)
+#define GB_CONNECTION_FLAG_OFFLOADED BIT(2)
enum gb_connection_state {
GB_CONNECTION_STATE_INVALID = 0,
@@ -95,6 +96,11 @@ gb_connection_flow_control_disabled(struct gb_connection *connection)
return connection->flags & GB_CONNECTION_FLAG_NO_FLOWCTRL;
}
+static inline bool gb_connection_is_offloaded(struct gb_connection *connection)
+{
+ return connection->flags & GB_CONNECTION_FLAG_OFFLOADED;
+}
+
static inline void *gb_connection_get_data(struct gb_connection *connection)
{
return connection->private;
diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c
index 62d0c4546d09..716627e863c0 100644
--- a/drivers/staging/greybus/operation.c
+++ b/drivers/staging/greybus/operation.c
@@ -654,6 +654,9 @@ int gb_operation_request_send(struct gb_operation *operation,
unsigned int cycle;
int ret;
+ if (gb_connection_is_offloaded(connection))
+ return -EBUSY;
+
if (!callback)
return -EINVAL;
@@ -950,8 +953,9 @@ void gb_connection_recv(struct gb_connection *connection,
size_t msg_size;
u16 operation_id;
- if (connection->state != GB_CONNECTION_STATE_ENABLED &&
- connection->state != GB_CONNECTION_STATE_ENABLED_TX) {
+ if ((connection->state != GB_CONNECTION_STATE_ENABLED &&
+ connection->state != GB_CONNECTION_STATE_ENABLED_TX) ||
+ gb_connection_is_offloaded(connection)) {
dev_warn(dev, "%s: dropping %zu received bytes\n",
connection->name, size);
return;