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

Commit a5f5fdb8 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: msm: qdsp6v2: Add support to improve debug logging"

parents 3f04943d 1fe8a3a7
Loading
Loading
Loading
Loading
+103 −64
Original line number Original line Diff line number Diff line
@@ -143,28 +143,32 @@ static int msm_dai_q6_dai_add_route(struct snd_soc_dai *dai)
{
{
	struct snd_soc_dapm_route intercon;
	struct snd_soc_dapm_route intercon;


	if (!dai || !dai->driver) {
	if (!dai) {
			pr_err("%s Invalid params\n", __func__);
		pr_err("%s: Invalid params dai\n", __func__);
		return -EINVAL;
	}
	if (!dai->driver) {
		pr_err("%s: Invalid params dai driver\n", __func__);
		return -EINVAL;
		return -EINVAL;
	}
	}
	memset(&intercon, 0 , sizeof(intercon));
	memset(&intercon, 0 , sizeof(intercon));
	if (dai->driver->playback.stream_name &&
	if (dai->driver->playback.stream_name &&
		dai->driver->playback.aif_name) {
		dai->driver->playback.aif_name) {
		dev_dbg(dai->dev, "%s add route for widget %s",
		dev_dbg(dai->dev, "%s: add route for widget %s",
				__func__, dai->driver->playback.stream_name);
				__func__, dai->driver->playback.stream_name);
		intercon.source = dai->driver->playback.aif_name;
		intercon.source = dai->driver->playback.aif_name;
		intercon.sink = dai->driver->playback.stream_name;
		intercon.sink = dai->driver->playback.stream_name;
		dev_dbg(dai->dev, "%s src %s sink %s\n",
		dev_dbg(dai->dev, "%s: src %s sink %s\n",
				__func__, intercon.source, intercon.sink);
				__func__, intercon.source, intercon.sink);
		snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);
		snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);
	}
	}
	if (dai->driver->capture.stream_name &&
	if (dai->driver->capture.stream_name &&
		dai->driver->capture.aif_name) {
		dai->driver->capture.aif_name) {
		dev_dbg(dai->dev, "%s add route for widget %s",
		dev_dbg(dai->dev, "%s: add route for widget %s",
				__func__, dai->driver->capture.stream_name);
				__func__, dai->driver->capture.stream_name);
		intercon.sink = dai->driver->capture.aif_name;
		intercon.sink = dai->driver->capture.aif_name;
		intercon.source = dai->driver->capture.stream_name;
		intercon.source = dai->driver->capture.stream_name;
		dev_dbg(dai->dev, "%s src %s sink %s\n",
		dev_dbg(dai->dev, "%s: src %s sink %s\n",
				__func__, intercon.source, intercon.sink);
				__func__, intercon.source, intercon.sink);
		snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);
		snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);
	}
	}
@@ -318,7 +322,7 @@ static void msm_dai_q6_auxpcm_shutdown(struct snd_pcm_substream *substream,
			clear_bit(STATUS_TX_PORT,
			clear_bit(STATUS_TX_PORT,
				  aux_dai_data->auxpcm_port_status);
				  aux_dai_data->auxpcm_port_status);
		else {
		else {
			dev_dbg(dai->dev, "%s(): PCM_TX port already closed\n",
			dev_dbg(dai->dev, "%s: PCM_TX port already closed\n",
				__func__);
				__func__);
			goto exit;
			goto exit;
		}
		}
@@ -327,14 +331,14 @@ static void msm_dai_q6_auxpcm_shutdown(struct snd_pcm_substream *substream,
			clear_bit(STATUS_RX_PORT,
			clear_bit(STATUS_RX_PORT,
				  aux_dai_data->auxpcm_port_status);
				  aux_dai_data->auxpcm_port_status);
		else {
		else {
			dev_dbg(dai->dev, "%s(): PCM_RX port already closed\n",
			dev_dbg(dai->dev, "%s: PCM_RX port already closed\n",
				__func__);
				__func__);
			goto exit;
			goto exit;
		}
		}
	}
	}
	if (test_bit(STATUS_TX_PORT, aux_dai_data->auxpcm_port_status) ||
	if (test_bit(STATUS_TX_PORT, aux_dai_data->auxpcm_port_status) ||
	    test_bit(STATUS_RX_PORT, aux_dai_data->auxpcm_port_status)) {
	    test_bit(STATUS_RX_PORT, aux_dai_data->auxpcm_port_status)) {
		dev_dbg(dai->dev, "%s(): cannot shutdown PCM ports\n",
		dev_dbg(dai->dev, "%s: cannot shutdown PCM ports\n",
			__func__);
			__func__);
		goto exit;
		goto exit;
	}
	}
