File Index
Files and directories
Sign in
FILE

tegra_cif.h

File preview with syntax highlighting.

linux-6.19.14/sound/soc/tegra/tegra_cif.h C
 1/* SPDX-License-Identifier: GPL-2.0-only
 2 * SPDX-FileCopyrightText: Copyright (c) 2020-2025 NVIDIA CORPORATION. All rights reserved.
 3 *
 4 * tegra_cif.h - TEGRA Audio CIF Programming
 5 *
 6 */
 7
 8#ifndef __TEGRA_CIF_H__
 9#define __TEGRA_CIF_H__
10
11#include <linux/regmap.h>
12
13#define TEGRA_ACIF_CTRL_FIFO_TH_SHIFT		24
14#define TEGRA_ACIF_CTRL_AUDIO_CH_SHIFT		20
15#define TEGRA_ACIF_CTRL_CLIENT_CH_SHIFT		16
16#define TEGRA_ACIF_CTRL_AUDIO_BITS_SHIFT	12
17#define TEGRA_ACIF_CTRL_CLIENT_BITS_SHIFT	8
18#define TEGRA_ACIF_CTRL_EXPAND_SHIFT		6
19#define TEGRA_ACIF_CTRL_STEREO_CONV_SHIFT	4
20#define TEGRA_ACIF_CTRL_REPLICATE_SHIFT		3
21#define TEGRA_ACIF_CTRL_TRUNCATE_SHIFT		1
22#define TEGRA_ACIF_CTRL_MONO_CONV_SHIFT		0
23
24#define TEGRA264_ACIF_CTRL_AUDIO_BITS_SHIFT	11
25#define TEGRA264_ACIF_CTRL_CLIENT_CH_SHIFT	14
26#define TEGRA264_ACIF_CTRL_AUDIO_CH_SHIFT	19
27
28/* AUDIO/CLIENT_BITS values */
29#define TEGRA_ACIF_BITS_8			1
30#define TEGRA_ACIF_BITS_16			3
31#define TEGRA_ACIF_BITS_24			5
32#define TEGRA_ACIF_BITS_32			7
33
34#define TEGRA_ACIF_UPDATE_MASK			0x3ffffffb
35
36struct tegra_cif_conf {
37	unsigned int threshold;
38	unsigned int audio_ch;
39	unsigned int client_ch;
40	unsigned int audio_bits;
41	unsigned int client_bits;
42	unsigned int expand;
43	unsigned int stereo_conv;
44	unsigned int replicate;
45	unsigned int truncate;
46	unsigned int mono_conv;
47};
48
49static inline void tegra_set_cif(struct regmap *regmap, unsigned int reg,
50				 struct tegra_cif_conf *conf)
51{
52	unsigned int value;
53
54	value = (conf->threshold << TEGRA_ACIF_CTRL_FIFO_TH_SHIFT) |
55		((conf->audio_ch - 1) << TEGRA_ACIF_CTRL_AUDIO_CH_SHIFT) |
56		((conf->client_ch - 1) << TEGRA_ACIF_CTRL_CLIENT_CH_SHIFT) |
57		(conf->audio_bits << TEGRA_ACIF_CTRL_AUDIO_BITS_SHIFT) |
58		(conf->client_bits << TEGRA_ACIF_CTRL_CLIENT_BITS_SHIFT) |
59		(conf->expand << TEGRA_ACIF_CTRL_EXPAND_SHIFT) |
60		(conf->stereo_conv << TEGRA_ACIF_CTRL_STEREO_CONV_SHIFT) |
61		(conf->replicate << TEGRA_ACIF_CTRL_REPLICATE_SHIFT) |
62		(conf->truncate << TEGRA_ACIF_CTRL_TRUNCATE_SHIFT) |
63		(conf->mono_conv << TEGRA_ACIF_CTRL_MONO_CONV_SHIFT);
64
65	regmap_update_bits(regmap, reg, TEGRA_ACIF_UPDATE_MASK, value);
66}
67
68static inline void tegra264_set_cif(struct regmap *regmap, unsigned int reg,
69				    struct tegra_cif_conf *conf)
70{
71	unsigned int value;
72
73	value = (conf->threshold << TEGRA_ACIF_CTRL_FIFO_TH_SHIFT) |
74		((conf->audio_ch - 1) << TEGRA264_ACIF_CTRL_AUDIO_CH_SHIFT) |
75		((conf->client_ch - 1) << TEGRA264_ACIF_CTRL_CLIENT_CH_SHIFT) |
76		(conf->audio_bits << TEGRA264_ACIF_CTRL_AUDIO_BITS_SHIFT) |
77		(conf->client_bits << TEGRA_ACIF_CTRL_CLIENT_BITS_SHIFT) |
78		(conf->expand << TEGRA_ACIF_CTRL_EXPAND_SHIFT) |
79		(conf->stereo_conv << TEGRA_ACIF_CTRL_STEREO_CONV_SHIFT) |
80		(conf->replicate << TEGRA_ACIF_CTRL_REPLICATE_SHIFT) |
81		(conf->truncate << TEGRA_ACIF_CTRL_TRUNCATE_SHIFT) |
82		(conf->mono_conv << TEGRA_ACIF_CTRL_MONO_CONV_SHIFT);
83
84	regmap_update_bits(regmap, reg, TEGRA_ACIF_UPDATE_MASK, value);
85}
86
87#endif
~/ Read-only file preview.