* [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch
@ 2026-04-01 9:31 jack.yu
2026-04-01 13:02 ` Shuming [范書銘]
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: jack.yu @ 2026-04-01 9:31 UTC (permalink / raw)
To: broonie, lgirdwood
Cc: alsa-devel, lars, flove, oder_chiou, shumingf, derek.fang,
Jack Yu
From: Jack Yu <jack.yu@realtek.com>
Create a kcontrol to enable or disable brown-out dynamically.
Signed-off-by: Jack Yu <jack.yu@realtek.com>
---
sound/soc/codecs/rt1320-sdw.c | 47 +++++++++++++++++++++++++++++++++++
sound/soc/codecs/rt1320-sdw.h | 1 +
2 files changed, 48 insertions(+)
diff --git a/sound/soc/codecs/rt1320-sdw.c b/sound/soc/codecs/rt1320-sdw.c
index 8bb7e8497c72..40da3fea1c64 100644
--- a/sound/soc/codecs/rt1320-sdw.c
+++ b/sound/soc/codecs/rt1320-sdw.c
@@ -577,6 +577,7 @@ static bool rt1320_volatile_register(struct device *dev, unsigned int reg)
case 0xd530:
case 0xd540 ... 0xd541:
case 0xd543:
+ case 0xdb00 ... 0xdb03:
case 0xdb58 ... 0xdb5f:
case 0xdb60 ... 0xdb63:
case 0xdb68 ... 0xdb69:
@@ -2299,6 +2300,14 @@ static SOC_ENUM_SINGLE_DECL(rt1320_rx_data_ch_enum,
SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PPU21, RT1320_SDCA_CTL_POSTURE_NUMBER, 0), 0,
rt1320_rx_data_ch_select);
+static const char * const rt1320_brown_out_mode[] = {
+ "On",
+ "Off",
+};
+
+static SOC_ENUM_SINGLE_DECL(rt1320_brown_out_enum, 0, 0,
+ rt1320_brown_out_mode);
+
static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -6525, 75, 0);
static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -1725, 75, 0);
@@ -2486,6 +2495,42 @@ static int rt1320_rae_update_put(struct snd_kcontrol *kcontrol,
return 0;
}
+static int rt1320_brown_out_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+ struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
+ struct device *dev = &rt1320->sdw_slave->dev;
+ int ret, tmp;
+
+ ret = pm_runtime_resume(component->dev);
+ if (ret < 0 && ret != -EACCES)
+ return ret;
+
+ rt1320->brown_out = ucontrol->value.integer.value[0];
+ regcache_cache_bypass(rt1320->regmap, true);
+
+ if (rt1320->brown_out == 1)
+ regmap_write(rt1320->regmap, 0xdb03, 0x00);
+ else
+ regmap_write(rt1320->regmap, 0xdb03, 0xf0);
+
+ regcache_cache_bypass(rt1320->regmap, false);
+
+ return 0;
+}
+
+static int rt1320_brown_out_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+ struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
+
+ ucontrol->value.integer.value[0] = rt1320->brown_out;
+
+ return 0;
+}
+
static int rt1320_r0_temperature_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
@@ -2545,6 +2590,8 @@ static const struct snd_kcontrol_new rt1320_snd_controls[] = {
rt1320_r0_temperature_get, rt1320_r0_temperature_put),
SOC_SINGLE_EXT("RAE Update", SND_SOC_NOPM, 0, 1, 0,
rt1320_rae_update_get, rt1320_rae_update_put),
+ SOC_ENUM_EXT("Brown Out Switch", rt1320_brown_out_enum,
+ rt1320_brown_out_get, rt1320_brown_out_put),
};
static const struct snd_kcontrol_new rt1320_spk_l_dac =
diff --git a/sound/soc/codecs/rt1320-sdw.h b/sound/soc/codecs/rt1320-sdw.h
index 5a9f496dd848..4a1d3fc4c8ee 100644
--- a/sound/soc/codecs/rt1320-sdw.h
+++ b/sound/soc/codecs/rt1320-sdw.h
@@ -159,6 +159,7 @@ struct rt1320_sdw_priv {
bool hw_init;
bool first_hw_init;
int version_id;
+ int brown_out;
unsigned int dev_id;
bool fu_dapm_mute;
bool fu_mixer_mute[4];
--
2.53.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* RE: [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch
2026-04-01 9:31 [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch jack.yu
@ 2026-04-01 13:02 ` Shuming [范書銘]
2026-04-01 13:11 ` Shuming [范書銘]
2026-04-01 13:23 ` Mark Brown
2026-04-07 3:48 ` kernel test robot
2 siblings, 1 reply; 7+ messages in thread
From: Shuming [范書銘] @ 2026-04-01 13:02 UTC (permalink / raw)
To: Jack Yu, broonie@kernel.org, lgirdwood@gmail.com
Cc: alsa-devel@alsa-project.org, lars@metafoo.de, Flove(HsinFu),
Oder Chiou, Derek [方德義]
+static int rt1320_brown_out_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+ struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
+ struct device *dev = &rt1320->sdw_slave->dev;
+ int ret, tmp;
+
+ ret = pm_runtime_resume(component->dev);
+ if (ret < 0 && ret != -EACCES)
+ return ret;
+
+ rt1320->brown_out = ucontrol->value.integer.value[0];
+ regcache_cache_bypass(rt1320->regmap, true);
+
+ if (rt1320->brown_out == 1)
+ regmap_write(rt1320->regmap, 0xdb03, 0x00);
+ else
+ regmap_write(rt1320->regmap, 0xdb03, 0xf0);
+
+ regcache_cache_bypass(rt1320->regmap, false);
+
+ return 0;
+}
+
+static int rt1320_brown_out_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+ struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
+
+ ucontrol->value.integer.value[0] = rt1320->brown_out;
+
+ return 0;
+}
+
static int rt1320_r0_temperature_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
@@ -2545,6 +2590,8 @@ static const struct snd_kcontrol_new rt1320_snd_controls[] = {
rt1320_r0_temperature_get, rt1320_r0_temperature_put),
SOC_SINGLE_EXT("RAE Update", SND_SOC_NOPM, 0, 1, 0,
rt1320_rae_update_get, rt1320_rae_update_put),
+ SOC_ENUM_EXT("Brown Out Switch", rt1320_brown_out_enum,
+ rt1320_brown_out_get, rt1320_brown_out_put),
};
static const struct snd_kcontrol_new rt1320_spk_l_dac =
diff --git a/sound/soc/codecs/rt1320-sdw.h b/sound/soc/codecs/rt1320-sdw.h
index 5a9f496dd848..4a1d3fc4c8ee 100644
--- a/sound/soc/codecs/rt1320-sdw.h
+++ b/sound/soc/codecs/rt1320-sdw.h
@@ -159,6 +159,7 @@ struct rt1320_sdw_priv {
bool hw_init;
bool first_hw_init;
int version_id;
+ int brown_out;
unsigned int dev_id;
Could you set brown_out to 1 by default?
The blind write enables brown-out by default.
^ permalink raw reply related [flat|nested] 7+ messages in thread* RE: [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch
2026-04-01 13:02 ` Shuming [范書銘]
@ 2026-04-01 13:11 ` Shuming [范書銘]
0 siblings, 0 replies; 7+ messages in thread
From: Shuming [范書銘] @ 2026-04-01 13:11 UTC (permalink / raw)
To: Jack Yu, broonie@kernel.org, lgirdwood@gmail.com
Cc: alsa-devel@alsa-project.org, lars@metafoo.de, Flove(HsinFu),
Oder Chiou, Derek [方德義]
> > diff --git a/sound/soc/codecs/rt1320-sdw.h b/sound/soc/codecs/rt1320-sdw.h
> > index 5a9f496dd848..4a1d3fc4c8ee 100644
> > --- a/sound/soc/codecs/rt1320-sdw.h
> > +++ b/sound/soc/codecs/rt1320-sdw.h
> > @@ -159,6 +159,7 @@ struct rt1320_sdw_priv {
> > bool hw_init;
> > bool first_hw_init;
> > int version_id;
> > + int brown_out;
> > unsigned int dev_id;
> Could you set brown_out to 1 by default?
> The blind write enables brown-out by default.
Sorry, I misunderstood.
LGTM.
Reviewed-by: Shuming Fan <shumingf@realtek.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch
2026-04-01 9:31 [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch jack.yu
2026-04-01 13:02 ` Shuming [范書銘]
@ 2026-04-01 13:23 ` Mark Brown
2026-04-02 4:37 ` Jack Yu
2026-04-07 3:48 ` kernel test robot
2 siblings, 1 reply; 7+ messages in thread
From: Mark Brown @ 2026-04-01 13:23 UTC (permalink / raw)
To: jack.yu
Cc: lgirdwood, alsa-devel, lars, flove, oder_chiou, shumingf,
derek.fang
[-- Attachment #1: Type: text/plain, Size: 964 bytes --]
On Wed, Apr 01, 2026 at 05:31:07PM +0800, jack.yu@realtek.com wrote:
> From: Jack Yu <jack.yu@realtek.com>
>
> Create a kcontrol to enable or disable brown-out dynamically.
> +static const char * const rt1320_brown_out_mode[] = {
> + "On",
> + "Off",
> +};
> +
> +static SOC_ENUM_SINGLE_DECL(rt1320_brown_out_enum, 0, 0,
> + rt1320_brown_out_mode);
> +
On/off switches should be a Switch control, not an enum.
> +static int rt1320_brown_out_put(struct snd_kcontrol *kcontrol,
> + struct snd_ctl_elem_value *ucontrol)
> +{
> + struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
> + struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
> + struct device *dev = &rt1320->sdw_slave->dev;
> + int ret, tmp;
> +
> + ret = pm_runtime_resume(component->dev);
> + if (ret < 0 && ret != -EACCES)
> + return ret;
Other controls in this driver ignore writes before hw_init is set,
should this one?
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread* RE: [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch
2026-04-01 13:23 ` Mark Brown
@ 2026-04-02 4:37 ` Jack Yu
2026-04-02 11:14 ` Mark Brown
0 siblings, 1 reply; 7+ messages in thread
From: Jack Yu @ 2026-04-02 4:37 UTC (permalink / raw)
To: Mark Brown
Cc: lgirdwood@gmail.com, alsa-devel@alsa-project.org, lars@metafoo.de,
Flove(HsinFu), Oder Chiou, Shuming [范書銘],
Derek [方德義]
> -----Original Message-----
> From: Mark Brown <broonie@kernel.org>
> Sent: Wednesday, April 1, 2026 9:23 PM
> To: Jack Yu <jack.yu@realtek.com>
> Cc: lgirdwood@gmail.com; alsa-devel@alsa-project.org; lars@metafoo.de;
> Flove(HsinFu) <flove@realtek.com>; Oder Chiou <oder_chiou@realtek.com>;
> Shuming [范書銘] <shumingf@realtek.com>; Derek [方德義]
> <derek.fang@realtek.com>
> Subject: Re: [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch
>
> On Wed, Apr 01, 2026 at 05:31:07PM +0800, jack.yu@realtek.com wrote:
> > From: Jack Yu <jack.yu@realtek.com>
> >
> > Create a kcontrol to enable or disable brown-out dynamically.
>
> > +static const char * const rt1320_brown_out_mode[] = {
> > + "On",
> > + "Off",
> > +};
> > +
> > +static SOC_ENUM_SINGLE_DECL(rt1320_brown_out_enum, 0, 0,
> > + rt1320_brown_out_mode);
> > +
>
> On/off switches should be a Switch control, not an enum.
Maybe the name of kcontrol leads to misunderstand, it's just an effect setting for amplifier.
I'll update this and use another control type but not enum.
>
> > +static int rt1320_brown_out_put(struct snd_kcontrol *kcontrol,
> > + struct snd_ctl_elem_value *ucontrol) {
> > + struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
> > + struct rt1320_sdw_priv *rt1320 =
> snd_soc_component_get_drvdata(component);
> > + struct device *dev = &rt1320->sdw_slave->dev;
> > + int ret, tmp;
> > +
> > + ret = pm_runtime_resume(component->dev);
> > + if (ret < 0 && ret != -EACCES)
> > + return ret;
>
> Other controls in this driver ignore writes before hw_init is set, should this
> one?
Will fix it.
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch
2026-04-02 4:37 ` Jack Yu
@ 2026-04-02 11:14 ` Mark Brown
0 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2026-04-02 11:14 UTC (permalink / raw)
To: Jack Yu
Cc: lgirdwood@gmail.com, alsa-devel@alsa-project.org, lars@metafoo.de,
Flove(HsinFu), Oder Chiou, Shuming [范書銘],
Derek [方德義]
[-- Attachment #1: Type: text/plain, Size: 546 bytes --]
On Thu, Apr 02, 2026 at 04:37:53AM +0000, Jack Yu wrote:
> > > +static const char * const rt1320_brown_out_mode[] = {
> > > + "On",
> > > + "Off",
> > > +};
> > > +static SOC_ENUM_SINGLE_DECL(rt1320_brown_out_enum, 0, 0,
> > > + rt1320_brown_out_mode);
> > On/off switches should be a Switch control, not an enum.
> Maybe the name of kcontrol leads to misunderstand, it's just an effect setting for amplifier.
> I'll update this and use another control type but not enum.
Turning effects on and off are still things being turned on and off.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch
2026-04-01 9:31 [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch jack.yu
2026-04-01 13:02 ` Shuming [范書銘]
2026-04-01 13:23 ` Mark Brown
@ 2026-04-07 3:48 ` kernel test robot
2 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2026-04-07 3:48 UTC (permalink / raw)
To: jack.yu, broonie, lgirdwood
Cc: oe-kbuild-all, alsa-devel, lars, flove, oder_chiou, shumingf,
derek.fang, Jack Yu
Hi,
kernel test robot noticed the following build warnings:
[auto build test WARNING on broonie-sound/for-next]
[also build test WARNING on linus/master v7.0-rc6 next-20260402]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/jack-yu-realtek-com/ASoC-rt1320-sdw-kcontrol-for-brown-out-feature-switch/20260403-160437
base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
patch link: https://lore.kernel.org/r/20260401093107.632673-1-jack.yu%40realtek.com
patch subject: [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch
config: arc-randconfig-001-20260403 (https://download.01.org/0day-ci/archive/20260403/202604032240.PeKldNcG-lkp@intel.com/config)
compiler: arc-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260403/202604032240.PeKldNcG-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202604032240.PeKldNcG-lkp@intel.com/
All warnings (new ones prefixed by >>):
sound/soc/codecs/rt1320-sdw.c: In function 'rt1320_brown_out_put':
>> sound/soc/codecs/rt1320-sdw.c:2504:11: warning: unused variable 'tmp' [-Wunused-variable]
int ret, tmp;
^~~
>> sound/soc/codecs/rt1320-sdw.c:2503:17: warning: unused variable 'dev' [-Wunused-variable]
struct device *dev = &rt1320->sdw_slave->dev;
^~~
vim +/tmp +2504 sound/soc/codecs/rt1320-sdw.c
2497
2498 static int rt1320_brown_out_put(struct snd_kcontrol *kcontrol,
2499 struct snd_ctl_elem_value *ucontrol)
2500 {
2501 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
2502 struct rt1320_sdw_priv *rt1320 = snd_soc_component_get_drvdata(component);
> 2503 struct device *dev = &rt1320->sdw_slave->dev;
> 2504 int ret, tmp;
2505
2506 ret = pm_runtime_resume(component->dev);
2507 if (ret < 0 && ret != -EACCES)
2508 return ret;
2509
2510 rt1320->brown_out = ucontrol->value.integer.value[0];
2511 regcache_cache_bypass(rt1320->regmap, true);
2512
2513 if (rt1320->brown_out == 1)
2514 regmap_write(rt1320->regmap, 0xdb03, 0x00);
2515 else
2516 regmap_write(rt1320->regmap, 0xdb03, 0xf0);
2517
2518 regcache_cache_bypass(rt1320->regmap, false);
2519
2520 return 0;
2521 }
2522
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-04-07 3:50 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-01 9:31 [PATCH] ASoC: rt1320-sdw: kcontrol for brown-out feature switch jack.yu
2026-04-01 13:02 ` Shuming [范書銘]
2026-04-01 13:11 ` Shuming [范書銘]
2026-04-01 13:23 ` Mark Brown
2026-04-02 4:37 ` Jack Yu
2026-04-02 11:14 ` Mark Brown
2026-04-07 3:48 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox