From c0e72f6af7363de8868e2847450a828f27e96c81 Mon Sep 17 00:00:00 2001 From: David Lin Date: Thu, 14 Jul 2016 15:13:00 -0500 Subject: [PATCH] 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 Signed-off-by: Axel Haslam Reviewed-by: Johan Hovold Signed-off-by: Alex Elder --- drivers/staging/greybus/i2c.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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); -- 2.45.2