~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/soc/mediatek/mt8192/mt8192-afe-control.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 //
  3 // MediaTek ALSA SoC Audio Control
  4 //
  5 // Copyright (c) 2020 MediaTek Inc.
  6 // Author: Shane Chien <shane.chien@mediatek.com>
  7 //
  8 
  9 #include "mt8192-afe-common.h"
 10 
 11 enum {
 12         MTK_AFE_RATE_8K = 0,
 13         MTK_AFE_RATE_11K = 1,
 14         MTK_AFE_RATE_12K = 2,
 15         MTK_AFE_RATE_384K = 3,
 16         MTK_AFE_RATE_16K = 4,
 17         MTK_AFE_RATE_22K = 5,
 18         MTK_AFE_RATE_24K = 6,
 19         MTK_AFE_RATE_352K = 7,
 20         MTK_AFE_RATE_32K = 8,
 21         MTK_AFE_RATE_44K = 9,
 22         MTK_AFE_RATE_48K = 10,
 23         MTK_AFE_RATE_88K = 11,
 24         MTK_AFE_RATE_96K = 12,
 25         MTK_AFE_RATE_176K = 13,
 26         MTK_AFE_RATE_192K = 14,
 27         MTK_AFE_RATE_260K = 15,
 28 };
 29 
 30 enum {
 31         MTK_AFE_DAI_MEMIF_RATE_8K = 0,
 32         MTK_AFE_DAI_MEMIF_RATE_16K = 1,
 33         MTK_AFE_DAI_MEMIF_RATE_32K = 2,
 34         MTK_AFE_DAI_MEMIF_RATE_48K = 3,
 35 };
 36 
 37 enum {
 38         MTK_AFE_PCM_RATE_8K = 0,
 39         MTK_AFE_PCM_RATE_16K = 1,
 40         MTK_AFE_PCM_RATE_32K = 2,
 41         MTK_AFE_PCM_RATE_48K = 3,
 42 };
 43 
 44 unsigned int mt8192_general_rate_transform(struct device *dev,
 45                                            unsigned int rate)
 46 {
 47         switch (rate) {
 48         case 8000:
 49                 return MTK_AFE_RATE_8K;
 50         case 11025:
 51                 return MTK_AFE_RATE_11K;
 52         case 12000:
 53                 return MTK_AFE_RATE_12K;
 54         case 16000:
 55                 return MTK_AFE_RATE_16K;
 56         case 22050:
 57                 return MTK_AFE_RATE_22K;
 58         case 24000:
 59                 return MTK_AFE_RATE_24K;
 60         case 32000:
 61                 return MTK_AFE_RATE_32K;
 62         case 44100:
 63                 return MTK_AFE_RATE_44K;
 64         case 48000:
 65                 return MTK_AFE_RATE_48K;
 66         case 88200:
 67                 return MTK_AFE_RATE_88K;
 68         case 96000:
 69                 return MTK_AFE_RATE_96K;
 70         case 176400:
 71                 return MTK_AFE_RATE_176K;
 72         case 192000:
 73                 return MTK_AFE_RATE_192K;
 74         case 260000:
 75                 return MTK_AFE_RATE_260K;
 76         case 352800:
 77                 return MTK_AFE_RATE_352K;
 78         case 384000:
 79                 return MTK_AFE_RATE_384K;
 80         default:
 81                 dev_warn(dev, "%s(), rate %u invalid, use %d!!!\n",
 82                          __func__,
 83                          rate, MTK_AFE_RATE_48K);
 84                 return MTK_AFE_RATE_48K;
 85         }
 86 }
 87 
 88 static unsigned int dai_memif_rate_transform(struct device *dev,
 89                                              unsigned int rate)
 90 {
 91         switch (rate) {
 92         case 8000:
 93                 return MTK_AFE_DAI_MEMIF_RATE_8K;
 94         case 16000:
 95                 return MTK_AFE_DAI_MEMIF_RATE_16K;
 96         case 32000:
 97                 return MTK_AFE_DAI_MEMIF_RATE_32K;
 98         case 48000:
 99                 return MTK_AFE_DAI_MEMIF_RATE_48K;
100         default:
101                 dev_warn(dev, "%s(), rate %u invalid, use %d!!!\n",
102                          __func__,
103                          rate, MTK_AFE_DAI_MEMIF_RATE_16K);
104                 return MTK_AFE_DAI_MEMIF_RATE_16K;
105         }
106 }
107 
108 static unsigned int pcm_rate_transform(struct device *dev,
109                                        unsigned int rate)
110 {
111         switch (rate) {
112         case 8000:
113                 return MTK_AFE_PCM_RATE_8K;
114         case 16000:
115                 return MTK_AFE_PCM_RATE_16K;
116         case 32000:
117                 return MTK_AFE_PCM_RATE_32K;
118         case 48000:
119                 return MTK_AFE_PCM_RATE_48K;
120         default:
121                 dev_warn(dev, "%s(), rate %u invalid, use %d!!!\n",
122                          __func__,
123                          rate, MTK_AFE_PCM_RATE_32K);
124                 return MTK_AFE_PCM_RATE_32K;
125         }
126 }
127 
128 unsigned int mt8192_rate_transform(struct device *dev,
129                                    unsigned int rate, int aud_blk)
130 {
131         switch (aud_blk) {
132         case MT8192_MEMIF_DAI:
133         case MT8192_MEMIF_MOD_DAI:
134                 return dai_memif_rate_transform(dev, rate);
135         case MT8192_DAI_PCM_1:
136         case MT8192_DAI_PCM_2:
137                 return pcm_rate_transform(dev, rate);
138         default:
139                 return mt8192_general_rate_transform(dev, rate);
140         }
141 }
142 
143 int mt8192_dai_set_priv(struct mtk_base_afe *afe, int id,
144                         int priv_size, const void *priv_data)
145 {
146         struct mt8192_afe_private *afe_priv = afe->platform_priv;
147         void *temp_data;
148 
149         temp_data = devm_kzalloc(afe->dev,
150                                  priv_size,
151                                  GFP_KERNEL);
152         if (!temp_data)
153                 return -ENOMEM;
154 
155         if (priv_data)
156                 memcpy(temp_data, priv_data, priv_size);
157 
158         afe_priv->dai_priv[id] = temp_data;
159 
160         return 0;
161 }
162 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php