Prechádzať zdrojové kódy

Merge "asoc: codecs: defer probe if soundwire pin is not ready"

qctecmdr 5 rokov pred
rodič
commit
45b4733d63

+ 6 - 0
asoc/codecs/bolero/rx-macro.c

@@ -3624,6 +3624,12 @@ static int rx_macro_probe(struct platform_device *pdev)
 			__func__);
 		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_MACRO_MAX_OFFSET);
 	if (!rx_io_base) {

+ 6 - 0
asoc/codecs/bolero/tx-macro.c

@@ -2018,6 +2018,12 @@ static int tx_macro_probe(struct platform_device *pdev)
 			__func__);
 		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_base_addr, TX_MACRO_MAX_OFFSET);
 	if (!tx_io_base) {

+ 6 - 0
asoc/codecs/bolero/wsa-macro.c

@@ -2921,6 +2921,12 @@ static int wsa_macro_probe(struct platform_device *pdev)
 			__func__);
 		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_base_addr, WSA_MACRO_MAX_OFFSET);
 	if (!wsa_io_base) {

+ 3 - 2
asoc/codecs/msm-cdc-pinctrl.c

@@ -122,9 +122,10 @@ EXPORT_SYMBOL(msm_cdc_pinctrl_select_active_state);
  * msm_cdc_pinctrl_get_state: get curren pinctrl state
  * @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;
 

+ 3 - 3
include/asoc/msm-cdc-pinctrl.h

@@ -1,5 +1,5 @@
 /* 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_
@@ -11,7 +11,7 @@
 #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_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);
 int msm_cdc_pinctrl_drv_init(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)
 {
 }
-bool msm_cdc_pinctrl_get_state(struct device_node *np)
+int msm_cdc_pinctrl_get_state(struct device_node *np)
 {
 	return true;
 }