* [PATCH 1/3] ALSA: hda: Move common haswell init to a helper
@ 2017-04-12 4:23 Subhransu S. Prusty
2017-04-12 4:23 ` [PATCH 2/3] ALSA: hda: Add Geminilake vendor nid Subhransu S. Prusty
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Subhransu S. Prusty @ 2017-04-12 4:23 UTC (permalink / raw)
To: alsa-devel
Cc: tiwai, lgirdwood, Jaikrishna Nemallapudi, patches.audio, broonie,
Senthilnathan Veppur, Vinod Koul, Subhransu S. Prusty
Geminilake vendor nid is different from other Skylake variants, but rest
of the initialization code is same.
So a variable is added in hdmi_spec to store the platform specific vendor
nid and move the initialization code to a helper function to be used by
both platform specific init.
Fixes: 126cfa2f5e15 ("ALSA: hda: Add Geminilake HDMI codec ID")
Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: Jaikrishna Nemallapudi <jaikrishnax.nemallapudi@intel.com>
Cc: Senthilnathan Veppur <senthilnathanx.veppur@intel.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Takashi Iwai <tiwai@suse.de>
---
sound/pci/hda/patch_hdmi.c | 48 ++++++++++++++++++++++++++++++----------------
1 file changed, 31 insertions(+), 17 deletions(-)
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 37f11560186a..7413fff06d70 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -177,6 +177,7 @@ struct hdmi_spec {
bool i915_bound; /* was i915 bound in this driver? */
struct hdac_chmap chmap;
+ hda_nid_t vendor_nid;
};
#ifdef CONFIG_SND_HDA_I915
@@ -2381,14 +2382,15 @@ static void intel_haswell_enable_all_pins(struct hda_codec *codec,
bool update_tree)
{
unsigned int vendor_param;
+ struct hdmi_spec *spec = codec->spec;
- vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
+ vendor_param = snd_hda_codec_read(codec, spec->vendor_nid, 0,
INTEL_GET_VENDOR_VERB, 0);
if (vendor_param == -1 || vendor_param & INTEL_EN_ALL_PIN_CVTS)
return;
vendor_param |= INTEL_EN_ALL_PIN_CVTS;
- vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
+ vendor_param = snd_hda_codec_read(codec, spec->vendor_nid, 0,
INTEL_SET_VENDOR_VERB, vendor_param);
if (vendor_param == -1)
return;
@@ -2400,8 +2402,9 @@ static void intel_haswell_enable_all_pins(struct hda_codec *codec,
static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec)
{
unsigned int vendor_param;
+ struct hdmi_spec *spec = codec->spec;
- vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
+ vendor_param = snd_hda_codec_read(codec, spec->vendor_nid, 0,
INTEL_GET_VENDOR_VERB, 0);
if (vendor_param == -1 || vendor_param & INTEL_EN_DP12)
return;
@@ -2409,7 +2412,7 @@ static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec)
/* enable DP1.2 mode */
vendor_param |= INTEL_EN_DP12;
snd_hdac_regmap_add_vendor_verb(&codec->core, INTEL_SET_VENDOR_VERB);
- snd_hda_codec_write_cache(codec, INTEL_VENDOR_NID, 0,
+ snd_hda_codec_write_cache(codec, spec->vendor_nid, 0,
INTEL_SET_VENDOR_VERB, vendor_param);
}
@@ -2502,22 +2505,11 @@ static void i915_pin_cvt_fixup(struct hda_codec *codec,
}
}
-/* Intel Haswell and onwards; audio component with eld notifier */
-static int patch_i915_hsw_hdmi(struct hda_codec *codec)
+static int intel_haswell_common_init(struct hda_codec *codec)
{
- struct hdmi_spec *spec;
+ struct hdmi_spec *spec = codec->spec;
int err;
- /* HSW+ requires i915 binding */
- if (!codec->bus->core.audio_component) {
- codec_info(codec, "No i915 binding for Intel HDMI/DP codec\n");
- return -ENODEV;
- }
-
- err = alloc_generic_hdmi(codec);
- if (err < 0)
- return err;
- spec = codec->spec;
codec->dp_mst = true;
spec->dyn_pcm_assign = true;
@@ -2548,6 +2540,28 @@ static int patch_i915_hsw_hdmi(struct hda_codec *codec)
return 0;
}
+/* Intel Haswell and onwards; audio component with eld notifier */
+static int patch_i915_hsw_hdmi(struct hda_codec *codec)
+{
+ struct hdmi_spec *spec;
+ int err;
+
+ /* HSW+ requires i915 binding */
+ if (!codec->bus->core.audio_component) {
+ codec_info(codec, "No i915 binding for Intel HDMI/DP codec\n");
+ return -ENODEV;
+ }
+
+ err = alloc_generic_hdmi(codec);
+ if (err < 0)
+ return err;
+
+ spec = codec->spec;
+ spec->vendor_nid = INTEL_VENDOR_NID;
+
+ return intel_haswell_common_init(codec);
+}
+
/* Intel Baytrail and Braswell; with eld notifier */
static int patch_i915_byt_hdmi(struct hda_codec *codec)
{
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/3] ALSA: hda: Add Geminilake vendor nid
2017-04-12 4:23 [PATCH 1/3] ALSA: hda: Move common haswell init to a helper Subhransu S. Prusty
@ 2017-04-12 4:23 ` Subhransu S. Prusty
2017-04-12 4:24 ` [PATCH 3/3] ALSA: hda: Add Geminilake id to SKL_PLUS Subhransu S. Prusty
2017-04-12 5:10 ` [PATCH 1/3] ALSA: hda: Move common haswell init to a helper Takashi Iwai
2 siblings, 0 replies; 4+ messages in thread
From: Subhransu S. Prusty @ 2017-04-12 4:23 UTC (permalink / raw)
To: alsa-devel
Cc: Ander Conselvan De Oliveira, tiwai, lgirdwood, patches.audio,
broonie, Senthilnathan Veppur, Vinod Koul, Subhransu S. Prusty
From: Ander Conselvan De Oliveira <ander.conselvan.de.oliveira@intel.com>
Separate out the Geminilake platform init and add vendor nid for it.
Fixes: 126cfa2f5e15 ("ALSA: hda: Add Geminilake HDMI codec ID")
Signed-off-by: Ander Conselvan De Oliveira <ander.conselvan.de.oliveira@intel.com>
Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Cc: Senthilnathan Veppur <senthilnathanx.veppur@intel.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Takashi Iwai <tiwai@suse.de>
---
sound/pci/hda/patch_hdmi.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 7413fff06d70..843f5fe1dfb5 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -2373,6 +2373,7 @@ static void intel_haswell_fixup_connect_list(struct hda_codec *codec,
}
#define INTEL_VENDOR_NID 0x08
+#define INTEL_GLK_VENDOR_NID 0x0B
#define INTEL_GET_VENDOR_VERB 0xf81
#define INTEL_SET_VENDOR_VERB 0x781
#define INTEL_EN_DP12 0x02 /* enable DP 1.2 features */
@@ -2562,6 +2563,27 @@ static int patch_i915_hsw_hdmi(struct hda_codec *codec)
return intel_haswell_common_init(codec);
}
+static int patch_i915_glk_hdmi(struct hda_codec *codec)
+{
+ struct hdmi_spec *spec;
+ int err;
+
+ /* HSW+ requires i915 binding */
+ if (!codec->bus->core.audio_component) {
+ codec_info(codec, "No i915 binding for Intel HDMI/DP codec\n");
+ return -ENODEV;
+ }
+
+ err = alloc_generic_hdmi(codec);
+ if (err < 0)
+ return err;
+
+ spec = codec->spec;
+ spec->vendor_nid = INTEL_GLK_VENDOR_NID;
+
+ return intel_haswell_common_init(codec);
+}
+
/* Intel Baytrail and Braswell; with eld notifier */
static int patch_i915_byt_hdmi(struct hda_codec *codec)
{
@@ -3814,7 +3836,7 @@ static int patch_via_hdmi(struct hda_codec *codec)
HDA_CODEC_ENTRY(0x80862809, "Skylake HDMI", patch_i915_hsw_hdmi),
HDA_CODEC_ENTRY(0x8086280a, "Broxton HDMI", patch_i915_hsw_hdmi),
HDA_CODEC_ENTRY(0x8086280b, "Kabylake HDMI", patch_i915_hsw_hdmi),
-HDA_CODEC_ENTRY(0x8086280d, "Geminilake HDMI", patch_i915_hsw_hdmi),
+HDA_CODEC_ENTRY(0x8086280d, "Geminilake HDMI", patch_i915_glk_hdmi),
HDA_CODEC_ENTRY(0x80862880, "CedarTrail HDMI", patch_generic_hdmi),
HDA_CODEC_ENTRY(0x80862882, "Valleyview2 HDMI", patch_i915_byt_hdmi),
HDA_CODEC_ENTRY(0x80862883, "Braswell HDMI", patch_i915_byt_hdmi),
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 3/3] ALSA: hda: Add Geminilake id to SKL_PLUS
2017-04-12 4:23 [PATCH 1/3] ALSA: hda: Move common haswell init to a helper Subhransu S. Prusty
2017-04-12 4:23 ` [PATCH 2/3] ALSA: hda: Add Geminilake vendor nid Subhransu S. Prusty
@ 2017-04-12 4:24 ` Subhransu S. Prusty
2017-04-12 5:10 ` [PATCH 1/3] ALSA: hda: Move common haswell init to a helper Takashi Iwai
2 siblings, 0 replies; 4+ messages in thread
From: Subhransu S. Prusty @ 2017-04-12 4:24 UTC (permalink / raw)
To: alsa-devel
Cc: tiwai, lgirdwood, patches.audio, broonie, Senthilnathan Veppur,
Vinod Koul, Subhransu S. Prusty
Geminilake is Skylake family platform. So add it's id to skl_plus check.
Fixes: 126cfa2f5e15 ("ALSA: hda: Add Geminilake HDMI codec ID")
Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Cc: Senthilnathan Veppur <senthilnathanx.veppur@intel.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Takashi Iwai <tiwai@suse.de>
---
sound/pci/hda/hda_intel.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 64db6698214c..5b9ffd70ae52 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -370,8 +370,10 @@ enum {
#define IS_KBL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d71)
#define IS_KBL_H(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa2f0)
#define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)
+#define IS_GLK(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x3198)
#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci)) || \
- IS_KBL(pci) || IS_KBL_LP(pci) || IS_KBL_H(pci)
+ IS_KBL(pci) || IS_KBL_LP(pci) || IS_KBL_H(pci) || \
+ IS_GLK(pci)
static char *driver_short_names[] = {
[AZX_DRIVER_ICH] = "HDA Intel",
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/3] ALSA: hda: Move common haswell init to a helper
2017-04-12 4:23 [PATCH 1/3] ALSA: hda: Move common haswell init to a helper Subhransu S. Prusty
2017-04-12 4:23 ` [PATCH 2/3] ALSA: hda: Add Geminilake vendor nid Subhransu S. Prusty
2017-04-12 4:24 ` [PATCH 3/3] ALSA: hda: Add Geminilake id to SKL_PLUS Subhransu S. Prusty
@ 2017-04-12 5:10 ` Takashi Iwai
2 siblings, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2017-04-12 5:10 UTC (permalink / raw)
To: Subhransu S. Prusty
Cc: alsa-devel, patches.audio, lgirdwood, Jaikrishna Nemallapudi,
Vinod Koul, broonie, Senthilnathan Veppur
On Wed, 12 Apr 2017 06:23:58 +0200,
Subhransu S. Prusty wrote:
>
> Geminilake vendor nid is different from other Skylake variants, but rest
> of the initialization code is same.
>
> So a variable is added in hdmi_spec to store the platform specific vendor
> nid and move the initialization code to a helper function to be used by
> both platform specific init.
>
> Fixes: 126cfa2f5e15 ("ALSA: hda: Add Geminilake HDMI codec ID")
> Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
> Signed-off-by: Jaikrishna Nemallapudi <jaikrishnax.nemallapudi@intel.com>
> Cc: Senthilnathan Veppur <senthilnathanx.veppur@intel.com>
> Cc: Vinod Koul <vinod.koul@intel.com>
> Cc: Takashi Iwai <tiwai@suse.de>
> ---
> sound/pci/hda/patch_hdmi.c | 48 ++++++++++++++++++++++++++++++----------------
> 1 file changed, 31 insertions(+), 17 deletions(-)
>
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index 37f11560186a..7413fff06d70 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -177,6 +177,7 @@ struct hdmi_spec {
> bool i915_bound; /* was i915 bound in this driver? */
>
> struct hdac_chmap chmap;
> + hda_nid_t vendor_nid;
> };
>
> #ifdef CONFIG_SND_HDA_I915
> @@ -2381,14 +2382,15 @@ static void intel_haswell_enable_all_pins(struct hda_codec *codec,
> bool update_tree)
> {
> unsigned int vendor_param;
> + struct hdmi_spec *spec = codec->spec;
>
> - vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
> + vendor_param = snd_hda_codec_read(codec, spec->vendor_nid, 0,
> INTEL_GET_VENDOR_VERB, 0);
> if (vendor_param == -1 || vendor_param & INTEL_EN_ALL_PIN_CVTS)
> return;
>
> vendor_param |= INTEL_EN_ALL_PIN_CVTS;
> - vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
> + vendor_param = snd_hda_codec_read(codec, spec->vendor_nid, 0,
> INTEL_SET_VENDOR_VERB, vendor_param);
> if (vendor_param == -1)
> return;
> @@ -2400,8 +2402,9 @@ static void intel_haswell_enable_all_pins(struct hda_codec *codec,
> static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec)
> {
> unsigned int vendor_param;
> + struct hdmi_spec *spec = codec->spec;
>
> - vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
> + vendor_param = snd_hda_codec_read(codec, spec->vendor_nid, 0,
> INTEL_GET_VENDOR_VERB, 0);
> if (vendor_param == -1 || vendor_param & INTEL_EN_DP12)
> return;
> @@ -2409,7 +2412,7 @@ static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec)
> /* enable DP1.2 mode */
> vendor_param |= INTEL_EN_DP12;
> snd_hdac_regmap_add_vendor_verb(&codec->core, INTEL_SET_VENDOR_VERB);
> - snd_hda_codec_write_cache(codec, INTEL_VENDOR_NID, 0,
> + snd_hda_codec_write_cache(codec, spec->vendor_nid, 0,
> INTEL_SET_VENDOR_VERB, vendor_param);
> }
>
> @@ -2502,22 +2505,11 @@ static void i915_pin_cvt_fixup(struct hda_codec *codec,
> }
> }
>
> -/* Intel Haswell and onwards; audio component with eld notifier */
> -static int patch_i915_hsw_hdmi(struct hda_codec *codec)
> +static int intel_haswell_common_init(struct hda_codec *codec)
> {
> - struct hdmi_spec *spec;
> + struct hdmi_spec *spec = codec->spec;
> int err;
>
> - /* HSW+ requires i915 binding */
> - if (!codec->bus->core.audio_component) {
> - codec_info(codec, "No i915 binding for Intel HDMI/DP codec\n");
> - return -ENODEV;
> - }
> -
> - err = alloc_generic_hdmi(codec);
> - if (err < 0)
> - return err;
> - spec = codec->spec;
> codec->dp_mst = true;
> spec->dyn_pcm_assign = true;
>
> @@ -2548,6 +2540,28 @@ static int patch_i915_hsw_hdmi(struct hda_codec *codec)
> return 0;
> }
>
> +/* Intel Haswell and onwards; audio component with eld notifier */
> +static int patch_i915_hsw_hdmi(struct hda_codec *codec)
> +{
> + struct hdmi_spec *spec;
> + int err;
> +
> + /* HSW+ requires i915 binding */
> + if (!codec->bus->core.audio_component) {
> + codec_info(codec, "No i915 binding for Intel HDMI/DP codec\n");
> + return -ENODEV;
> + }
> +
> + err = alloc_generic_hdmi(codec);
> + if (err < 0)
> + return err;
> +
> + spec = codec->spec;
> + spec->vendor_nid = INTEL_VENDOR_NID;
> +
> + return intel_haswell_common_init(codec);
> +}
It'd be easier to change like:
/* Intel Haswell and onwards; audio component with eld notifier */
static int intel_hsw_common_init(struct hda_codec *codec, int vendor_nid)
{
....
spec->vendor_nid = nid;
....
}
static int patch_i915_hsw_hdmi(struct hda_codec *codec)
{
return intel_hsw_common_init(codec, INTEL_VENDOR_NID);
}
static int patch_i915_glk_hdmi(struct hda_codec *codec)
{
return intel_hsw_common_init(codec, INTEL_GLK_VENDOR_NID);
}
Also, there is no merit to split this change to two patches.
thanks,
Takashi
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-04-12 5:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-12 4:23 [PATCH 1/3] ALSA: hda: Move common haswell init to a helper Subhransu S. Prusty
2017-04-12 4:23 ` [PATCH 2/3] ALSA: hda: Add Geminilake vendor nid Subhransu S. Prusty
2017-04-12 4:24 ` [PATCH 3/3] ALSA: hda: Add Geminilake id to SKL_PLUS Subhransu S. Prusty
2017-04-12 5:10 ` [PATCH 1/3] ALSA: hda: Move common haswell init to a helper Takashi Iwai
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.