diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c index 3e7c4cf66fcf..0e5883771fdb 100644 --- a/sound/soc/codecs/cs35l41.c +++ b/sound/soc/codecs/cs35l41.c @@ -1741,6 +1741,18 @@ static const struct reg_sequence cs35l41_reva0_errata_patch[] = { {0x00000054, 0x00000004}, {CS35L41_IRQ1_DB3, 0x00000000}, {CS35L41_IRQ2_DB3, 0x00000000}, + {CS35L41_DSP1_YM_ACCEL_PL0_PRI, 0x00000000}, + {CS35L41_DSP1_XM_ACCEL_PL0_PRI, 0x00000000}, + {0x00000040, 0x0000CCCC}, + {0x00000040, 0x00003333}, +}; + +static const struct reg_sequence cs35l41_revb0_errata_patch[] = { + {0x00000040, 0x00005555}, + {0x00000040, 0x0000AAAA}, + {CS35L41_BSTCVRT_DCM_CTRL, 0x00000051}, + {CS35L41_DSP1_YM_ACCEL_PL0_PRI, 0x00000000}, + {CS35L41_DSP1_XM_ACCEL_PL0_PRI, 0x00000000}, {0x00000040, 0x0000CCCC}, {0x00000040, 0x00003333}, }; @@ -1925,7 +1937,14 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, } break; case CS35L41_REVID_B0: - regmap_write(cs35l41->regmap, CS35L41_BSTCVRT_DCM_CTRL, 0x51); + ret = regmap_multi_reg_write(cs35l41->regmap, + cs35l41_revb0_errata_patch, + ARRAY_SIZE(cs35l41_revb0_errata_patch)); + if (ret < 0) { + dev_err(cs35l41->dev, + "Failed to apply B0 errata patch %d\n", ret); + goto err; + } break; }