extcon: arizona: Don't HPDET magic when headphones are enabled
The magic is already done as part of enabling the headphone output so does not need to be done when the headphone outputs are enabled. We hold the DAPM lock so the headphone status can't be changed underneath us. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>hifive-unleashed-5.1
parent
0e27bd3137
commit
903aa56fdf
|
@ -489,6 +489,7 @@ static irqreturn_t arizona_hpdet_irq(int irq, void *data)
|
||||||
struct arizona *arizona = info->arizona;
|
struct arizona *arizona = info->arizona;
|
||||||
int id_gpio = arizona->pdata.hpdet_id_gpio;
|
int id_gpio = arizona->pdata.hpdet_id_gpio;
|
||||||
int report = ARIZONA_CABLE_HEADPHONE;
|
int report = ARIZONA_CABLE_HEADPHONE;
|
||||||
|
unsigned int val;
|
||||||
int ret, reading;
|
int ret, reading;
|
||||||
|
|
||||||
mutex_lock(&info->lock);
|
mutex_lock(&info->lock);
|
||||||
|
@ -543,13 +544,28 @@ static irqreturn_t arizona_hpdet_irq(int irq, void *data)
|
||||||
dev_err(arizona->dev, "Failed to report HP/line: %d\n",
|
dev_err(arizona->dev, "Failed to report HP/line: %d\n",
|
||||||
ret);
|
ret);
|
||||||
|
|
||||||
|
mutex_lock(&arizona->dapm->card->dapm_mutex);
|
||||||
|
|
||||||
|
ret = regmap_read(arizona->regmap, ARIZONA_OUTPUT_ENABLES_1, &val);
|
||||||
|
if (ret != 0) {
|
||||||
|
dev_err(arizona->dev, "Failed to read output enables: %d\n",
|
||||||
|
ret);
|
||||||
|
val = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(val & (ARIZONA_OUT1L_ENA | ARIZONA_OUT1R_ENA))) {
|
||||||
ret = regmap_update_bits(arizona->regmap, 0x225, 0x4000, 0);
|
ret = regmap_update_bits(arizona->regmap, 0x225, 0x4000, 0);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
dev_warn(arizona->dev, "Failed to undo magic: %d\n", ret);
|
dev_warn(arizona->dev, "Failed to undo magic: %d\n",
|
||||||
|
ret);
|
||||||
|
|
||||||
ret = regmap_update_bits(arizona->regmap, 0x226, 0x4000, 0);
|
ret = regmap_update_bits(arizona->regmap, 0x226, 0x4000, 0);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
dev_warn(arizona->dev, "Failed to undo magic: %d\n", ret);
|
dev_warn(arizona->dev, "Failed to undo magic: %d\n",
|
||||||
|
ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
mutex_unlock(&arizona->dapm->card->dapm_mutex);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (id_gpio)
|
if (id_gpio)
|
||||||
|
@ -637,6 +653,7 @@ err:
|
||||||
static void arizona_start_hpdet_acc_id(struct arizona_extcon_info *info)
|
static void arizona_start_hpdet_acc_id(struct arizona_extcon_info *info)
|
||||||
{
|
{
|
||||||
struct arizona *arizona = info->arizona;
|
struct arizona *arizona = info->arizona;
|
||||||
|
unsigned int val;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dev_dbg(arizona->dev, "Starting identification via HPDET\n");
|
dev_dbg(arizona->dev, "Starting identification via HPDET\n");
|
||||||
|
@ -648,13 +665,30 @@ static void arizona_start_hpdet_acc_id(struct arizona_extcon_info *info)
|
||||||
|
|
||||||
arizona_extcon_pulse_micbias(info);
|
arizona_extcon_pulse_micbias(info);
|
||||||
|
|
||||||
ret = regmap_update_bits(arizona->regmap, 0x225, 0x4000, 0x4000);
|
mutex_lock(&arizona->dapm->card->dapm_mutex);
|
||||||
if (ret != 0)
|
|
||||||
dev_warn(arizona->dev, "Failed to do magic: %d\n", ret);
|
|
||||||
|
|
||||||
ret = regmap_update_bits(arizona->regmap, 0x226, 0x4000, 0x4000);
|
ret = regmap_read(arizona->regmap, ARIZONA_OUTPUT_ENABLES_1, &val);
|
||||||
|
if (ret != 0) {
|
||||||
|
dev_err(arizona->dev, "Failed to read output enables: %d\n",
|
||||||
|
ret);
|
||||||
|
val = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(val & (ARIZONA_OUT1L_ENA | ARIZONA_OUT1R_ENA))) {
|
||||||
|
ret = regmap_update_bits(arizona->regmap, 0x225, 0x4000,
|
||||||
|
0x4000);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
dev_warn(arizona->dev, "Failed to do magic: %d\n", ret);
|
dev_warn(arizona->dev, "Failed to do magic: %d\n",
|
||||||
|
ret);
|
||||||
|
|
||||||
|
ret = regmap_update_bits(arizona->regmap, 0x226, 0x4000,
|
||||||
|
0x4000);
|
||||||
|
if (ret != 0)
|
||||||
|
dev_warn(arizona->dev, "Failed to do magic: %d\n",
|
||||||
|
ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
mutex_unlock(&arizona->dapm->card->dapm_mutex);
|
||||||
|
|
||||||
ret = regmap_update_bits(arizona->regmap,
|
ret = regmap_update_bits(arizona->regmap,
|
||||||
ARIZONA_ACCESSORY_DETECT_MODE_1,
|
ARIZONA_ACCESSORY_DETECT_MODE_1,
|
||||||
|
|
Loading…
Reference in New Issue