From c455f79f8598f3ee5b50fbc9d4ef57a6921a0da1 Mon Sep 17 00:00:00 2001 From: Vatsal Bucha Date: Sat, 20 Feb 2021 12:39:35 +0530 Subject: [PATCH] ASoC: wcd937x_slave: Add retry while getting logical addr for wcd937x slave Add retry while getting logical addr for wcd937x slave. Change-Id: Iff3f6a071c13f8bdccc72da69e95432be2d4f90a Signed-off-by: Vatsal Bucha --- asoc/codecs/wcd937x/wcd937x_slave.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/asoc/codecs/wcd937x/wcd937x_slave.c b/asoc/codecs/wcd937x/wcd937x_slave.c index 761e5fe5bacd..9dcd0d2438ab 100644 --- a/asoc/codecs/wcd937x/wcd937x_slave.c +++ b/asoc/codecs/wcd937x/wcd937x_slave.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2018, 2021, The Linux Foundation. All rights reserved. */ #include @@ -11,6 +11,8 @@ #include #include +#define SWR_MAX_RETRY 5 + struct wcd937x_slave_priv { struct swr_device *swr_slave; }; @@ -22,6 +24,7 @@ static int wcd937x_slave_bind(struct device *dev, struct wcd937x_slave_priv *wcd937x_slave = NULL; uint8_t devnum = 0; struct swr_device *pdev = to_swr_device(dev); + int retry = SWR_MAX_RETRY; if (pdev == NULL) { dev_err(dev, "%s: pdev is NULL\n", __func__); @@ -37,7 +40,12 @@ static int wcd937x_slave_bind(struct device *dev, wcd937x_slave->swr_slave = pdev; - ret = swr_get_logical_dev_num(pdev, pdev->addr, &devnum); + do { + /* Add delay for soundwire enumeration */ + usleep_range(100, 110); + ret = swr_get_logical_dev_num(pdev, pdev->addr, &devnum); + } while (ret && --retry); + if (ret) { dev_dbg(&pdev->dev, "%s get devnum %d for dev addr %lx failed\n",