ソースを参照

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 <[email protected]>
Banajit Goswami 6 年 前
コミット
4052afe2c7
1 ファイル変更28 行追加16 行削除
  1. 28 16
      asoc/msm-dai-q6-v2.c

+ 28 - 16
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,