@@ -380,7 +384,7 @@ static int msm_dai_q6_auxpcm_prepare(struct snd_pcm_substream *substream,
	if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
	if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
		if (test_bit(STATUS_TX_PORT,
		if (test_bit(STATUS_TX_PORT,
				aux_dai_data->auxpcm_port_status)) {
				aux_dai_data->auxpcm_port_status)) {
			dev_dbg(dai->dev, "%s(): PCM_TX port already ON\n",
			dev_dbg(dai->dev, "%s: PCM_TX port already ON\n",
				__func__);
				__func__);
			goto exit;
			goto exit;
		} else
		} else
@@ -389,7 +393,7 @@ static int msm_dai_q6_auxpcm_prepare(struct snd_pcm_substream *substream,
	} else if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
	} else if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
		if (test_bit(STATUS_RX_PORT,
		if (test_bit(STATUS_RX_PORT,
				aux_dai_data->auxpcm_port_status)) {
				aux_dai_data->auxpcm_port_status)) {
			dev_dbg(dai->dev, "%s(): PCM_RX port already ON\n",
			dev_dbg(dai->dev, "%s: PCM_RX port already ON\n",
				__func__);
				__func__);
			goto exit;
			goto exit;
		} else
		} else
@@ -398,7 +402,7 @@ static int msm_dai_q6_auxpcm_prepare(struct snd_pcm_substream *substream,
	}
	}
	if (test_bit(STATUS_TX_PORT, aux_dai_data->auxpcm_port_status) &&
	if (test_bit(STATUS_TX_PORT, aux_dai_data->auxpcm_port_status) &&
	    test_bit(STATUS_RX_PORT, aux_dai_data->auxpcm_port_status)) {
	    test_bit(STATUS_RX_PORT, aux_dai_data->auxpcm_port_status)) {
		dev_dbg(dai->dev, "%s(): PCM ports already set\n", __func__);
		dev_dbg(dai->dev, "%s: PCM ports already set\n", __func__);
		goto exit;
		goto exit;
	}
	}


@@ -491,6 +495,7 @@ static int msm_dai_q6_auxpcm_trigger(struct snd_pcm_substream *substream,
		return 0;
		return 0;


	default:
	default:
		pr_err("%s: cmd %d\n", __func__, cmd);
		rc = -EINVAL;
		rc = -EINVAL;
	}
	}


@@ -506,7 +511,7 @@ static int msm_dai_q6_dai_auxpcm_remove(struct snd_soc_dai *dai)


	aux_dai_data = dev_get_drvdata(dai->dev);
	aux_dai_data = dev_get_drvdata(dai->dev);


	dev_dbg(dai->dev, "%s(): dai->id %d closing afe\n",
	dev_dbg(dai->dev, "%s: dai->id %d closing afe\n",
		__func__, dai->id);
		__func__, dai->id);


	if (test_bit(STATUS_TX_PORT, aux_dai_data->auxpcm_port_status) ||
	if (test_bit(STATUS_TX_PORT, aux_dai_data->auxpcm_port_status) ||
@@ -533,8 +538,12 @@ static int msm_dai_q6_aux_pcm_probe(struct snd_soc_dai *dai)
{
{
	int rc = 0;
	int rc = 0;


	if (!dai || !dai->dev) {
	if (!dai) {
		pr_err("%s Invalid params\n", __func__);
		pr_err("%s: Invalid params dai\n", __func__);
		return -EINVAL;
	}
	if (!dai->dev) {
		pr_err("%s: Invalid params dai dev\n", __func__);
		return -EINVAL;
		return -EINVAL;
	}
	}
	rc = msm_dai_q6_dai_add_route(dai);
	rc = msm_dai_q6_dai_add_route(dai);
@@ -714,6 +723,8 @@ static int msm_dai_q6_spdif_hw_params(struct snd_pcm_substream *substream,
		dai_data->spdif_port.cfg.bit_width = 24;
		dai_data->spdif_port.cfg.bit_width = 24;
		break;
		break;
	default:
	default:
		pr_err("%s: format %d\n",
			__func__, params_format(params));
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -760,14 +771,14 @@ static int msm_dai_q6_spdif_prepare(struct snd_pcm_substream *substream,
	int rc = 0;
	int rc = 0;


	if (IS_ERR_VALUE(rc)) {
	if (IS_ERR_VALUE(rc)) {
		dev_err(dai->dev, "%s clk_config failed", __func__);
		dev_err(dai->dev, "%s: clk_config failed", __func__);
		return rc;
		return rc;
	}
	}
	if (!test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) {
	if (!test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) {
		rc = afe_spdif_port_start(dai->id, &dai_data->spdif_port,
		rc = afe_spdif_port_start(dai->id, &dai_data->spdif_port,
				dai_data->rate);
				dai_data->rate);
		if (IS_ERR_VALUE(rc))
		if (IS_ERR_VALUE(rc))
			dev_err(dai->dev, "fail to open AFE port %x\n",
			dev_err(dai->dev, "fail to open AFE port 0x%x\n",
					dai->id);
					dai->id);
		else
		else
			set_bit(STATUS_PORT_STARTED,
			set_bit(STATUS_PORT_STARTED,
@@ -802,21 +813,21 @@ static int msm_dai_q6_spdif_dai_probe(struct snd_soc_dai *dai)
	if (!rc && dai && dai->driver) {
	if (!rc && dai && dai->driver) {
		if (dai->driver->playback.stream_name &&
		if (dai->driver->playback.stream_name &&
				dai->driver->playback.aif_name) {
				dai->driver->playback.aif_name) {
			dev_dbg(dai->dev, "%s add route for widget %s",
			dev_dbg(dai->dev, "%s: add route for widget %s",
				__func__, dai->driver->playback.stream_name);
				__func__, dai->driver->playback.stream_name);
			intercon.source = dai->driver->playback.aif_name;
			intercon.source = dai->driver->playback.aif_name;
			intercon.sink = dai->driver->playback.stream_name;
			intercon.sink = dai->driver->playback.stream_name;
			dev_dbg(dai->dev, "%s src %s sink %s\n",
			dev_dbg(dai->dev, "%s: src %s sink %s\n",
				__func__, intercon.source, intercon.sink);
				__func__, intercon.source, intercon.sink);
			snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);
			snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);
		}
		}
		if (dai->driver->capture.stream_name &&
		if (dai->driver->capture.stream_name &&
				dai->driver->capture.aif_name) {
				dai->driver->capture.aif_name) {
			dev_dbg(dai->dev, "%s add route for widget %s",
			dev_dbg(dai->dev, "%s: add route for widget %s",
				__func__, dai->driver->capture.stream_name);
				__func__, dai->driver->capture.stream_name);
			intercon.sink = dai->driver->capture.aif_name;
			intercon.sink = dai->driver->capture.aif_name;
			intercon.source = dai->driver->capture.stream_name;
			intercon.source = dai->driver->capture.stream_name;
			dev_dbg(dai->dev, "%s src %s sink %s\n",
			dev_dbg(dai->dev, "%s: src %s sink %s\n",
				__func__, intercon.source, intercon.sink);
				__func__, intercon.source, intercon.sink);
			snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);
			snd_soc_dapm_add_routes(&dai->dapm, &intercon, 1);
		}
		}
@@ -885,7 +896,7 @@ static int msm_dai_q6_prepare(struct snd_pcm_substream *substream,
					dai_data->rate);
					dai_data->rate);


		if (IS_ERR_VALUE(rc))
		if (IS_ERR_VALUE(rc))
			dev_err(dai->dev, "fail to open AFE port %x\n",
			dev_err(dai->dev, "fail to open AFE port 0x%x\n",
				dai->id);
				dai->id);
		else
		else
			set_bit(STATUS_PORT_STARTED,
			set_bit(STATUS_PORT_STARTED,
@@ -909,6 +920,8 @@ static int msm_dai_q6_cdc_hw_params(struct snd_pcm_hw_params *params,
		break;
		break;
	default:
	default:
		return -EINVAL;
		return -EINVAL;
		pr_err("%s: err channels %d\n",
			__func__, dai_data->channels);
		break;
		break;
	}
	}


@@ -921,6 +934,8 @@ static int msm_dai_q6_cdc_hw_params(struct snd_pcm_hw_params *params,
		dai_data->port_config.i2s.bit_width = 24;
		dai_data->port_config.i2s.bit_width = 24;
		break;
		break;
	default:
	default:
		pr_err("%s: format %d\n",
			__func__, params_format(params));
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -964,7 +979,8 @@ static int msm_dai_q6_i2s_hw_params(struct snd_pcm_hw_params *params,
			dai_data->port_config.i2s.mono_stereo = MSM_AFE_MONO;
			dai_data->port_config.i2s.mono_stereo = MSM_AFE_MONO;
			break;
			break;
		default:
		default:
			pr_warn("greater than stereo has not been validated");
			pr_warn("%s: greater than stereo has not been validated %d",
				__func__, dai_data->channels);
			break;
			break;
		}
		}
	}
	}
@@ -997,6 +1013,8 @@ static int msm_dai_q6_slim_bus_hw_params(struct snd_pcm_hw_params *params,
		dai_data->port_config.slim_sch.bit_width = 24;
		dai_data->port_config.slim_sch.bit_width = 24;
		break;
		break;
	default:
	default:
		pr_err("%s: format %d\n",
			__func__, params_format(params));
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -1156,7 +1174,7 @@ static int msm_dai_q6_hw_params(struct snd_pcm_substream *substream,
						dai, substream->stream);
						dai, substream->stream);
		break;
		break;
	default:
	default:
		dev_err(dai->dev, "invalid AFE port ID\n");
		dev_err(dai->dev, "invalid AFE port ID 0x%x\n", dai->id);
		rc = -EINVAL;
		rc = -EINVAL;
		break;
		break;
	}
	}
@@ -1171,7 +1189,7 @@ static void msm_dai_q6_shutdown(struct snd_pcm_substream *substream,
	int rc = 0;
	int rc = 0;


	if (test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) {
	if (test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) {
		pr_debug("%s, stop pseudo port:%d\n", __func__,  dai->id);
		pr_debug("%s: stop pseudo port:%d\n", __func__,  dai->id);
		rc = afe_close(dai->id); /* can block */
		rc = afe_close(dai->id); /* can block */


		if (IS_ERR_VALUE(rc))
		if (IS_ERR_VALUE(rc))
@@ -1194,6 +1212,8 @@ static int msm_dai_q6_cdc_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
		dai_data->port_config.i2s.ws_src = 0; /* CPU is slave */
		dai_data->port_config.i2s.ws_src = 0; /* CPU is slave */
		break;
		break;
	default:
	default:
		pr_err("%s: fmt 0x%x\n",
			__func__, fmt & SND_SOC_DAIFMT_MASTER_MASK);
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -1204,7 +1224,7 @@ static int msm_dai_q6_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
{
{
	int rc = 0;
	int rc = 0;


	dev_dbg(dai->dev, "enter %s, id = %d fmt[%d]\n", __func__,
	dev_dbg(dai->dev, "%s: id = %d fmt[%d]\n", __func__,
							dai->id, fmt);
							dai->id, fmt);
	switch (dai->id) {
	switch (dai->id) {
	case PRIMARY_I2S_TX:
	case PRIMARY_I2S_TX:
@@ -1214,7 +1234,7 @@ static int msm_dai_q6_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
		rc = msm_dai_q6_cdc_set_fmt(dai, fmt);
		rc = msm_dai_q6_cdc_set_fmt(dai, fmt);
		break;
		break;
	default:
	default:
		dev_err(dai->dev, "invalid cpu_dai set_fmt\n");
		dev_err(dai->dev, "invalid cpu_dai id 0x%x\n", dai->id);
		rc = -EINVAL;
		rc = -EINVAL;
		break;
		break;
	}
	}
@@ -1231,7 +1251,7 @@ static int msm_dai_q6_set_channel_map(struct snd_soc_dai *dai,
	struct msm_dai_q6_dai_data *dai_data = dev_get_drvdata(dai->dev);
	struct msm_dai_q6_dai_data *dai_data = dev_get_drvdata(dai->dev);
	unsigned int i = 0;
	unsigned int i = 0;


	dev_dbg(dai->dev, "enter %s, id = %d\n", __func__, dai->id);
	dev_dbg(dai->dev, "%s: id = %d\n", __func__, dai->id);
	switch (dai->id) {
	switch (dai->id) {
	case SLIMBUS_0_RX:
	case SLIMBUS_0_RX:
	case SLIMBUS_1_RX:
	case SLIMBUS_1_RX:
@@ -1245,8 +1265,10 @@ static int msm_dai_q6_set_channel_map(struct snd_soc_dai *dai,
		 * from 138 to 144 for pre-Taiko
		 * from 138 to 144 for pre-Taiko
		 * from 144 to 159 for Taiko
		 * from 144 to 159 for Taiko
		 */
		 */
		if (!rx_slot)
		if (!rx_slot) {
			pr_err("%s: rx slot not found\n", __func__);
			return -EINVAL;
			return -EINVAL;
		}
		for (i = 0; i < rx_num; i++) {
		for (i = 0; i < rx_num; i++) {
			dai_data->port_config.slim_sch.shared_ch_mapping[i] =
			dai_data->port_config.slim_sch.shared_ch_mapping[i] =
			    rx_slot[i];
			    rx_slot[i];
@@ -1273,8 +1295,10 @@ static int msm_dai_q6_set_channel_map(struct snd_soc_dai *dai,
		 * from 128 to 137 for pre-Taiko
		 * from 128 to 137 for pre-Taiko
		 * from 128 to 143 for Taiko
		 * from 128 to 143 for Taiko
		 */
		 */
		if (!tx_slot)
		if (!tx_slot) {
			pr_err("%s: tx slot not found\n", __func__);
			return -EINVAL;
			return -EINVAL;
		}
		for (i = 0; i < tx_num; i++) {
		for (i = 0; i < tx_num; i++) {
			dai_data->port_config.slim_sch.shared_ch_mapping[i] =
			dai_data->port_config.slim_sch.shared_ch_mapping[i] =
			    tx_slot[i];
			    tx_slot[i];
@@ -1288,7 +1312,7 @@ static int msm_dai_q6_set_channel_map(struct snd_soc_dai *dai,
			dai_data->port_config.slim_sch.shared_ch_mapping[1]);
			dai_data->port_config.slim_sch.shared_ch_mapping[1]);
		break;
		break;
	default:
	default:
		dev_err(dai->dev, "invalid cpu_dai id %d\n", dai->id);
		dev_err(dai->dev, "invalid cpu_dai id 0x%x\n", dai->id);
		rc = -EINVAL;
		rc = -EINVAL;
		break;
		break;
	}
	}
@@ -1308,8 +1332,12 @@ static int msm_dai_q6_dai_probe(struct snd_soc_dai *dai)
	struct msm_dai_q6_dai_data *dai_data;
	struct msm_dai_q6_dai_data *dai_data;
	int rc = 0;
	int rc = 0;


	if (!dai || !dai->dev) {
	if (!dai) {
		pr_err("%s Invalid params\n", __func__);
		pr_err("%s: Invalid params dai\n", __func__);
		return -EINVAL;
	}
	if (!dai->dev) {
		pr_err("%s: Invalid params dai dev\n", __func__);
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -1335,7 +1363,7 @@ static int msm_dai_q6_dai_remove(struct snd_soc_dai *dai)


	/* If AFE port is still up, close it */
	/* If AFE port is still up, close it */
	if (test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) {
	if (test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) {
		pr_debug("%s, stop pseudo port:%d\n", __func__,  dai->id);
		pr_debug("%s: stop pseudo port:%d\n", __func__,  dai->id);
		rc = afe_close(dai->id); /* can block */
		rc = afe_close(dai->id); /* can block */


		if (IS_ERR_VALUE(rc))
		if (IS_ERR_VALUE(rc))
@@ -2213,6 +2241,8 @@ static int msm_mi2s_get_port_id(u32 mi2s_id, int stream, u16 *port_id)
			break;
			break;
		break;
		break;
		default:
		default:
			pr_err("%s: playback err id 0x%x\n",
				__func__, mi2s_id);
			ret = -1;
			ret = -1;
		break;
		break;
		}
		}
@@ -2232,15 +2262,17 @@ static int msm_mi2s_get_port_id(u32 mi2s_id, int stream, u16 *port_id)
			*port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
			*port_id = AFE_PORT_ID_QUATERNARY_MI2S_TX;
			break;
			break;
		default:
		default:
			pr_err("%s: capture err id 0x%x\n", __func__, mi2s_id);
			ret = -1;
			ret = -1;
		break;
		break;
		}
		}
	break;
	break;
	default:
	default:
		pr_err("%s: default err %d\n", __func__, stream);
		ret = -1;
		ret = -1;
	break;
	break;
	}
	}
	pr_debug("%s: port_id = %#x\n", __func__, *port_id);
	pr_debug("%s: port_id = 0x%x\n", __func__, *port_id);
	return ret;
	return ret;
}
}


@@ -2258,12 +2290,12 @@ static int msm_dai_q6_mi2s_prepare(struct snd_pcm_substream *substream,


	if (msm_mi2s_get_port_id(dai->id, substream->stream,
	if (msm_mi2s_get_port_id(dai->id, substream->stream,
				 &port_id) != 0) {
				 &port_id) != 0) {
		dev_err(dai->dev, "%s: Invalid Port ID %#x\n",
		dev_err(dai->dev, "%s: Invalid Port ID 0x%x\n",
				__func__, port_id);
				__func__, port_id);
		return -EINVAL;
		return -EINVAL;
	}
	}


	dev_dbg(dai->dev, "%s: dai id %d, afe port id = %x\n"
	dev_dbg(dai->dev, "%s: dai id %d, afe port id = 0x%x\n"
		"dai_data->channels = %u sample_rate = %u\n", __func__,
		"dai_data->channels = %u sample_rate = %u\n", __func__,
		dai->id, port_id, dai_data->channels, dai_data->rate);
		dai->id, port_id, dai_data->channels, dai_data->rate);


@@ -2275,7 +2307,7 @@ static int msm_dai_q6_mi2s_prepare(struct snd_pcm_substream *substream,
				    dai_data->rate);
				    dai_data->rate);


		if (IS_ERR_VALUE(rc))
		if (IS_ERR_VALUE(rc))
			dev_err(dai->dev, "fail to open AFE port %x\n",
			dev_err(dai->dev, "fail to open AFE port 0x%x\n",
				dai->id);
				dai->id);
		else
		else
			set_bit(STATUS_PORT_STARTED,
			set_bit(STATUS_PORT_STARTED,
@@ -2356,6 +2388,8 @@ static int msm_dai_q6_mi2s_hw_params(struct snd_pcm_substream *substream,
			dai_data->port_config.i2s.mono_stereo = MSM_AFE_MONO;
			dai_data->port_config.i2s.mono_stereo = MSM_AFE_MONO;
		break;
		break;
	default:
	default:
		pr_err("%s: default err channels %d\n",
			__func__, dai_data->channels);
		goto error_invalid_data;
		goto error_invalid_data;
	}
	}
	dai_data->rate = params_rate(params);
	dai_data->rate = params_rate(params);
@@ -2371,6 +2405,8 @@ static int msm_dai_q6_mi2s_hw_params(struct snd_pcm_substream *substream,
		dai_data->bitwidth = 24;
		dai_data->bitwidth = 24;
		break;
		break;
	default:
	default:
		pr_err("%s: format %d\n",
			__func__, params_format(params));
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -2401,9 +2437,9 @@ static int msm_dai_q6_mi2s_hw_params(struct snd_pcm_substream *substream,
		}
		}
	}
	}
	dev_dbg(dai->dev, "%s: dai id %d dai_data->channels = %d\n"
	dev_dbg(dai->dev, "%s: dai id %d dai_data->channels = %d\n"
		"sample_rate = %u i2s_cfg_minor_version = %#x\n"
		"sample_rate = %u i2s_cfg_minor_version = 0x%x\n"
		"bit_width = %hu  channel_mode = %#x mono_stereo = %#x\n"
		"bit_width = %hu  channel_mode = 0x%x mono_stereo = %#x\n"
		"ws_src = %#x sample_rate = %u data_format = %#x\n"
		"ws_src = 0x%x sample_rate = %u data_format = 0x%x\n"
		"reserved = %u\n", __func__, dai->id, dai_data->channels,
		"reserved = %u\n", __func__, dai->id, dai_data->channels,
		dai_data->rate, i2s->i2s_cfg_minor_version, i2s->bit_width,
		dai_data->rate, i2s->i2s_cfg_minor_version, i2s->bit_width,
		i2s->channel_mode, i2s->mono_stereo, i2s->ws_src,
		i2s->channel_mode, i2s->mono_stereo, i2s->ws_src,
@@ -2412,7 +2448,7 @@ static int msm_dai_q6_mi2s_hw_params(struct snd_pcm_substream *substream,
	return 0;
	return 0;


error_invalid_data:
error_invalid_data:
	pr_debug("%s: dai_data->channels = %d channel_mode = %d\n", __func__,
	pr_err("%s: dai_data->channels = %d channel_mode = %d\n", __func__,
		 dai_data->channels, dai_data->port_config.i2s.channel_mode);
		 dai_data->channels, dai_data->port_config.i2s.channel_mode);
	return -EINVAL;
	return -EINVAL;
}
}
@@ -2442,6 +2478,8 @@ static int msm_dai_q6_mi2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
		mi2s_dai_data->tx_dai.mi2s_dai_data.port_config.i2s.ws_src = 0;
		mi2s_dai_data->tx_dai.mi2s_dai_data.port_config.i2s.ws_src = 0;
		break;
		break;
	default:
	default:
		pr_err("%s: fmt %d\n",
			__func__, fmt & SND_SOC_DAIFMT_MASTER_MASK);
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -2479,11 +2517,11 @@ static void msm_dai_q6_mi2s_shutdown(struct snd_pcm_substream *substream,


	if (msm_mi2s_get_port_id(dai->id, substream->stream,
	if (msm_mi2s_get_port_id(dai->id, substream->stream,
				 &port_id) != 0) {
				 &port_id) != 0) {
		dev_err(dai->dev, "%s: Invalid Port ID %#x\n",
		dev_err(dai->dev, "%s: Invalid Port ID 0x%x\n",
				__func__, port_id);
				__func__, port_id);
	}
	}


	dev_dbg(dai->dev, "%s: closing afe port id = %x\n",
	dev_dbg(dai->dev, "%s: closing afe port id = 0x%x\n",
			__func__, port_id);
			__func__, port_id);


	if (test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) {
	if (test_bit(STATUS_PORT_STARTED, dai_data->status_mask)) {
@@ -2639,8 +2677,8 @@ static int msm_dai_q6_mi2s_get_lineconfig(u16 sd_lines, u16 *config_ptr,
			*config_ptr = AFE_PORT_I2S_SD3;
			*config_ptr = AFE_PORT_I2S_SD3;
			break;
			break;
		default:
		default:
			pr_err("%s: invalid SD line\n",
			pr_err("%s: invalid SD lines %d\n",
				   __func__);
				   __func__, sd_lines);
			goto error_invalid_data;
			goto error_invalid_data;
		}
		}
		break;
		break;
@@ -2653,8 +2691,8 @@ static int msm_dai_q6_mi2s_get_lineconfig(u16 sd_lines, u16 *config_ptr,
			*config_ptr = AFE_PORT_I2S_QUAD23;
			*config_ptr = AFE_PORT_I2S_QUAD23;
			break;
			break;
		default:
		default:
			pr_err("%s: invalid SD line\n",
			pr_err("%s: invalid SD lines %d\n",
				   __func__);
				   __func__, sd_lines);
			goto error_invalid_data;
			goto error_invalid_data;
		}
		}
		break;
		break;
@@ -2664,8 +2702,8 @@ static int msm_dai_q6_mi2s_get_lineconfig(u16 sd_lines, u16 *config_ptr,
			*config_ptr = AFE_PORT_I2S_6CHS;
			*config_ptr = AFE_PORT_I2S_6CHS;
			break;
			break;
		default:
		default:
			pr_err("%s: invalid SD lines\n",
			pr_err("%s: invalid SD lines %d\n",
				   __func__);
				   __func__, sd_lines);
			goto error_invalid_data;
			goto error_invalid_data;
		}
		}
		break;
		break;
@@ -2675,19 +2713,20 @@ static int msm_dai_q6_mi2s_get_lineconfig(u16 sd_lines, u16 *config_ptr,
			*config_ptr = AFE_PORT_I2S_8CHS;
			*config_ptr = AFE_PORT_I2S_8CHS;
			break;
			break;
		default:
		default:
			pr_err("%s: invalid SD lines\n",
			pr_err("%s: invalid SD lines %d\n",
				   __func__);
				   __func__, sd_lines);
			goto error_invalid_data;
			goto error_invalid_data;
		}
		}
		break;
		break;
	default:
	default:
		pr_err("%s: invalid SD lines\n", __func__);
		pr_err("%s: invalid SD lines %d\n", __func__, num_of_sd_lines);
		goto error_invalid_data;
		goto error_invalid_data;
	}
	}
	*ch_cnt = num_of_sd_lines;
	*ch_cnt = num_of_sd_lines;
	return 0;
	return 0;


error_invalid_data:
error_invalid_data:
	pr_err("%s: invalid data\n", __func__);
	return -EINVAL;
	return -EINVAL;
}
}


@@ -2743,7 +2782,7 @@ static int msm_dai_q6_mi2s_platform_data_validation(
		dai_driver->capture.channels_max = 0;
		dai_driver->capture.channels_max = 0;
	}
	}


	dev_dbg(&pdev->dev, "%s: playback sdline %x capture sdline %x\n",
	dev_dbg(&pdev->dev, "%s: playback sdline 0x%x capture sdline 0x%x\n",
		__func__, dai_data->rx_dai.pdata_mi2s_lines,
		__func__, dai_data->rx_dai.pdata_mi2s_lines,
		dai_data->tx_dai.pdata_mi2s_lines);
		dai_data->tx_dai.pdata_mi2s_lines);
	dev_dbg(&pdev->dev, "%s: playback ch_max %d capture ch_mx %d\n",
	dev_dbg(&pdev->dev, "%s: playback ch_max %d capture ch_mx %d\n",
@@ -2770,11 +2809,11 @@ static int msm_dai_q6_mi2s_dev_probe(struct platform_device *pdev)
				  &mi2s_intf);
				  &mi2s_intf);
	if (rc) {
	if (rc) {
		dev_err(&pdev->dev,
		dev_err(&pdev->dev,
			"%s: missing %x in dt node\n", __func__, mi2s_intf);
			"%s: missing 0x%x in dt node\n", __func__, mi2s_intf);
		goto rtn;
		goto rtn;
	}
	}


	dev_dbg(&pdev->dev, "dev name %s dev id %x\n", dev_name(&pdev->dev),
	dev_dbg(&pdev->dev, "dev name %s dev id 0x%x\n", dev_name(&pdev->dev),
		mi2s_intf);
		mi2s_intf);


	if ((mi2s_intf < MSM_PRIM_MI2S || mi2s_intf > MSM_SEC_MI2S_SD1)
	if ((mi2s_intf < MSM_PRIM_MI2S || mi2s_intf > MSM_SEC_MI2S_SD1)
@@ -2811,7 +2850,7 @@ static int msm_dai_q6_mi2s_dev_probe(struct platform_device *pdev)
			"qcom,msm-mi2s-tx-lines");
			"qcom,msm-mi2s-tx-lines");
		goto free_pdata;
		goto free_pdata;
	}
	}
	dev_dbg(&pdev->dev, "dev name %s Rx line %x , Tx ine %x\n",
	dev_dbg(&pdev->dev, "dev name %s Rx line 0x%x , Tx ine 0x%x\n",
		dev_name(&pdev->dev), rx_line, tx_line);
		dev_name(&pdev->dev), rx_line, tx_line);
	mi2s_pdata->rx_sd_lines = rx_line;
	mi2s_pdata->rx_sd_lines = rx_line;
	mi2s_pdata->tx_sd_lines = tx_line;
	mi2s_pdata->tx_sd_lines = tx_line;
@@ -2911,7 +2950,7 @@ register_slim_playback:
			}
			}
		}
		}
		if (rc)
		if (rc)
			pr_err("%s Device not found stream name %s\n",
			pr_err("%s: Device not found stream name %s\n",
				__func__, stream_name);
				__func__, stream_name);
		break;
		break;
	case SLIMBUS_0_TX:
	case SLIMBUS_0_TX:
@@ -2949,7 +2988,7 @@ register_slim_capture:
			}
			}
		}
		}
		if (rc)
		if (rc)
			pr_err("%s Device not found stream name %s\n",
			pr_err("%s: Device not found stream name %s\n",
				__func__, stream_name);
				__func__, stream_name);
		break;
		break;
	case INT_BT_SCO_RX:
	case INT_BT_SCO_RX:
@@ -2987,7 +3026,7 @@ register_afe_playback:
			}
			}
		}
		}
		if (rc)
		if (rc)
			pr_err("%s Device not found stream name %s\n",
			pr_err("%s: Device not found stream name %s\n",
			__func__, stream_name);
			__func__, stream_name);
		break;
		break;
	case RT_PROXY_DAI_001_TX:
	case RT_PROXY_DAI_001_TX:
@@ -3009,7 +3048,7 @@ register_afe_capture:
			}
			}
		}
		}
		if (rc)
		if (rc)
			pr_err("%s Device not found stream name %s\n",
			pr_err("%s: Device not found stream name %s\n",
			__func__, stream_name);
			__func__, stream_name);
		break;
		break;
	case VOICE_PLAYBACK_TX:
	case VOICE_PLAYBACK_TX:
@@ -3053,7 +3092,7 @@ register_uplink_capture:
			}
			}
		}
		}
		if (rc)
		if (rc)
			pr_err("%s Device not found stream name %s\n",
			pr_err("%s: Device not found stream name %s\n",
			__func__, stream_name);
			__func__, stream_name);
		break;
		break;


+7 −4
Original line number Original line Diff line number Diff line
@@ -75,7 +75,7 @@ static void msm_pcm_route_event_handler(enum msm_pcm_routing_event event,


	BUG_ON(!pcm);
	BUG_ON(!pcm);


	pr_debug("%s: event %x\n", __func__, event);
	pr_debug("%s: event 0x%x\n", __func__, event);


	switch (event) {
	switch (event) {
	case MSM_PCM_RT_EVT_DEVSWITCH:
	case MSM_PCM_RT_EVT_DEVSWITCH:
@@ -83,6 +83,7 @@ static void msm_pcm_route_event_handler(enum msm_pcm_routing_event event,
		q6asm_cmd(pcm->audio_client, CMD_FLUSH);
		q6asm_cmd(pcm->audio_client, CMD_FLUSH);
		q6asm_run(pcm->audio_client, 0, 0, 0);
		q6asm_run(pcm->audio_client, 0, 0, 0);
	default:
	default:
		pr_err("%s: default event 0x%x\n", __func__, event);
		break;
		break;
	}
	}
}
}
@@ -90,7 +91,7 @@ static void msm_pcm_route_event_handler(enum msm_pcm_routing_event event,
static void msm_pcm_loopback_event_handler(uint32_t opcode, uint32_t token,
static void msm_pcm_loopback_event_handler(uint32_t opcode, uint32_t token,
					   uint32_t *payload, void *priv)
					   uint32_t *payload, void *priv)
{
{
	pr_debug("%s\n", __func__);
	pr_debug("%s:\n", __func__);
	switch (opcode) {
	switch (opcode) {
	case APR_BASIC_RSP_RESULT: {
	case APR_BASIC_RSP_RESULT: {
		switch (payload[0]) {
		switch (payload[0]) {
@@ -101,7 +102,8 @@ static void msm_pcm_loopback_event_handler(uint32_t opcode, uint32_t token,
	}
	}
		break;
		break;
	default:
	default:
		pr_err("Not Supported Event opcode[0x%x]\n", opcode);
		pr_err("%s: Not Supported Event opcode[0x%x]\n",
			__func__, opcode);
		break;
		break;
	}
	}
}
}
@@ -110,7 +112,7 @@ static int pcm_loopback_set_volume(struct msm_pcm_loopback *prtd, int volume)
{
{
	int rc = -EINVAL;
	int rc = -EINVAL;


	pr_debug("%s Setting volume 0x%x\n", __func__, volume);
	pr_debug("%s: Setting volume 0x%x\n", __func__, volume);


	if (prtd && prtd->audio_client) {
	if (prtd && prtd->audio_client) {
		rc = q6asm_set_volume(prtd->audio_client, volume);
		rc = q6asm_set_volume(prtd->audio_client, volume);
@@ -298,6 +300,7 @@ static int msm_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
			q6asm_cmd_nowait(pcm->audio_client, CMD_PAUSE);
			q6asm_cmd_nowait(pcm->audio_client, CMD_PAUSE);
		break;
		break;
	default:
	default:
		pr_err("%s: default cmd %d\n", __func__, cmd);
		break;
		break;
	}
	}