diff mbox series

[6/8] ALSA: hda/sigmatel: Add model option to codec driver, too

Message ID 20220929073545.1085-7-tiwai@suse.de
State New
Headers show
Series [1/8] ALSA: hda/realtek: Add model option to codec driver, too | expand

Commit Message

Takashi Iwai Sept. 29, 2022, 7:35 a.m. UTC
The model option of snd-hda-intel or SOF driver is useful for testing
/ debugging quirks.  Since many devices have multiple codecs and the
quirk is rather codec-specific, it's often difficult to pass the model
to the proper target.

This patch adds the equivalent model option to IDT/Sigmatel codec
driver, so that user can optionally specify the option for the codec
instead of snd-hda-intel or SOF drivers.

That is, you can pass the boot option like
  snd_hda_codec_idt.model=foobar
or
  snd_hda_codec_idt.model=103c:3610
for applying a quirk no matter whether you use snd-hda-intel or SOF.

The model option of snd-hda-intel or SOF is still effective.  When the
option is given for both, the option for the controller driver wins.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/pci/hda/patch_sigmatel.c | 11 +++++++++++
 1 file changed, 11 insertions(+)
diff mbox series

Patch

diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 7f340f18599c..f3143f8b59f0 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -17,6 +17,7 @@ 
 #include <linux/pci.h>
 #include <linux/dmi.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <sound/core.h>
 #include <sound/jack.h>
 #include <sound/hda_codec.h>
@@ -26,6 +27,11 @@ 
 #include "hda_jack.h"
 #include "hda_generic.h"
 
+/* codec-specific model option -- equivalent with snd-hda-intel.model option */
+static char *codec_model;
+module_param_named(model, codec_model, charp, 0444);
+MODULE_PARM_DESC(model, "Use the given board model.");
+
 enum {
 	STAC_REF,
 	STAC_9200_OQO,
@@ -4494,6 +4500,11 @@  static int alloc_stac_spec(struct hda_codec *codec)
 	codec->no_trigger_sense = 1; /* seems common with STAC/IDT codecs */
 	spec->gen.dac_min_mute = true;
 	codec->patch_ops = stac_patch_ops;
+
+	/* assign optional modelname; freed at snd_hda_codec_dev_release() */
+	if (!codec->modelname && codec_model)
+		codec->modelname = kstrdup(codec_model, GFP_KERNEL);
+
 	return 0;
 }