Hi, > -----Original Message----- > From: Alsa-devel <alsa-devel-bounces@xxxxxxxxxxxxxxxx> On Behalf Of > Pierre-Louis Bossart > Sent: 27 July 2022 17:37 > To: Stefan Binding <sbinding@xxxxxxxxxxxxxxxxxxxxx>; Mark Brown > <broonie@xxxxxxxxxx>; Liam Girdwood <lgirdwood@xxxxxxxxx>; > Brent Lu <brent.lu@xxxxxxxxx>; xliu <xiang.liu@xxxxxxxxxx> > Cc: Vitaly Rodionov <vitalyr@xxxxxxxxxxxxxxxxxxxxx>; > patches@xxxxxxxxxxxxxxxxxxxxx; alsa-devel@xxxxxxxxxxxxxxxx; linux- > kernel@xxxxxxxxxxxxxxx > Subject: Re: [PATCH v2] ASoC: Intel: cirrus-common: Use UID to map > correct amp to prefix > > > > > > +/* > > + * Expected UIDs are integers (stored as strings). > > + * UID Mapping is fixed: > > + * UID 0x0 -> WL > > + * UID 0x1 -> WR > > + * UID 0x2 -> TL > > + * UID 0x3 -> TR > > + * Note: If there are less than 4 Amps, UIDs still map to > WL/WR/TL/TR. Dynamic code will only create > > + * dai links for UIDs which exist, and ignore non-existant ones. > > is this intentional to support all variations of 1,2,3 and 4 amplifiers > being present? > > Or is the intent to really support 2 or 4? The intent was to support 2 or 4, rather than any number of amps, in case something was released with 2 amps. > > > + * Return number of codecs found. > > + */ > > +static int cs35l41_compute_codec_conf(void) > > +{ > > + const char * const uid_strings[] = { "0", "1", "2", "3" }; > > + unsigned int uid, sz = 0; > > + struct acpi_device *adev; > > + struct device *physdev; > > + > > + for (uid = 0; uid < CS35L41_MAX_AMPS; uid++) { > > + adev = acpi_dev_get_first_match_dev(CS35L41_HID, > uid_strings[uid], -1); > > + if (!adev) { > > + pr_warn("Cannot find match for HID %s UID > %u (%s)\n", CS35L41_HID, uid, > > + cs35l41_name_prefixes[uid]); > > A warning is a bit strong if some valid configurations don't expose all > 4 codecs. I'll change this to a debug message, but also add an error if there is not 2 or 4 amps found. > > > + continue; > > + } > > + physdev = > get_device(acpi_get_first_physical_node(adev)); > > + cs35l41_components[sz].name = dev_name(physdev); > > + cs35l41_components[sz].dai_name = > CS35L41_CODEC_DAI; > > + cs35l41_codec_conf[sz].dlc.name = > dev_name(physdev); > > + cs35l41_codec_conf[sz].name_prefix = > cs35l41_name_prefixes[uid]; > > + acpi_dev_put(adev); > > + sz++; > > + } > > + return sz; Thanks, Stefan