summaryrefslogtreecommitdiffstats
path: root/drivers/staging
diff options
context:
space:
mode:
authorDavid Lin <dtwlin@google.com>2016-07-07 22:07:00 -0500
committerAlex Elder <elder@linaro.org>2016-07-08 14:56:28 -0500
commit30ea26bdd403396c62d6c9fa26477ca1f7af5676 (patch)
tree3cc7e4a5b537d6795bb52678457805216e8e6f54 /drivers/staging
parentf53be0eaf0603324ea90eb352df0ffa18dde646a (diff)
downloadop-kernel-dev-30ea26bdd403396c62d6c9fa26477ca1f7af5676.zip
op-kernel-dev-30ea26bdd403396c62d6c9fa26477ca1f7af5676.tar.gz
greybus: control: add interface deactivate prepare operation
Add the AP implementation for the Greybus Control Interface Deactivate Prepare Operation. AP uses this Operation during the Power Down transition to request the bridge to power down after it detects a subsequent UniPro link hibernation. Signed-off-by: David Lin <dtwlin@google.com> Reviewed-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Alex Elder <elder@linaro.org>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/greybus/control.c23
-rw-r--r--drivers/staging/greybus/control.h1
-rw-r--r--drivers/staging/greybus/greybus_protocols.h1
3 files changed, 25 insertions, 0 deletions
diff --git a/drivers/staging/greybus/control.c b/drivers/staging/greybus/control.c
index 252352ce..a1c78fc6 100644
--- a/drivers/staging/greybus/control.c
+++ b/drivers/staging/greybus/control.c
@@ -383,6 +383,29 @@ int gb_control_interface_suspend_prepare(struct gb_control *control)
return 0;
}
+int gb_control_interface_deactivate_prepare(struct gb_control *control)
+{
+ struct gb_control_intf_pm_response response;
+ int ret;
+
+ ret = gb_operation_sync(control->connection,
+ GB_CONTROL_TYPE_INTF_DEACTIVATE_PREPARE, NULL,
+ 0, &response, sizeof(response));
+ if (ret) {
+ dev_err(&control->dev, "failed to send interface deactivate prepare: %d\n",
+ ret);
+ return ret;
+ }
+
+ if (response.status != GB_CONTROL_INTF_PM_OK) {
+ dev_err(&control->dev, "interface error while preparing deactivate: %d\n",
+ response.status);
+ return gb_control_interface_pm_status_map(response.status);
+ }
+
+ return 0;
+}
+
static ssize_t vendor_string_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
diff --git a/drivers/staging/greybus/control.h b/drivers/staging/greybus/control.h
index bc32ca7..2f76ae4 100644
--- a/drivers/staging/greybus/control.h
+++ b/drivers/staging/greybus/control.h
@@ -57,4 +57,5 @@ int gb_control_bundle_resume(struct gb_control *control, u8 bundle_id);
int gb_control_bundle_deactivate(struct gb_control *control, u8 bundle_id);
int gb_control_bundle_activate(struct gb_control *control, u8 bundle_id);
int gb_control_interface_suspend_prepare(struct gb_control *control);
+int gb_control_interface_deactivate_prepare(struct gb_control *control);
#endif /* __CONTROL_H */
diff --git a/drivers/staging/greybus/greybus_protocols.h b/drivers/staging/greybus/greybus_protocols.h
index cd64a99..10209ae 100644
--- a/drivers/staging/greybus/greybus_protocols.h
+++ b/drivers/staging/greybus/greybus_protocols.h
@@ -131,6 +131,7 @@ struct gb_protocol_version_response {
#define GB_CONTROL_TYPE_BUNDLE_DEACTIVATE 0x11
#define GB_CONTROL_TYPE_BUNDLE_ACTIVATE 0x12
#define GB_CONTROL_TYPE_INTF_SUSPEND_PREPARE 0x13
+#define GB_CONTROL_TYPE_INTF_DEACTIVATE_PREPARE 0x14
struct gb_control_version_request {
__u8 major;
OpenPOWER on IntegriCloud