From 3dd1953f31603200885ca2adffb1ad805c0b7816 Mon Sep 17 00:00:00 2001 From: Prasad Kumpatla Date: Thu, 1 Feb 2024 12:46:12 +0530 Subject: [PATCH] asoc: codec: defer the probe if msm cdc pinctrl is not probed Defer the probe when the msm cdc pinctrl driver is not proded. Change-Id: Ia6aaaca7c55b60b53008ffda0fc40e5db407cd2a Signed-off-by: Prasad Kumpatla --- asoc/codecs/wcd937x/wcd937x.c | 12 ++++++++---- asoc/codecs/wcd938x/wcd938x.c | 12 ++++++++---- asoc/codecs/wcd939x/wcd939x.c | 12 ++++++++---- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/asoc/codecs/wcd937x/wcd937x.c b/asoc/codecs/wcd937x/wcd937x.c index 8fa29fe9b3..43ae37d062 100644 --- a/asoc/codecs/wcd937x/wcd937x.c +++ b/asoc/codecs/wcd937x/wcd937x.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2024, Qualcomm Innovation Center, Inc. All rights reserved. */ #include @@ -3170,7 +3170,7 @@ static int wcd937x_reset(struct device *dev) if (rc) { dev_err(dev, "%s: wcd sleep state request fail!\n", __func__); - return rc; + return -EPROBE_DEFER; } /* 20ms sleep required after pulling the reset gpio to LOW */ usleep_range(20, 30); @@ -3179,7 +3179,7 @@ static int wcd937x_reset(struct device *dev) if (rc) { dev_err(dev, "%s: wcd active state request fail!\n", __func__); - return rc; + return -EPROBE_DEFER; } /* 20ms sleep required after pulling the reset gpio to HIGH */ usleep_range(20, 30); @@ -3403,7 +3403,11 @@ static int wcd937x_bind(struct device *dev) goto err_bind_all; } - wcd937x_reset(dev); + ret = wcd937x_reset(dev); + if (ret == -EPROBE_DEFER) { + dev_err(dev, "%s: wcd reset failed!\n", __func__); + goto err_bind_all; + } /* * Add 5msec delay to provide sufficient time for * soundwire auto enumeration of slave devices as diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c index 94c30f3df3..f7fb8241b1 100644 --- a/asoc/codecs/wcd938x/wcd938x.c +++ b/asoc/codecs/wcd938x/wcd938x.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022,2024 Qualcomm Innovation Center, Inc. All rights reserved. */ #include @@ -4181,7 +4181,7 @@ static int wcd938x_reset(struct device *dev) if (rc) { dev_err_ratelimited(dev, "%s: wcd sleep state request fail!\n", __func__); - return rc; + return -EPROBE_DEFER; } /* 20us sleep required after pulling the reset gpio to LOW */ usleep_range(20, 30); @@ -4190,7 +4190,7 @@ static int wcd938x_reset(struct device *dev) if (rc) { dev_err_ratelimited(dev, "%s: wcd active state request fail!\n", __func__); - return rc; + return -EPROBE_DEFER; } /* 20us sleep required after pulling the reset gpio to HIGH */ usleep_range(20, 30); @@ -4619,7 +4619,11 @@ static int wcd938x_probe(struct platform_device *pdev) if (ret) goto err_lock_init; - wcd938x_reset(dev); + ret = wcd938x_reset(dev); + if (ret == -EPROBE_DEFER) { + dev_err(dev, "%s: wcd reset failed!\n", __func__); + goto err_lock_init; + } wcd938x->wakeup = wcd938x_wakeup; diff --git a/asoc/codecs/wcd939x/wcd939x.c b/asoc/codecs/wcd939x/wcd939x.c index 6e0355ca09..1fb27ad563 100644 --- a/asoc/codecs/wcd939x/wcd939x.c +++ b/asoc/codecs/wcd939x/wcd939x.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. - * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2024, Qualcomm Innovation Center, Inc. All rights reserved. */ #include @@ -4706,7 +4706,7 @@ static int wcd939x_reset(struct device *dev) if (rc) { dev_err_ratelimited(dev, "%s: wcd sleep state request fail!\n", __func__); - return rc; + return -EPROBE_DEFER; } /* 20us sleep required after pulling the reset gpio to LOW */ usleep_range(20, 30); @@ -4715,7 +4715,7 @@ static int wcd939x_reset(struct device *dev) if (rc) { dev_err_ratelimited(dev, "%s: wcd active state request fail!\n", __func__); - return rc; + return -EPROBE_DEFER; } /* 20us sleep required after pulling the reset gpio to HIGH */ usleep_range(20, 30); @@ -5497,7 +5497,11 @@ static int wcd939x_probe(struct platform_device *pdev) if (ret) goto err_lock_init; - wcd939x_reset(dev); + ret = wcd939x_reset(dev); + if (ret == -EPROBE_DEFER) { + dev_err(dev, "%s: wcd reset failed!\n", __func__); + goto err_lock_init; + } wcd939x->wakeup = wcd939x_wakeup;