summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>2015-02-16 15:41:03 +0000
committerChanwoo Choi <cw00.choi@samsung.com>2015-03-04 09:42:24 +0900
commit43f0acd96163754672cfb8c8015c54ec527a2cce (patch)
treecf70cb82e3b91bb6c7c6e4314e00e81ee7cae669
parent112bdfaa525fd5993e17885861342893f15290b0 (diff)
downloadop-kernel-dev-43f0acd96163754672cfb8c8015c54ec527a2cce.zip
op-kernel-dev-43f0acd96163754672cfb8c8015c54ec527a2cce.tar.gz
extcon: arizona: Fix headphone clamping on wm5110
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>
-rw-r--r--drivers/extcon/extcon-arizona.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c
index 95cf7f8..d9e763c 100644
--- a/drivers/extcon/extcon-arizona.c
+++ b/drivers/extcon/extcon-arizona.c
@@ -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);
OpenPOWER on IntegriCloud