Hi Maxim, On Fri, Apr 21, 2023 at 10:33:19PM +0300, Maxim Kochetkov wrote: > Some SoC may have resets for I2S subsystem. So add optional reset > deassert at startup. > > Signed-off-by: Maxim Kochetkov <fido_max@xxxxxxxx> > --- > sound/soc/dwc/dwc-i2s.c | 9 +++++++++ > sound/soc/dwc/local.h | 1 + > 2 files changed, 10 insertions(+) > > diff --git a/sound/soc/dwc/dwc-i2s.c b/sound/soc/dwc/dwc-i2s.c > index acdf98b2ee9c..8c8bc7116f86 100644 > --- a/sound/soc/dwc/dwc-i2s.c > +++ b/sound/soc/dwc/dwc-i2s.c > @@ -17,6 +17,7 @@ > #include <linux/io.h> > #include <linux/interrupt.h> > #include <linux/module.h> > +#include <linux/reset.h> > #include <linux/slab.h> > #include <linux/pm_runtime.h> > #include <sound/designware_i2s.h> > @@ -648,6 +649,14 @@ static int dw_i2s_probe(struct platform_device *pdev) > if (IS_ERR(dev->i2s_base)) > return PTR_ERR(dev->i2s_base); > > + dev->reset = devm_reset_control_array_get_optional_shared(&pdev->dev); > + if (IS_ERR(dev->reset)) > + return PTR_ERR(dev->reset); > + > + ret = reset_control_deassert(dev->reset); Since this is a shared reset control, matching reset_control_assert() calls are required in the subsequent error paths and in dw_i2s_remove(). regards Philipp