summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/control.c
diff options
context:
space:
mode:
authorJohan Hovold <johan@hovoldconsulting.com>2016-07-21 14:24:11 +0200
committerGreg Kroah-Hartman <gregkh@google.com>2016-07-21 16:36:48 -0700
commit2358024b67fccc07b95c5d8e637927acdb8e30fa (patch)
tree4374a0c81ebda706e2e2e0f9e3a2042d7042a9c9 /drivers/staging/greybus/control.c
parent350e3ac2ceb696435efbbe688e6e912801a4b8c4 (diff)
downloadlinux-2358024b67fccc07b95c5d8e637927acdb8e30fa.tar.gz
linux-2358024b67fccc07b95c5d8e637927acdb8e30fa.tar.bz2
linux-2358024b67fccc07b95c5d8e637927acdb8e30fa.zip
greybus: control: suppress bundle_activate() for bootrom
We always knew backward compatibility with the ES3 bootrom, which was finalised about a year ago, would be a pain. Here we go again. The bootrom does not support control requests added after it was burnt into ROM for obvious reasons. This means that we need to suppress sending the new bundle_activate() operation to any interface executing the legacy bootrom. Do so by adding a new NO_PM interface quirk (we can use the control-protocol version for this later once we bump it). Note that the interface-disable path (e.g. for power down) is already handled by the FORCED_DISABLE quirk, and that the suspend/resume paths are currently avoided by making sure that the bootrom bundle never suspends. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Acked-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> Tested-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/control.c')
-rw-r--r--drivers/staging/greybus/control.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/staging/greybus/control.c b/drivers/staging/greybus/control.c
index 37a30b3075ce..a08a79da45d7 100644
--- a/drivers/staging/greybus/control.c
+++ b/drivers/staging/greybus/control.c
@@ -329,6 +329,9 @@ int gb_control_bundle_activate(struct gb_control *control, u8 bundle_id)
struct gb_control_bundle_pm_response response;
int ret;
+ if (!control->has_bundle_activate)
+ return 0;
+
request.bundle_id = bundle_id;
ret = gb_operation_sync(control->connection,
GB_CONTROL_TYPE_BUNDLE_ACTIVATE, &request,
@@ -528,6 +531,10 @@ int gb_control_enable(struct gb_control *control)
if (control->protocol_major > 0 || control->protocol_minor > 1)
control->has_bundle_version = true;
+ /* FIXME: use protocol version instead */
+ if (!(control->intf->quirks & GB_INTERFACE_QUIRK_NO_PM))
+ control->has_bundle_activate = true;
+
return 0;
err_disable_connection: