[alsa-devel] FW: move eapd coef function before ACT_PRE_PROBE state

Kailang kailang at realtek.com
Wed May 8 11:17:30 CEST 2019


Sorry!! I didn't get the mail.

> -----Original Message-----
> From: Takashi Iwai <tiwai at suse.de>
> Sent: Wednesday, May 8, 2019 3:28 PM
> To: Kailang <kailang at realtek.com>
> Cc: (alsa-devel at alsa-project.org) <alsa-devel at alsa-project.org>
> Subject: Re: FW: move eapd coef function before ACT_PRE_PROBE state
> 
> On Wed, 08 May 2019 08:59:02 +0200,
> Kailang wrote:
> >
> > Hi Takashi,
> >
> > I recreate patch as attach.
> 
> No, no, it's not what I meant.  I already *reviewed* and replied your patch.
> 
> I copy my previous reply once again.  Please read and test it.

Patch fail.

patch: **** malformed patch at line 10: @@ -796,10 +795,22 @@ static int alc_build_controls(struct hda_codec *codec)

> 
> ===
> 
> Unfortuantely, moving this doesn't suffice.  There is the hibernation resume
> that needs the explicit initialization again.
> 
> Also, calling this in alc_alloc_spec() isn't intuitive.  Although it'd become a
> larger patch, I prefer making it more explicit, e.g. creating
> alc_pre_init() function handling the pre-init procedure and call it from
> appropriate places.
> 
> So I can imagine a patch like below.  Does it work for you?
> 
> 
> thanks,
> 
> Takashi
> 
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -501,7 +501,6 @@ static void alc_eapd_shutup(struct hda_codec *codec)
>  /* generic EAPD initialization */
>  static void alc_auto_init_amp(struct hda_codec *codec, int type)  {
> -	alc_fill_eapd_coef(codec);
>  	alc_auto_setup_eapd(codec, true);
>  	alc_write_gpio(codec);
>  	switch (type) {
> @@ -796,10 +795,22 @@ static int alc_build_controls(struct hda_codec
> *codec)
>   * Common callbacks
>   */
> 
> +static void alc_pre_init(struct hda_codec *codec) {
> +	alc_fill_eapd_coef(codec);
> +}
> +
> +#define is_s4_resume(codec) \
> +	((codec)->core.dev.power.power_state.event == PM_EVENT_RESTORE)
> +
>  static int alc_init(struct hda_codec *codec)  {
>  	struct alc_spec *spec = codec->spec;
> 
> +	/* hibernation resume needs the full chip initialization */
> +	if (is_s4_resume(codec))
> +		alc_pre_init(codec);
> +
>  	if (spec->init_hook)
>  		spec->init_hook(codec);
> 
> @@ -1537,6 +1548,8 @@ static int patch_alc880(struct hda_codec *codec)
> 
>  	codec->patch_ops.unsol_event = alc880_unsol_event;
> 
> +	alc_pre_init(codec);
> +
>  	snd_hda_pick_fixup(codec, alc880_fixup_models, alc880_fixup_tbl,
>  		       alc880_fixups);
>  	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); @@ -1788,6
> +1801,8 @@ static int patch_alc260(struct hda_codec *codec)
> 
>  	spec->shutup = alc_eapd_shutup;
> 
> +	alc_pre_init(codec);
> +
>  	snd_hda_pick_fixup(codec, alc260_fixup_models, alc260_fixup_tbl,
>  			   alc260_fixups);
>  	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); @@ -2491,6
> +2506,8 @@ static int patch_alc882(struct hda_codec *codec)
>  		break;
>  	}
> 
> +	alc_pre_init(codec);
> +
>  	snd_hda_pick_fixup(codec, alc882_fixup_models, alc882_fixup_tbl,
>  		       alc882_fixups);
>  	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); @@ -2665,6
> +2682,8 @@ static int patch_alc262(struct hda_codec *codec)  #endif
>  	alc_fix_pll_init(codec, 0x20, 0x0a, 10);
> 
> +	alc_pre_init(codec);
> +
>  	snd_hda_pick_fixup(codec, alc262_fixup_models, alc262_fixup_tbl,
>  		       alc262_fixups);
>  	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); @@ -2809,6
> +2828,8 @@ static int patch_alc268(struct hda_codec *codec)
> 
>  	spec->shutup = alc_eapd_shutup;
> 
> +	alc_pre_init(codec);
> +
>  	snd_hda_pick_fixup(codec, alc268_fixup_models, alc268_fixup_tbl,
> alc268_fixups);
>  	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
> 
> @@ -7768,6 +7789,8 @@ static int patch_alc269(struct hda_codec *codec)
>  		spec->init_hook = alc5505_dsp_init;
>  	}
> 
> +	alc_pre_init(codec);
> +
>  	snd_hda_pick_fixup(codec, alc269_fixup_models,
>  		       alc269_fixup_tbl, alc269_fixups);
>  	snd_hda_pick_pin_fixup(codec, alc269_pin_fixup_tbl, alc269_fixups); @@
> -7910,6 +7933,8 @@ static int patch_alc861(struct hda_codec *codec)
>  	spec->power_hook = alc_power_eapd;
>  #endif
> 
> +	alc_pre_init(codec);
> +
>  	snd_hda_pick_fixup(codec, NULL, alc861_fixup_tbl, alc861_fixups);
>  	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
> 
> @@ -8007,6 +8032,8 @@ static int patch_alc861vd(struct hda_codec *codec)
> 
>  	spec->shutup = alc_eapd_shutup;
> 
> +	alc_pre_init(codec);
> +
>  	snd_hda_pick_fixup(codec, NULL, alc861vd_fixup_tbl, alc861vd_fixups);
>  	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
> 
> @@ -8742,6 +8769,8 @@ static int patch_alc662(struct hda_codec *codec)
>  		break;
>  	}
> 
> +	alc_pre_init(codec);
> +
>  	snd_hda_pick_fixup(codec, alc662_fixup_models,
>  		       alc662_fixup_tbl, alc662_fixups);
>  	snd_hda_pick_pin_fixup(codec, alc662_pin_fixup_tbl, alc662_fixups);
> 
> 
> ------Please consider the environment before printing this e-mail.


More information about the Alsa-devel mailing list