diff options
Diffstat (limited to 'drivers/i2c/i2c-core.c')
| -rw-r--r-- | drivers/i2c/i2c-core.c | 68 | 
1 files changed, 20 insertions, 48 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index b916675605b..0f9dc7dc15f 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c @@ -196,88 +196,60 @@ static int i2c_device_pm_suspend(struct device *dev)  {  	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; -	if (pm) { -		if (pm_runtime_suspended(dev)) -			return 0; -		else -			return pm->suspend ? pm->suspend(dev) : 0; -	} - -	return i2c_legacy_suspend(dev, PMSG_SUSPEND); +	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; -	int ret;  	if (pm) -		ret = pm->resume ? pm->resume(dev) : 0; +		return pm_generic_resume(dev);  	else -		ret = i2c_legacy_resume(dev); - -	return ret; +		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) { -		if (pm_runtime_suspended(dev)) -			return 0; -		else -			return pm->freeze ? pm->freeze(dev) : 0; -	} - -	return i2c_legacy_suspend(dev, PMSG_FREEZE); +	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) { -		if (pm_runtime_suspended(dev)) -			return 0; -		else -			return pm->thaw ? pm->thaw(dev) : 0; -	} - -	return i2c_legacy_resume(dev); +	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) { -		if (pm_runtime_suspended(dev)) -			return 0; -		else -			return pm->poweroff ? pm->poweroff(dev) : 0; -	} - -	return i2c_legacy_suspend(dev, PMSG_HIBERNATE); +	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; -	int ret;  	if (pm) -		ret = pm->restore ? pm->restore(dev) : 0; +		return pm_generic_restore(dev);  	else -		ret = i2c_legacy_resume(dev); - -	if (!ret) { -		pm_runtime_disable(dev); -		pm_runtime_set_active(dev); -		pm_runtime_enable(dev); -	} - -	return ret; +		return i2c_legacy_resume(dev);  }  #else /* !CONFIG_PM_SLEEP */  #define i2c_device_pm_suspend	NULL  |