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