mirror of
https://github.com/torvalds/linux.git
synced 2026-10-12 13:27:02 +02:00
ASoC: pcm512x: sort the register default table
reg_defaults must be sorted by ascending register address, as regcache_lookup_reg() locates entries in it with bsearch(). See commitfd80df352b("regcache: Add support for sorting defaults arrays"). PCM512x_AUTO_MUTE (page 0, register 59) is listed before PCM512x_ERROR_DETECT (page 0, register 37) and PCM512x_VCOM_CTRL_2 (page 1, register 9) is listed before the page 0 clocking block, so the bsearch() descends into the wrong half of the table. 24 of the 45 entries are unreachable, among them every PLL coefficient and clock divider default. regcache_reg_needs_sync() then cannot compare them against their default and reports that a sync is needed, so they are written to the device on every regcache_sync() even when they were never touched. Sort the table by register address. Fixes:5a3af12931("ASoC: pcm512x: Add PCM512x driver") Cc: stable@vger.kernel.org Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Link: https://patch.msgid.link/20260805104149.9795-2-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
075b74841b
commit
767d9ae714
|
|
@ -78,28 +78,10 @@ static const struct reg_default pcm512x_reg_defaults[] = {
|
|||
{ PCM512x_POWER, 0x00 },
|
||||
{ PCM512x_MUTE, 0x00 },
|
||||
{ PCM512x_DSP, 0x00 },
|
||||
{ PCM512x_PLL_REF, 0x00 },
|
||||
{ PCM512x_DAC_REF, 0x00 },
|
||||
{ PCM512x_DAC_ROUTING, 0x11 },
|
||||
{ PCM512x_DSP_PROGRAM, 0x01 },
|
||||
{ PCM512x_CLKDET, 0x00 },
|
||||
{ PCM512x_AUTO_MUTE, 0x00 },
|
||||
{ PCM512x_ERROR_DETECT, 0x00 },
|
||||
{ PCM512x_DIGITAL_VOLUME_1, 0x00 },
|
||||
{ PCM512x_DIGITAL_VOLUME_2, 0x30 },
|
||||
{ PCM512x_DIGITAL_VOLUME_3, 0x30 },
|
||||
{ PCM512x_DIGITAL_MUTE_1, 0x22 },
|
||||
{ PCM512x_DIGITAL_MUTE_2, 0x00 },
|
||||
{ PCM512x_DIGITAL_MUTE_3, 0x07 },
|
||||
{ PCM512x_OUTPUT_AMPLITUDE, 0x00 },
|
||||
{ PCM512x_ANALOG_GAIN_CTRL, 0x00 },
|
||||
{ PCM512x_UNDERVOLTAGE_PROT, 0x00 },
|
||||
{ PCM512x_ANALOG_MUTE_CTRL, 0x00 },
|
||||
{ PCM512x_ANALOG_GAIN_BOOST, 0x00 },
|
||||
{ PCM512x_VCOM_CTRL_1, 0x00 },
|
||||
{ PCM512x_VCOM_CTRL_2, 0x01 },
|
||||
{ PCM512x_BCLK_LRCLK_CFG, 0x00 },
|
||||
{ PCM512x_MASTER_MODE, 0x7c },
|
||||
{ PCM512x_PLL_REF, 0x00 },
|
||||
{ PCM512x_DAC_REF, 0x00 },
|
||||
{ PCM512x_GPIO_DACIN, 0x00 },
|
||||
{ PCM512x_GPIO_PLLIN, 0x00 },
|
||||
{ PCM512x_SYNCHRONIZE, 0x10 },
|
||||
|
|
@ -117,8 +99,26 @@ static const struct reg_default pcm512x_reg_defaults[] = {
|
|||
{ PCM512x_FS_SPEED_MODE, 0x00 },
|
||||
{ PCM512x_IDAC_1, 0x01 },
|
||||
{ PCM512x_IDAC_2, 0x00 },
|
||||
{ PCM512x_ERROR_DETECT, 0x00 },
|
||||
{ PCM512x_I2S_1, 0x02 },
|
||||
{ PCM512x_I2S_2, 0x00 },
|
||||
{ PCM512x_DAC_ROUTING, 0x11 },
|
||||
{ PCM512x_DSP_PROGRAM, 0x01 },
|
||||
{ PCM512x_CLKDET, 0x00 },
|
||||
{ PCM512x_AUTO_MUTE, 0x00 },
|
||||
{ PCM512x_DIGITAL_VOLUME_1, 0x00 },
|
||||
{ PCM512x_DIGITAL_VOLUME_2, 0x30 },
|
||||
{ PCM512x_DIGITAL_VOLUME_3, 0x30 },
|
||||
{ PCM512x_DIGITAL_MUTE_1, 0x22 },
|
||||
{ PCM512x_DIGITAL_MUTE_2, 0x00 },
|
||||
{ PCM512x_DIGITAL_MUTE_3, 0x07 },
|
||||
{ PCM512x_OUTPUT_AMPLITUDE, 0x00 },
|
||||
{ PCM512x_ANALOG_GAIN_CTRL, 0x00 },
|
||||
{ PCM512x_UNDERVOLTAGE_PROT, 0x00 },
|
||||
{ PCM512x_ANALOG_MUTE_CTRL, 0x00 },
|
||||
{ PCM512x_ANALOG_GAIN_BOOST, 0x00 },
|
||||
{ PCM512x_VCOM_CTRL_1, 0x00 },
|
||||
{ PCM512x_VCOM_CTRL_2, 0x01 },
|
||||
};
|
||||
|
||||
static bool pcm512x_readable(struct device *dev, unsigned int reg)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user