Loading include/sound/hdaudio_ext.h +44 −0 Original line number Diff line number Diff line Loading @@ -130,4 +130,48 @@ void snd_hdac_ext_link_clear_stream_id(struct hdac_ext_link *link, writew(((readw(addr + reg) & ~(mask)) | (val)), \ addr + reg) struct hdac_ext_device; /* ops common to all codec drivers */ struct hdac_ext_codec_ops { int (*build_controls)(struct hdac_ext_device *dev); int (*init)(struct hdac_ext_device *dev); void (*free)(struct hdac_ext_device *dev); }; struct hda_dai_map { char *dai_name; hda_nid_t nid; u32 maxbps; }; #define HDA_MAX_NIDS 16 /** * struct hdac_ext_device - HDAC Ext device * * @hdac: hdac core device * @nid_list - the dai map which matches the dai-name with the nid * @map_cur_idx - the idx in use in dai_map * @ops - the hda codec ops common to all codec drivers * @pvt_data - private data, for asoc contains asoc codec object */ struct hdac_ext_device { struct hdac_device hdac; struct hdac_ext_bus *ebus; /* soc-dai to nid map */ struct hda_dai_map nid_list[HDA_MAX_NIDS]; unsigned int map_cur_idx; /* codec ops */ struct hdac_ext_codec_ops ops; void *private_data; }; #define to_ehdac_device(dev) (container_of((dev), \ struct hdac_ext_device, hdac)) #endif /* __SOUND_HDAUDIO_EXT_H */ sound/hda/ext/hdac_ext_bus.c +9 −4 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ static void default_release(struct device *dev) } /** * snd_hdac_ext_device_init - initialize the HDA extended codec base device * snd_hdac_ext_bus_device_init - initialize the HDA extended codec base device * @ebus: hdac extended bus to attach to * @addr: codec address * Loading @@ -133,14 +133,16 @@ static void default_release(struct device *dev) */ int snd_hdac_ext_bus_device_init(struct hdac_ext_bus *ebus, int addr) { struct hdac_ext_device *edev; struct hdac_device *hdev = NULL; struct hdac_bus *bus = ebus_to_hbus(ebus); char name[15]; int ret; hdev = kzalloc(sizeof(*hdev), GFP_KERNEL); if (!hdev) edev = kzalloc(sizeof(*hdev), GFP_KERNEL); if (!edev) return -ENOMEM; hdev = &edev->hdac; snprintf(name, sizeof(name), "ehdaudio%dD%d", ebus->idx, addr); Loading @@ -158,6 +160,7 @@ int snd_hdac_ext_bus_device_init(struct hdac_ext_bus *ebus, int addr) snd_hdac_ext_bus_device_exit(hdev); return ret; } return 0; } EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_init); Loading @@ -168,8 +171,10 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_init); */ void snd_hdac_ext_bus_device_exit(struct hdac_device *hdev) { struct hdac_ext_device *edev = to_ehdac_device(hdev); snd_hdac_device_exit(hdev); kfree(hdev); kfree(edev); } EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_exit); Loading Loading
include/sound/hdaudio_ext.h +44 −0 Original line number Diff line number Diff line Loading @@ -130,4 +130,48 @@ void snd_hdac_ext_link_clear_stream_id(struct hdac_ext_link *link, writew(((readw(addr + reg) & ~(mask)) | (val)), \ addr + reg) struct hdac_ext_device; /* ops common to all codec drivers */ struct hdac_ext_codec_ops { int (*build_controls)(struct hdac_ext_device *dev); int (*init)(struct hdac_ext_device *dev); void (*free)(struct hdac_ext_device *dev); }; struct hda_dai_map { char *dai_name; hda_nid_t nid; u32 maxbps; }; #define HDA_MAX_NIDS 16 /** * struct hdac_ext_device - HDAC Ext device * * @hdac: hdac core device * @nid_list - the dai map which matches the dai-name with the nid * @map_cur_idx - the idx in use in dai_map * @ops - the hda codec ops common to all codec drivers * @pvt_data - private data, for asoc contains asoc codec object */ struct hdac_ext_device { struct hdac_device hdac; struct hdac_ext_bus *ebus; /* soc-dai to nid map */ struct hda_dai_map nid_list[HDA_MAX_NIDS]; unsigned int map_cur_idx; /* codec ops */ struct hdac_ext_codec_ops ops; void *private_data; }; #define to_ehdac_device(dev) (container_of((dev), \ struct hdac_ext_device, hdac)) #endif /* __SOUND_HDAUDIO_EXT_H */
sound/hda/ext/hdac_ext_bus.c +9 −4 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ static void default_release(struct device *dev) } /** * snd_hdac_ext_device_init - initialize the HDA extended codec base device * snd_hdac_ext_bus_device_init - initialize the HDA extended codec base device * @ebus: hdac extended bus to attach to * @addr: codec address * Loading @@ -133,14 +133,16 @@ static void default_release(struct device *dev) */ int snd_hdac_ext_bus_device_init(struct hdac_ext_bus *ebus, int addr) { struct hdac_ext_device *edev; struct hdac_device *hdev = NULL; struct hdac_bus *bus = ebus_to_hbus(ebus); char name[15]; int ret; hdev = kzalloc(sizeof(*hdev), GFP_KERNEL); if (!hdev) edev = kzalloc(sizeof(*hdev), GFP_KERNEL); if (!edev) return -ENOMEM; hdev = &edev->hdac; snprintf(name, sizeof(name), "ehdaudio%dD%d", ebus->idx, addr); Loading @@ -158,6 +160,7 @@ int snd_hdac_ext_bus_device_init(struct hdac_ext_bus *ebus, int addr) snd_hdac_ext_bus_device_exit(hdev); return ret; } return 0; } EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_init); Loading @@ -168,8 +171,10 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_init); */ void snd_hdac_ext_bus_device_exit(struct hdac_device *hdev) { struct hdac_ext_device *edev = to_ehdac_device(hdev); snd_hdac_device_exit(hdev); kfree(hdev); kfree(edev); } EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_exit); Loading