1.1 --- a/pkg/devices/lib/cpm/src/x1600.cc Tue Oct 24 17:15:40 2023 +0200
1.2 +++ b/pkg/devices/lib/cpm/src/x1600.cc Tue Oct 24 17:18:36 2023 +0200
1.3 @@ -98,7 +98,8 @@
1.4 Clock_source_cdbus (Divider_cdbus, 3, 30), // CDCS
1.5 Clock_source_cim (Divider_cim, 3, 30), // CIMPCS
1.6 Clock_source_ddr (Divider_ddr, 3, 30), // DCS
1.7 - Clock_source_i2s (Divider0_i2s0, 1, 30), // I2PCS
1.8 + Clock_source_i2s0 (Divider0_i2s0, 1, 30), // I2PCS
1.9 + Clock_source_i2s1 (Divider0_i2s1, 1, 30), // I2PCS
1.10 Clock_source_lcd (Divider_lcd, 3, 30), // LPCS
1.11 Clock_source_mac (Divider_mac, 3, 30), // MACPCS
1.12 Clock_source_msc0 (Divider_msc0, 3, 30), // MPCS
1.13 @@ -126,7 +127,8 @@
1.14 Clock_change_enable_ahb2 (Clock_control, 1, 20),
1.15 Clock_change_enable_ddr (Divider_ddr, 1, 29),
1.16 Clock_change_enable_mac (Divider_mac, 1, 29),
1.17 - // Clock_change_enable_i2s (Divider0_i2s0, 1, 29), // CE_I2S may not be change enable
1.18 + Clock_gate_i2s0 (Divider0_i2s0, 1, 29), // CE_I2S is gate, not change enable
1.19 + Clock_gate_i2s1 (Divider0_i2s1, 1, 29), // CE_I2S is gate, not change enable
1.20 Clock_change_enable_lcd (Divider_lcd, 1, 29),
1.21 Clock_change_enable_msc0 (Divider_msc0, 1, 29),
1.22 Clock_change_enable_msc1 (Divider_msc1, 1, 29),
1.23 @@ -167,45 +169,45 @@
1.24 Clock_divider_i2s1_n_auto (Divider1_i2s1, 1, 31), // I2S_NEN
1.25 Clock_divider_i2s1_d_auto (Divider1_i2s1, 1, 30), // I2S_DEN
1.26
1.27 - Clock_gate_main (Clock_control, 1, 23), // GATE_SCLKA
1.28 - Clock_gate_ddr (Clock_gate0, 1, 31), // DDR
1.29 - Clock_gate_ahb0 (Clock_gate0, 1, 29), // AHB0
1.30 - Clock_gate_apb0 (Clock_gate0, 1, 28), // APB0
1.31 - Clock_gate_rtc (Clock_gate0, 1, 27), // RTC
1.32 - Clock_gate_aes (Clock_gate0, 1, 24), // AES
1.33 - Clock_gate_lcd_pixel (Clock_gate0, 1, 23), // LCD
1.34 - Clock_gate_cim (Clock_gate0, 1, 22), // CIM
1.35 - Clock_gate_dma (Clock_gate0, 1, 21), // PDMA
1.36 - Clock_gate_ost (Clock_gate0, 1, 20), // OST
1.37 - Clock_gate_ssi0 (Clock_gate0, 1, 19), // SSI0
1.38 - Clock_gate_timer (Clock_gate0, 1, 18), // TCU
1.39 - Clock_gate_dtrng (Clock_gate0, 1, 17), // DTRNG
1.40 - Clock_gate_uart2 (Clock_gate0, 1, 16), // UART2
1.41 - Clock_gate_uart1 (Clock_gate0, 1, 15), // UART1
1.42 - Clock_gate_uart0 (Clock_gate0, 1, 14), // UART0
1.43 - Clock_gate_sadc (Clock_gate0, 1, 13), // SADC
1.44 - Clock_gate_audio (Clock_gate0, 1, 11), // AUDIO
1.45 - Clock_gate_ssi_slv (Clock_gate0, 1, 10), // SSI_SLV
1.46 - Clock_gate_i2c1 (Clock_gate0, 1, 8), // I2C1
1.47 - Clock_gate_i2c0 (Clock_gate0, 1, 7), // I2C0
1.48 - Clock_gate_msc1 (Clock_gate0, 1, 5), // MSC1
1.49 - Clock_gate_msc0 (Clock_gate0, 1, 4), // MSC0
1.50 - Clock_gate_otg (Clock_gate0, 1, 3), // OTG
1.51 - Clock_gate_sfc (Clock_gate0, 1, 2), // SFC
1.52 - Clock_gate_efuse (Clock_gate0, 1, 1), // EFUSE
1.53 - Clock_gate_nemc (Clock_gate0, 1, 0), // NEMC
1.54 - Clock_gate_arb (Clock_gate1, 1, 30), // ARB
1.55 - Clock_gate_mipi_csi (Clock_gate1, 1, 28), // MIPI_CSI
1.56 - Clock_gate_intc (Clock_gate1, 1, 26), // INTC
1.57 - Clock_gate_gmac0 (Clock_gate1, 1, 23), // GMAC0
1.58 - Clock_gate_uart3 (Clock_gate1, 1, 16), // UART3
1.59 - Clock_gate_i2s0_tx (Clock_gate1, 1, 9), // I2S0_dev_tclk
1.60 - Clock_gate_i2s0_rx (Clock_gate1, 1, 8), // I2S0_dev_rclk
1.61 - Clock_gate_hash (Clock_gate1, 1, 6), // HASH
1.62 - Clock_gate_pwm (Clock_gate1, 1, 5), // PWM
1.63 - Clock_gate_cdbus (Clock_gate1, 1, 2), // CDBUS
1.64 - Clock_gate_can1 (Clock_gate1, 1, 1), // CAN1
1.65 - Clock_gate_can0 (Clock_gate1, 1, 0), // CAN0
1.66 + Clock_gate_main (Clock_control, 1, 23, true), // GATE_SCLKA
1.67 + Clock_gate_ddr (Clock_gate0, 1, 31, true), // DDR
1.68 + Clock_gate_ahb0 (Clock_gate0, 1, 29, true), // AHB0
1.69 + Clock_gate_apb0 (Clock_gate0, 1, 28, true), // APB0
1.70 + Clock_gate_rtc (Clock_gate0, 1, 27, true), // RTC
1.71 + Clock_gate_aes (Clock_gate0, 1, 24, true), // AES
1.72 + Clock_gate_lcd_pixel (Clock_gate0, 1, 23, true), // LCD
1.73 + Clock_gate_cim (Clock_gate0, 1, 22, true), // CIM
1.74 + Clock_gate_dma (Clock_gate0, 1, 21, true), // PDMA
1.75 + Clock_gate_ost (Clock_gate0, 1, 20, true), // OST
1.76 + Clock_gate_ssi0 (Clock_gate0, 1, 19, true), // SSI0
1.77 + Clock_gate_timer (Clock_gate0, 1, 18, true), // TCU
1.78 + Clock_gate_dtrng (Clock_gate0, 1, 17, true), // DTRNG
1.79 + Clock_gate_uart2 (Clock_gate0, 1, 16, true), // UART2
1.80 + Clock_gate_uart1 (Clock_gate0, 1, 15, true), // UART1
1.81 + Clock_gate_uart0 (Clock_gate0, 1, 14, true), // UART0
1.82 + Clock_gate_sadc (Clock_gate0, 1, 13, true), // SADC
1.83 + Clock_gate_audio (Clock_gate0, 1, 11, true), // AUDIO
1.84 + Clock_gate_ssi_slv (Clock_gate0, 1, 10, true), // SSI_SLV
1.85 + Clock_gate_i2c1 (Clock_gate0, 1, 8, true), // I2C1
1.86 + Clock_gate_i2c0 (Clock_gate0, 1, 7, true), // I2C0
1.87 + Clock_gate_msc1 (Clock_gate0, 1, 5, true), // MSC1
1.88 + Clock_gate_msc0 (Clock_gate0, 1, 4, true), // MSC0
1.89 + Clock_gate_otg (Clock_gate0, 1, 3, true), // OTG
1.90 + Clock_gate_sfc (Clock_gate0, 1, 2, true), // SFC
1.91 + Clock_gate_efuse (Clock_gate0, 1, 1, true), // EFUSE
1.92 + Clock_gate_nemc (Clock_gate0, 1, 0, true), // NEMC
1.93 + Clock_gate_arb (Clock_gate1, 1, 30, true), // ARB
1.94 + Clock_gate_mipi_csi (Clock_gate1, 1, 28, true), // MIPI_CSI
1.95 + Clock_gate_intc (Clock_gate1, 1, 26, true), // INTC
1.96 + Clock_gate_gmac0 (Clock_gate1, 1, 23, true), // GMAC0
1.97 + Clock_gate_uart3 (Clock_gate1, 1, 16, true), // UART3
1.98 + Clock_gate_i2s0_tx (Clock_gate1, 1, 9, true), // I2S0_dev_tclk
1.99 + Clock_gate_i2s0_rx (Clock_gate1, 1, 8, true), // I2S0_dev_rclk
1.100 + Clock_gate_hash (Clock_gate1, 1, 6, true), // HASH
1.101 + Clock_gate_pwm (Clock_gate1, 1, 5, true), // PWM
1.102 + Clock_gate_cdbus (Clock_gate1, 1, 2, true), // CDBUS
1.103 + Clock_gate_can1 (Clock_gate1, 1, 1, true), // CAN1
1.104 + Clock_gate_can0 (Clock_gate1, 1, 0, true), // CAN0
1.105
1.106 Pll_enable_A (Pll_control_A, 1, 0), // APLLEN
1.107 Pll_enable_E (Pll_control_E, 1, 0), // EPLLEN
1.108 @@ -249,7 +251,9 @@
1.109 mux_core (3, Clocks(Clock_none, Clock_main, Clock_pll_M)),
1.110 mux_bus (4, Clocks(Clock_main, Clock_pll_M, Clock_pll_E, Clock_external)),
1.111 mux_dev (3, Clocks(Clock_main, Clock_pll_M, Clock_pll_E)),
1.112 - mux_i2s (2, Clocks(Clock_main, Clock_pll_E));
1.113 + mux_i2s (2, Clocks(Clock_main, Clock_pll_E)),
1.114 + mux_i2s0_rx (Clock_i2s0),
1.115 + mux_i2s0_tx (Clock_i2s1);
1.116
1.117
1.118
1.119 @@ -262,7 +266,9 @@
1.120 // Note the use of extra parentheses due to the annoying C++ "most vexing parse"
1.121 // problem. See: https://en.wikipedia.org/wiki/Most_vexing_parse
1.122
1.123 -static Clock clock_dma((Source(mux_hclock2)), (Control(Clock_gate_dma))),
1.124 +static Clock clock_audio((Source(mux_hclock2)), (Control(Clock_gate_audio))),
1.125 +
1.126 + clock_dma((Source(mux_hclock2)), (Control(Clock_gate_dma))),
1.127
1.128 clock_i2c((Source(mux_pclock)), (Control(Clock_gate_i2c0))),
1.129
1.130 @@ -270,6 +276,10 @@
1.131
1.132 clock_i2c1((Source(mux_pclock)), (Control(Clock_gate_i2c1))),
1.133
1.134 + clock_i2s0(Source(mux_i2s, Clock_source_i2s0), Control(Clock_gate_i2s0)),
1.135 +
1.136 + clock_i2s1(Source(mux_i2s, Clock_source_i2s1), Control(Clock_gate_i2s1)),
1.137 +
1.138 clock_main(Source(mux_main, Clock_source_main), Control(Clock_gate_main)),
1.139
1.140 clock_mipi_csi((Source(mux_hclock0)), Control(Clock_gate_mipi_csi)),
1.141 @@ -360,13 +370,13 @@
1.142 Divider(Clock_divider_ssi));
1.143
1.144 static Clock_divided_i2s
1.145 - clock_i2s0_rx(Source(mux_i2s, Clock_source_i2s),
1.146 + clock_i2s0_rx(Source(mux_i2s0_rx),
1.147 Control(Clock_gate_i2s0_rx),
1.148 Divider_i2s(Clock_divider_i2s0_m, Clock_divider_i2s0_n,
1.149 Clock_divider_i2s0_d, Clock_divider_i2s0_n_auto,
1.150 Clock_divider_i2s0_d_auto)),
1.151
1.152 - clock_i2s0_tx(Source(mux_i2s, Clock_source_i2s),
1.153 + clock_i2s0_tx(Source(mux_i2s0_tx),
1.154 Control(Clock_gate_i2s0_tx),
1.155 Divider_i2s(Clock_divider_i2s1_m, Clock_divider_i2s1_n,
1.156 Clock_divider_i2s1_d, Clock_divider_i2s1_n_auto,
1.157 @@ -392,6 +402,7 @@
1.158 // Clock register.
1.159
1.160 static Clock_base *clocks[Clock_identifier_count] = {
1.161 + &clock_audio,
1.162 &clock_none, // Clock_aic_bitclk
1.163 &clock_none, // Clock_aic_pclk
1.164 &clock_can0,
1.165 @@ -409,9 +420,12 @@
1.166 &clock_i2c,
1.167 &clock_i2c0,
1.168 &clock_i2c1,
1.169 - &clock_none, // Clock_i2s
1.170 + &clock_i2s0, // supplies i2s0_rx
1.171 &clock_i2s0_rx,
1.172 &clock_i2s0_tx,
1.173 + &clock_i2s1, // supplies i2s0_tx
1.174 + &clock_none, // Clock_i2s1_rx
1.175 + &clock_none, // Clock_i2s1_tx
1.176 &clock_none, // Clock_kbc
1.177 &clock_none, // Clock_lcd
1.178 &clock_lcd_pixel,