2019-12-12 07:21:47

by Alison Wang

[permalink] [raw]
Subject: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of unmute outputs on probe"

This reverts commit 631bc8f0134ae9620d86a96b8c5f9445d91a2dca.

In commit 631bc8f0134a, snd_soc_component_update_bits is used instead of
snd_soc_component_write. Although EN_HP_ZCD and EN_ADC_ZCD are enabled
in ANA_CTRL register, MUTE_LO, MUTE_HP and MUTE_ADC bits are remained as
the default value. It causes LO, HP and ADC are all muted after driver
probe.

The patch is to revert this commit, snd_soc_component_write is still
used and MUTE_LO, MUTE_HP and MUTE_ADC are set as zero (unmuted).

Signed-off-by: Alison Wang <[email protected]>
---
sound/soc/codecs/sgtl5000.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index aa1f963..0b35fca 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -1458,7 +1458,6 @@ static int sgtl5000_probe(struct snd_soc_component *component)
int ret;
u16 reg;
struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
- unsigned int zcd_mask = SGTL5000_HP_ZCD_EN | SGTL5000_ADC_ZCD_EN;

/* power up sgtl5000 */
ret = sgtl5000_set_power_regs(component);
@@ -1486,8 +1485,9 @@ static int sgtl5000_probe(struct snd_soc_component *component)
0x1f);
snd_soc_component_write(component, SGTL5000_CHIP_PAD_STRENGTH, reg);

- snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_CTRL,
- zcd_mask, zcd_mask);
+ snd_soc_component_write(component, SGTL5000_CHIP_ANA_CTRL,
+ SGTL5000_HP_ZCD_EN |
+ SGTL5000_ADC_ZCD_EN);

