ASoC: wsa881x: Fix GPIO leak issue

In case of any probe/logical address error,
set the pinctrl of wsa881x to the state that
it was before the probe entered. Otherwise
set it to active state.

CRs-fixed: 2050725
Change-Id: I5022885f36111caeac1d25017db8a474e26ca521
Signed-off-by: Karthikeyan Mani <kmani@codeaurora.org>
This commit is contained in:
Karthikeyan Mani 2017-05-04 11:39:47 -07:00 committed by Gerrit - the friendly Code Review server
parent a9f9dadb78
commit c848d4ca45

View file

@ -1185,6 +1185,7 @@ static int wsa881x_swr_probe(struct swr_device *pdev)
int ret = 0;
struct wsa881x_priv *wsa881x;
u8 devnum = 0;
bool pin_state_current = false;
wsa881x = devm_kzalloc(&pdev->dev, sizeof(struct wsa881x_priv),
GFP_KERNEL);
@ -1218,6 +1219,9 @@ static int wsa881x_swr_probe(struct swr_device *pdev)
if (ret)
goto err;
}
if (wsa881x->wsa_rst_np)
pin_state_current = msm_cdc_pinctrl_get_state(
wsa881x->wsa_rst_np);
wsa881x_gpio_ctrl(wsa881x, true);
wsa881x->state = WSA881X_DEV_UP;
@ -1280,6 +1284,8 @@ static int wsa881x_swr_probe(struct swr_device *pdev)
return 0;
dev_err:
if (pin_state_current == false)
wsa881x_gpio_ctrl(wsa881x, false);
swr_remove_device(pdev);
err:
return ret;