1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * tegra210_mixer.h - Definitions for Tegra210 MIXER driver
5 * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
9 #ifndef __TEGRA210_MIXER_H__
10 #define __TEGRA210_MIXER_H__
12 /* XBAR_RX related MIXER offsets */
13 #define TEGRA210_MIXER_RX1_SOFT_RESET 0x04
14 #define TEGRA210_MIXER_RX1_STATUS 0x10
15 #define TEGRA210_MIXER_RX1_CIF_CTRL 0x24
16 #define TEGRA210_MIXER_RX1_CTRL 0x28
17 #define TEGRA210_MIXER_RX1_PEAK_CTRL 0x2c
18 #define TEGRA210_MIXER_RX1_SAMPLE_COUNT 0x30
20 /* XBAR_TX related MIXER offsets */
21 #define TEGRA210_MIXER_TX1_ENABLE 0x280
22 #define TEGRA210_MIXER_TX1_SOFT_RESET 0x284
23 #define TEGRA210_MIXER_TX1_STATUS 0x290
24 #define TEGRA210_MIXER_TX1_INT_STATUS 0x294
25 #define TEGRA210_MIXER_TX1_INT_MASK 0x298
26 #define TEGRA210_MIXER_TX1_INT_SET 0x29c
27 #define TEGRA210_MIXER_TX1_INT_CLEAR 0x2a0
28 #define TEGRA210_MIXER_TX1_CIF_CTRL 0x2a4
29 #define TEGRA210_MIXER_TX1_ADDER_CONFIG 0x2a8
31 /* MIXER related offsets */
32 #define TEGRA210_MIXER_ENABLE 0x400
33 #define TEGRA210_MIXER_SOFT_RESET 0x404
34 #define TEGRA210_MIXER_CG 0x408
35 #define TEGRA210_MIXER_STATUS 0x410
36 #define TEGRA210_MIXER_INT_STATUS 0x414
37 #define TEGRA210_MIXER_GAIN_CFG_RAM_CTRL 0x42c
38 #define TEGRA210_MIXER_GAIN_CFG_RAM_DATA 0x430
39 #define TEGRA210_MIXER_PEAKM_RAM_CTRL 0x434
40 #define TEGRA210_MIXER_PEAKM_RAM_DATA 0x438
41 #define TEGRA210_MIXER_CTRL 0x43c
43 #define TEGRA210_MIXER_TX2_ADDER_CONFIG (TEGRA210_MIXER_TX1_ADDER_CONFIG + TEGRA210_MIXER_REG_STRIDE)
44 #define TEGRA210_MIXER_TX3_ADDER_CONFIG (TEGRA210_MIXER_TX2_ADDER_CONFIG + TEGRA210_MIXER_REG_STRIDE)
45 #define TEGRA210_MIXER_TX4_ADDER_CONFIG (TEGRA210_MIXER_TX3_ADDER_CONFIG + TEGRA210_MIXER_REG_STRIDE)
46 #define TEGRA210_MIXER_TX5_ADDER_CONFIG (TEGRA210_MIXER_TX4_ADDER_CONFIG + TEGRA210_MIXER_REG_STRIDE)
48 #define TEGRA210_MIXER_TX2_ENABLE (TEGRA210_MIXER_TX1_ENABLE + TEGRA210_MIXER_REG_STRIDE)
49 #define TEGRA210_MIXER_TX3_ENABLE (TEGRA210_MIXER_TX2_ENABLE + TEGRA210_MIXER_REG_STRIDE)
50 #define TEGRA210_MIXER_TX4_ENABLE (TEGRA210_MIXER_TX3_ENABLE + TEGRA210_MIXER_REG_STRIDE)
51 #define TEGRA210_MIXER_TX5_ENABLE (TEGRA210_MIXER_TX4_ENABLE + TEGRA210_MIXER_REG_STRIDE)
53 /* Fields in TEGRA210_MIXER_ENABLE */
54 #define TEGRA210_MIXER_ENABLE_SHIFT 0
55 #define TEGRA210_MIXER_ENABLE_MASK (1 << TEGRA210_MIXER_ENABLE_SHIFT)
56 #define TEGRA210_MIXER_EN (1 << TEGRA210_MIXER_ENABLE_SHIFT)
58 /* Fields in TEGRA210_MIXER_GAIN_CFG_RAM_CTRL */
59 #define TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_0 0x0
60 #define TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_STRIDE 0x10
62 #define TEGRA210_MIXER_GAIN_CFG_RAM_RW_SHIFT 14
63 #define TEGRA210_MIXER_GAIN_CFG_RAM_RW_MASK (1 << TEGRA210_MIXER_GAIN_CFG_RAM_RW_SHIFT)
64 #define TEGRA210_MIXER_GAIN_CFG_RAM_RW_WRITE (1 << TEGRA210_MIXER_GAIN_CFG_RAM_RW_SHIFT)
66 #define TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_INIT_EN_SHIFT 13
67 #define TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_INIT_EN_MASK (1 << TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_INIT_EN_SHIFT)
68 #define TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_INIT_EN (1 << TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_INIT_EN_SHIFT)
70 #define TEGRA210_MIXER_GAIN_CFG_RAM_SEQ_ACCESS_EN_SHIFT 12
71 #define TEGRA210_MIXER_GAIN_CFG_RAM_SEQ_ACCESS_EN_MASK (1 << TEGRA210_MIXER_GAIN_CFG_RAM_SEQ_ACCESS_EN_SHIFT)
72 #define TEGRA210_MIXER_GAIN_CFG_RAM_SEQ_ACCESS_EN (1 << TEGRA210_MIXER_GAIN_CFG_RAM_SEQ_ACCESS_EN_SHIFT)
74 #define TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_SHIFT 0
75 #define TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_MASK (0x1ff << TEGRA210_MIXER_GAIN_CFG_RAM_ADDR_SHIFT)
77 #define TEGRA210_MIXER_REG_STRIDE 0x40
78 #define TEGRA210_MIXER_RX_MAX 10
79 #define TEGRA210_MIXER_RX_LIMIT (TEGRA210_MIXER_RX_MAX * TEGRA210_MIXER_REG_STRIDE)
80 #define TEGRA210_MIXER_TX_MAX 5
81 #define TEGRA210_MIXER_TX_LIMIT (TEGRA210_MIXER_RX_LIMIT + (TEGRA210_MIXER_TX_MAX * TEGRA210_MIXER_REG_STRIDE))
83 #define REG_CFG_DONE_TRIGGER 0xf
84 #define VAL_CFG_DONE_TRIGGER 0x1
86 #define NUM_GAIN_POLY_COEFFS 9
87 #define NUM_DURATION_PARMS 4
89 struct tegra210_mixer_gain_params
{
90 int poly_coeff
[NUM_GAIN_POLY_COEFFS
];
92 int duration
[NUM_DURATION_PARMS
];
95 struct tegra210_mixer
{
96 int gain_value
[TEGRA210_MIXER_RX_MAX
];
97 struct regmap
*regmap
;