| From 232f2549db7a8ae7aa4a054630778d0e9b91d997 Mon Sep 17 00:00:00 2001 |
| From: Charles Keepax <ckeepax@opensource.cirrus.com> |
| Date: Thu, 4 Apr 2019 17:33:56 +0100 |
| Subject: extcon: arizona: Disable mic detect if running when driver is removed |
| |
| [ Upstream commit 00053de52231117ddc154042549f2256183ffb86 ] |
| |
| Microphone detection provides the button detection features on the |
| Arizona CODECs as such it will be running if the jack is currently |
| inserted. If the driver is unbound whilst the jack is still inserted |
| this will cause warnings from the regulator framework as the MICVDD |
| regulator is put but was never disabled. |
| |
| Correct this by disabling microphone detection on driver removal and if |
| the microphone detection was running disable the regulator and put the |
| runtime reference that was currently held. |
| |
| Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> |
| Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/extcon/extcon-arizona.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c |
| index da0e9bc4262fa..9327479c719c2 100644 |
| --- a/drivers/extcon/extcon-arizona.c |
| +++ b/drivers/extcon/extcon-arizona.c |
| @@ -1726,6 +1726,16 @@ static int arizona_extcon_remove(struct platform_device *pdev) |
| struct arizona_extcon_info *info = platform_get_drvdata(pdev); |
| struct arizona *arizona = info->arizona; |
| int jack_irq_rise, jack_irq_fall; |
| + bool change; |
| + |
| + regmap_update_bits_check(arizona->regmap, ARIZONA_MIC_DETECT_1, |
| + ARIZONA_MICD_ENA, 0, |
| + &change); |
| + |
| + if (change) { |
| + regulator_disable(info->micvdd); |
| + pm_runtime_put(info->dev); |
| + } |
| |
| gpiod_put(info->micd_pol_gpio); |
| |
| -- |
| 2.20.1 |
| |