Linux Sound subsystem development
 help / color / mirror / Atom feed
* [PATCH 0/2] ASoC: cs35l56: Add support for CS35L62
@ 2026-07-15 12:01 Richard Fitzgerald
  2026-07-15 12:01 ` [PATCH 1/2] ASoC: cs35l56: Add support for CS35L62 for SoundWire Richard Fitzgerald
  2026-07-15 12:01 ` [PATCH 2/2] ASoC: sdw_utils: Add codec info for CS35L62 Richard Fitzgerald
  0 siblings, 2 replies; 4+ messages in thread
From: Richard Fitzgerald @ 2026-07-15 12:01 UTC (permalink / raw)
  To: broonie; +Cc: linux-sound, linux-kernel, patches

The Cirrus Logic CS35L62 amp is similar to the CS35L63 and can be
supported by adding the chip IDs into the cs35l56 driver. It must
also be added to the codec table in sdw_utils.

Stefan Binding (2):
  ASoC: cs35l56: Add support for CS35L62 for SoundWire
  ASoC: sdw_utils: Add codec info for CS35L62

 sound/soc/codecs/cs35l56-sdw.c      |  2 ++
 sound/soc/codecs/cs35l56-shared.c   |  4 ++++
 sound/soc/codecs/cs35l56.c          |  1 +
 sound/soc/sdw_utils/soc_sdw_utils.c | 29 +++++++++++++++++++++++++++++
 4 files changed, 36 insertions(+)

-- 
2.47.3


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

* [PATCH 1/2] ASoC: cs35l56: Add support for CS35L62 for SoundWire
  2026-07-15 12:01 [PATCH 0/2] ASoC: cs35l56: Add support for CS35L62 Richard Fitzgerald
