[alsa-devel] [RFC v3 06/11] ASoC: hdac_hda: add ASoC based HDA codec driver

Ughreja, Rakesh A rakesh.a.ughreja at intel.com
Fri Dec 15 13:20:30 CET 2017



>-----Original Message-----
>From: Takashi Iwai [mailto:tiwai at suse.de]
>Sent: Friday, December 15, 2017 5:08 PM
>To: Ughreja, Rakesh A <rakesh.a.ughreja at intel.com>
>Cc: alsa-devel at alsa-project.org; broonie at kernel.org;
>liam.r.girdwood at linux.intel.com; pierre-louis.bossart at linux.intel.com; Koul, Vinod
><vinod.koul at intel.com>; Patches Audio <patches.audio at intel.com>
>Subject: Re: [RFC v3 06/11] ASoC: hdac_hda: add ASoC based HDA codec driver
>
>On Fri, 15 Dec 2017 12:30:43 +0100,
>Rakesh Ughreja wrote:
>>
>> This patch adds ASoC based HDA codec driver that can be used with
>> all Intel platforms.
>>
>> Signed-off-by: Rakesh Ughreja <rakesh.a.ughreja at intel.com>
>> ---
>>  sound/pci/hda/hda_codec.h     |  1 +
>>  sound/pci/hda/hda_generic.c   | 25 ++++++++++++
>>  sound/soc/codecs/Kconfig      |  6 +++
>>  sound/soc/codecs/Makefile     |  2 +
>>  sound/soc/codecs/hdac_hda.c   | 94
>+++++++++++++++++++++++++++++++++++++++++++
>>  sound/soc/codecs/hdac_hda.h   | 22 ++++++++++
>>  sound/soc/intel/skylake/skl.c | 10 ++++-
>>  7 files changed, 158 insertions(+), 2 deletions(-)
>>  create mode 100644 sound/soc/codecs/hdac_hda.c
>>  create mode 100644 sound/soc/codecs/hdac_hda.h
>>
>> diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
>> index ef626cf..1525c5a 100644
>> --- a/sound/pci/hda/hda_codec.h
>> +++ b/sound/pci/hda/hda_codec.h
>> @@ -96,6 +96,7 @@ typedef int (*hda_codec_patch_t)(struct hda_codec *);
>>
>>  struct hda_codec_driver {
>>  	struct hdac_driver core;
>> +	struct hdac_driver *asocdrv;
>>  	const struct hda_device_id *id;
>>  };
>>
>> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
>> index 09ab02e..e0b46a4 100644
>> --- a/sound/pci/hda/hda_generic.c
>> +++ b/sound/pci/hda/hda_generic.c
>> @@ -38,6 +38,7 @@
>>  #include "hda_jack.h"
>>  #include "hda_beep.h"
>>  #include "hda_generic.h"
>> +#include "../../sound/soc/codecs/hdac_hda.h"
>>
>>
>>  /**
>> @@ -5964,12 +5965,36 @@ static int snd_hda_parse_generic_codec(struct
>hda_codec *codec)
>>  int __hda_codec_driver_register(struct hda_codec_driver *drv, const char
>*name,
>>  			       struct module *owner)
>>  {
>> +	int ret;
>> +
>> +	/*
>> +	 * Register ASoC HDA driver as well
>> +	 */
>> +	if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDA)) {
>> +
>> +		drv->core.id_table = drv->id;
>> +		drv->asocdrv = kmalloc(sizeof(*drv->asocdrv), GFP_KERNEL);
>> +		if (!drv->asocdrv)
>> +			return -ENOMEM;
>> +
>> +		ret = __hdac_hda_codec_driver_register(&drv->core, name,
>owner);
>> +		if (ret < 0)
>> +			return ret;
>> +	}
>
>Hrm, now I see why you moved the function.
>But this change essentially means that the code-path is always enabled
>when the ASoC HD-audio driver is *built*.  Distros may build both but
>blacklist, and it would break the legacy driver.

In this series, I am registering the driver two times. First using generic
ASoC driver and then using Generic legacy driver. I am appending "-asoc"
string to the driver name while registering for ASoC HDA, so do second
time registration.

Are you suggesting that I should do only once ? Now I understand that
there is no point in doing two times registration.

>
>Can we check differently?  For example, we may put some difference in
>the driver and check it here instead of the static IS_ENABLED().

Do you think a module parameter is a good idea ?

>The code can be put with #if IS_ENABLED() for optimization, but the
>actual behavior should be runtime-dependent.

Sure, I will do it.

>
>
>thanks,
>
>Takashi


More information about the Alsa-devel mailing list