extcon: arizona: Make rev A register sequences atomic
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Mon, 9 Dec 2019 11:09:08 +0000 (11:09 +0000)
committerChanwoo Choi <cw00.choi@samsung.com>
Mon, 9 Dec 2019 11:18:14 +0000 (20:18 +0900)
The special register sequences that are applied for rev A of wm5102
should be applied atomically with respect to any other register writes.
Use regmap_multi_reg_write to ensure all writes happen under the regmap
lock.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
drivers/extcon/extcon-arizona.c

index 79e9a24..a8b0bc2 100644 (file)
@@ -310,9 +310,13 @@ static void arizona_start_mic(struct arizona_extcon_info *info)
        }
 
        if (info->micd_reva) {
-               regmap_write(arizona->regmap, 0x80, 0x3);
-               regmap_write(arizona->regmap, 0x294, 0);
-               regmap_write(arizona->regmap, 0x80, 0x0);
+               const struct reg_sequence reva[] = {
+                       { 0x80,  0x3 },
+                       { 0x294, 0x0 },
+                       { 0x80,  0x0 },
+               };
+
+               regmap_multi_reg_write(arizona->regmap, reva, ARRAY_SIZE(reva));
        }
 
        if (info->detecting && arizona->pdata.micd_software_compare)
@@ -361,9 +365,13 @@ static void arizona_stop_mic(struct arizona_extcon_info *info)
        snd_soc_dapm_sync(dapm);
 
        if (info->micd_reva) {
-               regmap_write(arizona->regmap, 0x80, 0x3);
-               regmap_write(arizona->regmap, 0x294, 2);
-               regmap_write(arizona->regmap, 0x80, 0x0);
+               const struct reg_sequence reva[] = {
+                       { 0x80,  0x3 },
+                       { 0x294, 0x2 },
+                       { 0x80,  0x0 },
+               };
+
+               regmap_multi_reg_write(arizona->regmap, reva, ARRAY_SIZE(reva));
        }
 
        ret = regulator_allow_bypass(info->micvdd, true);