Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6b6cf266 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "asoc: codecs: retry for soundwire slave enumeration"

parents 7284897e b3fa5a0d
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@
#include "wcd938x/wcd938x.h"
#include "swr-dmic.h"

#define NUM_ATTEMPTS 5

static int swr_master_channel_map[] = {
	ZERO,
	SWRM_TX1_CH1,
@@ -450,6 +452,7 @@ static int swr_dmic_probe(struct swr_device *pdev)
	const char *swr_dmic_name_prefix_of = NULL;
	const char *swr_dmic_codec_name_of = NULL;
	struct snd_soc_component *component = NULL;
	int num_retry = NUM_ATTEMPTS;

	swr_dmic = devm_kzalloc(&pdev->dev, sizeof(struct swr_dmic_priv),
			    GFP_KERNEL);
@@ -512,10 +515,15 @@ static int swr_dmic_probe(struct swr_device *pdev)
	 * as per HW requirement.
	 */
	usleep_range(5000, 5010);
	do {
		/* Add delay for soundwire enumeration */
		usleep_range(100, 110);
		ret = swr_get_logical_dev_num(pdev, pdev->addr, &swr_devnum);
	} while (ret && --num_retry);

	if (ret) {
		dev_dbg(&pdev->dev,
			"%s get devnum %d for dev addr %lx failed\n",
		dev_info(&pdev->dev,
			"%s get devnum %d for dev addr %llx failed\n",
			__func__, swr_devnum, pdev->addr);
		ret = -EPROBE_DEFER;
		goto err;
@@ -670,7 +678,7 @@ static int swr_dmic_down(struct swr_device *pdev)
static int swr_dmic_reset(struct swr_device *pdev)
{
	struct swr_dmic_priv *swr_dmic;
	u8 retry = 5;
	u8 retry = NUM_ATTEMPTS;
	u8 devnum = 0;

	swr_dmic = swr_get_dev_data(pdev);
+6 −1
Original line number Diff line number Diff line
@@ -314,6 +314,7 @@ static int swr_haptics_probe(struct swr_device *sdev)
	struct swr_haptics_dev *swr_hap;
	int rc;
	u8 devnum;
	int retry = 5;

	swr_hap = devm_kzalloc(&sdev->dev,
			sizeof(struct swr_haptics_dev), GFP_KERNEL);
@@ -346,8 +347,12 @@ static int swr_haptics_probe(struct swr_device *sdev)
				__func__, rc);
		goto clean;
	}

	do {
		/* Add delay for soundwire enumeration */
		usleep_range(500, 510);
		rc = swr_get_logical_dev_num(sdev, sdev->addr, &devnum);
	} while (rc && --retry);

	if (rc) {
		dev_err(swr_hap->dev, "%s: failed to get devnum for swr-haptics, rc=%d\n",
				__func__, rc);
+11 −2
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@
#define SWR_SLV_MAX_DEVICES     2
#endif /* CONFIG_DEBUG_FS */

#define SWR_MAX_RETRY    5

struct wcd938x_slave_priv {
	struct swr_device *swr_slave;
#ifdef CONFIG_DEBUG_FS
@@ -278,17 +280,24 @@ static int wcd938x_slave_bind(struct device *dev,
	int ret = 0;
	uint8_t devnum = 0;
	struct swr_device *pdev = to_swr_device(dev);
	int retry = SWR_MAX_RETRY;

	if (!pdev) {
		pr_err("%s: invalid swr device handle\n", __func__);
		return -EINVAL;
	}

	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",
			"%s get devnum %d for dev addr %llx failed\n",
			__func__, devnum, pdev->addr);
		ret = -EPROBE_DEFER;
		return ret;
	}
	pdev->dev_num = devnum;
+8 −7
Original line number Diff line number Diff line
@@ -1992,15 +1992,16 @@ static int wcd938x_get_logical_addr(struct swr_device *swr_dev)
	int num_retry = NUM_ATTEMPTS;

	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);
		}
		ret = swr_get_logical_dev_num(swr_dev, swr_dev->addr, &devnum);
	} while (ret && --num_retry);

	if (ret)
		dev_err(&swr_dev->dev,
			"%s get devnum %d for dev addr %llx failed\n",
			__func__, devnum, swr_dev->addr);

	swr_dev->dev_num = devnum;
	return 0;
}