@@ -68,6 +68,31 @@ static int clock_control_sf32lb_rcc_off(const struct device *dev, clock_control_
6868 return 0 ;
6969}
7070
71+ int clock_control_sf32lb_rcc_get_rate (const struct device * dev , clock_control_subsys_t sys ,
72+ uint32_t * rate )
73+ {
74+ uint16_t id = * (uint16_t * )sys ;
75+ int ret = 0 ;
76+
77+ switch (id ) {
78+ case SF32LB52X_CLOCK_I2C1 :
79+ case SF32LB52X_CLOCK_I2C2 :
80+ case SF32LB52X_CLOCK_I2C3 :
81+ case SF32LB52X_CLOCK_I2C4 :
82+ case SF32LB52X_CLOCK_SPI1 :
83+ case SF32LB52X_CLOCK_SPI2 :
84+ case SF32LB52X_CLOCK_USART2 :
85+ case SF32LB52X_CLOCK_USART3 :
86+ * rate = DT_FREQ_M (48 ); /* clk_peri_hpsys always 48MHZ */
87+ break ;
88+
89+ default :
90+ ret = - ENOTSUP ; /* TODO: others are not support yet */
91+ break ;
92+
93+ return ret ;
94+ }
95+
7196static enum clock_control_status clock_control_sf32lb_rcc_get_status (const struct device * dev ,
7297 clock_control_subsys_t sys )
7398{
@@ -85,6 +110,7 @@ static enum clock_control_status clock_control_sf32lb_rcc_get_status(const struc
85110static DEVICE_API (clock_control , clock_control_sf32lb_rcc_api ) = {
86111 .on = clock_control_sf32lb_rcc_on ,
87112 .off = clock_control_sf32lb_rcc_off ,
113+ .get_rate = clock_control_sf32lb_rcc_get_rate ,
88114 .get_status = clock_control_sf32lb_rcc_get_status ,
89115};
90116
0 commit comments