Skip to content

Commit

Permalink
Implement TDM driver for JH7110 SoC
Browse files Browse the repository at this point in the history
Signed-off-by: Walker Chen <walker.chen@starfivetech.com>
  • Loading branch information
WalkerChenL committed Jun 20, 2022
1 parent 70a6a66 commit edd12a5
Show file tree
Hide file tree
Showing 13 changed files with 591 additions and 325 deletions.
17 changes: 17 additions & 0 deletions arch/riscv/boot/dts/starfive/codecs/sf_pdm.dtsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
&sound{
simple-audio-card,dai-link@0 {
reg = <0>;
status = "okay";
format = "i2s";
bitclock-master = <&dailink_master>;
frame-master = <&dailink_master>;

dailink_master:cpu {
sound-dai = <&i2srx_3ch>;
};

dailink_slave:codec {
sound-dai = <&pdm>;
};
};
};
34 changes: 34 additions & 0 deletions arch/riscv/boot/dts/starfive/codecs/sf_tdm.dtsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
&sound{
simple-audio-card,dai-link@0 {
reg = <0>;
status = "okay";
format = "dsp_a";
bitclock-master = <&dailink_master>;
frame-master = <&dailink_master>;

widgets =
"Microphone", "Mic Jack",
"Line", "Line In",
"Line", "Line Out",
"Speaker", "Speaker",
"Headphone", "Headphone Jack";
routing =
"Headphone Jack", "HP_L",
"Headphone Jack", "HP_R",
"Speaker", "SPK_LP",
"Speaker", "SPK_LN",
"LINPUT1", "Mic Jack",
"LINPUT3", "Mic Jack",
"RINPUT1", "Mic Jack",
"RINPUT2", "Mic Jack";
cpu {
sound-dai = <&tdm>;
};

dailink_master:codec {
sound-dai = <&wm8960>;
clocks = <&wm8960_mclk>;
clock-names = "mclk";
};
};
};
2 changes: 1 addition & 1 deletion arch/riscv/boot/dts/starfive/jh7110-common.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@
&tdm {
pinctrl-names = "default";
pinctrl-0 = <&tdm0_pins>;
status = "disabled";
status = "okay";
};

&spdif0 {
Expand Down
55 changes: 30 additions & 25 deletions arch/riscv/boot/dts/starfive/jh7110.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -1035,10 +1035,14 @@
<&clkgen JH7110_TDM_CLK_AHB>,
<&clkgen JH7110_APB0>,
<&clkgen JH7110_TDM_CLK_APB>,
<&clkgen JH7110_TDM_INTERNAL>;
<&clkgen JH7110_TDM_INTERNAL>,
<&tdm_ext>,
<&clkgen JH7110_TDM_CLK_TDM>,
<&clkgen JH7110_MCLK_INNER>;
clock-names = "clk_ahb0", "clk_tdm_ahb",
"clk_apb0", "clk_tdm_apb",
"clk_tdm_intl";
"clk_tdm_internal", "clk_tdm_ext",
"clk_tdm", "mclk_inner";
resets = <&rstgen RSTN_U0_TDM16SLOT_AHB>,
<&rstgen RSTN_U0_TDM16SLOT_APB>,
<&rstgen RSTN_U0_TDM16SLOT_TDM>;
Expand Down Expand Up @@ -1588,33 +1592,34 @@

simple-audio-card,dai-link@0 {
reg = <0>;
format = "left_j";
bitclock-master = <&sndcpu0>;
frame-master = <&sndcpu0>;
status = "okay";

sndcpu0: cpu {
sound-dai = <&pwmdac>;
};

codec {
sound-dai = <&pwmdac_codec>;
};
};

simple-audio-card,dai-link@1 {
reg = <0>;
status = "okay";
format = "i2s";
format = "dsp_a";
bitclock-master = <&dailink_master>;
frame-master = <&dailink_master>;

dailink_master:cpu {
sound-dai = <&i2srx_3ch>;

widgets =
"Microphone", "Mic Jack",
"Line", "Line In",
"Line", "Line Out",
"Speaker", "Speaker",
"Headphone", "Headphone Jack";
routing =
"Headphone Jack", "HP_L",
"Headphone Jack", "HP_R",
"Speaker", "SPK_LP",
"Speaker", "SPK_LN",
"LINPUT1", "Mic Jack",
"LINPUT3", "Mic Jack",
"RINPUT1", "Mic Jack",
"RINPUT2", "Mic Jack";
cpu {
sound-dai = <&tdm>;
};

dailink_slave:codec {
sound-dai = <&pdm>;

dailink_master:codec {
sound-dai = <&wm8960>;
clocks = <&wm8960_mclk>;
clock-names = "mclk";
};
};
};
Expand Down
6 changes: 6 additions & 0 deletions arch/riscv/boot/dts/starfive/jh7110_clk.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,10 @@
#clock-cells = <0>;
clock-frequency = <297000000>;
};

wm8960_mclk: wm8960_mclk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <24576000>;
};
};
56 changes: 31 additions & 25 deletions arch/riscv/boot/dts/starfive/jh7110_pinctrl.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -198,17 +198,17 @@

i2c0_pins: i2c0-pins {
i2c0-pins-scl {
sf,pins = <PAD_GPIO36>;
sf,pinmux = <PAD_GPIO36_FUNC_SEL 0>;
sf,pins = <PAD_GPIO57>;
sf,pinmux = <PAD_GPIO57_FUNC_SEL 0>;
sf,pin-ioconfig = <IO(GPIO_IE(1)|(GPIO_PU(1)))>;
sf,pin-gpio-dout = <GPO_LOW>;
sf,pin-gpio-doen = <OEN_I2C0_IC_CLK_OE>;
sf,pin-gpio-din = <GPI_I2C0_IC_CLK_IN_A>;
};

i2c0-pins-sda {
sf,pins = <PAD_GPIO37>;
sf,pinmux = <PAD_GPIO37_FUNC_SEL 0>;
sf,pins = <PAD_GPIO58>;
sf,pinmux = <PAD_GPIO58_FUNC_SEL 0>;
sf,pin-ioconfig = <IO(GPIO_IE(1)|(GPIO_PU(1)))>;
sf,pin-gpio-dout = <GPO_LOW>;
sf,pin-gpio-doen = <OEN_I2C0_IC_DATA_OE>;
Expand Down Expand Up @@ -412,13 +412,15 @@
};

pwmdac0_pins: pwmdac0-pins {
/*
pwmdac0-pins-left {
sf,pins = <PAD_GPIO57>;
sf,pinmux = <PAD_GPIO57_FUNC_SEL 0>;
sf,pin-ioconfig = <IO(GPIO_IE(1)|(GPIO_PU(1)))>;
sf,pin-gpio-dout = <GPO_PWMDAC0_LEFT_OUTPUT>;
sf,pin-gpio-doen = <OEN_LOW>;
};
*/

pwmdac0-pins-right {
sf,pins = <PAD_GPIO42>;
Expand Down Expand Up @@ -449,54 +451,48 @@

tdm0_pins: tdm0-pins {
tdm0-pins-tx {
sf,pins = <PAD_GPIO21>;
sf,pinmux = <PAD_GPIO21_FUNC_SEL 0>;
sf,pins = <PAD_GPIO44>;
sf,pinmux = <PAD_GPIO44_FUNC_SEL 0>;
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
sf,pin-gpio-dout = <GPO_TDM0_PCM_TXD>;
sf,pin-gpio-doen = <OEN_LOW>;
};

tdm0-pins-rx {
sf,pins = <PAD_GPIO15>;
sf,pinmux = <PAD_GPIO15_FUNC_SEL 0>;
sf,pins = <PAD_GPIO61>;
sf,pinmux = <PAD_GPIO61_FUNC_SEL 0>;
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
sf,pin-gpio-doen = <OEN_HIGH>;
sf,pin-gpio-din = <GPI_TDM0_PCM_RXD>;
};

tdm0-pins-sync {
sf,pins = <PAD_GPIO22>;
sf,pinmux = <PAD_GPIO22_FUNC_SEL 0>;
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
sf,pin-gpio-dout = <GPO_TDM0_PCM_SYNCOUT>;
sf,pin-gpio-doen = <OEN_LOW>;
};

tdm0-pins-mclk {
sf,pins = <PAD_GPIO30>;
sf,pinmux = <PAD_GPIO30_FUNC_SEL 0>;
sf,pins = <PAD_GPIO63>;
sf,pinmux = <PAD_GPIO63_FUNC_SEL 0>;
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
sf,pin-gpio-dout = <GPO_CRG0_MCLK_OUT>;
sf,pin-gpio-doen = <OEN_LOW>;
sf,pin-gpio-doen = <OEN_HIGH>;
sf,pin-gpio-din = <GPI_TDM0_PCM_SYNCIN>;
};

tdm0-pins-mst {
sf,pins = <PAD_GPIO39>;
sf,pinmux = <PAD_GPIO39_FUNC_SEL 0>;
tdm0-pins-pcmclk {
sf,pins = <PAD_GPIO38>;
sf,pinmux = <PAD_GPIO38_FUNC_SEL 0>;
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
sf,pin-gpio-dout = <GPO_TDM0_CLK_MST>;
sf,pin-gpio-doen = <OEN_LOW>;
sf,pin-gpio-doen = <OEN_HIGH>;
sf,pin-gpio-din = <GPI_TDM0_CLK_SLV>;
};
};

i2s_clk_pins: i2s-clk0 {
/*
i2s-clk0_mclk {
sf,pins = <PAD_GPIO58>;
sf,pinmux = <PAD_GPIO58_FUNC_SEL 0>;
sf,pin-ioconfig = <IO(GPIO_IE(1))>;
sf,pin-gpio-dout = <GPO_CRG0_MCLK_OUT>;
sf,pin-gpio-doen = <OEN_LOW>;
};
*/
};

i2stx_pins: i2stx-pins {
Expand Down Expand Up @@ -937,11 +933,13 @@
sf,pinmux = <PAD_GPIO37_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
/*
rgb-2-pins {
sf,pins = <PAD_GPIO38>;
sf,pinmux = <PAD_GPIO38_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
*/
rgb-3-pins {
sf,pins = <PAD_GPIO39>;
sf,pinmux = <PAD_GPIO39_FUNC_SEL 1>;
Expand All @@ -967,11 +965,13 @@
sf,pinmux = <PAD_GPIO43_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
/*
rgb-8-pins {
sf,pins = <PAD_GPIO44>;
sf,pinmux = <PAD_GPIO44_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
*/
rgb-9-pins {
sf,pins = <PAD_GPIO45>;
sf,pinmux = <PAD_GPIO45_FUNC_SEL 1>;
Expand Down Expand Up @@ -1032,6 +1032,7 @@
sf,pinmux = <PAD_GPIO56_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
/*
rgb-21-pins {
sf,pins = <PAD_GPIO57>;
sf,pinmux = <PAD_GPIO57_FUNC_SEL 1>;
Expand All @@ -1042,6 +1043,7 @@
sf,pinmux = <PAD_GPIO58_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
*/
rgb-23-pins {
sf,pins = <PAD_GPIO59>;
sf,pinmux = <PAD_GPIO59_FUNC_SEL 1>;
Expand All @@ -1062,11 +1064,13 @@
sf,pinmux = <PAD_GPIO62_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
/*
rgb-27-pins {
sf,pins = <PAD_GPIO63>;
sf,pinmux = <PAD_GPIO63_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
*/
};
inno_hdmi_pins: inno_hdmi-pins {
inno_hdmi-scl {
Expand Down Expand Up @@ -1114,11 +1118,13 @@
sf,pinmux = <PAD_GPIO37_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
/*
mipitx-3-pins {
sf,pins = <PAD_GPIO38>;
sf,pinmux = <PAD_GPIO38_FUNC_SEL 1>;
sf,pin-ioconfig = <IO(GPIO_IE(0))>;
};
*/
mipitx-4-pins {
sf,pins = <PAD_GPIO39>;
sf,pinmux = <PAD_GPIO39_FUNC_SEL 1>;
Expand Down
6 changes: 2 additions & 4 deletions arch/riscv/configs/starfive_jh7110_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -192,10 +192,8 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_SOC=y
CONFIG_SND_DESIGNWARE_I2S=y
CONFIG_SND_DESIGNWARE_I2S_STARFIVE_JH7110=y
CONFIG_SND_STARFIVE_PWMDAC=y
CONFIG_SND_STARFIVE_PDM=y
CONFIG_SND_STARFIVE_TDM=y
CONFIG_SND_SOC_WM8960=y
CONFIG_SND_SIMPLE_CARD=y
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y
Expand Down
Loading

0 comments on commit edd12a5

Please sign in to comment.