]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
extcon: arizona: Fix headphone clamping on wm5110
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Mon, 16 Feb 2015 15:41:03 +0000 (15:41 +0000)
committerChanwoo Choi <cw00.choi@samsung.com>
Wed, 4 Mar 2015 00:42:24 +0000 (09:42 +0900)
wm5110 requires slightly different configuration of the headphone
clamps to other Arizona devices. Otherwise headphone detection accuracy
will be way off. This patch adds the needed clamping.

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

index 95cf7f875bb33a8ad73ace290a2524120f1f7a45..d9e763cddb50b9ea9a1470973a712bb8ae01786f 100644 (file)
@@ -140,11 +140,24 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info,
                                    bool clamp)
 {
        struct arizona *arizona = info->arizona;
-       unsigned int val = 0;
+       unsigned int mask = 0, val = 0;
        int ret;
 
-       if (clamp)
-               val = ARIZONA_RMV_SHRT_HP1L;
+       switch (arizona->type) {
+       case WM5110:
+               mask = ARIZONA_HP1L_SHRTO | ARIZONA_HP1L_FLWR |
+                      ARIZONA_HP1L_SHRTI;
+               if (clamp)
+                       val = ARIZONA_HP1L_SHRTO;
+               else
+                       val = ARIZONA_HP1L_FLWR | ARIZONA_HP1L_SHRTI;
+               break;
+       default:
+               mask = ARIZONA_RMV_SHRT_HP1L;
+               if (clamp)
+                       val = ARIZONA_RMV_SHRT_HP1L;
+               break;
+       };
 
        mutex_lock(&arizona->dapm->card->dapm_mutex);
 
@@ -163,13 +176,13 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info,
        }
 
        ret = regmap_update_bits(arizona->regmap, ARIZONA_HP_CTRL_1L,
-                                ARIZONA_RMV_SHRT_HP1L, val);
+                                mask, val);
        if (ret != 0)
                dev_warn(arizona->dev, "Failed to do clamp: %d\n",
                                 ret);
 
        ret = regmap_update_bits(arizona->regmap, ARIZONA_HP_CTRL_1R,
-                                ARIZONA_RMV_SHRT_HP1R, val);
+                                mask, val);
        if (ret != 0)
                dev_warn(arizona->dev, "Failed to do clamp: %d\n",
                         ret);