[alsa-devel] [PATCH v8 2/3] ALSA: hdac_ext: add hdac extended controller
Vinod Koul
vinod.koul at intel.com
Thu Jun 11 05:43:46 CEST 2015
On Wed, Jun 10, 2015 at 08:41:08PM +0200, Takashi Iwai wrote:
> At Wed, 10 Jun 2015 18:36:01 +0530,
> Vinod Koul wrote:
> >
> > +/**
> > + * snd_hdac_ext_bus_get_link_index - get link based on codec name
> > + * @ebus: HD-audio extended core bus
> > + * @codec_name: codec name
> > + */
> > +struct hdac_ext_link *snd_hdac_ext_bus_get_link(struct hdac_ext_bus *ebus,
> > + const char *codec_name)
> > +{
> > + int i;
> > + struct hdac_ext_link *hlink = NULL;
> > + char name[32];
> > +
> > + list_for_each_entry(hlink, &ebus->hlink_list, list) {
> > + for (i = 0; i < HDA_MAX_CODECS; i++) {
> > + snprintf(name, sizeof(name), "codec#%03x", hlink->codec[i]);
> > + if (!strncmp(name, codec_name, strlen(codec_name)))
> > + return hlink;
>
> Is this name supposed to be identical with the string the patch 1
> sets? If so, this looks incompatible.
Yes my miss :(
This also means that I would be required to save the idx number, so I am
thinking of returning the idx value in snd_hdac_ext_bus_device_init() and
then pass on snd_hdac_ext_bus_map_codec_to_link() API which can save this in
the array and then use idx here as well and use I like below so will add
this
>
> Also, it'd be easier to parse the string only once like:
>
> int bus_idx, addr;
>
> if (sscanf(codec_name, "ehdaudio%dD%d", &bus_idx, &addr) != 2)
> return NULL;
> if (ebus->index != bus_idx)
> return NULL;
> list_for_each_entry(hlink, &ebus->hlink_list, list)
> if (hlink->lsdiid && (0x1 << addr))
> return hlink;
>
> return NULL;
Thanks
--
~Vinod
More information about the Alsa-devel
mailing list