snd_soc_component_update_bits(component, SGTL5000_CHIP_MIC_CTRL,
SGTL5000_BIAS_R_MASK,
--
2.9.5


2019-12-12 09:18:42

by Oleksandr Suvorov

[permalink] [raw]
Subject: Re: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of unmute outputs on probe"

Alison, could you please explain, what reason to revert this fix? All
these blocks have their own control and unmute on demand.
Why do you stand on unconditional unmuting of outputs and ADC on driver probing?

On Thu, Dec 12, 2019 at 9:20 AM Alison Wang <[email protected]> wrote:
>
> This reverts commit 631bc8f0134ae9620d86a96b8c5f9445d91a2dca.
>
> In commit 631bc8f0134a, snd_soc_component_update_bits is used instead of
> snd_soc_component_write. Although EN_HP_ZCD and EN_ADC_ZCD are enabled
> in ANA_CTRL register, MUTE_LO, MUTE_HP and MUTE_ADC bits are remained as
> the default value. It causes LO, HP and ADC are all muted after driver
> probe.
>
> The patch is to revert this commit, snd_soc_component_write is still
> used and MUTE_LO, MUTE_HP and MUTE_ADC are set as zero (unmuted).
>
> Signed-off-by: Alison Wang <[email protected]>
> ---
> sound/soc/codecs/sgtl5000.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
> index aa1f963..0b35fca 100644
> --- a/sound/soc/codecs/sgtl5000.c
> +++ b/sound/soc/codecs/sgtl5000.c
> @@ -1458,7 +1458,6 @@ static int sgtl5000_probe(struct snd_soc_component *component)
> int ret;
> u16 reg;
> struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
> - unsigned int zcd_mask = SGTL5000_HP_ZCD_EN | SGTL5000_ADC_ZCD_EN;
>
> /* power up sgtl5000 */
> ret = sgtl5000_set_power_regs(component);
> @@ -1486,8 +1485,9 @@ static int sgtl5000_probe(struct snd_soc_component *component)
> 0x1f);
> snd_soc_component_write(component, SGTL5000_CHIP_PAD_STRENGTH, reg);
>
> - snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_CTRL,
> - zcd_mask, zcd_mask);
> + snd_soc_component_write(component, SGTL5000_CHIP_ANA_CTRL,
> + SGTL5000_HP_ZCD_EN |
> + SGTL5000_ADC_ZCD_EN);
>
> snd_soc_component_update_bits(component, SGTL5000_CHIP_MIC_CTRL,
> SGTL5000_BIAS_R_MASK,
> --
> 2.9.5
>


--
Best regards
Oleksandr Suvorov

Toradex AG
Altsagenstrasse 5 | 6048 Horw/Luzern | Switzerland | T: +41 41 500
4800 (main line)

2019-12-12 09:26:37

by Alison Wang

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of unmute outputs on probe"

Hi, Oleksandr,

I think I have explained the reason in my email which sent to you yesterday. I attached it too.
According to my test on the boards, MUTE_LO, MUTE_HP and MUTE_ADC are all muted when
playing the sound.

Could you give me some ideas about this issue?


Best Regards,I
Alison Wang


> -----Original Message-----
> From: Oleksandr Suvorov <[email protected]>
> Sent: Thursday, December 12, 2019 5:11 PM
> To: Alison Wang <[email protected]>
> Cc: Marcel Ziswiler <[email protected]>; Igor Opaniuk
> <[email protected]>; [email protected]; [email protected];
> [email protected]; Oleksandr Suvorov <[email protected]>;
> [email protected]; [email protected]
> Subject: [EXT] Re: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of
> unmute outputs on probe"
>
> Caution: EXT Email
>
> Alison, could you please explain, what reason to revert this fix? All these blocks
> have their own control and unmute on demand.
> Why do you stand on unconditional unmuting of outputs and ADC on driver
> probing?
>
> On Thu, Dec 12, 2019 at 9:20 AM Alison Wang <[email protected]>
> wrote:
> >
> > This reverts commit 631bc8f0134ae9620d86a96b8c5f9445d91a2dca.
> >
> > In commit 631bc8f0134a, snd_soc_component_update_bits is used instead
> > of snd_soc_component_write. Although EN_HP_ZCD and EN_ADC_ZCD are
> > enabled in ANA_CTRL register, MUTE_LO, MUTE_HP and MUTE_ADC bits are
> > remained as the default value. It causes LO, HP and ADC are all muted
> > after driver probe.
> >
> > The patch is to revert this commit, snd_soc_component_write is still
> > used and MUTE_LO, MUTE_HP and MUTE_ADC are set as zero (unmuted).
> >
> > Signed-off-by: Alison Wang <[email protected]>
> > ---
> > sound/soc/codecs/sgtl5000.c | 6 +++---
> > 1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
> > index aa1f963..0b35fca 100644
> > --- a/sound/soc/codecs/sgtl5000.c
> > +++ b/sound/soc/codecs/sgtl5000.c
> > @@ -1458,7 +1458,6 @@ static int sgtl5000_probe(struct
> snd_soc_component *component)
> > int ret;
> > u16 reg;
> > struct sgtl5000_priv *sgtl5000 =
> snd_soc_component_get_drvdata(component);
> > - unsigned int zcd_mask = SGTL5000_HP_ZCD_EN |
> SGTL5000_ADC_ZCD_EN;
> >
> > /* power up sgtl5000 */
> > ret = sgtl5000_set_power_regs(component);
> > @@ -1486,8 +1485,9 @@ static int sgtl5000_probe(struct
> snd_soc_component *component)
> > 0x1f);
> > snd_soc_component_write(component,
> SGTL5000_CHIP_PAD_STRENGTH,
> > reg);
> >
> > - snd_soc_component_update_bits(component,
> SGTL5000_CHIP_ANA_CTRL,
> > - zcd_mask, zcd_mask);
> > + snd_soc_component_write(component,
> SGTL5000_CHIP_ANA_CTRL,
> > + SGTL5000_HP_ZCD_EN |
> > + SGTL5000_ADC_ZCD_EN);
> >
> > snd_soc_component_update_bits(component,
> SGTL5000_CHIP_MIC_CTRL,
> > SGTL5000_BIAS_R_MASK,
> > --
> > 2.9.5
> >
>
>
> --
> Best regards
> Oleksandr Suvorov
>
> Toradex AG
> Altsagenstrasse 5 | 6048 Horw/Luzern | Switzerland | T: +41 41 500
> 4800 (main line)


Attachments:
(No filename) (3.55 kB)

2019-12-12 10:08:27

by Alison Wang

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of unmute outputs on probe"

Hi, Oleksandr,

In your patch, outputs and ADC are muted on driver probing. I don't know when and
where they can be unmuted in the kernel before playing in the application.

Could you please give me some ideas?


Best Regards,
Alison Wang

> -----Original Message-----
> From: Alison Wang
> Sent: Thursday, December 12, 2019 5:25 PM
> To: Oleksandr Suvorov <[email protected]>
> Cc: Marcel Ziswiler <[email protected]>; Igor Opaniuk
> <[email protected]>; [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]
> Subject: RE: [EXT] Re: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of
> unmute outputs on probe"
>
> Hi, Oleksandr,
>
> I think I have explained the reason in my email which sent to you yesterday. I
> attached it too.
> According to my test on the boards, MUTE_LO, MUTE_HP and MUTE_ADC are
> all muted when playing the sound.
>
> Could you give me some ideas about this issue?
>
>
> Best Regards,I
> Alison Wang
>
>
> > -----Original Message-----
> > From: Oleksandr Suvorov <[email protected]>
> > Sent: Thursday, December 12, 2019 5:11 PM
> > To: Alison Wang <[email protected]>
> > Cc: Marcel Ziswiler <[email protected]>; Igor Opaniuk
> > <[email protected]>; [email protected]; [email protected];
> > [email protected]; Oleksandr Suvorov
> <[email protected]>;
> > [email protected]; [email protected]
> > Subject: [EXT] Re: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of
> > unmute outputs on probe"
> >
> > Caution: EXT Email
> >
> > Alison, could you please explain, what reason to revert this fix? All these
> blocks
> > have their own control and unmute on demand.
> > Why do you stand on unconditional unmuting of outputs and ADC on driver
> > probing?
> >
> > On Thu, Dec 12, 2019 at 9:20 AM Alison Wang <[email protected]>
> > wrote:
> > >
> > > This reverts commit 631bc8f0134ae9620d86a96b8c5f9445d91a2dca.
> > >
> > > In commit 631bc8f0134a, snd_soc_component_update_bits is used instead
> > > of snd_soc_component_write. Although EN_HP_ZCD and EN_ADC_ZCD are
> > > enabled in ANA_CTRL register, MUTE_LO, MUTE_HP and MUTE_ADC bits
> are
> > > remained as the default value. It causes LO, HP and ADC are all muted
> > > after driver probe.
> > >
> > > The patch is to revert this commit, snd_soc_component_write is still
> > > used and MUTE_LO, MUTE_HP and MUTE_ADC are set as zero (unmuted).
> > >
> > > Signed-off-by: Alison Wang <[email protected]>
> > > ---
> > > sound/soc/codecs/sgtl5000.c | 6 +++---
> > > 1 file changed, 3 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
> > > index aa1f963..0b35fca 100644
> > > --- a/sound/soc/codecs/sgtl5000.c
> > > +++ b/sound/soc/codecs/sgtl5000.c
> > > @@ -1458,7 +1458,6 @@ static int sgtl5000_probe(struct
> > snd_soc_component *component)
> > > int ret;
> > > u16 reg;
> > > struct sgtl5000_priv *sgtl5000 =
> > snd_soc_component_get_drvdata(component);
> > > - unsigned int zcd_mask = SGTL5000_HP_ZCD_EN |
> > SGTL5000_ADC_ZCD_EN;
> > >
> > > /* power up sgtl5000 */
> > > ret = sgtl5000_set_power_regs(component);
> > > @@ -1486,8 +1485,9 @@ static int sgtl5000_probe(struct
> > snd_soc_component *component)
> > > 0x1f);
> > > snd_soc_component_write(component,
> > SGTL5000_CHIP_PAD_STRENGTH,
> > > reg);
> > >
> > > - snd_soc_component_update_bits(component,
> > SGTL5000_CHIP_ANA_CTRL,
> > > - zcd_mask, zcd_mask);
> > > + snd_soc_component_write(component,
> > SGTL5000_CHIP_ANA_CTRL,
> > > + SGTL5000_HP_ZCD_EN |
> > > + SGTL5000_ADC_ZCD_EN);
> > >
> > > snd_soc_component_update_bits(component,
> > SGTL5000_CHIP_MIC_CTRL,
> > > SGTL5000_BIAS_R_MASK,
> > > --
> > > 2.9.5
> > >
> >
> >
> > --
> > Best regards
> > Oleksandr Suvorov
> >
> > Toradex AG
> > Altsagenstrasse 5 | 6048 Horw/Luzern | Switzerland | T: +41 41 500
> > 4800 (main line)

2019-12-12 10:26:07

by Oleksandr Suvorov

[permalink] [raw]
Subject: Re: [EXT] Re: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of unmute outputs on probe"

They unmute with standard sound controls:
static const struct snd_kcontrol_new sgtl5000_snd_controls[] = {
...
SOC_SINGLE("Capture Switch", SGTL5000_CHIP_ANA_CTRL, 0, 1, 1),
...
SOC_SINGLE("Headphone Playback Switch", SGTL5000_CHIP_ANA_CTRL, 4, 1, 1),
...
SOC_SINGLE("Lineout Playback Switch", SGTL5000_CHIP_ANA_CTRL, 8, 1, 1),
...

We tested this standard solution using gstreamer and standard ALSA
tools like aplay, arecord and all these tools unmute needed blocks
successfully.

On Thu, Dec 12, 2019 at 12:08 PM Alison Wang <[email protected]> wrote:
>
> Hi, Oleksandr,
>
> In your patch, outputs and ADC are muted on driver probing. I don't know when and
> where they can be unmuted in the kernel before playing in the application.
>
> Could you please give me some ideas?
>
>
> Best Regards,
> Alison Wang
>
> > -----Original Message-----
> > From: Alison Wang
> > Sent: Thursday, December 12, 2019 5:25 PM
> > To: Oleksandr Suvorov <[email protected]>
> > Cc: Marcel Ziswiler <[email protected]>; Igor Opaniuk
> > <[email protected]>; [email protected]; [email protected];
> > [email protected]; [email protected];
> > [email protected]
> > Subject: RE: [EXT] Re: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of
> > unmute outputs on probe"
> >
> > Hi, Oleksandr,
> >
> > I think I have explained the reason in my email which sent to you yesterday. I
> > attached it too.
> > According to my test on the boards, MUTE_LO, MUTE_HP and MUTE_ADC are
> > all muted when playing the sound.
> >
> > Could you give me some ideas about this issue?
> >
> >
> > Best Regards,I
> > Alison Wang
> >
> >
> > > -----Original Message-----
> > > From: Oleksandr Suvorov <[email protected]>
> > > Sent: Thursday, December 12, 2019 5:11 PM
> > > To: Alison Wang <[email protected]>
> > > Cc: Marcel Ziswiler <[email protected]>; Igor Opaniuk
> > > <[email protected]>; [email protected]; [email protected];
> > > [email protected]; Oleksandr Suvorov
> > <[email protected]>;
> > > [email protected]; [email protected]
> > > Subject: [EXT] Re: [PATCH] ASoC: sgtl5000: Revert "ASoC: sgtl5000: Fix of
> > > unmute outputs on probe"
> > >
> > > Caution: EXT Email
> > >
> > > Alison, could you please explain, what reason to revert this fix? All these
> > blocks
> > > have their own control and unmute on demand.
> > > Why do you stand on unconditional unmuting of outputs and ADC on driver
> > > probing?
> > >
> > > On Thu, Dec 12, 2019 at 9:20 AM Alison Wang <[email protected]>
> > > wrote:
> > > >
> > > > This reverts commit 631bc8f0134ae9620d86a96b8c5f9445d91a2dca.
> > > >
> > > > In commit 631bc8f0134a, snd_soc_component_update_bits is used instead
> > > > of snd_soc_component_write. Although EN_HP_ZCD and EN_ADC_ZCD are
> > > > enabled in ANA_CTRL register, MUTE_LO, MUTE_HP and MUTE_ADC bits
> > are
> > > > remained as the default value. It causes LO, HP and ADC are all muted
> > > > after driver probe.
> > > >
> > > > The patch is to revert this commit, snd_soc_component_write is still
> > > > used and MUTE_LO, MUTE_HP and MUTE_ADC are set as zero (unmuted).
> > > >
> > > > Signed-off-by: Alison Wang <[email protected]>
> > > > ---
> > > > sound/soc/codecs/sgtl5000.c | 6 +++---
> > > > 1 file changed, 3 insertions(+), 3 deletions(-)
> > > >
> > > > diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
> > > > index aa1f963..0b35fca 100644
> > > > --- a/sound/soc/codecs/sgtl5000.c
> > > > +++ b/sound/soc/codecs/sgtl5000.c
> > > > @@ -1458,7 +1458,6 @@ static int sgtl5000_probe(struct
> > > snd_soc_component *component)
> > > > int ret;
> > > > u16 reg;
> > > > struct sgtl5000_priv *sgtl5000 =
> > > snd_soc_component_get_drvdata(component);
> > > > - unsigned int zcd_mask = SGTL5000_HP_ZCD_EN |
> > > SGTL5000_ADC_ZCD_EN;
> > > >
> > > > /* power up sgtl5000 */
> > > > ret = sgtl5000_set_power_regs(component);
> > > > @@ -1486,8 +1485,9 @@ static int sgtl5000_probe(struct
> > > snd_soc_component *component)
> > > > 0x1f);
> > > > snd_soc_component_write(component,
> > > SGTL5000_CHIP_PAD_STRENGTH,
> > > > reg);
> > > >
> > > > - snd_soc_component_update_bits(component,
> > > SGTL5000_CHIP_ANA_CTRL,
> > > > - zcd_mask, zcd_mask);
> > > > + snd_soc_component_write(component,
> > > SGTL5000_CHIP_ANA_CTRL,
> > > > + SGTL5000_HP_ZCD_EN |
> > > > + SGTL5000_ADC_ZCD_EN);
> > > >
> > > > snd_soc_component_update_bits(component,
> > > SGTL5000_CHIP_MIC_CTRL,
> > > > SGTL5000_BIAS_R_MASK,
> > > > --
> > > > 2.9.5
> > > >
> > >
> > >
> > > --
> > > Best regards
> > > Oleksandr Suvorov
> > >
> > > Toradex AG
> > > Altsagenstrasse 5 | 6048 Horw/Luzern | Switzerland | T: +41 41 500
> > > 4800 (main line)



--
Best regards
Oleksandr Suvorov

Toradex AG
Altsagenstrasse 5 | 6048 Horw/Luzern | Switzerland | T: +41 41 500
4800 (main line)