1e539891fSSameer Pujar /* SPDX-License-Identifier: GPL-2.0-only */ 2e539891fSSameer Pujar /* 3e539891fSSameer Pujar * tegra210_mvc.h - Definitions for Tegra210 MVC driver 4e539891fSSameer Pujar * 5e539891fSSameer Pujar * Copyright (c) 2021 NVIDIA CORPORATION. All rights reserved. 6e539891fSSameer Pujar * 7e539891fSSameer Pujar */ 8e539891fSSameer Pujar 9e539891fSSameer Pujar #ifndef __TEGRA210_MVC_H__ 10e539891fSSameer Pujar #define __TEGRA210_MVC_H__ 11e539891fSSameer Pujar 12e539891fSSameer Pujar /* 13e539891fSSameer Pujar * MVC_RX registers are with respect to XBAR. 14e539891fSSameer Pujar * The data comes from XBAR to MVC. 15e539891fSSameer Pujar */ 16e539891fSSameer Pujar #define TEGRA210_MVC_RX_STATUS 0x0c 17e539891fSSameer Pujar #define TEGRA210_MVC_RX_INT_STATUS 0x10 18e539891fSSameer Pujar #define TEGRA210_MVC_RX_INT_MASK 0x14 19e539891fSSameer Pujar #define TEGRA210_MVC_RX_INT_SET 0x18 20e539891fSSameer Pujar #define TEGRA210_MVC_RX_INT_CLEAR 0x1c 21e539891fSSameer Pujar #define TEGRA210_MVC_RX_CIF_CTRL 0x20 22e539891fSSameer Pujar 23e539891fSSameer Pujar /* 24e539891fSSameer Pujar * MVC_TX registers are with respect to XBAR. 25e539891fSSameer Pujar * The data goes out of MVC. 26e539891fSSameer Pujar */ 27e539891fSSameer Pujar #define TEGRA210_MVC_TX_STATUS 0x4c 28e539891fSSameer Pujar #define TEGRA210_MVC_TX_INT_STATUS 0x50 29e539891fSSameer Pujar #define TEGRA210_MVC_TX_INT_MASK 0x54 30e539891fSSameer Pujar #define TEGRA210_MVC_TX_INT_SET 0x58 31e539891fSSameer Pujar #define TEGRA210_MVC_TX_INT_CLEAR 0x5c 32e539891fSSameer Pujar #define TEGRA210_MVC_TX_CIF_CTRL 0x60 33e539891fSSameer Pujar 34e539891fSSameer Pujar /* Register offsets from TEGRA210_MVC*_BASE */ 35e539891fSSameer Pujar #define TEGRA210_MVC_ENABLE 0x80 36e539891fSSameer Pujar #define TEGRA210_MVC_SOFT_RESET 0x84 37e539891fSSameer Pujar #define TEGRA210_MVC_CG 0x88 38e539891fSSameer Pujar #define TEGRA210_MVC_STATUS 0x90 39e539891fSSameer Pujar #define TEGRA210_MVC_INT_STATUS 0x94 40e539891fSSameer Pujar #define TEGRA210_MVC_CTRL 0xa8 41e539891fSSameer Pujar #define TEGRA210_MVC_SWITCH 0xac 42e539891fSSameer Pujar #define TEGRA210_MVC_INIT_VOL 0xb0 43e539891fSSameer Pujar #define TEGRA210_MVC_TARGET_VOL 0xd0 44e539891fSSameer Pujar #define TEGRA210_MVC_DURATION 0xf0 45e539891fSSameer Pujar #define TEGRA210_MVC_DURATION_INV 0xf4 46e539891fSSameer Pujar #define TEGRA210_MVC_POLY_N1 0xf8 47e539891fSSameer Pujar #define TEGRA210_MVC_POLY_N2 0xfc 48e539891fSSameer Pujar #define TEGRA210_MVC_PEAK_CTRL 0x100 49e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_CTRL 0x104 50e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_DATA 0x108 51e539891fSSameer Pujar #define TEGRA210_MVC_PEAK_VALUE 0x10c 52e539891fSSameer Pujar #define TEGRA210_MVC_CONFIG_ERR_TYPE 0x12c 53e539891fSSameer Pujar 54e539891fSSameer Pujar /* Fields in TEGRA210_MVC_ENABLE */ 55e539891fSSameer Pujar #define TEGRA210_MVC_EN_SHIFT 0 56e539891fSSameer Pujar #define TEGRA210_MVC_EN (1 << TEGRA210_MVC_EN_SHIFT) 57e539891fSSameer Pujar 58e539891fSSameer Pujar #define TEGRA210_MVC_MUTE_SHIFT 8 59e539891fSSameer Pujar #define TEGRA210_MUTE_MASK_EN 0xff 60e539891fSSameer Pujar #define TEGRA210_MVC_MUTE_MASK (TEGRA210_MUTE_MASK_EN << TEGRA210_MVC_MUTE_SHIFT) 61e539891fSSameer Pujar #define TEGRA210_MVC_MUTE_EN (TEGRA210_MUTE_MASK_EN << TEGRA210_MVC_MUTE_SHIFT) 62*0d242698SSameer Pujar #define TEGRA210_MVC_CH0_MUTE_EN 1 63e539891fSSameer Pujar 64e539891fSSameer Pujar #define TEGRA210_MVC_PER_CHAN_CTRL_EN_SHIFT 30 65e539891fSSameer Pujar #define TEGRA210_MVC_PER_CHAN_CTRL_EN_MASK (1 << TEGRA210_MVC_PER_CHAN_CTRL_EN_SHIFT) 66e539891fSSameer Pujar #define TEGRA210_MVC_PER_CHAN_CTRL_EN (1 << TEGRA210_MVC_PER_CHAN_CTRL_EN_SHIFT) 67e539891fSSameer Pujar 68e539891fSSameer Pujar #define TEGRA210_MVC_CURVE_TYPE_SHIFT 1 69e539891fSSameer Pujar #define TEGRA210_MVC_CURVE_TYPE_MASK (1 << TEGRA210_MVC_CURVE_TYPE_SHIFT) 70e539891fSSameer Pujar 71e539891fSSameer Pujar #define TEGRA210_MVC_VOLUME_SWITCH_SHIFT 2 72e539891fSSameer Pujar #define TEGRA210_MVC_VOLUME_SWITCH_MASK (1 << TEGRA210_MVC_VOLUME_SWITCH_SHIFT) 73e539891fSSameer Pujar #define TEGRA210_MVC_VOLUME_SWITCH_TRIGGER (1 << TEGRA210_MVC_VOLUME_SWITCH_SHIFT) 74e539891fSSameer Pujar #define TEGRA210_MVC_CTRL_DEFAULT 0x40000003 75e539891fSSameer Pujar 76e539891fSSameer Pujar #define TEGRA210_MVC_INIT_VOL_DEFAULT_POLY 0x01000000 77e539891fSSameer Pujar #define TEGRA210_MVC_INIT_VOL_DEFAULT_LINEAR 0x00000000 78e539891fSSameer Pujar 79e539891fSSameer Pujar /* Fields in TEGRA210_MVC ram ctrl */ 80e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_CTRL_RW_SHIFT 14 81e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_CTRL_RW_WRITE (1 << TEGRA210_MVC_CFG_RAM_CTRL_RW_SHIFT) 82e539891fSSameer Pujar 83e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_CTRL_ADDR_INIT_EN_SHIFT 13 84e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_CTRL_ADDR_INIT_EN (1 << TEGRA210_MVC_CFG_RAM_CTRL_ADDR_INIT_EN_SHIFT) 85e539891fSSameer Pujar 86e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_CTRL_SEQ_ACCESS_EN_SHIFT 12 87e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_CTRL_SEQ_ACCESS_EN (1 << TEGRA210_MVC_CFG_RAM_CTRL_SEQ_ACCESS_EN_SHIFT) 88e539891fSSameer Pujar 89e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_CTRL_ADDR_SHIFT 0 90e539891fSSameer Pujar #define TEGRA210_MVC_CFG_RAM_CTRL_ADDR_MASK (0x1ff << TEGRA210_MVC_CFG_RAM_CTRL_ADDR_SHIFT) 91e539891fSSameer Pujar 92e539891fSSameer Pujar #define REG_SIZE 4 93e539891fSSameer Pujar #define TEGRA210_MVC_MAX_CHAN_COUNT 8 94e539891fSSameer Pujar #define TEGRA210_MVC_REG_OFFSET(reg, i) (reg + (REG_SIZE * i)) 95e539891fSSameer Pujar 96*0d242698SSameer Pujar #define TEGRA210_MVC_GET_CHAN(reg, base) (((reg) - (base)) / REG_SIZE) 97*0d242698SSameer Pujar 98*0d242698SSameer Pujar #define TEGRA210_GET_MUTE_VAL(val) (((val) >> TEGRA210_MVC_MUTE_SHIFT) & TEGRA210_MUTE_MASK_EN) 99*0d242698SSameer Pujar 100e539891fSSameer Pujar #define NUM_GAIN_POLY_COEFFS 9 101e539891fSSameer Pujar 102e539891fSSameer Pujar enum { 103e539891fSSameer Pujar CURVE_POLY, 104e539891fSSameer Pujar CURVE_LINEAR, 105e539891fSSameer Pujar }; 106e539891fSSameer Pujar 107e539891fSSameer Pujar struct tegra210_mvc_gain_params { 108e539891fSSameer Pujar int poly_coeff[NUM_GAIN_POLY_COEFFS]; 109e539891fSSameer Pujar int poly_n1; 110e539891fSSameer Pujar int poly_n2; 111e539891fSSameer Pujar int duration; 112e539891fSSameer Pujar int duration_inv; 113e539891fSSameer Pujar }; 114e539891fSSameer Pujar 115e539891fSSameer Pujar struct tegra210_mvc { 116e539891fSSameer Pujar int volume[TEGRA210_MVC_MAX_CHAN_COUNT]; 117e539891fSSameer Pujar unsigned int curve_type; 118e539891fSSameer Pujar unsigned int ctrl_value; 119e539891fSSameer Pujar struct regmap *regmap; 120e539891fSSameer Pujar }; 121e539891fSSameer Pujar 122e539891fSSameer Pujar #endif 123