HDA devices generically can be modelled with DAPM in ASoC.
We would like to create a framework for the HDA devices in ASoC. This will follow HDA standard. This will be registered as generic "virtual" class device (Not implemented in this series). If there is no match found for vendor id and device id, then the class driver will be loaded. For vendor specific devices, vendor quirks will be loaded based on the match. Additional widgets, controls and route will be created in a vendor specific way through vendor ops.
This series adds a framework in ASoC to model HDA codecs. HDA widgets are enumerated and one or multiple DAPM widget(s) are created. Connection list is queried for each widget to identify the connection between two endpoints and modelled using DAPM graph.
Set of event handlers are defined for each widget type. Based on DAPM events required verbs are sent to program codec.
Finally a function is exported to query for the device endpoint configuration to create machine controls.
Features yet to be added: - Optional features of widgets will be added using additional dapm widgets or controls - Pin retasking will be done by adding all possible dapm route map - Class driver to load the generic driver if no match found - Jack detection
Subhransu S. Prusty (12): ALSA: hdac: Add codec helper library ALSA: hda - Add macro to test pin widget's input capability ASoC: hdac: Add a generic hdac driver framework ASoC: hdac: Create DAPM model for HDA widgets ALSA: hdac: Move 'to_hda_ext_device' helper to core ASoC: hdac_hdmi: use get_edev helper from core ASoC: hdac: Build DAPM graph by querying through widget connection list ASoC: hdac: Register widget event handlers ALSA: hda - macro to get default config device of pin widgets ASoC: hdac: Export API to create machine controls ALSA: hdac: Implement a match function ASoC: hdac: Add coefficient init callback for RT286
include/sound/hdaudio.h | 1 + include/sound/hdaudio_ext.h | 1 + sound/hda/ext/Makefile | 3 +- sound/hda/ext/hdac_codec.c | 182 ++++ sound/hda/ext/hdac_codec.h | 60 ++ sound/hda/ext/hdac_ext_bus.c | 12 + sound/hda/local.h | 13 + sound/soc/codecs/Kconfig | 5 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/hdac_generic.c | 1754 +++++++++++++++++++++++++++++++++++++++ sound/soc/codecs/hdac_generic.h | 36 + sound/soc/codecs/hdac_hdmi.c | 8 +- 12 files changed, 2069 insertions(+), 8 deletions(-) create mode 100644 sound/hda/ext/hdac_codec.c create mode 100644 sound/hda/ext/hdac_codec.h create mode 100644 sound/soc/codecs/hdac_generic.c create mode 100644 sound/soc/codecs/hdac_generic.h