From 101e71693d2a613bee867f63680ffee903c41e7a Mon Sep 17 00:00:00 2001 From: Laxminath Kasam Date: Tue, 24 Mar 2020 16:50:17 +0530 Subject: [PATCH] asoc: wcd937x: Update retry logic for SWR logical addr Update retry logic for SWR logical address during SSR. Change-Id: Ifa5cdec751a271c09a8b6340009ec0e862ffb326 Signed-off-by: Laxminath Kasam --- asoc/codecs/wcd937x/wcd937x.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/asoc/codecs/wcd937x/wcd937x.c b/asoc/codecs/wcd937x/wcd937x.c index 725fef85b4..9cb3d222af 100644 --- a/asoc/codecs/wcd937x/wcd937x.c +++ b/asoc/codecs/wcd937x/wcd937x.c @@ -38,6 +38,8 @@ #define WCD937X_VERSION_ENTRY_SIZE 32 #define EAR_RX_PATH_AUX 1 +#define NUM_ATTEMPTS 5 + enum { CODEC_TX = 0, CODEC_RX, @@ -1544,14 +1546,18 @@ static int wcd937x_get_logical_addr(struct swr_device *swr_dev) { int ret = 0; uint8_t devnum = 0; + int num_retry = NUM_ATTEMPTS; - ret = swr_get_logical_dev_num(swr_dev, swr_dev->addr, &devnum); - if (ret) { - dev_err(&swr_dev->dev, - "%s get devnum %d for dev addr %lx failed\n", - __func__, devnum, swr_dev->addr); - return ret; - } + do { + ret = swr_get_logical_dev_num(swr_dev, swr_dev->addr, &devnum); + if (ret) { + dev_err(&swr_dev->dev, + "%s get devnum %d for dev addr %lx failed\n", + __func__, devnum, swr_dev->addr); + /* retry after 1ms */ + usleep_range(1000, 1010); + } + } while (ret && --num_retry); swr_dev->dev_num = devnum; return 0; }