M: Zhe Wang <Zhe.Wang@amlogic.com>
M: Shuai Li <shuai.li@amlogic.com>
M: Jian Xu <jian.xu@amlogic.com>
+M: Jian Xu <jian.xu@amlogic.com>
F: arch/arm64/boot/dts/amlogic/*
F: arch/arm/boot/dts/amlogic/*
F: arch/arm64/configs/meson64_defconfig
system-clock-frequency = <12288000>;
};
tdmccodec: codec {
- sound-dai = <&dummy_codec>;
+ sound-dai = <&dummy_codec &dummy_codec>;
};
};
#sound-dai-cells = <0>;
reg = <0x31>;
status = "okay";
- reset_pin = <&gpio GPIOAO_9 0>;
+ reset_pin = <&gpio_ao GPIOAO_9 0>;
+ enable_pin = <&gpio GPIOC_4 0>;
no_mclk;
};
*/
samesource_sel = <3>;
- /*enable default mclk(12.288M), before extern codec start*/
- start_clk_enable = <1>;
-
- /*tdm clk tuning enable*/
- clk_tuning_enable = <1>;
-
status = "okay";
};
interrupt-names = "irq_spdifin";
pinctrl-names = "spdif_pins";
- pinctrl-0 = <&spdifout>; /* bob remove &spdifin*/
-
- /*spdif clk tuning enable*/
- clk_tuning_enable = <1>;
+ pinctrl-0 = <&spdifout>;/* bob remove &spdifin*/
status = "okay";
};
system-clock-frequency = <12288000>;
};
tdmccodec: codec {
- sound-dai = <&dummy_codec>;
+ sound-dai = <&dummy_codec &dummy_codec>;
};
};
#sound-dai-cells = <0>;
reg = <0x31>;
status = "okay";
- reset_pin = <&gpio GPIOAO_9 0>;
+ reset_pin = <&gpio_ao GPIOAO_9 0>;
+ enable_pin = <&gpio GPIOC_4 0>;
no_mclk;
};
*/
samesource_sel = <3>;
- /*enable default mclk(12.288M), before extern codec start*/
- start_clk_enable = <1>;
-
- /*tdm clk tuning enable*/
- clk_tuning_enable = <1>;
-
status = "okay";
};
pinctrl-names = "spdif_pins";
pinctrl-0 = <&spdifout>;/* bob remove &spdifin*/
- /*spdif clk tuning enable*/
- clk_tuning_enable = <1>;
-
status = "okay";
};
spdifb: spdif@1 {
system-clock-frequency = <12288000>;
};
tdmccodec: codec {
- sound-dai = <&dummy_codec>;
+ sound-dai = <&dummy_codec &dummy_codec>;
};
};
#sound-dai-cells = <0>;
reg = <0x31>;
status = "okay";
- reset_pin = <&gpio GPIOAO_9 0>;
+ reset_pin = <&gpio_ao GPIOAO_9 0>;
+ enable_pin = <&gpio GPIOC_4 0>;
no_mclk;
};
* 4: spdifout_b;
*/
samesource_sel = <3>;
-
/*enable default mclk(12.288M), before extern codec start*/
start_clk_enable = <1>;
interrupt-names = "irq_spdifin";
pinctrl-names = "spdif_pins";
- pinctrl-0 = <&spdifout /* &spdifin */>;
-
- /*spdif clk tuning enable*/
- clk_tuning_enable = <1>;
+ pinctrl-0 = <&spdifout>;/* bob remove &spdifin*/
status = "okay";
};
system-clock-frequency = <12288000>;
};
tdmccodec: codec {
- sound-dai = <&dummy_codec>;
+ sound-dai = <&dummy_codec &dummy_codec>;
};
};
#sound-dai-cells = <0>;
reg = <0x31>;
status = "okay";
- reset_pin = <&gpio GPIOAO_9 0>;
+ reset_pin = <&gpio_ao GPIOAO_9 0>;
+ enable_pin = <&gpio GPIOC_4 0>;
no_mclk;
};
*/
samesource_sel = <3>;
- /*enable default mclk(12.288M), before extern codec start*/
- start_clk_enable = <1>;
-
- /*tdm clk tuning enable*/
- clk_tuning_enable = <1>;
-
status = "okay";
};
interrupt-names = "irq_spdifin";
pinctrl-names = "spdif_pins";
- pinctrl-0 = <&spdifout /* &spdifin */>;
-
- /*spdif clk tuning enable*/
- clk_tuning_enable = <1>;
+ pinctrl-0 = <&spdifout>;/* bob remove &spdifin*/
status = "okay";
};
if (frddrs[i].in_use
&& (frddrs[i].fifo_id != current_fifo_id)
&& (frddrs[i].dest == ss_sel)) {
-
- pr_debug("%s, ss_sel:%d used, not for share buffer at same time\n",
- __func__,
- ss_sel);
ret = 0;
break;
}
#include "spdif_match_table.c"
#include "resample.h"
#include "resample_hw.h"
-#include "spdif.h"
#define DRV_NAME "snd_spdif"
/*#define __SPDIFIN_INSERT_CHNUM__*/
/*#define __SPDIFIN_AUDIO_TYPE_HW__*/
-struct aml_spdif *spdif_priv[2];
static int aml_dai_set_spdif_sysclk(struct snd_soc_dai *cpu_dai,
int clk_id, unsigned int freq, int dir);
bool mute;
enum SPDIF_SRC spdifin_src;
int clk_tuning_enable;
- bool on;
};
static const struct snd_pcm_hardware aml_spdif_hardware = {
return 0;
}
-
-int spdif_set_audio_clk(int id,
- struct clk *clk_src, int rate, int same)
-{
- if (spdif_priv[id]->on && same) {
- pr_debug("spdif priority");
- return 0;
- }
-
- clk_set_parent(spdif_priv[id]->clk_spdifout, clk_src);
- clk_set_rate(spdif_priv[id]->clk_spdifout, rate);
- return 0;
-}
-
static int spdif_clk_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
snd_soc_set_runtime_hwparams(substream, &aml_spdif_hardware);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- p_spdif->on = true;
p_spdif->fddr = aml_audio_register_frddr(dev,
p_spdif->actrl,
aml_spdif_ddr_isr, substream, false);
pr_info("%s\n", __func__);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- p_spdif->on = false;
aml_audio_unregister_frddr(p_spdif->dev, substream);
} else {
aml_audio_unregister_toddr(p_spdif->dev, substream);
mpll_freq = p_spdif->sysclk_freq * 58 / 2; /* 96k */
#endif
clk_set_rate(p_spdif->sysclk, mpll_freq);
- /*
clk_set_rate(p_spdif->clk_spdifout,
p_spdif->sysclk_freq);
- */
- spdif_set_audio_clk(p_spdif->id,
- p_spdif->sysclk,
- p_spdif->sysclk_freq, 0);
ret = clk_prepare_enable(p_spdif->sysclk);
if (ret) {
dev_err(dev, "devm_snd_soc_register_component failed\n");
return ret;
}
- spdif_priv[aml_spdif->id] = aml_spdif;
+
pr_info("%s, register soc platform\n", __func__);
return devm_snd_soc_register_platform(dev, &aml_spdif_platform);
+++ /dev/null
-/*
- * sound/soc/amlogic/auge/spdif.h
- *
- * Copyright (C) 2017 Amlogic, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- */
-
-#ifndef __AML_SPDIF_H__
-#define __AML_SPDIF_H__
-#include <linux/clk.h>
-#if 0
-enum SPDIF_ID {
- SPDIF_A,
- SPDIF_B,
- SPDIF_ID_CNT
-};
-#endif
-
-extern int spdif_set_audio_clk(int id,
- struct clk *clk_src, int rate, int same);
-
-#endif
#include "spdif_hw.h"
#include "tdm_match_table.c"
#include "effects_v2.h"
-#include "spdif.h"
-
/*#define __PTM_TDM_CLK__*/
fr, p_tdm->samesource_sel,
p_tdm->lane_ss,
p_tdm->chipinfo->reset_reg_offset);
- /* sharebuffer default uses spdif_a */
- spdif_set_audio_clk(p_tdm->samesource_sel - 3,
- p_tdm->clk, runtime->rate*128, 1);
}
/* i2s source to hdmix */
&& (aml_check_sharebuffer_valid(p_tdm->fddr,
p_tdm->samesource_sel))
&& p_tdm->en_share) {
-#if 0
int mux = 0, ratio = 0;
sharebuffer_get_mclk_fs_ratio(p_tdm->samesource_sel,
rate * ratio);
clk_prepare_enable(p_tdm->samesrc_clk);
}
-#endif
}
if (!p_tdm->contns_clk && !IS_ERR(p_tdm->mclk)) {
unsigned char Ch2_vol;
unsigned char master_vol;
unsigned char mute_val;
-
+ unsigned int inited;
#ifdef CONFIG_HAS_EARLYSUSPEND
struct early_suspend early_suspend;
#endif
return 0;
}
+static int ad82584f_init(struct snd_soc_codec *codec);
static int ad82584f_prepare(struct snd_pcm_substream *substream,
struct snd_soc_dai *dai)
{
/*unmute,default power-on is mute.*/
snd_soc_write(codec, 0x02, 0x00);
+#else
+ struct snd_soc_codec *codec = dai->codec;
+ struct ad82584f_priv *ad82584f = snd_soc_codec_get_drvdata(codec);
+
+ if (ad82584f->inited == 0) {
+ ad82584f_init(codec);
+ ad82584f->inited = 1;
+ }
#endif
return 0;
struct ad82584f_priv *ad82584f = snd_soc_codec_get_drvdata(codec);
struct ad82584f_platform_data *pdata = ad82584f->pdata;
int ret = 0;
-
if (pdata->reset_pin < 0)
return 0;
return -ENOMEM;
}
ad82584f->pdata = pdata;
-
+ ad82584f->inited = 0;
ad82584f_parse_dt(ad82584f, i2c->dev.of_node);
ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_ad82584f,