Commit 9447082a authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab

[media] smiapp: Implement power-on and power-off sequences without runtime PM

Power on the sensor when the module is loaded and power it off when it is
removed.
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent d183e4ef
...@@ -2741,8 +2741,6 @@ static const struct v4l2_subdev_internal_ops smiapp_internal_ops = { ...@@ -2741,8 +2741,6 @@ static const struct v4l2_subdev_internal_ops smiapp_internal_ops = {
* I2C Driver * I2C Driver
*/ */
#ifdef CONFIG_PM
static int smiapp_suspend(struct device *dev) static int smiapp_suspend(struct device *dev)
{ {
struct i2c_client *client = to_i2c_client(dev); struct i2c_client *client = to_i2c_client(dev);
...@@ -2783,13 +2781,6 @@ static int smiapp_resume(struct device *dev) ...@@ -2783,13 +2781,6 @@ static int smiapp_resume(struct device *dev)
return rval; return rval;
} }
#else
#define smiapp_suspend NULL
#define smiapp_resume NULL
#endif /* CONFIG_PM */
static struct smiapp_hwconfig *smiapp_get_hwconfig(struct device *dev) static struct smiapp_hwconfig *smiapp_get_hwconfig(struct device *dev)
{ {
struct smiapp_hwconfig *hwcfg; struct smiapp_hwconfig *hwcfg;
...@@ -2913,13 +2904,9 @@ static int smiapp_probe(struct i2c_client *client, ...@@ -2913,13 +2904,9 @@ static int smiapp_probe(struct i2c_client *client,
if (IS_ERR(sensor->xshutdown)) if (IS_ERR(sensor->xshutdown))
return PTR_ERR(sensor->xshutdown); return PTR_ERR(sensor->xshutdown);
pm_runtime_enable(&client->dev); rval = smiapp_power_on(&client->dev);
if (rval < 0)
rval = pm_runtime_get_sync(&client->dev); return rval;
if (rval < 0) {
rval = -ENODEV;
goto out_power_off;
}
rval = smiapp_identify_module(sensor); rval = smiapp_identify_module(sensor);
if (rval) { if (rval) {
...@@ -3100,6 +3087,9 @@ static int smiapp_probe(struct i2c_client *client, ...@@ -3100,6 +3087,9 @@ static int smiapp_probe(struct i2c_client *client,
if (rval < 0) if (rval < 0)
goto out_media_entity_cleanup; goto out_media_entity_cleanup;
pm_runtime_set_active(&client->dev);
pm_runtime_get_noresume(&client->dev);
pm_runtime_enable(&client->dev);
pm_runtime_set_autosuspend_delay(&client->dev, 1000); pm_runtime_set_autosuspend_delay(&client->dev, 1000);
pm_runtime_use_autosuspend(&client->dev); pm_runtime_use_autosuspend(&client->dev);
pm_runtime_put_autosuspend(&client->dev); pm_runtime_put_autosuspend(&client->dev);
...@@ -3113,8 +3103,7 @@ static int smiapp_probe(struct i2c_client *client, ...@@ -3113,8 +3103,7 @@ static int smiapp_probe(struct i2c_client *client,
smiapp_cleanup(sensor); smiapp_cleanup(sensor);
out_power_off: out_power_off:
pm_runtime_put(&client->dev); smiapp_power_off(&client->dev);
pm_runtime_disable(&client->dev);
return rval; return rval;
} }
...@@ -3127,8 +3116,10 @@ static int smiapp_remove(struct i2c_client *client) ...@@ -3127,8 +3116,10 @@ static int smiapp_remove(struct i2c_client *client)
v4l2_async_unregister_subdev(subdev); v4l2_async_unregister_subdev(subdev);
pm_runtime_suspend(&client->dev);
pm_runtime_disable(&client->dev); pm_runtime_disable(&client->dev);
if (!pm_runtime_status_suspended(&client->dev))
smiapp_power_off(&client->dev);
pm_runtime_set_suspended(&client->dev);
for (i = 0; i < sensor->ssds_used; i++) { for (i = 0; i < sensor->ssds_used; i++) {
v4l2_device_unregister_subdev(&sensor->ssds[i].sd); v4l2_device_unregister_subdev(&sensor->ssds[i].sd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment