Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * tegra_cif.h - TEGRA Audio CIF Programming
0004  *
0005  * Copyright (c) 2020 NVIDIA CORPORATION.  All rights reserved.
0006  *
0007  */
0008 
0009 #ifndef __TEGRA_CIF_H__
0010 #define __TEGRA_CIF_H__
0011 
0012 #include <linux/regmap.h>
0013 
0014 #define TEGRA_ACIF_CTRL_FIFO_TH_SHIFT       24
0015 #define TEGRA_ACIF_CTRL_AUDIO_CH_SHIFT      20
0016 #define TEGRA_ACIF_CTRL_CLIENT_CH_SHIFT     16
0017 #define TEGRA_ACIF_CTRL_AUDIO_BITS_SHIFT    12
0018 #define TEGRA_ACIF_CTRL_CLIENT_BITS_SHIFT   8
0019 #define TEGRA_ACIF_CTRL_EXPAND_SHIFT        6
0020 #define TEGRA_ACIF_CTRL_STEREO_CONV_SHIFT   4
0021 #define TEGRA_ACIF_CTRL_REPLICATE_SHIFT     3
0022 #define TEGRA_ACIF_CTRL_TRUNCATE_SHIFT      1
0023 #define TEGRA_ACIF_CTRL_MONO_CONV_SHIFT     0
0024 
0025 /* AUDIO/CLIENT_BITS values */
0026 #define TEGRA_ACIF_BITS_8           1
0027 #define TEGRA_ACIF_BITS_16          3
0028 #define TEGRA_ACIF_BITS_24          5
0029 #define TEGRA_ACIF_BITS_32          7
0030 
0031 #define TEGRA_ACIF_UPDATE_MASK          0x3ffffffb
0032 
0033 struct tegra_cif_conf {
0034     unsigned int threshold;
0035     unsigned int audio_ch;
0036     unsigned int client_ch;
0037     unsigned int audio_bits;
0038     unsigned int client_bits;
0039     unsigned int expand;
0040     unsigned int stereo_conv;
0041     unsigned int replicate;
0042     unsigned int truncate;
0043     unsigned int mono_conv;
0044 };
0045 
0046 static inline void tegra_set_cif(struct regmap *regmap, unsigned int reg,
0047                  struct tegra_cif_conf *conf)
0048 {
0049     unsigned int value;
0050 
0051     value = (conf->threshold << TEGRA_ACIF_CTRL_FIFO_TH_SHIFT) |
0052         ((conf->audio_ch - 1) << TEGRA_ACIF_CTRL_AUDIO_CH_SHIFT) |
0053         ((conf->client_ch - 1) << TEGRA_ACIF_CTRL_CLIENT_CH_SHIFT) |
0054         (conf->audio_bits << TEGRA_ACIF_CTRL_AUDIO_BITS_SHIFT) |
0055         (conf->client_bits << TEGRA_ACIF_CTRL_CLIENT_BITS_SHIFT) |
0056         (conf->expand << TEGRA_ACIF_CTRL_EXPAND_SHIFT) |
0057         (conf->stereo_conv << TEGRA_ACIF_CTRL_STEREO_CONV_SHIFT) |
0058         (conf->replicate << TEGRA_ACIF_CTRL_REPLICATE_SHIFT) |
0059         (conf->truncate << TEGRA_ACIF_CTRL_TRUNCATE_SHIFT) |
0060         (conf->mono_conv << TEGRA_ACIF_CTRL_MONO_CONV_SHIFT);
0061 
0062     regmap_update_bits(regmap, reg, TEGRA_ACIF_UPDATE_MASK, value);
0063 }
0064 
0065 #endif