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

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

Merge "asoc: codec: add delay if regmap is not registered"

parents 6a4d66fb d207401a
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@

#define SPK_GAIN_12DB 4
#define WIDGET_NAME_MAX_SIZE 80
#define REGMAP_REGISTER_CHECK_RETRY 30

#define MAX_NAME_LEN 30
#define WSA881X_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
@@ -102,7 +103,7 @@ static int32_t wsa881x_resource_acquire(struct snd_soc_component *component,

const char *wsa_tz_names[] = {"wsa881x.0e", "wsa881x.0f"};

struct wsa881x_pdata wsa_pdata[MAX_WSA881X_DEVICE];
static struct wsa881x_pdata wsa_pdata[MAX_WSA881X_DEVICE];

static bool pinctrl_init;

@@ -1142,6 +1143,7 @@ static int wsa881x_probe(struct snd_soc_component *component)
{
	struct i2c_client *client;
	int ret = 0;
	int retry = REGMAP_REGISTER_CHECK_RETRY;
	int wsa881x_index = 0;
	struct snd_soc_dapm_context *dapm =
					snd_soc_component_get_dapm(component);
@@ -1165,6 +1167,16 @@ static int wsa881x_probe(struct snd_soc_component *component)
	wsa_pdata[wsa881x_index].tz_pdata.wsa_temp_reg_read =
						wsa881x_temp_reg_read;
	snd_soc_component_set_drvdata(component, &wsa_pdata[wsa881x_index]);
	while (retry) {
		if (wsa_pdata[wsa881x_index].regmap[WSA881X_ANALOG_SLAVE]
							!= NULL)
			break;
		msleep(100);
		retry--;
	}
	if (!retry)
		dev_err(&client->dev, "%s: max retry expired and regmap of\n"
				"analog slave not initilized\n", __func__);
	wsa881x_init_thermal(&wsa_pdata[wsa881x_index].tz_pdata);
	INIT_DELAYED_WORK(&wsa_pdata[wsa881x_index].ocp_ctl_work,
				wsa881x_ocp_ctl_work);
@@ -1382,9 +1394,9 @@ static int wsa881x_i2c_probe(struct i2c_client *client,
	}

	if (pdata->status == WSA881X_STATUS_I2C) {
		dev_dbg(&client->dev, "%s:probe for other slaves\n"
			"devices of codec I2C slave Addr = %x\n",
			__func__, client->addr);
		dev_info(&client->dev, "%s:probe for other slaves\n"
			"devices of codec I2C slave Addr = %x wsa_idx = %d\n",
			__func__, client->addr, wsa881x_index);
		dev_dbg(&client->dev, "%s:wsa_idx = %d SLAVE = %d\n",
				__func__, wsa881x_index, WSA881X_ANALOG_SLAVE);
		pdata->regmap[WSA881X_ANALOG_SLAVE] =
@@ -1402,6 +1414,7 @@ static int wsa881x_i2c_probe(struct i2c_client *client,
		client->dev.platform_data = pdata;
		i2c_set_clientdata(client, pdata);
		pdata->client[WSA881X_ANALOG_SLAVE] = client;
		pdata->regmap_flag = true;
		if (pdata->version == WSA881X_2_0)
			wsa881x_update_regmap_2_0(
					pdata->regmap[WSA881X_ANALOG_SLAVE],
@@ -1467,7 +1480,6 @@ static int wsa881x_i2c_probe(struct i2c_client *client,
			goto err;
		}
		pdata->client[WSA881X_DIGITAL_SLAVE] = client;
		pdata->regmap_flag = true;
		ret = check_wsa881x_presence(client);
		if (ret < 0) {
			dev_err(&client->dev,
@@ -1551,6 +1563,8 @@ static int wsa881x_i2c_probe(struct i2c_client *client,
		component->name_prefix = pdata->wsa881x_name_prefix;

		pdata->status = WSA881X_STATUS_I2C;
		dev_info(&client->dev, "%s:pdata status changed to I2C\n",
			__func__);
		goto err1;
	}
err_mem: