[alsa-devel] [RFC 00/11] ASoC: hdac: Add hdac generic driver

Subhransu S. Prusty subhransu.s.prusty at intel.com
Fri Jul 8 09:33:48 CEST 2016


On Tue, Jun 28, 2016 at 10:43:47AM +0530, Subhransu S. Prusty wrote:
> On Mon, Jun 27, 2016 at 09:05:47AM +0200, Takashi Iwai wrote:
> > On Mon, 27 Jun 2016 05:47:53 +0200,
> > Subhransu S. Prusty wrote:
> > > 
> > > HDA devices generically can be modelled with DAPM in ASoC. This
> > > series adds a framework in ASoC to model HDA devices. 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.
> > 
> > Well...  This is really a hard way to go.  The generic codec support
> > is good, but only if it can cover most of stuff.  That is, you'll have
> > to think of the exceptions from the beginning, because the majority of
> > HD-audio devices are exceptional, i.e. don't follow the standard
> 
> Hi Takashi,
> 
> Thanks for review.
> 
> I think, more detail in the cover letter would have been helpful here. Sorry
> for missing out. Let me explain more.
> 
> Intention here is to create a framework for the HDA devices in ASoC. This
> will follow standard. This will be registered as generic "virtual" class
> device. If there is no match found for vendor id and device id, then the
> class driver will be loaded. For vendor specific devices, a match function
> will be provided. With the help of this, the vendor quirks will be
> registered. Additional widgets, controls and route will be created in a
> vendor specific way through vendor ops. So its similar to patch files in
> legacy HDA driver.
> 
> Vendor specific quirks patch series will follow after the framework is
> merged.

Hi Takashi,

Any more feedback or looking for more details?

Regards,
Subhransu
> 
> 
> > strictly.  As a generic hint, I would recommend the following:
> > 
> > - Try lots of different codecs and pin configurations.
> >   At best, write an emulator and process on it, and check the
> >   robustness and the correctness of your code.
> >   For example, the old AD1984A is one of the beasts that gives you a
> >   hell of complex routes.  Also the recent Cirrus codecs gives you
> >   tons of I/O pins.
> > 
> > - Think how to remap the pins and other setups in general.
> 
> Only problem with remapping of the pins, I can think of is, the way it is
> represented in DAPM route. In DAPM pins are modelled with multiple DAPM
> widgets (input/output, PGA) to handle this remapping capability. Any pin
> capable of remapping will be represented with both an input and output DAPM
> widget and will have all possible route mapping registered with DAPM. The
> remap capability of pin will appear as an alsa control in userspace. Based
> on the configuration from userspace the pin capability will be programmed in
> the driver.
> 
> >   This is one of the most important keys.  Writing the generic code is
> >   only to solve a tip of iceberg.  The most difficult part is to adapt
> >   the generic code to the real machine configurations.
> > 
> > - Think how to handle the vendor-specific codes.
> >   Majority of machines have the own code due to the headset, EAPD,
> 
> These will be handled through alsa controls. There will be many though due
> to many optional features and vendor specific.
> 
> >   digital mic or LED controls, as well as the non-standard jack
> >   detection.
> 
> Can you please explain more on what is non-standard jack detection?
> 
> Thanks
> Subhransu
> > 
> > 
> > Takashi
> > 
> > > 
> > > Hardik T Shah (1):
> > >   ASoC: Add dai_ops to set the stream tag.
> > > 
> > > Subhransu S. Prusty (10):
> > >   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
> > >   ASoC: dapm: Create API to add a single route element
> > >   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: dapm: Export snd_soc_dapm_new_control
> > >   ASoC: hdac: Export API to create machine controls
> > > 
> > >  include/sound/hdaudio.h         |    1 +
> > >  include/sound/soc-dai.h         |   12 +
> > >  include/sound/soc-dapm.h        |    5 +
> > >  sound/hda/ext/Makefile          |    3 +-
> > >  sound/hda/ext/hdac_codec.c      |  188 +++++
> > >  sound/hda/ext/hdac_codec.h      |   52 ++
> > >  sound/hda/local.h               |   13 +
> > >  sound/soc/codecs/Kconfig        |    5 +
> > >  sound/soc/codecs/Makefile       |    2 +
> > >  sound/soc/codecs/hdac_generic.c | 1561 +++++++++++++++++++++++++++++++++++++++
> > >  sound/soc/codecs/hdac_generic.h |   31 +
> > >  sound/soc/soc-core.c            |   35 +
> > >  sound/soc/soc-dapm.c            |   22 +
> > >  13 files changed, 1929 insertions(+), 1 deletion(-)
> > >  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
> > > 
> > > -- 
> > > 1.9.1
> > > 
> > _______________________________________________
> > Alsa-devel mailing list
> > Alsa-devel at alsa-project.org
> > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 
> -- 

-- 


More information about the Alsa-devel mailing list