diff options
author | Mark Brown <broonie@kernel.org> | 2023-05-24 11:01:38 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-05-24 11:01:38 +0100 |
commit | 6c594a820f8fa5ec3619715e32ff5314852ee26b (patch) | |
tree | 040d56294ccf00202e1820cb3784317034f5c839 /sound/soc/codecs | |
parent | e6beda565b2b1084f9a2cca5c73ae08f1e58c34e (diff) | |
parent | 44c026a73be8038f03dbdeef028b642880cf1511 (diff) | |
download | linux-stable-6c594a820f8fa5ec3619715e32ff5314852ee26b.tar.gz linux-stable-6c594a820f8fa5ec3619715e32ff5314852ee26b.tar.bz2 linux-stable-6c594a820f8fa5ec3619715e32ff5314852ee26b.zip |
regulator: Merge up v6.4-rc3
Merge up v6.4-rc3 in order to get fixes to improve the stability of my
CI.
Diffstat (limited to 'sound/soc/codecs')
-rw-r--r-- | sound/soc/codecs/cs35l56.c | 3 | ||||
-rw-r--r-- | sound/soc/codecs/ssm2602.c | 15 |
2 files changed, 17 insertions, 1 deletions
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c index 46762f7f1449..d1677d76d018 100644 --- a/sound/soc/codecs/cs35l56.c +++ b/sound/soc/codecs/cs35l56.c @@ -852,10 +852,11 @@ static void cs35l56_dsp_work(struct work_struct *work) */ if (cs35l56->sdw_peripheral) { cs35l56->sdw_irq_no_unmask = true; - cancel_work_sync(&cs35l56->sdw_irq_work); + flush_work(&cs35l56->sdw_irq_work); sdw_write_no_pm(cs35l56->sdw_peripheral, CS35L56_SDW_GEN_INT_MASK_1, 0); sdw_read_no_pm(cs35l56->sdw_peripheral, CS35L56_SDW_GEN_INT_STAT_1); sdw_write_no_pm(cs35l56->sdw_peripheral, CS35L56_SDW_GEN_INT_STAT_1, 0xFF); + flush_work(&cs35l56->sdw_irq_work); } ret = cs35l56_mbox_send(cs35l56, CS35L56_MBOX_CMD_SHUTDOWN); diff --git a/sound/soc/codecs/ssm2602.c b/sound/soc/codecs/ssm2602.c index 00b60369b029..c29324403e9d 100644 --- a/sound/soc/codecs/ssm2602.c +++ b/sound/soc/codecs/ssm2602.c @@ -53,6 +53,18 @@ static const struct reg_default ssm2602_reg[SSM2602_CACHEREGNUM] = { { .reg = 0x09, .def = 0x0000 } }; +/* + * ssm2602 register patch + * Workaround for playback distortions after power up: activates digital + * core, and then powers on output, DAC, and whole chip at the same time + */ + +static const struct reg_sequence ssm2602_patch[] = { + { SSM2602_ACTIVE, 0x01 }, + { SSM2602_PWR, 0x07 }, + { SSM2602_RESET, 0x00 }, +}; + /*Appending several "None"s just for OSS mixer use*/ static const char *ssm2602_input_select[] = { @@ -598,6 +610,9 @@ static int ssm260x_component_probe(struct snd_soc_component *component) return ret; } + regmap_register_patch(ssm2602->regmap, ssm2602_patch, + ARRAY_SIZE(ssm2602_patch)); + /* set the update bits */ regmap_update_bits(ssm2602->regmap, SSM2602_LINVOL, LINVOL_LRIN_BOTH, LINVOL_LRIN_BOTH); |