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

Commit 302962a4 authored by Vignesh Kulothungan's avatar Vignesh Kulothungan
Browse files

ASoC: lahaina: check if codec is enabled



Add support to check if a codec is enabled/disabled in
device tree. Some codecs can be disabled on some platforms
while being enabled on others, so before registering with
sound card check if a codec is enabled.

Change-Id: Idcd0989de9fa70a2fd21c7fd2abc9e9efa02480d
Signed-off-by: default avatarVignesh Kulothungan <vigneshk@codeaurora.org>
parent d5de97ea
Loading
Loading
Loading
Loading
+45 −1
Original line number Diff line number Diff line
@@ -6698,7 +6698,9 @@ static int msm_populate_dai_link_component_of_node(
	int i, j, index, ret = 0;
	struct device *cdev = card->dev;
	struct snd_soc_dai_link *dai_link = card->dai_link;
	struct device_node *np;
	struct device_node *np = NULL;
	int codecs_enabled = 0;
	struct snd_soc_dai_link_component *codecs_comp = NULL;

	if (!cdev) {
		dev_err(cdev, "%s: Sound card device memory NULL\n", __func__);
@@ -6782,6 +6784,48 @@ static int msm_populate_dai_link_component_of_node(
		}
	}

	/* In multi-codec scenario, check if codecs are enabled for this platform */
	for (i = 0; i < card->num_links; i++) {
		codecs_enabled = 0;
		if (dai_link[i].num_codecs > 1) {
			for (j = 0; j < dai_link[i].num_codecs; j++) {
				if (!dai_link[i].codecs[j].of_node)
					continue;

				np = dai_link[i].codecs[j].of_node;
                                if (!of_device_is_available(np)) {
                                        dev_err(cdev, "%s: codec is disabled: %s\n",
						__func__,
						np->full_name);
					dai_link[i].codecs[j].of_node = NULL;
					continue;
                                }

				codecs_enabled++;
			}
			if (codecs_enabled > 0 &&
				    codecs_enabled < dai_link[i].num_codecs) {
				codecs_comp = devm_kzalloc(cdev,
				    sizeof(struct snd_soc_dai_link_component)
				    * codecs_enabled, GFP_KERNEL);

				index = 0;
				for (j = 0; j < dai_link[i].num_codecs; j++) {
					if(dai_link[i].codecs[j].of_node) {
						codecs_comp[index].of_node =
						  dai_link[i].codecs[j].of_node;
						codecs_comp[index].dai_name =
						  dai_link[i].codecs[j].dai_name;
						codecs_comp[index].name = NULL;
						index++;
					}
				}
				dai_link[i].codecs = codecs_comp;
				dai_link[i].num_codecs = codecs_enabled;
			}
		}
	}

err:
	return ret;
}