ALSA: hda - Add hduadio support to DEVTABLE
authorSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Tue, 29 Sep 2015 08:26:10 +0000 (13:56 +0530)
committerTakashi Iwai <tiwai@suse.de>
Tue, 20 Oct 2015 08:14:42 +0000 (10:14 +0200)
For generating modalias entries automatically, move the definition of
struct hda_device_id to linux/mod_devicetable.h and add the handling
of this record in file2alias helper.  The new modalias is represented
with combination of vendor id, device id, and api version as
"hdaudio:vNrNaN".

This patch itself doesn't convert the existing modaliases.  Since they
were added manually, this patch won't give any regression by itself at
this point.

[Modified the modalias format to adapt the api_version field, and drop
 invalid ANY_ID definition by tiwai]

Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Reviewed-by: Vinod Koul <vinod.koul@intel.com>
Tested-by: Subhransu S Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/linux/mod_devicetable.h
include/sound/hdaudio.h
scripts/mod/devicetable-offsets.c
scripts/mod/file2alias.c
sound/hda/hda_bus_type.c

index 688997a..0082567 100644 (file)
@@ -219,6 +219,14 @@ struct serio_device_id {
        __u8 proto;
 };
 
+struct hda_device_id {
+       __u32 vendor_id;
+       __u32 rev_id;
+       __u8 api_version;
+       const char *name;
+       unsigned long driver_data;
+};
+
 /*
  * Struct used for matching a device
  */
index b35bf59..ddca48e 100644 (file)
@@ -21,23 +21,13 @@ struct hdac_stream;
 struct hdac_device;
 struct hdac_driver;
 struct hdac_widget_tree;
+struct hda_device_id;
 
 /*
  * exported bus type
  */
 extern struct bus_type snd_hda_bus_type;
 
-/*
- * HDA device table
- */
-struct hda_device_id {
-       __u32 vendor_id;
-       __u32 rev_id;
-       __u8 api_version;
-       const char *name;
-       unsigned long driver_data;
-};
-
 /*
  * generic arrays
  */
index e70fcd1..e1a5110 100644 (file)
@@ -196,5 +196,10 @@ int main(void)
        DEVID_FIELD(ulpi_device_id, vendor);
        DEVID_FIELD(ulpi_device_id, product);
 
+       DEVID(hda_device_id);
+       DEVID_FIELD(hda_device_id, vendor_id);
+       DEVID_FIELD(hda_device_id, rev_id);
+       DEVID_FIELD(hda_device_id, api_version);
+
        return 0;
 }
index 5f20882..fc51d4b 100644 (file)
@@ -1250,6 +1250,23 @@ static int do_ulpi_entry(const char *filename, void *symval,
 }
 ADD_TO_DEVTABLE("ulpi", ulpi_device_id, do_ulpi_entry);
 
+/* Looks like: hdaudio:vNrNaN */
+static int do_hda_entry(const char *filename, void *symval, char *alias)
+{
+       DEF_FIELD(symval, hda_device_id, vendor_id);
+       DEF_FIELD(symval, hda_device_id, rev_id);
+       DEF_FIELD(symval, hda_device_id, api_version);
+
+       strcpy(alias, "hdaudio:");
+       ADD(alias, "v", vendor_id != 0, vendor_id);
+       ADD(alias, "r", rev_id != 0, rev_id);
+       ADD(alias, "a", api_version != 0, api_version);
+
+       add_wildcard(alias);
+       return 1;
+}
+ADD_TO_DEVTABLE("hdaudio", hda_device_id, do_hda_entry);
+
 /* Does namelen bytes of name exactly match the symbol? */
 static bool sym_is(const char *name, unsigned namelen, const char *symbol)
 {
index 89c2711..bcb1a79 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/init.h>
 #include <linux/device.h>
 #include <linux/module.h>
+#include <linux/mod_devicetable.h>
 #include <linux/export.h>
 #include <sound/hdaudio.h>