[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