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