diff options
author | David Lin <dtwlin@google.com> | 2016-07-07 22:07:00 -0500 |
---|---|---|
committer | Alex Elder <elder@linaro.org> | 2016-07-08 14:56:28 -0500 |
commit | 30ea26bdd403396c62d6c9fa26477ca1f7af5676 (patch) | |
tree | 3cc7e4a5b537d6795bb52678457805216e8e6f54 /drivers/staging/greybus/control.c | |
parent | f53be0eaf0603324ea90eb352df0ffa18dde646a (diff) | |
download | op-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/greybus/control.c')
-rw-r--r-- | drivers/staging/greybus/control.c | 23 |
1 files changed, 23 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) { |