[PATCH 04/10] ASoC: cs42l42: Split probe() and remove() into stages
Martin Povišer
povik+lin at cutebit.org
Thu Sep 15 11:08:11 CEST 2022
> On 9. 9. 2022, at 15:53, Martin Povišer <povik+lin at cutebit.org> wrote:
>
> To prepare for adding SoundWire the probe must be split into three
> parts:
>
> 1) The bus-specific probe
> 2) Common bus-agnostic probe steps
> 3) Initialization of the peripheral registers
>
> Step (3) must be separate because on SoundWire devices the probe must
> enable power supplies and release reset so that the peripheral can be
> enumerated by the bus, but it isn't possible to access registers until
> enumeration has completed.
>
> The call to devm_snd_soc_register_component() must be done at stage (2)
> so that it can EPROBE_DEFER if necessary. In SoundWire systems stage (3)
> is not a probe event so a deferral at this stage would not result in
> re-probing dependencies.
>
> A new init_done flag indicates that the chip has been identified and
> initialized. This is used to prevent cs42l42_remove(), cs42l42_suspend(),
> cs42l42_restore() and cs42l42_irq_thread() from attempting register
> accesses if the chip was not successfully initialized. Although this
> cannot happen on I2C, because the entire probe would fail, it is
> possible on SoundWire if probe succeeds but the cs42l42 is never
> enumerated.
>
> Signed-off-by: Richard Fitzgerald <rf at opensource.cirrus.com>
> Signed-off-by: Martin Povišer <povik+lin at cutebit.org>
Preparing the next iteration of the series, I noticed that I reset
the authorship of this patch in the course of git manipulations. The
author of this patch is of course Richard, apologies for that. It will
be fixed for v2.
Martin
More information about the Alsa-devel
mailing list