summaryrefslogtreecommitdiff
path: root/drivers/staging/greybus/i2c.c
diff options
context:
space:
mode:
authorDavid Lin <dtwlin@google.com>2016-07-14 15:13:00 -0500
committerAlex Elder <elder@linaro.org>2016-07-14 16:53:55 -0500
commitc0e72f6af7363de8868e2847450a828f27e96c81 (patch)
treeb1dfb50119955fbcacc2b02a80276bb86c8d2bcc /drivers/staging/greybus/i2c.c
parentaf5dc7f8c0f4b71fa53db2e8d6f18c26048a182f (diff)
greybus: i2c: add runtime pm support
Add runtime pm support to camera i2c bridged phy device class driver Testing Done: - Passed #gb_test.sh -v -t i2c Signed-off-by: David Lin <dtwlin@google.com> Signed-off-by: Axel Haslam <haslam_axel@projectara.com> Reviewed-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Alex Elder <elder@linaro.org>
Diffstat (limited to 'drivers/staging/greybus/i2c.c')
-rw-r--r--drivers/staging/greybus/i2c.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/staging/greybus/i2c.c b/drivers/staging/greybus/i2c.c
index 2541bdbb9dd9..c2a50087000c 100644
--- a/drivers/staging/greybus/i2c.c
+++ b/drivers/staging/greybus/i2c.c
@@ -176,6 +176,10 @@ static int gb_i2c_transfer_operation(struct gb_i2c_device *gb_i2c_dev,
if (!operation)
return -ENOMEM;
+ ret = gbphy_runtime_get_sync(gb_i2c_dev->gbphy_dev);
+ if (ret)
+ goto exit_operation_put;
+
ret = gb_operation_request_send_sync(operation);
if (!ret) {
struct gb_i2c_transfer_response *response;
@@ -187,6 +191,9 @@ static int gb_i2c_transfer_operation(struct gb_i2c_device *gb_i2c_dev,
dev_err(dev, "transfer operation failed (%d)\n", ret);
}
+ gbphy_runtime_put_autosuspend(gb_i2c_dev->gbphy_dev);
+
+exit_operation_put:
gb_operation_put(operation);
return ret;
@@ -290,6 +297,7 @@ static int gb_i2c_probe(struct gbphy_device *gbphy_dev,
if (ret)
goto exit_connection_disable;
+ gbphy_runtime_put_autosuspend(gbphy_dev);
return 0;
exit_connection_disable:
@@ -306,6 +314,11 @@ static void gb_i2c_remove(struct gbphy_device *gbphy_dev)
{
struct gb_i2c_device *gb_i2c_dev = gb_gbphy_get_data(gbphy_dev);
struct gb_connection *connection = gb_i2c_dev->connection;
+ int ret;
+
+ ret = gbphy_runtime_get_sync(gbphy_dev);
+ if (ret)
+ gbphy_runtime_get_noresume(gbphy_dev);
i2c_del_adapter(&gb_i2c_dev->adapter);
gb_connection_disable(connection);