sound/soc/intel/boards/sof_realtek_common.c

Source file repositories/reference/linux-study-clean/sound/soc/intel/boards/sof_realtek_common.c

File Facts

System
Linux kernel
Corpus path
sound/soc/intel/boards/sof_realtek_common.c
Extension
.c
Size
16955 bytes
Lines
690
Domain
Driver Families
Bucket
sound/soc
Inferred role
Driver Families: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (ret < 0) {
			dev_err(codec_dai->dev, "fail to set pll, ret %d\n",
				ret);
			return ret;
		}

		ret = snd_soc_dai_set_sysclk(codec_dai, RT1011_FS_SYS_PRE_S_PLL1,
					     256 * srate, SND_SOC_CLOCK_IN);
		if (ret < 0) {
			dev_err(codec_dai->dev, "fail to set sysclk, ret %d\n",
				ret);
			return ret;
		}

		if (i >= ARRAY_SIZE(rt1011_tdm_mask)) {
			dev_err(codec_dai->dev, "invalid codec index %d\n",
				i);
			return -ENODEV;
		}

		ret = snd_soc_dai_set_tdm_slot(codec_dai, rt1011_tdm_mask[i].tx,
					       rt1011_tdm_mask[i].rx, 4,
					       params_width(params));
		if (ret < 0) {
			dev_err(codec_dai->dev, "fail to set tdm slot, ret %d\n",
				ret);
			return ret;
		}
	}

	return 0;
}

static const struct snd_soc_ops rt1011_ops = {
	.hw_params = rt1011_hw_params,
};

static int rt1011_init(struct snd_soc_pcm_runtime *rtd)
{
	struct snd_soc_card *card = rtd->card;
	struct snd_soc_dapm_context *dapm = snd_soc_card_to_dapm(card);
	unsigned int num_codecs = get_num_codecs(RT1011_ACPI_HID);
	int ret;

	switch (num_codecs) {
	case 2:
		if (!soc_intel_is_cml()) {
			ret = snd_soc_dapm_new_controls(dapm, realtek_2spk_widgets,
							ARRAY_SIZE(realtek_2spk_widgets));
			if (ret) {
				dev_err(rtd->dev, "fail to add rt1011 widgets, ret %d\n",
					ret);
				return ret;
			}

			ret = snd_soc_add_card_controls(card, realtek_2spk_kcontrols,
							ARRAY_SIZE(realtek_2spk_kcontrols));
			if (ret) {
				dev_err(rtd->dev, "fail to add rt1011 kcontrols, ret %d\n",
					ret);
				return ret;
			}

			ret = snd_soc_dapm_add_routes(dapm, speaker_map_lr,
						      ARRAY_SIZE(speaker_map_lr));
			if (ret) {
				dev_err(rtd->dev, "fail to add rt1011 routes, ret %d\n",
					ret);
				return ret;
			}

			break;
		}

		/*
		 * register speaker widgets "WL Ext Spk" and "WR Ext Spk" to
		 * keep backward compatible with cml devices
		 */
		fallthrough;
	case 4:
		ret = snd_soc_dapm_new_controls(dapm, realtek_4spk_widgets, num_codecs);
		if (ret) {
			dev_err(rtd->dev, "fail to add rt1011 widgets, ret %d\n",
				ret);
			return ret;
		}

		ret = snd_soc_add_card_controls(card, realtek_4spk_kcontrols, num_codecs);
		if (ret) {
			dev_err(rtd->dev, "fail to add rt1011 controls, ret %d\n",

Annotation

Implementation Notes