Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed393dcd authored by Mark Brown's avatar Mark Brown Committed by Samuel Ortiz
Browse files

mfd: Use regcache_sync_region() to sync wm8994 GPIO registers on suspend



Now we have regcache sync region we can use it to do a more efficient
sync of the pin configuration after we reset the device during suspend.

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 59db9691
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -196,7 +196,6 @@ static int wm8994_suspend(struct device *dev)
{
	struct wm8994 *wm8994 = dev_get_drvdata(dev);
	int ret;
	int gpio_regs[WM8994_NUM_GPIO_REGS];

	/* Don't actually go through with the suspend if the CODEC is
	 * still active (eg, for audio passthrough from CP. */
@@ -278,27 +277,23 @@ static int wm8994_suspend(struct device *dev)
				WM8994_LDO1ENA_PD | WM8994_LDO2ENA_PD,
				WM8994_LDO1ENA_PD | WM8994_LDO2ENA_PD);

	/* Save GPIO registers before reset */
	regmap_bulk_read(wm8994->regmap, WM8994_GPIO_1, gpio_regs,
			 WM8994_NUM_GPIO_REGS);

	/* Explicitly put the device into reset in case regulators
	 * don't get disabled in order to ensure consistent restart.
	 */
	wm8994_reg_write(wm8994, WM8994_SOFTWARE_RESET,
			 wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET));

	regcache_mark_dirty(wm8994->regmap);

	/* Restore GPIO registers to prevent problems with mismatched
	 * pin configurations.
	 */
	ret = regmap_bulk_write(wm8994->regmap, WM8994_GPIO_1, gpio_regs,
				WM8994_NUM_GPIO_REGS);
	ret = regcache_sync_region(wm8994->regmap, WM8994_GPIO_1,
				   WM8994_GPIO_11);
	if (ret != 0)
		dev_err(dev, "Failed to restore GPIO registers: %d\n", ret);

	regcache_cache_only(wm8994->regmap, true);
	regcache_mark_dirty(wm8994->regmap);

	wm8994->suspended = true;

	ret = regulator_bulk_disable(wm8994->num_supplies,