Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

stm32h7: support clock enable/disable in SPI driver

Change-Id: Id4baa340e1b67fb265628add9191acb08e3a0615

authored by

Aidan MacDonald and committed by
Solomon Peachy
a9b75fc4 ddb3bb35

+35 -4
+21
firmware/target/arm/stm32/echoplayer/clock-echoplayer.c
··· 133 133 reg_writef(PWR_CR1, DBP(0)); 134 134 } 135 135 136 + static void init_periph_clock(void) 137 + { 138 + reg_writef(RCC_D2CCIP1R, SPI45SEL_V(HSE)); 139 + } 140 + 136 141 void stm_target_clock_init(void) 137 142 { 138 143 init_hse(); ··· 140 145 init_vos(); 141 146 init_system_clock(); 142 147 init_lse(); 148 + init_periph_clock(); 149 + } 150 + 151 + void stm_target_clock_enable(enum stm_clock clock, bool enable) 152 + { 153 + switch (clock) 154 + { 155 + case STM_CLOCK_SPI5_KER: 156 + reg_writef(RCC_APB2ENR, SPI5EN(enable)); 157 + reg_writef(RCC_APB2LPENR, SPI5EN(enable)); 158 + break; 159 + 160 + default: 161 + panicf("%s: unsupported clock %d", __func__, (int)clock); 162 + break; 163 + } 143 164 }
+2 -4
firmware/target/arm/stm32/echoplayer/lcd-echoplayer.c
··· 24 24 #include "nvic-arm.h" 25 25 #include "spi-stm32h7.h" 26 26 #include "gpio-stm32h7.h" 27 + #include "clock-stm32h7.h" 27 28 #include "regs/stm32h743/rcc.h" 28 29 #include "regs/stm32h743/spi.h" 29 30 30 31 struct stm_spi_config spi_cfg = { 31 32 .instance = ITA_SPI5, 33 + .clock = STM_CLOCK_SPI5_KER, 32 34 .mode = STM_SPIMODE_HALF_DUPLEX, 33 35 .proto = STM_SPIPROTO_MOTOROLA, 34 36 .frame_bits = 9, ··· 53 55 54 56 void lcd_init_device(void) 55 57 { 56 - /* Clock configuration -- should be 12 MHz (SPI clock is 1/2 of HSE) */ 57 - reg_writef(RCC_D2CCIP1R, SPI45SEL_V(HSE)); 58 - reg_writef(RCC_APB2ENR, SPI5EN(1)); 59 - 60 58 /* Configure SPI bus */ 61 59 stm_spi_init(&spi, &spi_cfg); 62 60 nvic_enable_irq(NVIC_IRQN_SPI5);
+9
firmware/target/arm/stm32/spi-stm32h7.c
··· 37 37 if (tsize > TSIZE_MAX) 38 38 panicf("%s: tsize > TSIZE_MAX", __func__); 39 39 40 + stm_clock_enable(spi->clock); 41 + 40 42 if (spi->set_cs) 41 43 spi->set_cs(spi, true); 42 44 ··· 56 58 57 59 if (spi->set_cs) 58 60 spi->set_cs(spi, false); 61 + 62 + stm_clock_disable(spi->clock); 59 63 } 60 64 61 65 static uint32_t stm_spi_pack(const void **bufp, size_t *sizep) ··· 110 114 uint32_t ftlevel; 111 115 112 116 spi->regs = config->instance; 117 + spi->clock = config->clock; 113 118 spi->mode = config->mode; 114 119 spi->set_cs = config->set_cs; 115 120 ··· 144 149 ftlevel *= 2; 145 150 } 146 151 152 + stm_clock_enable(spi->clock); 153 + 147 154 /* TODO: allow setting MBR here */ 148 155 reg_writelf(spi->regs, SPI_CFG1, 149 156 MBR(0), ··· 170 177 IOSWP(config->swap_mosi_miso), 171 178 MIDI(0), 172 179 MSSI(0)); 180 + 181 + stm_clock_disable(spi->clock); 173 182 } 174 183 175 184 int stm_spi_xfer(struct stm_spi *spi, size_t size,
+3
firmware/target/arm/stm32/spi-stm32h7.h
··· 23 23 24 24 #include "system.h" 25 25 #include "semaphore.h" 26 + #include "clock-stm32h7.h" 26 27 #include <stddef.h> 27 28 28 29 struct stm_spi; ··· 49 50 { 50 51 /* Peripheral instance base address; one of ITA_SPIx */ 51 52 uint32_t instance; 53 + enum stm_clock clock; 52 54 enum stm_spi_mode mode; 53 55 enum stm_spi_protocol proto; 54 56 stm_spi_set_cs_t set_cs; ··· 65 67 struct stm_spi 66 68 { 67 69 uint32_t regs; 70 + enum stm_clock clock; 68 71 enum stm_spi_mode mode; 69 72 stm_spi_set_cs_t set_cs; 70 73 uint32_t frame_size;