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; }
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; }