Commit 39473c2cbd6e915abe4dac439f18b770d6ed1c2c

Authored by Mark Brown

Merge series "ASoC: Intel: KMB: TDM Enablement patches" from Michael Sit Wei Hon…

…g <michael.wei.hong.sit@intel.com>:

This patch series is to enable multiple features on the Keembay Platform

Michael Sit Wei Hong (4):
  ASoC: Intel: KMB: Add 8kHz audio support
  ASoC: Intel: KMB: Rework disable channel function
  ASoC: Intel: KMB: Enable TDM audio capture
  dt-bindings: sound: intel,keembay-i2s: Add channel-max property

 .../bindings/sound/intel,keembay-i2s.yaml     |   8 +
 sound/soc/intel/keembay/kmb_platform.c        | 137 +++++++++++++-----
 sound/soc/intel/keembay/kmb_platform.h        |   1 +
 3 files changed, 112 insertions(+), 34 deletions(-)

--
2.17.1

Showing 2 changed files Side-by-side Diff

sound/soc/intel/keembay/kmb_platform.c
... ... @@ -28,8 +28,10 @@
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 |
36 38  
37 39  
38 40  
... ... @@ -107,14 +109,14 @@
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 @@
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 @@
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 |
... ... @@ -626,6 +636,10 @@
626 636 dev_err(dev, "not able to register dai\n");
627 637 return ret;
628 638 }
  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);
629 643  
630 644 dev_set_drvdata(dev, kmb_i2s);
631 645  
sound/soc/intel/keembay/kmb_platform.h
... ... @@ -90,6 +90,7 @@
90 90  
91 91 #define MAX_CHANNEL_NUM 8
92 92 #define MIN_CHANNEL_NUM 2
  93 +#define MAX_ISR 4
93 94  
94 95 #define TWO_CHANNEL_SUPPORT 2 /* up to 2.0 */
95 96 #define FOUR_CHANNEL_SUPPORT 4 /* up to 3.1 */