4949void common_hal_audiobusio_i2sout_construct (audiobusio_i2sout_obj_t * self ,
5050 const mcu_pin_obj_t * bit_clock , const mcu_pin_obj_t * word_select ,
5151 const mcu_pin_obj_t * data , const mcu_pin_obj_t * main_clock , bool left_justified ) {
52- if (main_clock != NULL ) {
53- mp_raise_NotImplementedError_varg (MP_ERROR_TEXT ("%q" ), MP_QSTR_main_clock );
54- }
5552 port_i2s_allocate_init (& self -> i2s , left_justified );
5653
5754 i2s_std_config_t i2s_config = {
5855 .clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG (48000 ),
5956 .slot_cfg = I2S_STD_MSB_SLOT_DEFAULT_CONFIG (I2S_DATA_BIT_WIDTH_16BIT , I2S_SLOT_MODE_STEREO ),
6057 .gpio_cfg = {
61- .mclk = I2S_GPIO_UNUSED ,
58+ .mclk = main_clock != NULL ? main_clock -> number : I2S_GPIO_UNUSED ,
6259 .bclk = bit_clock -> number ,
6360 .ws = word_select -> number ,
6461 .dout = data -> number ,
@@ -68,6 +65,7 @@ void common_hal_audiobusio_i2sout_construct(audiobusio_i2sout_obj_t *self,
6865 CHECK_ESP_RESULT (i2s_channel_init_std_mode (self -> i2s .handle , & i2s_config ));
6966 self -> bit_clock = bit_clock ;
7067 self -> word_select = word_select ;
68+ self -> mclk = main_clock ;
7169 self -> data = data ;
7270 claim_pin (bit_clock );
7371 claim_pin (word_select );
@@ -97,6 +95,11 @@ void common_hal_audiobusio_i2sout_deinit(audiobusio_i2sout_obj_t *self) {
9795 }
9896 self -> word_select = NULL ;
9997
98+ if (self -> mclk ) {
99+ reset_pin_number (self -> mclk -> number );
100+ }
101+ self -> mclk = NULL ;
102+
100103 if (self -> data ) {
101104 reset_pin_number (self -> data -> number );
102105 }
0 commit comments