All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ASoC: rt1011: add i2s reference control for rt1011
@ 2021-09-06 10:12 Jack Yu
  2021-09-07 14:53 ` Pierre-Louis Bossart
  2021-09-13 10:53 ` Mark Brown
  0 siblings, 2 replies; 8+ messages in thread
From: Jack Yu @ 2021-09-06 10:12 UTC (permalink / raw)
  To: broonie, lgirdwood
  Cc: oder_chiou, Jack Yu, alsa-devel, lars, kent_chen, derek.fang,
	shumingf, flove

Add i2s reference control for rt1011 amp.

Signed-off-by: Jack Yu <jack.yu@realtek.com>
---
 sound/soc/codecs/rt1011.c | 54 +++++++++++++++++++++++++++++++++++++++
 sound/soc/codecs/rt1011.h |  7 +++++
 2 files changed, 61 insertions(+)

diff --git a/sound/soc/codecs/rt1011.c b/sound/soc/codecs/rt1011.c
index faff2b558687..508597866dff 100644
--- a/sound/soc/codecs/rt1011.c
+++ b/sound/soc/codecs/rt1011.c
@@ -1311,6 +1311,57 @@ static int rt1011_r0_load_info(struct snd_kcontrol *kcontrol,
 	.put = rt1011_r0_load_mode_put \
 }
 
