diff options
author | Charles Keepax <ckeepax@opensource.wolfsonmicro.com> | 2013-11-14 17:18:24 +0100 |
---|---|---|
committer | Chanwoo Choi <cw00.choi@samsung.com> | 2014-01-07 03:54:28 +0100 |
commit | 9141461d81717ef94b7d38a4b3581114ac1307db (patch) | |
tree | 38e247728f5aacdf7ef156dc8ba8de9c84122cf5 /drivers/extcon | |
parent | extcon: arizona: Fix race with microphone detection and removal (diff) | |
download | linux-9141461d81717ef94b7d38a4b3581114ac1307db.tar.xz linux-9141461d81717ef94b7d38a4b3581114ac1307db.zip |
extcon: arizona: No need to switch back down HPDET ranges
No point in revisiting ranges the detection will be no more accurate
the second time simply report that the resistance is right on the
range boundry.
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Diffstat (limited to 'drivers/extcon')
-rw-r--r-- | drivers/extcon/extcon-arizona.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c index f36debffe6e8..4487bdaf9b43 100644 --- a/drivers/extcon/extcon-arizona.c +++ b/drivers/extcon/extcon-arizona.c @@ -441,20 +441,7 @@ static int arizona_hpdet_read(struct arizona_extcon_info *info) range = (range & ARIZONA_HP_IMPEDANCE_RANGE_MASK) >> ARIZONA_HP_IMPEDANCE_RANGE_SHIFT; - /* Skip up or down a range? */ - if (range && (val < arizona_hpdet_c_ranges[range].min)) { - range--; - dev_dbg(arizona->dev, "Moving to HPDET range %d-%d\n", - arizona_hpdet_c_ranges[range].min, - arizona_hpdet_c_ranges[range].max); - regmap_update_bits(arizona->regmap, - ARIZONA_HEADPHONE_DETECT_1, - ARIZONA_HP_IMPEDANCE_RANGE_MASK, - range << - ARIZONA_HP_IMPEDANCE_RANGE_SHIFT); - return -EAGAIN; - } - + /* Skip up a range, or report? */ if (range < ARRAY_SIZE(arizona_hpdet_c_ranges) - 1 && (val >= arizona_hpdet_c_ranges[range].max)) { range++; @@ -468,6 +455,12 @@ static int arizona_hpdet_read(struct arizona_extcon_info *info) ARIZONA_HP_IMPEDANCE_RANGE_SHIFT); return -EAGAIN; } + + if (range && (val < arizona_hpdet_c_ranges[range].min)) { + dev_dbg(arizona->dev, "Reporting range boundary %d\n", + arizona_hpdet_c_ranges[range].min); + val = arizona_hpdet_c_ranges[range].min; + } } dev_dbg(arizona->dev, "HP impedance %d ohms\n", val); |