cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mt8192-afe-control.c (3442B)


      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}