*/
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 &spdifin>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
spdifb: spdif@1 {
*/
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 {
*/
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 {
*/
samesource_sel = <3>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <0>;
+
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
pinctrl-names = "spdif_pins";
pinctrl-0 = <&spdifout &spdifin>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
spdifb: spdif@1 {
*/
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 &spdifin>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
spdifb: spdif@1 {
acodec_adc = <1>;
mclk_pad = <0>; /* 0: mclk_0; 1: mclk_1 */
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
acodec_adc = <1>;
mclk_pad = <0>; /* 0: mclk_0; 1: mclk_1 */
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
acodec_adc = <1>;
mclk_pad = <0>; /* 0: mclk_0; 1: mclk_1 */
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
/* In for ACODEC_ADC */
acodec_adc = <1>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
/* In for ACODEC_ADC */
acodec_adc = <1>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
/* In for ACODEC_ADC */
acodec_adc = <1>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
/* In for ACODEC_ADC */
acodec_adc = <1>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
*/
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 /* &spdifin */>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
spdifb: spdif@1 {
*/
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 /* &spdifin */>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
spdifb: spdif@1 {
*/
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 /* &spdifin */>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
spdifb: spdif@1 {
*/
samesource_sel = <3>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <0>;
+
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
pinctrl-names = "spdif_pins";
pinctrl-0 = <&spdifout &spdifin>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
spdifb: spdif@1 {
*/
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 &spdifin>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
+
status = "okay";
};
spdifb: spdif@1 {
acodec_adc = <1>;
mclk_pad = <0>; /* 0: mclk_0; 1: mclk_1 */
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
acodec_adc = <1>;
mclk_pad = <0>; /* 0: mclk_0; 1: mclk_1 */
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
acodec_adc = <1>;
mclk_pad = <0>; /* 0: mclk_0; 1: mclk_1 */
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
/* In for ACODEC_ADC */
acodec_adc = <1>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
/* In for ACODEC_ADC */
acodec_adc = <1>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
/* In for ACODEC_ADC */
acodec_adc = <1>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
/* In for ACODEC_ADC */
acodec_adc = <1>;
+ /*enable default mclk(12.288M), before extern codec start*/
+ start_clk_enable = <1>;
+ /*tdm clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
/* !!!For --TV platform-- ONLY */
asrc_id = <0>;
auto_asrc = <3>;
+ /*spdif clk tuning enable*/
+ clk_tuning_enable = <1>;
status = "okay";
};
/* mixer control vals */
bool mute;
enum SPDIF_SRC spdifin_src;
+ int clk_tuning_enable;
};
static const struct snd_pcm_hardware aml_spdif_hardware = {
0, aml_get_hdmi_out_audio,
aml_set_hdmi_out_audio),
#endif
+};
+static const struct snd_kcontrol_new snd_spdif_clk_controls[] = {
SOC_SINGLE_EXT("SPDIF CLK Fine Setting",
0, 0, 2000000, 0,
spdif_clk_get,
pr_err("%s, failed add snd spdif controls\n", __func__);
}
+ if (p_spdif->clk_tuning_enable == 1) {
+ ret = snd_soc_add_dai_controls(cpu_dai,
+ snd_spdif_clk_controls,
+ ARRAY_SIZE(snd_spdif_clk_controls));
+ if (ret < 0)
+ pr_err("%s, failed add snd spdif clk controls\n",
+ __func__);
+ }
+
return 0;
}
return PTR_ERR(p_spdif->clk_spdifout);
}
+ ret = of_property_read_u32(pdev->dev.of_node,
+ "clk_tuning_enable",
+ &p_spdif->clk_tuning_enable);
+ if (ret < 0)
+ p_spdif->clk_tuning_enable = 0;
+ else
+ pr_info("Spdif id %d tuning clk enable:%d\n",
+ p_spdif->id, p_spdif->clk_tuning_enable);
+
return 0;
}
/* tdmin_lb src sel */
int tdmin_lb_src;
+ int start_clk_enable;
+ int clk_tuning_enable;
};
static const struct snd_pcm_hardware aml_tdm_hardware = {
i2sin_clk),
};
-
-
static const struct snd_kcontrol_new snd_tdm_controls[] = {
SOC_ENUM_EXT("I2SIn CLK", i2sin_clk_enum,
tdmin_clk_get,
NULL),
+};
+static const struct snd_kcontrol_new snd_tdm_clk_controls[] = {
SOC_SINGLE_EXT("TDM MCLK Fine Setting",
0, 0, 2000000, 0,
tdm_clk_get,
tdm_clk_set),
};
-
-
static irqreturn_t aml_tdm_ddr_isr(int irq, void *devid)
{
struct snd_pcm_substream *substream = (struct snd_pcm_substream *)devid;
ret = snd_soc_add_dai_controls(cpu_dai, snd_tdm_controls,
ARRAY_SIZE(snd_tdm_controls));
if (ret < 0)
- pr_err("%s, failed add snd spdif controls\n", __func__);
+ pr_err("%s, failed add snd tdm controls\n", __func__);
+
+ if (p_tdm->clk_tuning_enable == 1) {
+ ret = snd_soc_add_dai_controls(cpu_dai,
+ snd_tdm_clk_controls,
+ ARRAY_SIZE(snd_tdm_clk_controls));
+ if (ret < 0)
+ pr_err("%s, failed add snd tdm clk controls\n",
+ __func__);
+ }
/* config ddr arb */
aml_tdm_arb_config(p_tdm->actrl);
/*return PTR_ERR(p_tdm->pin_ctl);*/
}
+ ret = of_property_read_u32(node, "start_clk_enable",
+ &p_tdm->start_clk_enable);
+ if (ret < 0)
+ p_tdm->start_clk_enable = 0;
+ else
+ pr_info("TDM id %d output clk enable:%d\n",
+ p_tdm->id, p_tdm->start_clk_enable);
+
/*set default clk for output*/
- aml_set_default_tdm_clk(p_tdm);
+ if (p_tdm->start_clk_enable == 1)
+ aml_set_default_tdm_clk(p_tdm);
/* mclk pad ctrl */
ret = of_property_read_u32(node, "mclk_pad",
return ret;
}
+ ret = of_property_read_u32(node, "clk_tuning_enable",
+ &p_tdm->clk_tuning_enable);
+ if (ret < 0)
+ p_tdm->clk_tuning_enable = 0;
+ else
+ pr_info("TDM id %d tuning clk enable:%d\n",
+ p_tdm->id, p_tdm->clk_tuning_enable);
+
return devm_snd_soc_register_platform(dev, &aml_tdm_platform);
}