@ 2026-07-15 12:01 ` Richard Fitzgerald
  2026-07-17 20:38   ` Pierre-Louis Bossart
  2026-07-15 12:01 ` [PATCH 2/2] ASoC: sdw_utils: Add codec info for CS35L62 Richard Fitzgerald
  1 sibling, 1 reply; 4+ messages in thread
From: Richard Fitzgerald @ 2026-07-15 12:01 UTC (permalink / raw)
  To: broonie; +Cc: linux-sound, linux-kernel, patches

From: Stefan Binding <sbinding@opensource.cirrus.com>

CS35L62 uses the same control and regmap interface as CS35L63 so
support for it can be added into the CS35L56 driver.

Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
---
 sound/soc/codecs/cs35l56-sdw.c    | 2 ++
 sound/soc/codecs/cs35l56-shared.c | 4 ++++
 sound/soc/codecs/cs35l56.c        | 1 +
 3 files changed, 7 insertions(+)

diff --git a/sound/soc/codecs/cs35l56-sdw.c b/sound/soc/codecs/cs35l56-sdw.c
index 0a55b93b96f96..1e442f43b306b 100644
--- a/sound/soc/codecs/cs35l56-sdw.c
+++ b/sound/soc/codecs/cs35l56-sdw.c
@@ -457,6 +457,7 @@ static int cs35l56_sdw_probe(struct sdw_slave *peripheral, const struct sdw_devi
 		regmap_config = &cs35l56_regmap_sdw;
 		break;
 	case 0x3563:
+	case 0x3562:
 		regmap_config = &cs35l63_regmap_sdw;
 		break;
 	default:
@@ -510,6 +511,7 @@ static const struct sdw_device_id cs35l56_sdw_id[] = {
 	SDW_SLAVE_ENTRY(0x01FA, 0x3556, 0x3556),
 	SDW_SLAVE_ENTRY(0x01FA, 0x3557, 0x3557),
 	SDW_SLAVE_ENTRY(0x01FA, 0x3563, 0x3563),
+	SDW_SLAVE_ENTRY(0x01FA, 0x3562, 0x3562),
 	{},
 };
 MODULE_DEVICE_TABLE(sdw, cs35l56_sdw_id);
diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-shared.c
index d5817e4208479..f20bcdfd35af0 100644
--- a/sound/soc/codecs/cs35l56-shared.c
+++ b/sound/soc/codecs/cs35l56-shared.c
@@ -96,6 +96,7 @@ int cs35l56_set_patch(struct cs35l56_base *cs35l56_base)
 					    ARRAY_SIZE(cs35l56_patch_fw));
 		break;
 	case 0x63:
+	case 0x62:
 		ret = regmap_register_patch(cs35l56_base->regmap, cs35l63_patch_fw,
 					    ARRAY_SIZE(cs35l63_patch_fw));
 		break;
@@ -389,6 +390,7 @@ static void cs35l56_set_fw_reg_table(struct cs35l56_base *cs35l56_base)
 		}
 		break;
 	case 0x63:
+	case 0x62:
 		cs35l56_base->fw_reg = &cs35l63_fw_reg;
 		break;
 	}
@@ -595,6 +597,7 @@ void cs35l56_system_reset(struct cs35l56_base *cs35l56_base, bool is_soundwire)
 		}
 		break;
 	case 0x63:
+	case 0x62:
 		regmap_multi_reg_write_bypassed(cs35l56_base->regmap,
 						cs35l63_system_reset_seq,
 						ARRAY_SIZE(cs35l63_system_reset_seq));
@@ -1462,6 +1465,7 @@ int cs35l56_hw_init(struct cs35l56_base *cs35l56_base)
 		cs35l56_base->calibration_controls = &cs35l56_calibration_controls;
 		break;
 	case 0x35A630:
+	case 0x35A620:
 		cs35l56_base->calibration_controls = &cs35l63_calibration_controls;
 		devid = devid >> 4;
 		break;
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
index 570a68829ccd0..f365f76ce56c1 100644
--- a/sound/soc/codecs/cs35l56.c
+++ b/sound/soc/codecs/cs35l56.c
@@ -1402,6 +1402,7 @@ static int _cs35l56_component_probe(struct snd_soc_component *component)
 						     ARRAY_SIZE(cs35l56_controls));
 		break;
 	case 0x63:
+	case 0x62:
 		ret = snd_soc_add_component_controls(component, cs35l63_controls,
 						     ARRAY_SIZE(cs35l63_controls));
 		break;
-- 
2.47.3


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

* [PATCH 2/2] ASoC: sdw_utils: Add codec info for CS35L62
  2026-07-15 12:01 [PATCH 0/2] ASoC: cs35l56: Add support for CS35L62 Richard Fitzgerald
  2026-07-15 12:01 ` [PATCH 1/2] ASoC: cs35l56: Add support for CS35L62 for SoundWire Richard Fitzgerald
@ 2026-07-15 12:01 ` Richard Fitzgerald
  1 sibling, 0 replies; 4+ messages in thread
From: Richard Fitzgerald @ 2026-07-15 12:01 UTC (permalink / raw)
  To: broonie; +Cc: linux-sound, linux-kernel, patches

From: Stefan Binding <sbinding@opensource.cirrus.com>

CS35L62 is very similar to CS35L63, and uses the same driver, so we
can use the same configuration.

Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
---
 sound/soc/sdw_utils/soc_sdw_utils.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/sound/soc/sdw_utils/soc_sdw_utils.c b/sound/soc/sdw_utils/soc_sdw_utils.c
index dd2cc57059d6a..d4074309fa81c 100644
--- a/sound/soc/sdw_utils/soc_sdw_utils.c
+++ b/sound/soc/sdw_utils/soc_sdw_utils.c
@@ -834,6 +834,35 @@ struct asoc_sdw_codec_info codec_info_list[] = {
 		},
 		.dai_num = 2,
 	},
+	{
+		.vendor_id = 0x01fa,
+		.part_id = 0x3562,
+		.name_prefix = "AMP",
+		.is_amp = true,
+		.dais = {
+			{
+				.direction = {true, false},
+				.dai_name = "cs35l56-sdw1",
+				.component_name = "cs35l56",
+				.dai_type = SOC_SDW_DAI_TYPE_AMP,
+				.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
+				.init = asoc_sdw_cs_amp_init,
+				.rtd_init = asoc_sdw_cs_spk_rtd_init,
+				.controls = generic_spk_controls,
+				.num_controls = ARRAY_SIZE(generic_spk_controls),
+				.widgets = generic_spk_widgets,
+				.num_widgets = ARRAY_SIZE(generic_spk_widgets),
+			},
+			{
+				.direction = {false, true},
+				.dai_name = "cs35l56-sdw1c",
+				.dai_type = SOC_SDW_DAI_TYPE_AMP,
+				.dailink = {SOC_SDW_UNUSED_DAI_ID, SOC_SDW_AMP_IN_DAI_ID},
+				.rtd_init = asoc_sdw_cs_spk_feedback_rtd_init,
+			},
+		},
+		.dai_num = 2,
+	},
 	{
 		.vendor_id = 0x01fa,
 		.part_id = 0x3563,
-- 
2.47.3


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

* Re: [PATCH 1/2] ASoC: cs35l56: Add support for CS35L62 for SoundWire
  2026-07-15 12:01 ` [PATCH 1/2] ASoC: cs35l56: Add support for CS35L62 for SoundWire Richard Fitzgerald
