diff options
author | Johan Hovold <johan@hovoldconsulting.com> | 2016-05-11 11:17:56 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@google.com> | 2016-05-13 16:30:05 +0300 |
commit | ca1f8f809024db5fb1434d7e864a356fd5132c03 (patch) | |
tree | af90354353b00609bcad5cd7c6cb403605450b6c | |
parent | 0e9b41ab98ec8065263e6def8baebff1c1cd2c31 (diff) | |
download | linux-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.h | 6 | ||||
-rw-r--r-- | drivers/staging/greybus/operation.c | 8 |
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; |