asoc: codecs: defer probe if soundwire pin is not ready
Defer codec macro probes if soundwire pins are not ready to be accessed yet during boot up. Change-Id: I20173e49043a076d73cdbb811863afbff87d4a3b Signed-off-by: Karthikeyan Mani <kmani@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
c63ec8cd8f
commit
326536d1d6
@@ -3605,6 +3605,12 @@ static int rx_macro_probe(struct platform_device *pdev)
|
|||||||
__func__);
|
__func__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
if (msm_cdc_pinctrl_get_state(rx_priv->rx_swr_gpio_p) < 0) {
|
||||||
|
dev_err(&pdev->dev, "%s: failed to get swr pin state\n",
|
||||||
|
__func__);
|
||||||
|
return -EPROBE_DEFER;
|
||||||
|
}
|
||||||
|
|
||||||
rx_io_base = devm_ioremap(&pdev->dev, rx_base_addr,
|
rx_io_base = devm_ioremap(&pdev->dev, rx_base_addr,
|
||||||
RX_MACRO_MAX_OFFSET);
|
RX_MACRO_MAX_OFFSET);
|
||||||
if (!rx_io_base) {
|
if (!rx_io_base) {
|
||||||
|
@@ -2000,6 +2000,12 @@ static int tx_macro_probe(struct platform_device *pdev)
|
|||||||
__func__);
|
__func__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
if (msm_cdc_pinctrl_get_state(tx_priv->tx_swr_gpio_p) < 0) {
|
||||||
|
dev_err(&pdev->dev, "%s: failed to get swr pin state\n",
|
||||||
|
__func__);
|
||||||
|
return -EPROBE_DEFER;
|
||||||
|
}
|
||||||
|
|
||||||
tx_io_base = devm_ioremap(&pdev->dev,
|
tx_io_base = devm_ioremap(&pdev->dev,
|
||||||
tx_base_addr, TX_MACRO_MAX_OFFSET);
|
tx_base_addr, TX_MACRO_MAX_OFFSET);
|
||||||
if (!tx_io_base) {
|
if (!tx_io_base) {
|
||||||
|
@@ -2901,6 +2901,12 @@ static int wsa_macro_probe(struct platform_device *pdev)
|
|||||||
__func__);
|
__func__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
if (msm_cdc_pinctrl_get_state(wsa_priv->wsa_swr_gpio_p) < 0) {
|
||||||
|
dev_err(&pdev->dev, "%s: failed to get swr pin state\n",
|
||||||
|
__func__);
|
||||||
|
return -EPROBE_DEFER;
|
||||||
|
}
|
||||||
|
|
||||||
wsa_io_base = devm_ioremap(&pdev->dev,
|
wsa_io_base = devm_ioremap(&pdev->dev,
|
||||||
wsa_base_addr, WSA_MACRO_MAX_OFFSET);
|
wsa_base_addr, WSA_MACRO_MAX_OFFSET);
|
||||||
if (!wsa_io_base) {
|
if (!wsa_io_base) {
|
||||||
|
@@ -122,9 +122,10 @@ EXPORT_SYMBOL(msm_cdc_pinctrl_select_active_state);
|
|||||||
* msm_cdc_pinctrl_get_state: get curren pinctrl state
|
* msm_cdc_pinctrl_get_state: get curren pinctrl state
|
||||||
* @np: pointer to struct device_node
|
* @np: pointer to struct device_node
|
||||||
*
|
*
|
||||||
* Returns 0 for sleep state, 1 for active state
|
* Returns 0 for sleep state, 1 for active state,
|
||||||
|
* error code for failure
|
||||||
*/
|
*/
|
||||||
bool msm_cdc_pinctrl_get_state(struct device_node *np)
|
int msm_cdc_pinctrl_get_state(struct device_node *np)
|
||||||
{
|
{
|
||||||
struct msm_cdc_pinctrl_info *gpio_data;
|
struct msm_cdc_pinctrl_info *gpio_data;
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __MFD_CDC_PINCTRL_H_
|
#ifndef __MFD_CDC_PINCTRL_H_
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
#if IS_ENABLED(CONFIG_MSM_CDC_PINCTRL)
|
#if IS_ENABLED(CONFIG_MSM_CDC_PINCTRL)
|
||||||
extern int msm_cdc_pinctrl_select_sleep_state(struct device_node *np);
|
extern int msm_cdc_pinctrl_select_sleep_state(struct device_node *np);
|
||||||
extern int msm_cdc_pinctrl_select_active_state(struct device_node *np);
|
extern int msm_cdc_pinctrl_select_active_state(struct device_node *np);
|
||||||
extern bool msm_cdc_pinctrl_get_state(struct device_node *np);
|
extern int msm_cdc_pinctrl_get_state(struct device_node *np);
|
||||||
extern int msm_cdc_get_gpio_state(struct device_node *np);
|
extern int msm_cdc_get_gpio_state(struct device_node *np);
|
||||||
int msm_cdc_pinctrl_drv_init(void);
|
int msm_cdc_pinctrl_drv_init(void);
|
||||||
void msm_cdc_pinctrl_drv_exit(void);
|
void msm_cdc_pinctrl_drv_exit(void);
|
||||||
@@ -36,7 +36,7 @@ int msm_cdc_pinctrl_drv_init(void)
|
|||||||
void msm_cdc_pinctrl_drv_exit(void)
|
void msm_cdc_pinctrl_drv_exit(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
bool msm_cdc_pinctrl_get_state(struct device_node *np)
|
int msm_cdc_pinctrl_get_state(struct device_node *np)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user