@@ -228,6 +228,41 @@ int enabled_clock(uint32_t src_clk)
228
228
}
229
229
break ;
230
230
#endif /* STM32_SRC_PLLI2S_R */
231
+ #if defined(STM32_SRC_PLLSAI_P )
232
+ case STM32_SRC_PLLSAI_P :
233
+ if (!IS_ENABLED (STM32_PLLSAI_P_ENABLED )) {
234
+ r = - ENOTSUP ;
235
+ }
236
+ break ;
237
+ #endif /* STM32_SRC_PLLSAI_P */
238
+ #if defined(STM32_SRC_PLLSAI_Q )
239
+ case STM32_SRC_PLLSAI_Q :
240
+ if (!IS_ENABLED (STM32_PLLSAI_Q_ENABLED )) {
241
+ r = - ENOTSUP ;
242
+ }
243
+ break ;
244
+ #endif /* STM32_SRC_PLLSAI_Q */
245
+ #if defined(STM32_SRC_PLLSAI_DIVQ )
246
+ case STM32_SRC_PLLSAI_DIVQ :
247
+ if (!IS_ENABLED (STM32_PLLSAI_Q_ENABLED )) {
248
+ r = - ENOTSUP ;
249
+ }
250
+ break ;
251
+ #endif /* STM32_SRC_PLLSAI_DIVQ */
252
+ #if defined(STM32_SRC_PLLSAI_R )
253
+ case STM32_SRC_PLLSAI_R :
254
+ if (!IS_ENABLED (STM32_PLLSAI_R_ENABLED )) {
255
+ r = - ENOTSUP ;
256
+ }
257
+ break ;
258
+ #endif /* STM32_SRC_PLLSAI_R */
259
+ #if defined(STM32_SRC_PLLSAI_DIVR )
260
+ case STM32_SRC_PLLSAI_DIVR :
261
+ if (!IS_ENABLED (STM32_PLLSAI_R_ENABLED )) {
262
+ r = - ENOTSUP ;
263
+ }
264
+ break ;
265
+ #endif /* STM32_SRC_PLLSAI_DIVR */
231
266
#if defined(STM32_SRC_PLLSAI1_P )
232
267
case STM32_SRC_PLLSAI1_P :
233
268
if (!IS_ENABLED (STM32_PLLSAI1_P_ENABLED )) {
@@ -497,6 +532,50 @@ static int stm32_clock_control_get_subsys_rate(const struct device *clock,
497
532
STM32_PLLI2S_R_DIVISOR );
498
533
break ;
499
534
#endif /* STM32_SRC_PLLI2S_R */
535
+ #if defined(STM32_SRC_PLLSAI_P ) && STM32_PLLSAI_P_ENABLED
536
+ case STM32_SRC_PLLSAI_P :
537
+ * rate = get_pll_div_frequency (get_pllsaisrc_frequency (),
538
+ STM32_PLLSAI_M_DIVISOR ,
539
+ STM32_PLLSAI_N_MULTIPLIER ,
540
+ STM32_PLLSAI_P_DIVISOR );
541
+ break ;
542
+ #endif /* STM32_SRC_PLLSAI_P */
543
+ #if defined(STM32_SRC_PLLSAI_Q ) && STM32_PLLSAI_Q_ENABLED
544
+ case STM32_SRC_PLLSAI_Q :
545
+ * rate = get_pll_div_frequency (get_pllsaisrc_frequency (),
546
+ STM32_PLLSAI_M_DIVISOR ,
547
+ STM32_PLLSAI_N_MULTIPLIER ,
548
+ STM32_PLLSAI_Q_DIVISOR );
549
+ break ;
550
+ #endif /* STM32_SRC_PLLSAI_Q */
551
+ #if defined(STM32_SRC_PLLSAI_DIVQ ) && STM32_PLLSAI_Q_ENABLED && STM32_PLLSAI_DIVQ_ENABLED && \
552
+ defined(STM32_PLLSAI_DIVQ_DIVISOR )
553
+ case STM32_SRC_PLLSAI_DIVQ :
554
+ * rate = get_pll_div_frequency (get_pllsaisrc_frequency (),
555
+ STM32_PLLSAI_M_DIVISOR ,
556
+ STM32_PLLSAI_N_MULTIPLIER ,
557
+ STM32_PLLSAI_Q_DIVISOR );
558
+ * rate /= STM32_PLLSAI_DIVQ_DIVISOR ;
559
+ break ;
560
+ #endif /* STM32_SRC_PLLSAI_DIVQ */
561
+ #if defined(STM32_SRC_PLLSAI_R ) && STM32_PLLSAI_R_ENABLED
562
+ case STM32_SRC_PLLSAI_R :
563
+ * rate = get_pll_div_frequency (get_pllsaisrc_frequency (),
564
+ STM32_PLLSAI_M_DIVISOR ,
565
+ STM32_PLLSAI_N_MULTIPLIER ,
566
+ STM32_PLLSAI_R_DIVISOR );
567
+ break ;
568
+ #endif /* STM32_SRC_PLLSAI_R */
569
+ #if defined(STM32_SRC_PLLSAI_DIVR ) && STM32_PLLSAI_R_ENABLED && STM32_PLLSAI_DIVR_ENABLED && \
570
+ defined(STM32_PLLSAI_DIVR_DIVISOR )
571
+ case STM32_SRC_PLLSAI_DIVR :
572
+ * rate = get_pll_div_frequency (get_pllsaisrc_frequency (),
573
+ STM32_PLLSAI_M_DIVISOR ,
574
+ STM32_PLLSAI_N_MULTIPLIER ,
575
+ STM32_PLLSAI_R_DIVISOR );
576
+ * rate /= STM32_PLLSAI_DIVR_DIVISOR ;
577
+ break ;
578
+ #endif /* STM32_SRC_PLLSAI_DIVR */
500
579
#if defined(STM32_SRC_PLLSAI1_P ) & STM32_PLLSAI1_P_ENABLED
501
580
case STM32_SRC_PLLSAI1_P :
502
581
* rate = get_pll_div_frequency (get_pllsai1src_frequency (),
@@ -762,6 +841,16 @@ static void set_up_plls(void)
762
841
}
763
842
#endif /* STM32_PLLI2S_ENABLED */
764
843
844
+ #if defined(STM32_PLLSAI_ENABLED )
845
+ config_pllsai ();
846
+
847
+ /* Enable PLL */
848
+ LL_RCC_PLLSAI_Enable ();
849
+ while (LL_RCC_PLLSAI_IsReady () != 1U ) {
850
+ /* Wait for PLL ready */
851
+ }
852
+ #endif /* STM32_PLLSAI_ENABLED */
853
+
765
854
#if defined(STM32_PLLSAI1_ENABLED )
766
855
config_pllsai1 ();
767
856
0 commit comments