mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	i2c: designware: Remove Cherry Trail PMIC I2C bus pm_disabled workaround
Commita3d411fb38("i2c: designware: Disable pm for PMIC i2c-bus even if there is no _SEM method"), always set the pm_disabled flag on the I2C7 controller, even if its bus was not shared with the PUNIT. This was a workaround for various suspend/resume issues, after the following 2 commits this workaround is no longer necessary: Commit5415277283("PM: i2c-designware-platdrv: Suspend/resume at the late/early stages") Commite6ce0ce34f("ACPI / LPSS: Add device link for CHT SD card dependency on I2C") Therefor this commit removes this workaround. After this commit the pm_disabled flag is only used to indicate that the bus is shared with the PUNIT and after other recent changes we no longer call dev_pm_syscore_device(dev, true), so we are no longer actually disabling (non-runtime) pm, so this commit also renames the flag to shared_with_punit to better reflect what it is for. Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
		
							parent
							
								
									1bb3995962
								
							
						
					
					
						commit
						9cbeeca050
					
				
					 4 changed files with 8 additions and 23 deletions
				
			
		| 
						 | 
				
			
			@ -164,7 +164,7 @@ int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev)
 | 
			
		|||
	dev_info(dev->dev, "I2C bus managed by PUNIT\n");
 | 
			
		||||
	dev->acquire_lock = baytrail_i2c_acquire;
 | 
			
		||||
	dev->release_lock = baytrail_i2c_release;
 | 
			
		||||
	dev->pm_disabled = true;
 | 
			
		||||
	dev->shared_with_punit = true;
 | 
			
		||||
 | 
			
		||||
	pm_qos_add_request(&dev->pm_qos, PM_QOS_CPU_DMA_LATENCY,
 | 
			
		||||
			   PM_QOS_DEFAULT_VALUE);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -212,7 +212,7 @@
 | 
			
		|||
 * @pm_qos: pm_qos_request used while holding a hardware lock on the bus
 | 
			
		||||
 * @acquire_lock: function to acquire a hardware lock on the bus
 | 
			
		||||
 * @release_lock: function to release a hardware lock on the bus
 | 
			
		||||
 * @pm_disabled: true if power-management should be disabled for this i2c-bus
 | 
			
		||||
 * @shared_with_punit: true if this bus is shared with the SoCs PUNIT
 | 
			
		||||
 * @disable: function to disable the controller
 | 
			
		||||
 * @disable_int: function to disable all interrupts
 | 
			
		||||
 * @init: function to initialize the I2C hardware
 | 
			
		||||
| 
						 | 
				
			
			@ -266,7 +266,7 @@ struct dw_i2c_dev {
 | 
			
		|||
	struct pm_qos_request	pm_qos;
 | 
			
		||||
	int			(*acquire_lock)(struct dw_i2c_dev *dev);
 | 
			
		||||
	void			(*release_lock)(struct dw_i2c_dev *dev);
 | 
			
		||||
	bool			pm_disabled;
 | 
			
		||||
	bool			shared_with_punit;
 | 
			
		||||
	void			(*disable)(struct dw_i2c_dev *dev);
 | 
			
		||||
	void			(*disable_int)(struct dw_i2c_dev *dev);
 | 
			
		||||
	int			(*init)(struct dw_i2c_dev *dev);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -707,7 +707,7 @@ int i2c_dw_probe(struct dw_i2c_dev *dev)
 | 
			
		|||
	adap->dev.parent = dev->dev;
 | 
			
		||||
	i2c_set_adapdata(adap, dev);
 | 
			
		||||
 | 
			
		||||
	if (dev->pm_disabled) {
 | 
			
		||||
	if (dev->shared_with_punit) {
 | 
			
		||||
		irq_flags = IRQF_NO_SUSPEND;
 | 
			
		||||
	} else {
 | 
			
		||||
		irq_flags = IRQF_SHARED | IRQF_COND_SUSPEND;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,9 +85,6 @@ static int dw_i2c_acpi_configure(struct platform_device *pdev)
 | 
			
		|||
	struct dw_i2c_dev *dev = platform_get_drvdata(pdev);
 | 
			
		||||
	struct i2c_timings *t = &dev->timings;
 | 
			
		||||
	u32 ss_ht = 0, fp_ht = 0, hs_ht = 0, fs_ht = 0;
 | 
			
		||||
	acpi_handle handle = ACPI_HANDLE(&pdev->dev);
 | 
			
		||||
	struct acpi_device *adev;
 | 
			
		||||
	const char *uid;
 | 
			
		||||
 | 
			
		||||
	dev->adapter.nr = -1;
 | 
			
		||||
	dev->tx_fifo_depth = 32;
 | 
			
		||||
| 
						 | 
				
			
			@ -118,18 +115,6 @@ static int dw_i2c_acpi_configure(struct platform_device *pdev)
 | 
			
		|||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (acpi_bus_get_device(handle, &adev))
 | 
			
		||||
		return -ENODEV;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Cherrytrail I2C7 gets used for the PMIC which gets accessed
 | 
			
		||||
	 * through ACPI opregions during late suspend / early resume
 | 
			
		||||
	 * disable pm for it.
 | 
			
		||||
	 */
 | 
			
		||||
	uid = adev->pnp.unique_id;
 | 
			
		||||
	if ((dev->flags & MODEL_CHERRYTRAIL) && !strcmp(uid, "7"))
 | 
			
		||||
		dev->pm_disabled = true;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -261,7 +246,7 @@ static void dw_i2c_plat_pm_cleanup(struct dw_i2c_dev *dev)
 | 
			
		|||
{
 | 
			
		||||
	pm_runtime_disable(dev->dev);
 | 
			
		||||
 | 
			
		||||
	if (dev->pm_disabled)
 | 
			
		||||
	if (dev->shared_with_punit)
 | 
			
		||||
		pm_runtime_put_noidle(dev->dev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -393,7 +378,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 | 
			
		|||
	pm_runtime_use_autosuspend(&pdev->dev);
 | 
			
		||||
	pm_runtime_set_active(&pdev->dev);
 | 
			
		||||
 | 
			
		||||
	if (dev->pm_disabled)
 | 
			
		||||
	if (dev->shared_with_punit)
 | 
			
		||||
		pm_runtime_get_noresume(&pdev->dev);
 | 
			
		||||
 | 
			
		||||
	pm_runtime_enable(&pdev->dev);
 | 
			
		||||
| 
						 | 
				
			
			@ -471,7 +456,7 @@ static int dw_i2c_plat_suspend(struct device *dev)
 | 
			
		|||
{
 | 
			
		||||
	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
 | 
			
		||||
 | 
			
		||||
	if (i_dev->pm_disabled)
 | 
			
		||||
	if (i_dev->shared_with_punit)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	i_dev->disable(i_dev);
 | 
			
		||||
| 
						 | 
				
			
			@ -484,7 +469,7 @@ static int dw_i2c_plat_resume(struct device *dev)
 | 
			
		|||
{
 | 
			
		||||
	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
 | 
			
		||||
 | 
			
		||||
	if (!i_dev->pm_disabled)
 | 
			
		||||
	if (!i_dev->shared_with_punit)
 | 
			
		||||
		i2c_dw_prepare_clk(i_dev, true);
 | 
			
		||||
 | 
			
		||||
	i_dev->init(i_dev);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue