@@ -22,6 +22,7 @@ LOG_MODULE_REGISTER(LOG_DOMAIN);
22
22
#include <zephyr/irq.h>
23
23
24
24
#include "dmic.h"
25
+ #include "dmic_regs.h"
25
26
26
27
/* Base addresses (in PDM scope) of 2ch PDM controllers and coefficient RAM. */
27
28
static const uint32_t base [4 ] = {PDM0 , PDM1 , PDM2 , PDM3 };
@@ -139,14 +140,14 @@ static inline void dai_dmic_claim_ownership(const struct dai_intel_dmic *dmic)
139
140
{
140
141
/* DMIC Owner Select to DSP */
141
142
sys_write32 (sys_read32 (dmic -> shim_base + DMICLCTL_OFFSET ) |
142
- DMICLCTL_OSEL ( 0x3 ), dmic -> shim_base + DMICLCTL_OFFSET );
143
+ FIELD_PREP ( DMICLCTL_OSEL , 0x3 ), dmic -> shim_base + DMICLCTL_OFFSET );
143
144
}
144
145
145
146
static inline void dai_dmic_release_ownership (const struct dai_intel_dmic * dmic )
146
147
{
147
148
/* DMIC Owner Select back to Host CPU + DSP */
148
149
sys_write32 (sys_read32 (dmic -> shim_base + DMICLCTL_OFFSET ) &
149
- ~DMICLCTL_OSEL ( 0x0 ) , dmic -> shim_base + DMICLCTL_OFFSET );
150
+ ~DMICLCTL_OSEL , dmic -> shim_base + DMICLCTL_OFFSET );
150
151
}
151
152
152
153
#else /* CONFIG_DAI_DMIC_HAS_OWNERSHIP */
@@ -172,7 +173,7 @@ static inline void dai_dmic_set_sync_period(uint32_t period, const struct dai_in
172
173
uint32_t base = dai_dmic_base (dmic );
173
174
/* DMIC Change sync period */
174
175
#ifdef CONFIG_SOC_INTEL_ACE20_LNL
175
- sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) | DMICSYNC_SYNCPRD ( val ),
176
+ sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) | FIELD_PREP ( DMICSYNC_SYNCPRD , val ),
176
177
base + DMICSYNC_OFFSET );
177
178
sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) | DMICSYNC_SYNCPU ,
178
179
base + DMICSYNC_OFFSET );
@@ -182,7 +183,7 @@ static inline void dai_dmic_set_sync_period(uint32_t period, const struct dai_in
182
183
sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) | DMICSYNC_CMDSYNC ,
183
184
base + DMICSYNC_OFFSET );
184
185
#else /* All other CAVS and ACE platforms */
185
- sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) | DMICSYNC_SYNCPRD ( val ),
186
+ sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) | FIELD_PREP ( DMICSYNC_SYNCPRD , val ),
186
187
base + DMICSYNC_OFFSET );
187
188
sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) | DMICSYNC_CMDSYNC ,
188
189
base + DMICSYNC_OFFSET );
@@ -193,7 +194,7 @@ static inline void dai_dmic_clear_sync_period(const struct dai_intel_dmic *dmic)
193
194
{
194
195
uint32_t base = dai_dmic_base (dmic );
195
196
/* DMIC Clean sync period */
196
- sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) & ~DMICSYNC_SYNCPRD ( 0x0000 ) ,
197
+ sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) & ~DMICSYNC_SYNCPRD ,
197
198
base + DMICSYNC_OFFSET );
198
199
sys_write32 (sys_read32 (base + DMICSYNC_OFFSET ) & ~DMICSYNC_CMDSYNC ,
199
200
base + DMICSYNC_OFFSET );
@@ -239,13 +240,13 @@ static void dai_dmic_stop_fifo_packers(struct dai_intel_dmic *dmic,
239
240
switch (fifo_index ) {
240
241
case 0 :
241
242
dai_dmic_update_bits (dmic , OUTCONTROL0 ,
242
- OUTCONTROL0_SIP_BIT | OUTCONTROL0_FINIT_BIT ,
243
- OUTCONTROL0_FINIT_BIT );
243
+ OUTCONTROL_SIP | OUTCONTROL_FINIT ,
244
+ OUTCONTROL_FINIT );
244
245
break ;
245
246
case 1 :
246
247
dai_dmic_update_bits (dmic , OUTCONTROL1 ,
247
- OUTCONTROL1_SIP_BIT | OUTCONTROL1_FINIT_BIT ,
248
- OUTCONTROL1_FINIT_BIT );
248
+ OUTCONTROL_SIP | OUTCONTROL_FINIT ,
249
+ OUTCONTROL_FINIT );
249
250
break ;
250
251
}
251
252
}
@@ -264,13 +265,13 @@ static void dai_dmic_irq_handler(const void *data)
264
265
val1 = dai_dmic_read (dmic , OUTSTAT1 );
265
266
LOG_DBG ("dmic_irq_handler(), OUTSTAT0 = 0x%x, OUTSTAT1 = 0x%x" , val0 , val1 );
266
267
267
- if (val0 & OUTSTAT0_ROR_BIT ) {
268
+ if (val0 & OUTSTAT_ROR ) {
268
269
LOG_ERR ("dmic_irq_handler(): full fifo A or PDM overrun" );
269
270
dai_dmic_write (dmic , OUTSTAT0 , val0 );
270
271
dai_dmic_stop_fifo_packers (dmic , 0 );
271
272
}
272
273
273
- if (val1 & OUTSTAT1_ROR_BIT ) {
274
+ if (val1 & OUTSTAT_ROR ) {
274
275
LOG_ERR ("dmic_irq_handler(): full fifo B or PDM overrun" );
275
276
dai_dmic_write (dmic , OUTSTAT1 , val1 );
276
277
dai_dmic_stop_fifo_packers (dmic , 1 );
@@ -281,10 +282,10 @@ static inline void dai_dmic_dis_clk_gating(const struct dai_intel_dmic *dmic)
281
282
{
282
283
/* Disable DMIC clock gating */
283
284
#ifdef CONFIG_SOC_INTEL_ACE20_LNL /* Ace 2.0 */
284
- sys_write32 ((sys_read32 (dmic -> vshim_base + DMICLCTL_OFFSET ) | DMIC_DCGD ),
285
- dmic -> vshim_base + DMICLCTL_OFFSET );
285
+ sys_write32 ((sys_read32 (dmic -> vshim_base + DMICLVSCTL_OFFSET ) | DMICLVSCTL_DCGD ),
286
+ dmic -> vshim_base + DMICLVSCTL_OFFSET );
286
287
#else
287
- sys_write32 ((sys_read32 (dmic -> shim_base + DMICLCTL_OFFSET ) | DMIC_DCGD ),
288
+ sys_write32 ((sys_read32 (dmic -> shim_base + DMICLCTL_OFFSET ) | DMICLCTL_DCGD ),
288
289
dmic -> shim_base + DMICLCTL_OFFSET );
289
290
#endif
290
291
}
@@ -293,10 +294,10 @@ static inline void dai_dmic_en_clk_gating(const struct dai_intel_dmic *dmic)
293
294
{
294
295
/* Enable DMIC clock gating */
295
296
#ifdef CONFIG_SOC_INTEL_ACE20_LNL /* Ace 2.0 */
296
- sys_write32 ((sys_read32 (dmic -> vshim_base + DMICLCTL_OFFSET ) & ~DMIC_DCGD ),
297
- dmic -> vshim_base + DMICLCTL_OFFSET );
297
+ sys_write32 ((sys_read32 (dmic -> vshim_base + DMICLVSCTL_OFFSET ) & ~DMICLVSCTL_DCGD ),
298
+ dmic -> vshim_base + DMICLVSCTL_OFFSET );
298
299
#else
299
- sys_write32 ((sys_read32 (dmic -> shim_base + DMICLCTL_OFFSET ) & ~DMIC_DCGD ),
300
+ sys_write32 ((sys_read32 (dmic -> shim_base + DMICLCTL_OFFSET ) & ~DMICLCTL_DCGD ),
300
301
dmic -> shim_base + DMICLCTL_OFFSET );
301
302
#endif
302
303
@@ -413,21 +414,20 @@ static int dai_timestamp_dmic_start(const struct device *dev, struct dai_ts_cfg
413
414
/* First point CDMAS to GPDMA channel that is used by DMIC
414
415
* also clear NTK to be sure there is no old timestamp.
415
416
*/
416
- cdmas = TS_LOCAL_TSCTRL_CDMAS ( cfg -> dma_chan_index +
417
+ cdmas = FIELD_PREP ( TS_LOCAL_TSCTRL_CDMAS , cfg -> dma_chan_index +
417
418
cfg -> dma_chan_count * cfg -> dma_id );
418
- sys_write32 (TS_LOCAL_TSCTRL_NTK_BIT | cdmas , addr );
419
+ sys_write32 (TS_LOCAL_TSCTRL_NTK | cdmas , addr );
419
420
420
421
/* Request on demand timestamp */
421
- sys_write32 (TS_LOCAL_TSCTRL_ODTS_BIT | cdmas , addr );
422
+ sys_write32 (TS_LOCAL_TSCTRL_ODTS | cdmas , addr );
422
423
423
424
return 0 ;
424
425
}
425
426
426
427
static int dai_timestamp_dmic_stop (const struct device * dev , struct dai_ts_cfg * cfg )
427
428
{
428
429
/* Clear NTK and write zero to CDMAS */
429
- sys_write32 (TS_LOCAL_TSCTRL_NTK_BIT ,
430
- TS_DMIC_LOCAL_TSCTRL );
430
+ sys_write32 (TS_LOCAL_TSCTRL_NTK , TS_DMIC_LOCAL_TSCTRL );
431
431
return 0 ;
432
432
}
433
433
@@ -439,7 +439,7 @@ static int dai_timestamp_dmic_get(const struct device *dev, struct dai_ts_cfg *c
439
439
uint32_t ntk ;
440
440
441
441
/* Read SSP timestamp registers */
442
- ntk = sys_read32 (tsctrl ) & TS_LOCAL_TSCTRL_NTK_BIT ;
442
+ ntk = sys_read32 (tsctrl ) & TS_LOCAL_TSCTRL_NTK ;
443
443
if (!ntk )
444
444
goto out ;
445
445
@@ -450,7 +450,7 @@ static int dai_timestamp_dmic_get(const struct device *dev, struct dai_ts_cfg *c
450
450
tsd -> sample = sys_read64 (TS_DMIC_LOCAL_SAMPLE );
451
451
452
452
/* Clear NTK to enable successive timestamps */
453
- sys_write32 (TS_LOCAL_TSCTRL_NTK_BIT , tsctrl );
453
+ sys_write32 (TS_LOCAL_TSCTRL_NTK , tsctrl );
454
454
455
455
out :
456
456
tsd -> walclk_rate = cfg -> walclk_rate ;
@@ -514,28 +514,28 @@ static void dai_dmic_gain_ramp(struct dai_intel_dmic *dmic)
514
514
515
515
if (dmic -> startcount == DMIC_UNMUTE_CIC )
516
516
dai_dmic_update_bits (dmic , base [i ] + CIC_CONTROL ,
517
- CIC_CONTROL_MIC_MUTE_BIT , 0 );
517
+ CIC_CONTROL_MIC_MUTE , 0 );
518
518
519
519
if (dmic -> startcount == DMIC_UNMUTE_FIR ) {
520
520
switch (dmic -> dai_config_params .dai_index ) {
521
521
case 0 :
522
522
dai_dmic_update_bits (dmic , base [i ] + FIR_CONTROL_A ,
523
- FIR_CONTROL_A_MUTE_BIT , 0 );
523
+ FIR_CONTROL_MUTE , 0 );
524
524
break ;
525
525
case 1 :
526
526
dai_dmic_update_bits (dmic , base [i ] + FIR_CONTROL_B ,
527
- FIR_CONTROL_B_MUTE_BIT , 0 );
527
+ FIR_CONTROL_MUTE , 0 );
528
528
break ;
529
529
}
530
530
}
531
531
switch (dmic -> dai_config_params .dai_index ) {
532
532
case 0 :
533
- val = OUT_GAIN_LEFT_A_GAIN ( gval );
533
+ val = FIELD_PREP ( OUT_GAIN , gval );
534
534
dai_dmic_write (dmic , base [i ] + OUT_GAIN_LEFT_A , val );
535
535
dai_dmic_write (dmic , base [i ] + OUT_GAIN_RIGHT_A , val );
536
536
break ;
537
537
case 1 :
538
- val = OUT_GAIN_LEFT_B_GAIN ( gval );
538
+ val = FIELD_PREP ( OUT_GAIN , gval );
539
539
dai_dmic_write (dmic , base [i ] + OUT_GAIN_LEFT_B , val );
540
540
dai_dmic_write (dmic , base [i ] + OUT_GAIN_RIGHT_B , val );
541
541
break ;
@@ -576,23 +576,23 @@ static void dai_dmic_start(struct dai_intel_dmic *dmic)
576
576
dai_dmic_update_bits (
577
577
dmic ,
578
578
OUTCONTROL0 ,
579
- OUTCONTROL0_FINIT_BIT | OUTCONTROL0_SIP_BIT ,
580
- OUTCONTROL0_SIP_BIT );
579
+ OUTCONTROL_FINIT | OUTCONTROL_SIP ,
580
+ OUTCONTROL_SIP );
581
581
break ;
582
582
case 1 :
583
583
LOG_INF ("dmic_start(), dmic->fifo_b" );
584
584
/* Clear FIFO B initialize, Enable interrupts to DSP,
585
585
* Start FIFO B packer.
586
586
*/
587
587
dai_dmic_update_bits (dmic , OUTCONTROL1 ,
588
- OUTCONTROL1_FINIT_BIT | OUTCONTROL1_SIP_BIT ,
589
- OUTCONTROL1_SIP_BIT );
588
+ OUTCONTROL_FINIT | OUTCONTROL_SIP ,
589
+ OUTCONTROL_SIP );
590
590
}
591
591
592
592
for (i = 0 ; i < CONFIG_DAI_DMIC_HW_CONTROLLERS ; i ++ ) {
593
593
#ifdef CONFIG_SOC_SERIES_INTEL_ACE
594
594
dai_dmic_update_bits (dmic , base [i ] + CIC_CONTROL ,
595
- CIC_CONTROL_SOFT_RESET_BIT , 0 );
595
+ CIC_CONTROL_SOFT_RESET , 0 );
596
596
597
597
LOG_INF ("dmic_start(), cic 0x%08x" ,
598
598
dai_dmic_read (dmic , base [i ] + CIC_CONTROL ));
@@ -611,41 +611,41 @@ static void dai_dmic_start(struct dai_intel_dmic *dmic)
611
611
*/
612
612
if (mic_a && mic_b ) {
613
613
dai_dmic_update_bits (dmic , base [i ] + CIC_CONTROL ,
614
- CIC_CONTROL_CIC_START_A_BIT |
615
- CIC_CONTROL_CIC_START_B_BIT ,
616
- CIC_CONTROL_CIC_START_A ( 1 ) |
617
- CIC_CONTROL_CIC_START_B ( 1 ));
614
+ CIC_CONTROL_CIC_START_A |
615
+ CIC_CONTROL_CIC_START_B ,
616
+ FIELD_PREP ( CIC_CONTROL_CIC_START_A , 1 ) |
617
+ FIELD_PREP ( CIC_CONTROL_CIC_START_B , 1 ));
618
618
dai_dmic_update_bits (dmic , base [i ] + MIC_CONTROL ,
619
- MIC_CONTROL_PDM_EN_A_BIT |
620
- MIC_CONTROL_PDM_EN_B_BIT ,
621
- MIC_CONTROL_PDM_EN_A ( 1 ) |
622
- MIC_CONTROL_PDM_EN_B ( 1 ));
619
+ MIC_CONTROL_PDM_EN_A |
620
+ MIC_CONTROL_PDM_EN_B ,
621
+ FIELD_PREP ( MIC_CONTROL_PDM_EN_A , 1 ) |
622
+ FIELD_PREP ( MIC_CONTROL_PDM_EN_B , 1 ));
623
623
} else if (mic_a ) {
624
624
dai_dmic_update_bits (dmic , base [i ] + CIC_CONTROL ,
625
- CIC_CONTROL_CIC_START_A_BIT ,
626
- CIC_CONTROL_CIC_START_A ( 1 ));
625
+ CIC_CONTROL_CIC_START_A ,
626
+ FIELD_PREP ( CIC_CONTROL_CIC_START_A , 1 ));
627
627
dai_dmic_update_bits (dmic , base [i ] + MIC_CONTROL ,
628
- MIC_CONTROL_PDM_EN_A_BIT ,
629
- MIC_CONTROL_PDM_EN_A ( 1 ));
628
+ MIC_CONTROL_PDM_EN_A ,
629
+ FIELD_PREP ( MIC_CONTROL_PDM_EN_A , 1 ));
630
630
} else if (mic_b ) {
631
631
dai_dmic_update_bits (dmic , base [i ] + CIC_CONTROL ,
632
- CIC_CONTROL_CIC_START_B_BIT ,
633
- CIC_CONTROL_CIC_START_B ( 1 ));
632
+ CIC_CONTROL_CIC_START_B ,
633
+ FIELD_PREP ( CIC_CONTROL_CIC_START_B , 1 ));
634
634
dai_dmic_update_bits (dmic , base [i ] + MIC_CONTROL ,
635
- MIC_CONTROL_PDM_EN_B_BIT ,
636
- MIC_CONTROL_PDM_EN_B ( 1 ));
635
+ MIC_CONTROL_PDM_EN_B ,
636
+ FIELD_PREP ( MIC_CONTROL_PDM_EN_B , 1 ));
637
637
}
638
638
639
639
switch (dmic -> dai_config_params .dai_index ) {
640
640
case 0 :
641
641
dai_dmic_update_bits (dmic , base [i ] + FIR_CONTROL_A ,
642
- FIR_CONTROL_A_START_BIT ,
643
- FIR_CONTROL_A_START ( fir_a ));
642
+ FIR_CONTROL_START ,
643
+ FIELD_PREP ( FIR_CONTROL_START , fir_a ));
644
644
break ;
645
645
case 1 :
646
646
dai_dmic_update_bits (dmic , base [i ] + FIR_CONTROL_B ,
647
- FIR_CONTROL_B_START_BIT ,
648
- FIR_CONTROL_B_START ( fir_b ));
647
+ FIR_CONTROL_START ,
648
+ FIELD_PREP ( FIR_CONTROL_START , fir_b ));
649
649
break ;
650
650
}
651
651
}
@@ -656,7 +656,7 @@ static void dai_dmic_start(struct dai_intel_dmic *dmic)
656
656
*/
657
657
for (i = 0 ; i < CONFIG_DAI_DMIC_HW_CONTROLLERS ; i ++ ) {
658
658
dai_dmic_update_bits (dmic , base [i ] + CIC_CONTROL ,
659
- CIC_CONTROL_SOFT_RESET_BIT , 0 );
659
+ CIC_CONTROL_SOFT_RESET , 0 );
660
660
661
661
LOG_INF ("dmic_start(), cic 0x%08x" ,
662
662
dai_dmic_read (dmic , base [i ] + CIC_CONTROL ));
@@ -704,21 +704,21 @@ static void dai_dmic_stop(struct dai_intel_dmic *dmic, bool stop_is_pause)
704
704
/* Don't stop CIC yet if one FIFO remains active */
705
705
if (dai_dmic_global .active_fifos_mask == 0 ) {
706
706
dai_dmic_update_bits (dmic , base [i ] + CIC_CONTROL ,
707
- CIC_CONTROL_SOFT_RESET_BIT |
708
- CIC_CONTROL_MIC_MUTE_BIT ,
709
- CIC_CONTROL_SOFT_RESET_BIT |
710
- CIC_CONTROL_MIC_MUTE_BIT );
707
+ CIC_CONTROL_SOFT_RESET |
708
+ CIC_CONTROL_MIC_MUTE ,
709
+ CIC_CONTROL_SOFT_RESET |
710
+ CIC_CONTROL_MIC_MUTE );
711
711
}
712
712
switch (dmic -> dai_config_params .dai_index ) {
713
713
case 0 :
714
714
dai_dmic_update_bits (dmic , base [i ] + FIR_CONTROL_A ,
715
- FIR_CONTROL_A_MUTE_BIT ,
716
- FIR_CONTROL_A_MUTE_BIT );
715
+ FIR_CONTROL_MUTE ,
716
+ FIR_CONTROL_MUTE );
717
717
break ;
718
718
case 1 :
719
719
dai_dmic_update_bits (dmic , base [i ] + FIR_CONTROL_B ,
720
- FIR_CONTROL_B_MUTE_BIT ,
721
- FIR_CONTROL_B_MUTE_BIT );
720
+ FIR_CONTROL_MUTE ,
721
+ FIR_CONTROL_MUTE );
722
722
break ;
723
723
}
724
724
}
0 commit comments