![Takashi Iwai](/assets/img/avatar_default.png)
Define the common hd-audio driver and device types to bind over snd_hda_bus_type publicly. This allows to implement other type of device and driver code over hd-audio bus. Now both struct hda_codec and struct hda_codec_driver inherit these new struct hdac_device and struct hdac_driver, respectively. The bus registration is done in subsys_initcall() to assure it before any other driver registrations. Signed-off-by: Takashi Iwai <tiwai@suse.de>
43 lines
843 B
C
43 lines
843 B
C
/*
|
|
* HD-audio bus
|
|
*/
|
|
#include <linux/init.h>
|
|
#include <linux/device.h>
|
|
#include <linux/module.h>
|
|
#include <linux/export.h>
|
|
#include <sound/hdaudio.h>
|
|
|
|
MODULE_DESCRIPTION("HD-audio bus");
|
|
MODULE_LICENSE("GPL");
|
|
|
|
static int hda_bus_match(struct device *dev, struct device_driver *drv)
|
|
{
|
|
struct hdac_device *hdev = dev_to_hdac_dev(dev);
|
|
struct hdac_driver *hdrv = drv_to_hdac_driver(drv);
|
|
|
|
if (hdev->type != hdrv->type)
|
|
return 0;
|
|
if (hdrv->match)
|
|
return hdrv->match(hdev, hdrv);
|
|
return 1;
|
|
}
|
|
|
|
struct bus_type snd_hda_bus_type = {
|
|
.name = "hdaudio",
|
|
.match = hda_bus_match,
|
|
};
|
|
EXPORT_SYMBOL_GPL(snd_hda_bus_type);
|
|
|
|
static int __init hda_bus_init(void)
|
|
{
|
|
return bus_register(&snd_hda_bus_type);
|
|
}
|
|
|
|
static void __exit hda_bus_exit(void)
|
|
{
|
|
bus_unregister(&snd_hda_bus_type);
|
|
}
|
|
|
|
subsys_initcall(hda_bus_init);
|
|
module_exit(hda_bus_exit);
|