mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 20:53:03 +02:00
ASoC: cs35l56: Add support for CS35L62
Richard Fitzgerald <rf@opensource.cirrus.com> says: 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. Link: https://patch.msgid.link/20260715120135.939280-1-rf@opensource.cirrus.com
This commit is contained in:
commit
567a5c8664
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user