forked from luck/tmp_suning_uos_patched
ALSA: hda - Add hduadio support to DEVTABLE
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>
This commit is contained in:
parent
93ed8560e9
commit
da23ac1e40
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user