At Mon, 8 Jun 2015 20:54:23 +0530, Vinod Koul wrote:
On Mon, Jun 08, 2015 at 03:40:08PM +0530, Vinod Koul wrote:
On Mon, Jun 08, 2015 at 11:03:12AM +0200, Takashi Iwai wrote:
One thing forgot...
At Thu, 4 Jun 2015 15:23:20 +0530, Vinod Koul wrote:
+/**
- snd_hdac_ext_device_init - initialize the HDA extended codec base device
- @sbus: hdac extended bus to attach to
- @addr: codec address
- Returns zero for success or a negative error code.
- */
+int snd_hdac_ext_bus_device_init(struct hdac_ext_bus *sbus, int addr) +{
- struct hdac_device *hdev = NULL;
- struct hdac_bus *bus = hdac_bus(sbus);
- char name[15];
- int ret;
- hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
- if (!hdev)
return -ENOMEM;
- snprintf(name, sizeof(name), "hda-codec#%03x", addr);
- ret = snd_hdac_device_init(hdev, bus, name, addr);
The device name must be unique to the whole system. Using only the codec address as an id would conflict if there are multiple cards. The legacy HDA device consists of "hdaudioC%dD%d" indicating both the card number and the codec address, for example.
Sorry my bad, you did comment on it before as well. I will fix it now, by adding card name here.
Okay and we have an issue here :(, We actually dont know the card number here and card number will be created after this enumeration is complete and we register the DAI with ASoC and then ASoC would create card later.
So how do we solve this?
Instead of the card number, assign some unique index (either a simple static counter or use idr) to each bus object and use it instead of the card number. After all, we just need a unique mapping.
Alternatively, you may rename via dev_set_name() just before registration. But, of course, this is inconsistent in some areas, e.g. dev_err() shows differently before and after registration.
Takashi