On Tue, Jul 26, 2022 at 09:06:10AM -0500, Pierre-Louis Bossart wrote:
Much improved version, thank you. See additional comments/questions below.
- regmap_write(es8326->regmap, ES8326_CLK_CTL_01, ES8326_CLK_OFF);
- regcache_cache_only(es8326->regmap, true);
- regcache_mark_dirty(es8326->regmap);
- return 0;
+}
One question on the interrupt handling: should there be an interrupt disable on suspend and conversely an interrupt enable on resume?
That shouldn't be needed (in general the interrupt enable/disable stuff shouldn't be needed at all).
- ret = clk_prepare_enable(es8326->mclk);
- if (ret) {
dev_err(&i2c->dev, "unable to enable mclk\n");
return ret;
- }
I am not really following what happens if es8326->mclk is NULL. Why would you call clk_prepare_enable() with a NULL pointer? If you look at the code in es8326_set_bias_level(), you do test for that case, so why not here? Something's not right here.
Could it be that this is a scope issue? This block should be moved under the scope of the if (!es8236->mclk) test, no?
The clock API will happily consume NULL clocks (it uses NULL as an equivalent to the regulator API's dummy regulator), there's no *need* to skip clock handling if you've got a NULL clock.