From 06bf03bb580cbc4cf19a93ca4183e352744ab4c8 Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Tue, 8 Jan 2019 10:53:07 +0900 Subject: [PATCH] ODROID-COMMON:Modify hdmi audio source to be selectable Change-Id: Ifcf533c157ac1b461100ac38fc1b87781d70a739 --- .../dts/amlogic/mesong12_odroid_common.dtsi | 89 +++++++------------ .../vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c | 11 +++ .../vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c | 3 + 3 files changed, 44 insertions(+), 59 deletions(-) diff --git a/arch/arm64/boot/dts/amlogic/mesong12_odroid_common.dtsi b/arch/arm64/boot/dts/amlogic/mesong12_odroid_common.dtsi index 1869a13a3213..96060580e698 100644 --- a/arch/arm64/boot/dts/amlogic/mesong12_odroid_common.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesong12_odroid_common.dtsi @@ -122,6 +122,7 @@ /* spdif_b to hdmi, only playback */ aml-audio-card,dai-link@1 { mclk-fs = <128>; + continuous-clock; /* suffix-name, sync with android audio hal * what's the dai link used for */ @@ -135,25 +136,16 @@ }; }; + /* spdif_out GPIOA_11 */ aml-audio-card,dai-link@2 { - format = "i2s"; - mclk-fs = <256>; - //continuous-clock; - //bitclock-inversion; - //frame-inversion; - bitclock-master = <&aml_tdmb>; - frame-master = <&aml_tdmb>; + mclk-fs = <128>; /* suffix-name, sync with android audio hal * what's the dai link used for */ - suffix-name = "alsaPORT-pcm"; + suffix-name = "alsaPORT-spdif"; cpu { - sound-dai = <&aml_tdmb>; - dai-tdm-slot-tx-mask = <1 1>; - dai-tdm-slot-rx-mask = <1 1>; - dai-tdm-slot-num = <2>; - dai-tdm-slot-width = <32>; - system-clock-frequency = <12288000>; + sound-dai = <&aml_spdif>; + system-clock-frequency = <6144000>; }; codec { sound-dai = <&dummy_codec>; @@ -333,23 +325,13 @@ }; }; -&audiobus { - aml_tdmb: tdmb { - compatible = "amlogic, g12a-snd-tdmb"; - #sound-dai-cells = <0>; - dai-tdm-lane-slot-mask-in = <0 1 0 0>; - dai-tdm-lane-slot-mask-out = <1 0 0 0>; - dai-tdm-clk-sel = <1>; - clocks = <&clkaudio CLKID_AUDIO_MCLK_B - &clkc CLKID_MPLL1 - &clkc CLKID_MPLL0>; - clock-names = "mclk", "clk_srcpll", "samesource_sysclk"; - pinctrl-names = "tdm_pins"; - pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; - status = "okay"; - }; +&amhdmitx { + /*0:SPDIF, 1:I2S*/ + tx_aud_src = <1>; +}; - /* copy a useless tdm to output for hdmi, no pinmux */ +&audiobus { + /* tdmc to internal DAC output, no pinmux */ aml_tdmc: tdmc { compatible = "amlogic, g12a-snd-tdmc"; #sound-dai-cells = <0>; @@ -359,10 +341,27 @@ clocks = <&clkaudio CLKID_AUDIO_MCLK_C &clkc CLKID_MPLL2>; clock-names = "mclk", "clk_srcpll"; - i2s2hdmi = <0>; + i2s2hdmi = <1>; status = "okay"; }; + aml_spdif: spdif { + compatible = "amlogic, g12a-snd-spdif-a"; + #sound-dai-cells = <0>; + clocks = <&clkc CLKID_MPLL0 + &clkc CLKID_FCLK_DIV4 + &clkaudio CLKID_AUDIO_SPDIFIN + &clkaudio CLKID_AUDIO_SPDIFOUT + &clkaudio CLKID_AUDIO_SPDIFIN_CTRL + &clkaudio CLKID_AUDIO_SPDIFOUT_CTRL>; + clock-names = "sysclk", "fixed_clk", "gate_spdifin", + "gate_spdifout", "clk_spdifin", "clk_spdifout"; + interrupts = ; + interrupt-names = "irq_spdifin"; + pinctrl-names = "spdif_pins"; + pinctrl-0 = <&spdifout>; + status = "okay"; + }; aml_spdif_b: spdif_b { compatible = "amlogic, g12a-snd-spdif-b"; #sound-dai-cells = <0>; @@ -371,8 +370,6 @@ &clkaudio CLKID_AUDIO_SPDIFOUTB_CTRL>; clock-names = "sysclk", "gate_spdifout", "clk_spdifout"; - pinctrl-names = "spdif_pins"; - pinctrl-0 = <&spdifout>; status = "okay"; }; aml_loopback: loopback { @@ -463,32 +460,6 @@ drive-strength = <3>; }; }; - tdmb_mclk: tdmb_mclk { - mux { - groups = "mclk0_a"; - function = "mclk0"; - drive-strength = <2>; - }; - }; - tdmout_b: tdmout_b { - mux { /* GPIOA_1, GPIOA_2, GPIOA_3 */ - groups = "tdmb_sclk", - "tdmb_fs", - "tdmb_dout0"; - function = "tdmb_out"; - drive-strength = <2>; - }; - }; - - tdmin_b:tdmin_b { - mux { /* GPIOA_4 */ - groups = "tdmb_din1" - /*,"tdmb_slv_sclk", "tdmb_slv_fs"*/; - function = "tdmb_in"; - drive-strength = <2>; - }; - }; - spdifout: spdifout { mux {/* GPIOA_11 */ groups = "spdif_out_a11"; diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c index e9e142d98c8c..221988089a78 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c @@ -4303,6 +4303,17 @@ static int amhdmitx_get_dt_info(struct platform_device *pdev) pr_info(SYS "hdmitx_device.chip_type : %d\n", hdmitx_device.chip_type); +#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON) + /* Get audio source information */ + ret = of_property_read_u32(pdev->dev.of_node, "tx_aud_src", + &(hdmitx_device.tx_aud_src)); + if (ret) { + pr_info(SYS "not find tx_aud_src\n"); + hdmitx_device.tx_aud_src = 0; + } + pr_info(SYS "hdmitx_device.tx_aud_src : %d\n", + hdmitx_device.tx_aud_src); +#endif ret = of_property_read_u32(pdev->dev.of_node, "repeater_tx", &val); if (!ret) diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c index 06b27759677f..651c135dcdef 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c @@ -2697,6 +2697,8 @@ static int hdmitx_set_audmode(struct hdmitx_dev *hdev, return 0; pr_info(HW "set audio\n"); audio_mute_op(hdev->tx_aud_cfg); + +#if !defined(CONFIG_ARCH_MESON64_ODROID_COMMON) /* PCM & 8 ch */ if ((audio_param->type == CT_PCM) && (audio_param->channel_num == (8 - 1))) @@ -2707,6 +2709,7 @@ static int hdmitx_set_audmode(struct hdmitx_dev *hdev, /* if hdev->aud_output_ch is true, select I2S as 8ch in, 2ch out */ if (hdev->aud_output_ch) hdev->tx_aud_src = 1; +#endif pr_info(HW "hdmitx tx_aud_src = %d\n", hdev->tx_aud_src);