Commit a288d648 authored by Richard Fitzgerald's avatar Richard Fitzgerald Committed by Chanwoo Choi

extcon: arizona: support inverted jack detect switch

Add config option for inverted jack detect switch that
opens when jack is inserted.
Signed-off-by: default avatarRichard Fitzgerald <rf@opensource.wolfsonmicro.com>
[Acked by Lee Jones for MFD part]
Acked-by: default avatarLee Jones <lee.jones@linaro.org>
Signed-off-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
parent 7171511e
...@@ -39,6 +39,11 @@ ...@@ -39,6 +39,11 @@
#define ARIZONA_ACCDET_MODE_HPL 1 #define ARIZONA_ACCDET_MODE_HPL 1
#define ARIZONA_ACCDET_MODE_HPR 2 #define ARIZONA_ACCDET_MODE_HPR 2
#define ARIZONA_MICD_CLAMP_MODE_JDL 0x4
#define ARIZONA_MICD_CLAMP_MODE_JDH 0x5
#define ARIZONA_MICD_CLAMP_MODE_JDL_GP5H 0x9
#define ARIZONA_MICD_CLAMP_MODE_JDH_GP5H 0xb
#define ARIZONA_HPDET_MAX 10000 #define ARIZONA_HPDET_MAX 10000
#define HPDET_DEBOUNCE 500 #define HPDET_DEBOUNCE 500
...@@ -962,10 +967,16 @@ static irqreturn_t arizona_jackdet(int irq, void *data) ...@@ -962,10 +967,16 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
if (arizona->pdata.jd_gpio5) { if (arizona->pdata.jd_gpio5) {
mask = ARIZONA_MICD_CLAMP_STS; mask = ARIZONA_MICD_CLAMP_STS;
present = 0; if (arizona->pdata.jd_invert)
present = ARIZONA_MICD_CLAMP_STS;
else
present = 0;
} else { } else {
mask = ARIZONA_JD1_STS; mask = ARIZONA_JD1_STS;
present = ARIZONA_JD1_STS; if (arizona->pdata.jd_invert)
present = 0;
else
present = ARIZONA_JD1_STS;
} }
ret = regmap_read(arizona->regmap, ARIZONA_AOD_IRQ_RAW_STATUS, &val); ret = regmap_read(arizona->regmap, ARIZONA_AOD_IRQ_RAW_STATUS, &val);
...@@ -1096,6 +1107,7 @@ static int arizona_extcon_probe(struct platform_device *pdev) ...@@ -1096,6 +1107,7 @@ static int arizona_extcon_probe(struct platform_device *pdev)
struct arizona_pdata *pdata = &arizona->pdata; struct arizona_pdata *pdata = &arizona->pdata;
struct arizona_extcon_info *info; struct arizona_extcon_info *info;
unsigned int val; unsigned int val;
unsigned int clamp_mode;
int jack_irq_fall, jack_irq_rise; int jack_irq_fall, jack_irq_rise;
int ret, mode, i, j; int ret, mode, i, j;
...@@ -1305,15 +1317,21 @@ static int arizona_extcon_probe(struct platform_device *pdev) ...@@ -1305,15 +1317,21 @@ static int arizona_extcon_probe(struct platform_device *pdev)
regmap_write(arizona->regmap, ARIZONA_GPIO5_CTRL, regmap_write(arizona->regmap, ARIZONA_GPIO5_CTRL,
val); val);
regmap_update_bits(arizona->regmap, if (arizona->pdata.jd_invert)
ARIZONA_MICD_CLAMP_CONTROL, clamp_mode = ARIZONA_MICD_CLAMP_MODE_JDH_GP5H;
ARIZONA_MICD_CLAMP_MODE_MASK, 0x9); else
clamp_mode = ARIZONA_MICD_CLAMP_MODE_JDL_GP5H;
} else { } else {
regmap_update_bits(arizona->regmap, if (arizona->pdata.jd_invert)
ARIZONA_MICD_CLAMP_CONTROL, clamp_mode = ARIZONA_MICD_CLAMP_MODE_JDH;
ARIZONA_MICD_CLAMP_MODE_MASK, 0x4); else
clamp_mode = ARIZONA_MICD_CLAMP_MODE_JDL;
} }
regmap_update_bits(arizona->regmap,
ARIZONA_MICD_CLAMP_CONTROL,
ARIZONA_MICD_CLAMP_MODE_MASK, clamp_mode);
regmap_update_bits(arizona->regmap, regmap_update_bits(arizona->regmap,
ARIZONA_JACK_DETECT_DEBOUNCE, ARIZONA_JACK_DETECT_DEBOUNCE,
ARIZONA_MICD_CLAMP_DB, ARIZONA_MICD_CLAMP_DB,
......
...@@ -127,6 +127,9 @@ struct arizona_pdata { ...@@ -127,6 +127,9 @@ struct arizona_pdata {
/** Internal pull on GPIO5 is disabled when used for jack detection */ /** Internal pull on GPIO5 is disabled when used for jack detection */
bool jd_gpio5_nopull; bool jd_gpio5_nopull;
/** set to true if jackdet contact opens on insert */
bool jd_invert;
/** Use the headphone detect circuit to identify the accessory */ /** Use the headphone detect circuit to identify the accessory */
bool hpdet_acc_id; bool hpdet_acc_id;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment