Commit e79e72c5 authored by Jarkko Nikula's avatar Jarkko Nikula Committed by Wolfram Sang
Browse files

i2c: designware: Keep pm_runtime_enable/_disable calls in sync



On an hardware shared I2C bus (certain Intel Baytrail SoC platforms) the
runtime PM disable depth keeps increasing over repeated modprobe/rmmod
cycle because pm_runtime_disable() is called without checking should it
be disabled already because of bus sharing.

This hasn't made any other harm than dev->power.disable_depth keeps
increasing but keep it sync by calling pm_runtime_disable() only when
runtime PM is not disabled.

Reported-by: default avatarWolfram Sang <wsa@the-dreams.de>
Signed-off-by: default avatarJarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
parent 2d244c81
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -245,12 +245,10 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
	}

	r = i2c_dw_probe(dev);
	if (r) {
	if (r && !dev->pm_runtime_disabled)
		pm_runtime_disable(&pdev->dev);
		return r;
	}

	return 0;
	return r;
}

static int dw_i2c_plat_remove(struct platform_device *pdev)
@@ -265,6 +263,7 @@ static int dw_i2c_plat_remove(struct platform_device *pdev)

	pm_runtime_dont_use_autosuspend(&pdev->dev);
	pm_runtime_put_sync(&pdev->dev);
	if (!dev->pm_runtime_disabled)
		pm_runtime_disable(&pdev->dev);

	return 0;