+static const char * const rt1011_i2s_ref[] = {
+	"None", "Left Channel", "Right Channel"
+};
+
+static SOC_ENUM_SINGLE_DECL(rt1011_i2s_ref_enum, 0, 0,
+	rt1011_i2s_ref);
+
+static int rt1011_i2s_ref_put(struct snd_kcontrol *kcontrol,
+		struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component =
+		snd_soc_kcontrol_component(kcontrol);
+	struct rt1011_priv *rt1011 =
+		snd_soc_component_get_drvdata(component);
+	int i2s_ref_ch = ucontrol->value.integer.value[0];
+
+	switch (i2s_ref_ch) {
+	case RT1011_I2S_REF_LEFT_CH:
+		regmap_write(rt1011->regmap, RT1011_TDM_TOTAL_SET, 0x0240);
+		regmap_write(rt1011->regmap, RT1011_TDM1_SET_2, 0x8);
+		regmap_write(rt1011->regmap, RT1011_TDM1_SET_1, 0x1022);
+		regmap_write(rt1011->regmap, RT1011_ADCDAT_OUT_SOURCE, 0x4);
+		break;
+	case RT1011_I2S_REF_RIGHT_CH:
+		regmap_write(rt1011->regmap, RT1011_TDM_TOTAL_SET, 0x0240);
+		regmap_write(rt1011->regmap, RT1011_TDM1_SET_2, 0x8);
+		regmap_write(rt1011->regmap, RT1011_TDM1_SET_1, 0x10a2);
+		regmap_write(rt1011->regmap, RT1011_ADCDAT_OUT_SOURCE, 0x4);
+		break;
+	default:
+		dev_info(component->dev, "I2S Reference: Do nothing\n");
+	}
+
+	rt1011->i2s_ref = ucontrol->value.integer.value[0];
+
+	return 0;
+}
+
+static int rt1011_i2s_ref_get(struct snd_kcontrol *kcontrol,
+		struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component =
+		snd_soc_kcontrol_component(kcontrol);
+	struct rt1011_priv *rt1011 =
+		snd_soc_component_get_drvdata(component);
+
+	ucontrol->value.integer.value[0] = rt1011->i2s_ref;
+
+	return 0;
+}
+
 static const struct snd_kcontrol_new rt1011_snd_controls[] = {
 	/* I2S Data In Selection */
 	SOC_ENUM("DIN Source", rt1011_din_source_enum),
@@ -1349,6 +1400,9 @@ static const struct snd_kcontrol_new rt1011_snd_controls[] = {
 	/* R0 temperature */
 	SOC_SINGLE("R0 Temperature", RT1011_STP_INITIAL_RESISTANCE_TEMP,
 		2, 255, 0),
+	/* I2S Reference */
+	SOC_ENUM_EXT("I2S Reference", rt1011_i2s_ref_enum,
+		rt1011_i2s_ref_get, rt1011_i2s_ref_put),
 };
 
 static int rt1011_is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
diff --git a/sound/soc/codecs/rt1011.h b/sound/soc/codecs/rt1011.h
index 68fadc15fa8c..afb2fad94216 100644
--- a/sound/soc/codecs/rt1011.h
+++ b/sound/soc/codecs/rt1011.h
@@ -654,6 +654,12 @@ enum {
 	RT1011_AIFS
 };
 
+enum {
+	RT1011_I2S_REF_NONE,
+	RT1011_I2S_REF_LEFT_CH,
+	RT1011_I2S_REF_RIGHT_CH,
+};
+
 /* BiQual & DRC related settings */
 #define RT1011_BQ_DRC_NUM 128
 struct rt1011_bq_drc_params {
@@ -692,6 +698,7 @@ struct rt1011_priv {
 	unsigned int r0_reg, cali_done;
 	unsigned int r0_calib, temperature_calib;
 	int recv_spk_mode;
+	unsigned int i2s_ref;
 };
 
 #endif		/* end of _RT1011_H_ */
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
  2021-09-06 10:12 [PATCH] ASoC: rt1011: add i2s reference control for rt1011 Jack Yu
@ 2021-09-07 14:53 ` Pierre-Louis Bossart
  2021-09-08  2:17   ` Jack Yu
  2021-09-13 10:53 ` Mark Brown
  1 sibling, 1 reply; 8+ messages in thread
From: Pierre-Louis Bossart @ 2021-09-07 14:53 UTC (permalink / raw)
  To: Jack Yu, broonie, lgirdwood
  Cc: oder_chiou, alsa-devel, lars, kent_chen, derek.fang, shumingf, flove



On 9/6/21 5:12 AM, Jack Yu wrote:
> Add i2s reference control for rt1011 amp.
> 
> Signed-off-by: Jack Yu <jack.yu@realtek.com>

> +static const char * const rt1011_i2s_ref[] = {
> +	"None", "Left Channel", "Right Channel"
> +};

> +enum {
> +	RT1011_I2S_REF_NONE,
> +	RT1011_I2S_REF_LEFT_CH,
> +	RT1011_I2S_REF_RIGHT_CH,
> +};

is it possible to get Left-Right-mix (mixed on rt1011) and Left-Right
(two channels, with the application selecting what they want)?


^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
  2021-09-07 14:53 ` Pierre-Louis Bossart
@ 2021-09-08  2:17   ` Jack Yu
  2021-09-08 15:22     ` Pierre-Louis Bossart
  0 siblings, 1 reply; 8+ messages in thread
From: Jack Yu @ 2021-09-08  2:17 UTC (permalink / raw)
  To: Pierre-Louis Bossart, broonie, lgirdwood
  Cc: Oder Chiou, alsa-devel, lars,
	kent_chen@realtek.com [陳建宏],
	Derek [方德義],
	Shuming [范書銘], Flove(HsinFu)


> -----Original Message-----
> From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Sent: Tuesday, September 7, 2021 10:54 PM
> To: Jack Yu <jack.yu@realtek.com>; broonie@kernel.org;
> lgirdwood@gmail.com
> Cc: Oder Chiou <oder_chiou@realtek.com>; alsa-devel@alsa-project.org;
> lars@metafoo.de; kent_chen@realtek.com [陳建宏]
> <kent_chen@realtek.com>; Derek [方德義] <derek.fang@realtek.com>;
> Shuming [范書銘] <shumingf@realtek.com>; Flove(HsinFu)
> <flove@realtek.com>
> Subject: Re: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
> 
> On 9/6/21 5:12 AM, Jack Yu wrote:
> > Add i2s reference control for rt1011 amp.
> >
> > Signed-off-by: Jack Yu <jack.yu@realtek.com>
> 
> > +static const char * const rt1011_i2s_ref[] = {
> > +	"None", "Left Channel", "Right Channel"
> > +};
> 
> > +enum {
> > +	RT1011_I2S_REF_NONE,
> > +	RT1011_I2S_REF_LEFT_CH,
> > +	RT1011_I2S_REF_RIGHT_CH,
> > +};
> 
> is it possible to get Left-Right-mix (mixed on rt1011) and Left-Right (two
> channels, with the application selecting what they want)?

It's a mono amp, so there's no Left-Right-mix setting. 
And for the choice of Left-Right channel, it's already available with this patch.

> 
> ------Please consider the environment before printing this e-mail.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
  2021-09-08  2:17   ` Jack Yu
@ 2021-09-08 15:22     ` Pierre-Louis Bossart
  2021-09-09  2:40       ` Jack Yu
  0 siblings, 1 reply; 8+ messages in thread
From: Pierre-Louis Bossart @ 2021-09-08 15:22 UTC (permalink / raw)
  To: Jack Yu, broonie, lgirdwood
  Cc: Oder Chiou, alsa-devel, lars,
	kent_chen@realtek.com [陳建宏],
	Derek [方德義],
	Shuming [范書銘], Flove(HsinFu)



On 9/7/21 9:17 PM, Jack Yu wrote:
> 
>> -----Original Message-----
>> From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
>> Sent: Tuesday, September 7, 2021 10:54 PM
>> To: Jack Yu <jack.yu@realtek.com>; broonie@kernel.org;
>> lgirdwood@gmail.com
>> Cc: Oder Chiou <oder_chiou@realtek.com>; alsa-devel@alsa-project.org;
>> lars@metafoo.de; kent_chen@realtek.com [陳建宏]
>> <kent_chen@realtek.com>; Derek [方德義] <derek.fang@realtek.com>;
>> Shuming [范書銘] <shumingf@realtek.com>; Flove(HsinFu)
>> <flove@realtek.com>
>> Subject: Re: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
>>
>> On 9/6/21 5:12 AM, Jack Yu wrote:
>>> Add i2s reference control for rt1011 amp.
>>>
>>> Signed-off-by: Jack Yu <jack.yu@realtek.com>
>>
>>> +static const char * const rt1011_i2s_ref[] = {
>>> +	"None", "Left Channel", "Right Channel"
>>> +};
>>
>>> +enum {
>>> +	RT1011_I2S_REF_NONE,
>>> +	RT1011_I2S_REF_LEFT_CH,
>>> +	RT1011_I2S_REF_RIGHT_CH,
>>> +};
>>
>> is it possible to get Left-Right-mix (mixed on rt1011) and Left-Right (two
>> channels, with the application selecting what they want)?
> 
> It's a mono amp, so there's no Left-Right-mix setting. 
> And for the choice of Left-Right channel, it's already available with this patch.

So it's just to place a mono reference in either left or right channel
of the I2S link? Why not dual-mono as well then?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
  2021-09-08 15:22     ` Pierre-Louis Bossart
@ 2021-09-09  2:40       ` Jack Yu
  2021-09-09  3:25         ` Pierre-Louis Bossart
  0 siblings, 1 reply; 8+ messages in thread
From: Jack Yu @ 2021-09-09  2:40 UTC (permalink / raw)
  To: Pierre-Louis Bossart, broonie, lgirdwood
  Cc: Oder Chiou, alsa-devel, lars,
	kent_chen@realtek.com [陳建宏],
	Derek [方德義],
	Shuming [范書銘], Flove(HsinFu)


> -----Original Message-----
> From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Sent: Wednesday, September 8, 2021 11:23 PM
> To: Jack Yu <jack.yu@realtek.com>; broonie@kernel.org;
> lgirdwood@gmail.com
> Cc: Oder Chiou <oder_chiou@realtek.com>; alsa-devel@alsa-project.org;
> lars@metafoo.de; kent_chen@realtek.com [陳建宏]
> <kent_chen@realtek.com>; Derek [方德義] <derek.fang@realtek.com>;
> Shuming [范書銘] <shumingf@realtek.com>; Flove(HsinFu)
> <flove@realtek.com>
> Subject: Re: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
> 
> On 9/7/21 9:17 PM, Jack Yu wrote:
> >
> >> -----Original Message-----
> >> From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> >> Sent: Tuesday, September 7, 2021 10:54 PM
> >> To: Jack Yu <jack.yu@realtek.com>; broonie@kernel.org;
> >> lgirdwood@gmail.com
> >> Cc: Oder Chiou <oder_chiou@realtek.com>; alsa-devel@alsa-project.org;
> >> lars@metafoo.de; kent_chen@realtek.com [陳建宏]
> >> <kent_chen@realtek.com>; Derek [方德義] <derek.fang@realtek.com>;
> >> Shuming [范書銘] <shumingf@realtek.com>; Flove(HsinFu)
> >> <flove@realtek.com>
> >> Subject: Re: [PATCH] ASoC: rt1011: add i2s reference control for
> >> rt1011
> >>
> >> On 9/6/21 5:12 AM, Jack Yu wrote:
> >>> Add i2s reference control for rt1011 amp.
> >>>
> >>> Signed-off-by: Jack Yu <jack.yu@realtek.com>
> >>
> >>> +static const char * const rt1011_i2s_ref[] = {
> >>> +	"None", "Left Channel", "Right Channel"
> >>> +};
> >>
> >>> +enum {
> >>> +	RT1011_I2S_REF_NONE,
> >>> +	RT1011_I2S_REF_LEFT_CH,
> >>> +	RT1011_I2S_REF_RIGHT_CH,
> >>> +};
> >>
> >> is it possible to get Left-Right-mix (mixed on rt1011) and Left-Right
> >> (two channels, with the application selecting what they want)?
> >
> > It's a mono amp, so there's no Left-Right-mix setting.
> > And for the choice of Left-Right channel, it's already available with this
> patch.
> 
> So it's just to place a mono reference in either left or right channel of the I2S
> link? Why not dual-mono as well then?

The patch is a specific control for two amps to send AEC data on single I2S data input pin by standard I2S protocol. 
If there are two I2S input from SoC, we can add dual-mono mode for it, but so far there is no requirement regarding to this mode.

> ------Please consider the environment before printing this e-mail.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
  2021-09-09  2:40       ` Jack Yu
@ 2021-09-09  3:25         ` Pierre-Louis Bossart
  2021-09-09  5:17           ` Jack Yu
  0 siblings, 1 reply; 8+ messages in thread
From: Pierre-Louis Bossart @ 2021-09-09  3:25 UTC (permalink / raw)
  To: Jack Yu, broonie, lgirdwood
  Cc: Oder Chiou, alsa-devel, lars,
	kent_chen@realtek.com [陳建宏],
	Derek [方德義],
	Shuming [范書銘], Flove(HsinFu)




>>>>> +static const char * const rt1011_i2s_ref[] = {
>>>>> +	"None", "Left Channel", "Right Channel"
>>>>> +};
>>>>
>>>>> +enum {
>>>>> +	RT1011_I2S_REF_NONE,
>>>>> +	RT1011_I2S_REF_LEFT_CH,
>>>>> +	RT1011_I2S_REF_RIGHT_CH,
>>>>> +};
>>>>
>>>> is it possible to get Left-Right-mix (mixed on rt1011) and Left-Right
>>>> (two channels, with the application selecting what they want)?
>>>
>>> It's a mono amp, so there's no Left-Right-mix setting.
>>> And for the choice of Left-Right channel, it's already available with this
>> patch.
>>
>> So it's just to place a mono reference in either left or right channel of the I2S
>> link? Why not dual-mono as well then?
> 
> The patch is a specific control for two amps to send AEC data on single I2S data input pin by standard I2S protocol. 

That's really useful information and worthy of a comment.

What you are doing here is similar to selecting the slot for each amp
with set_tdm_slot(), but leaving the choice to userspace, isn't it?

> If there are two I2S input from SoC, we can add dual-mono mode for it, but so far there is no requirement regarding to this mode.

ok.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
  2021-09-09  3:25         ` Pierre-Louis Bossart
@ 2021-09-09  5:17           ` Jack Yu
  0 siblings, 0 replies; 8+ messages in thread
From: Jack Yu @ 2021-09-09  5:17 UTC (permalink / raw)
  To: Pierre-Louis Bossart, broonie, lgirdwood
  Cc: Oder Chiou, alsa-devel, lars,
	kent_chen@realtek.com [陳建宏],
	Derek [方德義],
	Shuming [范書銘], Flove(HsinFu)


> -----Original Message-----
> From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Sent: Thursday, September 9, 2021 11:26 AM
> To: Jack Yu <jack.yu@realtek.com>; broonie@kernel.org;
> lgirdwood@gmail.com
> Cc: Oder Chiou <oder_chiou@realtek.com>; alsa-devel@alsa-project.org;
> lars@metafoo.de; kent_chen@realtek.com [陳建宏]
> <kent_chen@realtek.com>; Derek [方德義] <derek.fang@realtek.com>;
> Shuming [范書銘] <shumingf@realtek.com>; Flove(HsinFu)
> <flove@realtek.com>
> Subject: Re: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
> 
> >>>>> +static const char * const rt1011_i2s_ref[] = {
> >>>>> +	"None", "Left Channel", "Right Channel"
> >>>>> +};
> >>>>
> >>>>> +enum {
> >>>>> +	RT1011_I2S_REF_NONE,
> >>>>> +	RT1011_I2S_REF_LEFT_CH,
> >>>>> +	RT1011_I2S_REF_RIGHT_CH,
> >>>>> +};
> >>>>
> >>>> is it possible to get Left-Right-mix (mixed on rt1011) and
> >>>> Left-Right (two channels, with the application selecting what they want)?
> >>>
> >>> It's a mono amp, so there's no Left-Right-mix setting.
> >>> And for the choice of Left-Right channel, it's already available
> >>> with this
> >> patch.
> >>
> >> So it's just to place a mono reference in either left or right
> >> channel of the I2S link? Why not dual-mono as well then?
> >
> > The patch is a specific control for two amps to send AEC data on single I2S
> data input pin by standard I2S protocol.
> 
> That's really useful information and worthy of a comment.
> 
> What you are doing here is similar to selecting the slot for each amp with
> set_tdm_slot(), but leaving the choice to userspace, isn't it?
> 
Yes.

> > If there are two I2S input from SoC, we can add dual-mono mode for it, but
> so far there is no requirement regarding to this mode.
> 
> ok.
> 
> ------Please consider the environment before printing this e-mail.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASoC: rt1011: add i2s reference control for rt1011
  2021-09-06 10:12 [PATCH] ASoC: rt1011: add i2s reference control for rt1011 Jack Yu
  2021-09-07 14:53 ` Pierre-Louis Bossart
@ 2021-09-13 10:53 ` Mark Brown
  1 sibling, 0 replies; 8+ messages in thread
From: Mark Brown @ 2021-09-13 10:53 UTC (permalink / raw)
  To: Jack Yu, lgirdwood
  Cc: oder_chiou, alsa-devel, lars, kent_chen, Mark Brown, derek.fang,
	shumingf, flove

On Mon, 6 Sep 2021 18:12:08 +0800, Jack Yu wrote:
> Add i2s reference control for rt1011 amp.
> 
> 

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/1] ASoC: rt1011: add i2s reference control for rt1011
      commit: 87f40af26c26233b060767f3e7cff5e54647cf2b

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-09-13 10:56 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-06 10:12 [PATCH] ASoC: rt1011: add i2s reference control for rt1011 Jack Yu
2021-09-07 14:53 ` Pierre-Louis Bossart
2021-09-08  2:17   ` Jack Yu
2021-09-08 15:22     ` Pierre-Louis Bossart
2021-09-09  2:40       ` Jack Yu
2021-09-09  3:25         ` Pierre-Louis Bossart
2021-09-09  5:17           ` Jack Yu
2021-09-13 10:53 ` Mark Brown

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.