コード例 #1
0
int tegra_das_open(void)
{
	int err = 0;

	AM_DEBUG_PRINT("%s++\n", __func__);

	aud_manager = kzalloc(sizeof(struct audio_manager_context), GFP_KERNEL);
	if (!aud_manager)
		return -ENOMEM;

	aud_manager->mclk = tegra_get_clock_by_name("extern1");

	if (!aud_manager->mclk) {
		pr_err(" err in getting mclk \n");
		err = -ENODEV;
		goto fail_clock;
	}

	aud_manager->pmc_clk  = clk_get_sys("clk_out_1", "extern1");
	if (IS_ERR_OR_NULL(aud_manager->pmc_clk))
	{
		pr_err("%s can't get pmc clock\n", __func__);
		err = -ENODEV;
		aud_manager->pmc_clk = 0;
		goto fail_clock;
	}
	aud_manager->hifi_port_idx = init_device_port(
					tegra_audio_codec_type_hifi);

	aud_manager->bb_port_idx = init_device_port(
					tegra_audio_codec_type_baseband);

	aud_manager->bt_port_idx = init_device_port(
					tegra_audio_codec_type_bluetooth);

	init_spdif_port(AUDIO_TX_MODE);

	return err;

fail_clock:

	tegra_das_close();
	return err;
}
コード例 #2
0
static int tegra_codec_init(struct snd_soc_codec *codec)
{
	struct tegra_audio_data *audio_data = codec->socdev->codec_data;
	int err = 0;

	if (!audio_data->init_done) {

		err = tegra_das_open();
		if (err) {
			pr_err("Failed get dap mclk\n");
			err = -ENODEV;
			goto generic_codec_init_fail;
		}

		err = tegra_das_enable_mclk();
		if (err) {
			pr_err("Failed to enable dap mclk\n");
			err = -ENODEV;
			goto generic_codec_init_fail;
		}

		err = tegra_controls_init(codec);
		if (err < 0) {
			pr_err("Failed in controls init\n");
			goto generic_codec_init_fail;
		}

		audio_data->codec = codec;
		audio_data->init_done = 1;
	}

	return err;

generic_codec_init_fail:

	tegra_das_disable_mclk();
	tegra_das_close();
	return err;
}