@ 2026-07-17 20:38   ` Pierre-Louis Bossart
  0 siblings, 0 replies; 4+ messages in thread
From: Pierre-Louis Bossart @ 2026-07-17 20:38 UTC (permalink / raw)
  To: Richard Fitzgerald, broonie; +Cc: linux-sound, linux-kernel, patches


> diff --git a/sound/soc/codecs/cs35l56-sdw.c b/sound/soc/codecs/cs35l56-sdw.c
> index 0a55b93b96f96..1e442f43b306b 100644
> --- a/sound/soc/codecs/cs35l56-sdw.c
> +++ b/sound/soc/codecs/cs35l56-sdw.c
> @@ -457,6 +457,7 @@ static int cs35l56_sdw_probe(struct sdw_slave *peripheral, const struct sdw_devi
>  		regmap_config = &cs35l56_regmap_sdw;
>  		break;
>  	case 0x3563:
> +	case 0x3562:

nit-pick: is there any reason why 62 is after 63 instead of a regular
increasing order?

>  		regmap_config = &cs35l63_regmap_sdw;
>  		break;
>  	default:
> @@ -510,6 +511,7 @@ static const struct sdw_device_id cs35l56_sdw_id[] = {
>  	SDW_SLAVE_ENTRY(0x01FA, 0x3556, 0x3556),
>  	SDW_SLAVE_ENTRY(0x01FA, 0x3557, 0x3557),
>  	SDW_SLAVE_ENTRY(0x01FA, 0x3563, 0x3563),
> +	SDW_SLAVE_ENTRY(0x01FA, 0x3562, 0x3562),

same here, the devices were in increasing order until this patch.

>  	{},
>  };
>  MODULE_DEVICE_TABLE(sdw, cs35l56_sdw_id);
> diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-shared.c
> index d5817e4208479..f20bcdfd35af0 100644
> --- a/sound/soc/codecs/cs35l56-shared.c
> +++ b/sound/soc/codecs/cs35l56-shared.c
> @@ -96,6 +96,7 @@ int cs35l56_set_patch(struct cs35l56_base *cs35l56_base)
>  					    ARRAY_SIZE(cs35l56_patch_fw));
>  		break;
>  	case 0x63:
> +	case 0x62:

and here...


>  	case 0x35A630:
> +	case 0x35A620:

here as well

Maybe it's because the 62 support comes later, but no one will remember
this timeline and the code looks odd to me.

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

end of thread, other threads:[~2026-07-17 20:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-15 12:01 [PATCH 0/2] ASoC: cs35l56: Add support for CS35L62 Richard Fitzgerald
2026-07-15 12:01 ` [PATCH 1/2] ASoC: cs35l56: Add support for CS35L62 for SoundWire Richard Fitzgerald
2026-07-17 20:38   ` Pierre-Louis Bossart
2026-07-15 12:01 ` [PATCH 2/2] ASoC: sdw_utils: Add codec info for CS35L62 Richard Fitzgerald

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox