Loading sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c +103 −64 Original line number Original line Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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; } } Loading @@ -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; } } Loading Loading @@ -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 Loading @@ -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 Loading @@ -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; } } Loading Loading @@ -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; } } Loading @@ -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) || Loading @@ -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); Loading Loading @@ -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; } } Loading Loading @@ -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, Loading Loading @@ -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); } } Loading Loading @@ -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, Loading @@ -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; } } Loading @@ -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; } } Loading Loading @@ -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; } } } } Loading Loading @@ -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; } } Loading Loading @@ -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; } } Loading @@ -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)) Loading @@ -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; } } Loading @@ -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: Loading @@ -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; } } Loading @@ -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: Loading @@ -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]; Loading @@ -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]; Loading @@ -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; } } Loading @@ -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; } } Loading @@ -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)) Loading Loading @@ -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; } } Loading @@ -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; } } Loading @@ -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); Loading @@ -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, Loading Loading @@ -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); Loading @@ -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; } } Loading Loading @@ -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, Loading @@ -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; } } Loading Loading @@ -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; } } Loading Loading @@ -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)) { Loading Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; } } Loading Loading @@ -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", Loading @@ -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) Loading Loading @@ -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; Loading Loading @@ -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: Loading Loading @@ -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: Loading Loading @@ -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: Loading @@ -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: Loading Loading @@ -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; Loading sound/soc/msm/qdsp6v2/msm-pcm-loopback-v2.c +7 −4 Original line number Original line Diff line number Diff line Loading @@ -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: Loading @@ -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; } } } } Loading @@ -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]) { Loading @@ -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; } } } } Loading @@ -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); Loading Loading @@ -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; } } Loading Loading
sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c +103 −64 Original line number Original line Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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; } } Loading @@ -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; } } Loading Loading @@ -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 Loading @@ -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 Loading @@ -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; } } Loading Loading @@ -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; } } Loading @@ -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) || Loading @@ -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); Loading Loading @@ -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; } } Loading Loading @@ -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, Loading Loading @@ -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); } } Loading Loading @@ -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, Loading @@ -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; } } Loading @@ -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; } } Loading Loading @@ -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; } } } } Loading Loading @@ -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; } } Loading Loading @@ -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; } } Loading @@ -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)) Loading @@ -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; } } Loading @@ -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: Loading @@ -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; } } Loading @@ -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: Loading @@ -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]; Loading @@ -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]; Loading @@ -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; } } Loading @@ -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; } } Loading @@ -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)) Loading Loading @@ -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; } } Loading @@ -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; } } Loading @@ -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); Loading @@ -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, Loading Loading @@ -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); Loading @@ -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; } } Loading Loading @@ -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, Loading @@ -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; } } Loading Loading @@ -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; } } Loading Loading @@ -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)) { Loading Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; } } Loading Loading @@ -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", Loading @@ -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) Loading Loading @@ -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; Loading Loading @@ -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: Loading Loading @@ -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: Loading Loading @@ -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: Loading @@ -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: Loading Loading @@ -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; Loading
sound/soc/msm/qdsp6v2/msm-pcm-loopback-v2.c +7 −4 Original line number Original line Diff line number Diff line Loading @@ -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: Loading @@ -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; } } } } Loading @@ -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]) { Loading @@ -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; } } } } Loading @@ -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); Loading Loading @@ -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; } } Loading