|
@@ -698,101 +698,6 @@ static void i2c_device_shutdown(struct device *dev)
|
|
|
driver->shutdown(client);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_PM_SLEEP
|
|
|
-static int i2c_legacy_suspend(struct device *dev, pm_message_t mesg)
|
|
|
-{
|
|
|
- struct i2c_client *client = i2c_verify_client(dev);
|
|
|
- struct i2c_driver *driver;
|
|
|
-
|
|
|
- if (!client || !dev->driver)
|
|
|
- return 0;
|
|
|
- driver = to_i2c_driver(dev->driver);
|
|
|
- if (!driver->suspend)
|
|
|
- return 0;
|
|
|
- return driver->suspend(client, mesg);
|
|
|
-}
|
|
|
-
|
|
|
-static int i2c_legacy_resume(struct device *dev)
|
|
|
-{
|
|
|
- struct i2c_client *client = i2c_verify_client(dev);
|
|
|
- struct i2c_driver *driver;
|
|
|
-
|
|
|
- if (!client || !dev->driver)
|
|
|
- return 0;
|
|
|
- driver = to_i2c_driver(dev->driver);
|
|
|
- if (!driver->resume)
|
|
|
- return 0;
|
|
|
- return driver->resume(client);
|
|
|
-}
|
|
|
-
|
|
|
-static int i2c_device_pm_suspend(struct device *dev)
|
|
|
-{
|
|
|
- const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
|
|
|
-
|
|
|
- if (pm)
|
|
|
- return pm_generic_suspend(dev);
|
|
|
- else
|
|
|
- return i2c_legacy_suspend(dev, PMSG_SUSPEND);
|
|
|
-}
|
|
|
-
|
|
|
-static int i2c_device_pm_resume(struct device *dev)
|
|
|
-{
|
|
|
- const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
|
|
|
-
|
|
|
- if (pm)
|
|
|
- return pm_generic_resume(dev);
|
|
|
- else
|
|
|
- return i2c_legacy_resume(dev);
|
|
|
-}
|
|
|
-
|
|
|
-static int i2c_device_pm_freeze(struct device *dev)
|
|
|
-{
|
|
|
- const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
|
|
|
-
|
|
|
- if (pm)
|
|
|
- return pm_generic_freeze(dev);
|
|
|
- else
|
|
|
- return i2c_legacy_suspend(dev, PMSG_FREEZE);
|
|
|
-}
|
|
|
-
|
|
|
-static int i2c_device_pm_thaw(struct device *dev)
|
|
|
-{
|
|
|
- const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
|
|
|
-
|
|
|
- if (pm)
|
|
|
- return pm_generic_thaw(dev);
|
|
|
- else
|
|
|
- return i2c_legacy_resume(dev);
|
|
|
-}
|
|
|
-
|
|
|
-static int i2c_device_pm_poweroff(struct device *dev)
|
|
|
-{
|
|
|
- const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
|
|
|
-
|
|
|
- if (pm)
|
|
|
- return pm_generic_poweroff(dev);
|
|
|
- else
|
|
|
- return i2c_legacy_suspend(dev, PMSG_HIBERNATE);
|
|
|
-}
|
|
|
-
|
|
|
-static int i2c_device_pm_restore(struct device *dev)
|
|
|
-{
|
|
|
- const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
|
|
|
-
|
|
|
- if (pm)
|
|
|
- return pm_generic_restore(dev);
|
|
|
- else
|
|
|
- return i2c_legacy_resume(dev);
|
|
|
-}
|
|
|
-#else /* !CONFIG_PM_SLEEP */
|
|
|
-#define i2c_device_pm_suspend NULL
|
|
|
-#define i2c_device_pm_resume NULL
|
|
|
-#define i2c_device_pm_freeze NULL
|
|
|
-#define i2c_device_pm_thaw NULL
|
|
|
-#define i2c_device_pm_poweroff NULL
|
|
|
-#define i2c_device_pm_restore NULL
|
|
|
-#endif /* !CONFIG_PM_SLEEP */
|
|
|
-
|
|
|
static void i2c_client_dev_release(struct device *dev)
|
|
|
{
|
|
|
kfree(to_i2c_client(dev));
|
|
@@ -837,27 +742,12 @@ static const struct attribute_group *i2c_dev_attr_groups[] = {
|
|
|
NULL
|
|
|
};
|
|
|
|
|
|
-static const struct dev_pm_ops i2c_device_pm_ops = {
|
|
|
- .suspend = i2c_device_pm_suspend,
|
|
|
- .resume = i2c_device_pm_resume,
|
|
|
- .freeze = i2c_device_pm_freeze,
|
|
|
- .thaw = i2c_device_pm_thaw,
|
|
|
- .poweroff = i2c_device_pm_poweroff,
|
|
|
- .restore = i2c_device_pm_restore,
|
|
|
- SET_RUNTIME_PM_OPS(
|
|
|
- pm_generic_runtime_suspend,
|
|
|
- pm_generic_runtime_resume,
|
|
|
- NULL
|
|
|
- )
|
|
|
-};
|
|
|
-
|
|
|
struct bus_type i2c_bus_type = {
|
|
|
.name = "i2c",
|
|
|
.match = i2c_device_match,
|
|
|
.probe = i2c_device_probe,
|
|
|
.remove = i2c_device_remove,
|
|
|
.shutdown = i2c_device_shutdown,
|
|
|
- .pm = &i2c_device_pm_ops,
|
|
|
};
|
|
|
EXPORT_SYMBOL_GPL(i2c_bus_type);
|
|
|
|
|
@@ -1859,14 +1749,6 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
|
|
|
if (res)
|
|
|
return res;
|
|
|
|
|
|
- /* Drivers should switch to dev_pm_ops instead. */
|
|
|
- if (driver->suspend)
|
|
|
- pr_warn("i2c-core: driver [%s] using legacy suspend method\n",
|
|
|
- driver->driver.name);
|
|
|
- if (driver->resume)
|
|
|
- pr_warn("i2c-core: driver [%s] using legacy resume method\n",
|
|
|
- driver->driver.name);
|
|
|
-
|
|
|
pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
|
|
|
|
|
|
INIT_LIST_HEAD(&driver->clients);
|