From 4052afe2c75bd8c27dfe52e483a227ac45798391 Mon Sep 17 00:00:00 2001 From: Banajit Goswami Date: Fri, 8 Mar 2019 18:47:27 -0800 Subject: [PATCH] asoc: add support for assigning SLIMbus device ID dynamically SLIMbus device ID can be different for SLIMbus ports on different targets. Add support for dynamically assigning SLIMbus device ID at bootup time from device tree. Change-Id: I5a3b0812085ee53e8cd3bfac96eaaa939fda4106 Signed-off-by: Banajit Goswami --- asoc/msm-dai-q6-v2.c | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/asoc/msm-dai-q6-v2.c b/asoc/msm-dai-q6-v2.c index c2be85b03245..ac238578c64e 100644 --- a/asoc/msm-dai-q6-v2.c +++ b/asoc/msm-dai-q6-v2.c @@ -2241,22 +2241,6 @@ static int msm_dai_q6_slim_bus_hw_params(struct snd_pcm_hw_params *params, dai_data->port_config.slim_sch.sample_rate = dai_data->rate; dai_data->port_config.slim_sch.num_channels = dai_data->channels; - switch (dai->id) { - case SLIMBUS_7_RX: - case SLIMBUS_7_TX: - case SLIMBUS_8_RX: - case SLIMBUS_8_TX: - case SLIMBUS_9_RX: - case SLIMBUS_9_TX: - dai_data->port_config.slim_sch.slimbus_dev_id = - AFE_SLIMBUS_DEVICE_2; - break; - default: - dai_data->port_config.slim_sch.slimbus_dev_id = - AFE_SLIMBUS_DEVICE_1; - break; - } - dev_dbg(dai->dev, "%s:slimbus_dev_id[%hu] bit_wd[%hu] format[%hu]\n" "num_channel %hu shared_ch_mapping[0] %hu\n" "slave_port_mapping[1] %hu slave_port_mapping[2] %hu\n" @@ -3509,6 +3493,31 @@ static const struct snd_kcontrol_new avd_drift_config_controls[] = { .get = msm_dai_q6_slim_rx_drift_get, }, }; + +static inline void msm_dai_q6_set_slim_dev_id(struct snd_soc_dai *dai) +{ + int rc = 0; + int slim_dev_id = 0; + const char *q6_slim_dev_id = "qcom,msm-dai-q6-slim-dev-id"; + struct msm_dai_q6_dai_data *dai_data = dev_get_drvdata(dai->dev); + + dai_data->port_config.slim_sch.slimbus_dev_id = AFE_SLIMBUS_DEVICE_1; + + rc = of_property_read_u32(dai->dev->of_node, q6_slim_dev_id, + &slim_dev_id); + if (rc) { + dev_dbg(dai->dev, + "%s: missing %s in dt node\n", __func__, q6_slim_dev_id); + return; + } + + dev_dbg(dai->dev, "%s: slim_dev_id = %d\n", __func__, slim_dev_id); + + if (slim_dev_id >= AFE_SLIMBUS_DEVICE_1 && + slim_dev_id <= AFE_SLIMBUS_DEVICE_2) + dai_data->port_config.slim_sch.slimbus_dev_id = slim_dev_id; +} + static int msm_dai_q6_dai_probe(struct snd_soc_dai *dai) { struct msm_dai_q6_dai_data *dai_data; @@ -3532,6 +3541,9 @@ static int msm_dai_q6_dai_probe(struct snd_soc_dai *dai) msm_dai_q6_set_dai_id(dai); + if ((dai->id >= SLIMBUS_0_RX) && (dai->id <= SLIMBUS_9_TX)) + msm_dai_q6_set_slim_dev_id(dai); + switch (dai->id) { case SLIMBUS_4_TX: rc = snd_ctl_add(dai->component->card->snd_card,