@@ -28,8 +28,10 @@ static const struct snd_pcm_hardware kmb_pcm_hardware = {
28
28
SNDRV_PCM_INFO_MMAP_VALID |
29
29
SNDRV_PCM_INFO_BATCH |
30
30
SNDRV_PCM_INFO_BLOCK_TRANSFER ,
31
- .rates = SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_48000 ,
32
- .rate_min = 16000 ,
31
+ .rates = SNDRV_PCM_RATE_8000 |
32
+ SNDRV_PCM_RATE_16000 |
33
+ SNDRV_PCM_RATE_48000 ,
34
+ .rate_min = 8000 ,
33
35
.rate_max = 48000 ,
34
36
.formats = SNDRV_PCM_FMTBIT_S16_LE |
35
37
SNDRV_PCM_FMTBIT_S24_LE |
@@ -107,14 +109,14 @@ static unsigned int kmb_pcm_rx_fn(struct kmb_i2s_info *kmb_i2s,
107
109
static inline void kmb_i2s_disable_channels (struct kmb_i2s_info * kmb_i2s ,
108
110
u32 stream )
109
111
{
110
- struct i2s_clk_config_data * config = & kmb_i2s -> config ;
111
112
u32 i ;
112
113
114
+ /* Disable all channels regardless of configuration*/
113
115
if (stream == SNDRV_PCM_STREAM_PLAYBACK ) {
114
- for (i = 0 ; i < config -> chan_nr / 2 ; i ++ )
116
+ for (i = 0 ; i < MAX_ISR ; i ++ )
115
117
writel (0 , kmb_i2s -> i2s_base + TER (i ));
116
118
} else {
117
- for (i = 0 ; i < config -> chan_nr / 2 ; i ++ )
119
+ for (i = 0 ; i < MAX_ISR ; i ++ )
118
120
writel (0 , kmb_i2s -> i2s_base + RER (i ));
119
121
}
120
122
}
@@ -533,8 +535,10 @@ static struct snd_soc_dai_driver intel_kmb_platform_dai[] = {
533
535
.playback = {
534
536
.channels_min = 2 ,
535
537
.channels_max = 2 ,
536
- .rates = SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_48000 ,
537
- .rate_min = 16000 ,
538
+ .rates = SNDRV_PCM_RATE_8000 |
539
+ SNDRV_PCM_RATE_16000 |
540
+ SNDRV_PCM_RATE_48000 ,
541
+ .rate_min = 8000 ,
538
542
.rate_max = 48000 ,
539
543
.formats = (SNDRV_PCM_FMTBIT_S32_LE |
540
544
SNDRV_PCM_FMTBIT_S24_LE |
@@ -543,8 +547,14 @@ static struct snd_soc_dai_driver intel_kmb_platform_dai[] = {
543
547
.capture = {
544
548
.channels_min = 2 ,
545
549
.channels_max = 2 ,
546
- .rates = SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_48000 ,
547
- .rate_min = 16000 ,
550
+ /*
551
+ * .channels_max will be overwritten
552
+ * if provided by Device Tree
553
+ */
554
+ .rates = SNDRV_PCM_RATE_8000 |
555
+ SNDRV_PCM_RATE_16000 |
556
+ SNDRV_PCM_RATE_48000 ,
557
+ .rate_min = 8000 ,
548
558
.rate_max = 48000 ,
549
559
.formats = (SNDRV_PCM_FMTBIT_S32_LE |
550
560
SNDRV_PCM_FMTBIT_S24_LE |
@@ -627,6 +637,10 @@ static int kmb_plat_dai_probe(struct platform_device *pdev)
627
637
return ret ;
628
638
}
629
639
640
+ /* To ensure none of the channels are enabled at boot up */
641
+ kmb_i2s_disable_channels (kmb_i2s , SNDRV_PCM_STREAM_PLAYBACK );
642
+ kmb_i2s_disable_channels (kmb_i2s , SNDRV_PCM_STREAM_CAPTURE );
643
+
630
644
dev_set_drvdata (dev , kmb_i2s );
631
645
632
646
return ret ;
0 commit comments