18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * tegra20_i2s.h - Definitions for Tegra20 I2S driver 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Author: Stephen Warren <swarren@nvidia.com> 68c2ecf20Sopenharmony_ci * Copyright (C) 2010,2012 - NVIDIA, Inc. 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * Based on code copyright/by: 98c2ecf20Sopenharmony_ci * 108c2ecf20Sopenharmony_ci * Copyright (c) 2009-2010, NVIDIA Corporation. 118c2ecf20Sopenharmony_ci * Scott Peterson <speterson@nvidia.com> 128c2ecf20Sopenharmony_ci * 138c2ecf20Sopenharmony_ci * Copyright (C) 2010 Google, Inc. 148c2ecf20Sopenharmony_ci * Iliyan Malchev <malchev@google.com> 158c2ecf20Sopenharmony_ci */ 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#ifndef __TEGRA20_I2S_H__ 188c2ecf20Sopenharmony_ci#define __TEGRA20_I2S_H__ 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#include "tegra_pcm.h" 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci/* Register offsets from TEGRA20_I2S1_BASE and TEGRA20_I2S2_BASE */ 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL 0x00 258c2ecf20Sopenharmony_ci#define TEGRA20_I2S_STATUS 0x04 268c2ecf20Sopenharmony_ci#define TEGRA20_I2S_TIMING 0x08 278c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR 0x0c 288c2ecf20Sopenharmony_ci#define TEGRA20_I2S_PCM_CTRL 0x10 298c2ecf20Sopenharmony_ci#define TEGRA20_I2S_NW_CTRL 0x14 308c2ecf20Sopenharmony_ci#define TEGRA20_I2S_TDM_CTRL 0x20 318c2ecf20Sopenharmony_ci#define TEGRA20_I2S_TDM_TX_RX_CTRL 0x24 328c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO1 0x40 338c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO2 0x80 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci/* Fields in TEGRA20_I2S_CTRL */ 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO2_TX_ENABLE (1 << 30) 388c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO1_ENABLE (1 << 29) 398c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO2_ENABLE (1 << 28) 408c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO1_RX_ENABLE (1 << 27) 418c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO_LPBK_ENABLE (1 << 26) 428c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_MASTER_ENABLE (1 << 25) 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci#define TEGRA20_I2S_LRCK_LEFT_LOW 0 458c2ecf20Sopenharmony_ci#define TEGRA20_I2S_LRCK_RIGHT_LOW 1 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_LRCK_SHIFT 24 488c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_LRCK_MASK (1 << TEGRA20_I2S_CTRL_LRCK_SHIFT) 498c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_LRCK_L_LOW (TEGRA20_I2S_LRCK_LEFT_LOW << TEGRA20_I2S_CTRL_LRCK_SHIFT) 508c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_LRCK_R_LOW (TEGRA20_I2S_LRCK_RIGHT_LOW << TEGRA20_I2S_CTRL_LRCK_SHIFT) 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci#define TEGRA20_I2S_BIT_FORMAT_I2S 0 538c2ecf20Sopenharmony_ci#define TEGRA20_I2S_BIT_FORMAT_RJM 1 548c2ecf20Sopenharmony_ci#define TEGRA20_I2S_BIT_FORMAT_LJM 2 558c2ecf20Sopenharmony_ci#define TEGRA20_I2S_BIT_FORMAT_DSP 3 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_FORMAT_SHIFT 10 588c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_FORMAT_MASK (3 << TEGRA20_I2S_CTRL_BIT_FORMAT_SHIFT) 598c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_FORMAT_I2S (TEGRA20_I2S_BIT_FORMAT_I2S << TEGRA20_I2S_CTRL_BIT_FORMAT_SHIFT) 608c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_FORMAT_RJM (TEGRA20_I2S_BIT_FORMAT_RJM << TEGRA20_I2S_CTRL_BIT_FORMAT_SHIFT) 618c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_FORMAT_LJM (TEGRA20_I2S_BIT_FORMAT_LJM << TEGRA20_I2S_CTRL_BIT_FORMAT_SHIFT) 628c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_FORMAT_DSP (TEGRA20_I2S_BIT_FORMAT_DSP << TEGRA20_I2S_CTRL_BIT_FORMAT_SHIFT) 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci#define TEGRA20_I2S_BIT_SIZE_16 0 658c2ecf20Sopenharmony_ci#define TEGRA20_I2S_BIT_SIZE_20 1 668c2ecf20Sopenharmony_ci#define TEGRA20_I2S_BIT_SIZE_24 2 678c2ecf20Sopenharmony_ci#define TEGRA20_I2S_BIT_SIZE_32 3 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_SIZE_SHIFT 8 708c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_SIZE_MASK (3 << TEGRA20_I2S_CTRL_BIT_SIZE_SHIFT) 718c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_SIZE_16 (TEGRA20_I2S_BIT_SIZE_16 << TEGRA20_I2S_CTRL_BIT_SIZE_SHIFT) 728c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_SIZE_20 (TEGRA20_I2S_BIT_SIZE_20 << TEGRA20_I2S_CTRL_BIT_SIZE_SHIFT) 738c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_SIZE_24 (TEGRA20_I2S_BIT_SIZE_24 << TEGRA20_I2S_CTRL_BIT_SIZE_SHIFT) 748c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_BIT_SIZE_32 (TEGRA20_I2S_BIT_SIZE_32 << TEGRA20_I2S_CTRL_BIT_SIZE_SHIFT) 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_16_LSB 0 778c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_20_LSB 1 788c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_24_LSB 2 798c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_32 3 808c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_PACKED 7 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO_FORMAT_SHIFT 4 838c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO_FORMAT_MASK (7 << TEGRA20_I2S_CTRL_FIFO_FORMAT_SHIFT) 848c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO_FORMAT_16_LSB (TEGRA20_I2S_FIFO_16_LSB << TEGRA20_I2S_CTRL_FIFO_FORMAT_SHIFT) 858c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO_FORMAT_20_LSB (TEGRA20_I2S_FIFO_20_LSB << TEGRA20_I2S_CTRL_FIFO_FORMAT_SHIFT) 868c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO_FORMAT_24_LSB (TEGRA20_I2S_FIFO_24_LSB << TEGRA20_I2S_CTRL_FIFO_FORMAT_SHIFT) 878c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO_FORMAT_32 (TEGRA20_I2S_FIFO_32 << TEGRA20_I2S_CTRL_FIFO_FORMAT_SHIFT) 888c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_FIFO_FORMAT_PACKED (TEGRA20_I2S_FIFO_PACKED << TEGRA20_I2S_CTRL_FIFO_FORMAT_SHIFT) 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_IE_FIFO1_ERR (1 << 3) 918c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_IE_FIFO2_ERR (1 << 2) 928c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_QE_FIFO1 (1 << 1) 938c2ecf20Sopenharmony_ci#define TEGRA20_I2S_CTRL_QE_FIFO2 (1 << 0) 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ci/* Fields in TEGRA20_I2S_STATUS */ 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_ci#define TEGRA20_I2S_STATUS_FIFO1_RDY (1 << 31) 988c2ecf20Sopenharmony_ci#define TEGRA20_I2S_STATUS_FIFO2_RDY (1 << 30) 998c2ecf20Sopenharmony_ci#define TEGRA20_I2S_STATUS_FIFO1_BSY (1 << 29) 1008c2ecf20Sopenharmony_ci#define TEGRA20_I2S_STATUS_FIFO2_BSY (1 << 28) 1018c2ecf20Sopenharmony_ci#define TEGRA20_I2S_STATUS_FIFO1_ERR (1 << 3) 1028c2ecf20Sopenharmony_ci#define TEGRA20_I2S_STATUS_FIFO2_ERR (1 << 2) 1038c2ecf20Sopenharmony_ci#define TEGRA20_I2S_STATUS_QS_FIFO1 (1 << 1) 1048c2ecf20Sopenharmony_ci#define TEGRA20_I2S_STATUS_QS_FIFO2 (1 << 0) 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ci/* Fields in TEGRA20_I2S_TIMING */ 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ci#define TEGRA20_I2S_TIMING_NON_SYM_ENABLE (1 << 12) 1098c2ecf20Sopenharmony_ci#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT 0 1108c2ecf20Sopenharmony_ci#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7ff 1118c2ecf20Sopenharmony_ci#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK (TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US << TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT) 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci/* Fields in TEGRA20_I2S_FIFO_SCR */ 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO2_FULL_EMPTY_COUNT_SHIFT 24 1168c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO1_FULL_EMPTY_COUNT_SHIFT 16 1178c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO_FULL_EMPTY_COUNT_MASK 0x3f 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO2_CLR (1 << 12) 1208c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO1_CLR (1 << 8) 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_ATN_LVL_ONE_SLOT 0 1238c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_ATN_LVL_FOUR_SLOTS 1 1248c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_ATN_LVL_EIGHT_SLOTS 2 1258c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_ATN_LVL_TWELVE_SLOTS 3 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_SHIFT 4 1288c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_MASK (3 << TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_SHIFT) 1298c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_ONE_SLOT (TEGRA20_I2S_FIFO_ATN_LVL_ONE_SLOT << TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_SHIFT) 1308c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_FOUR_SLOTS (TEGRA20_I2S_FIFO_ATN_LVL_FOUR_SLOTS << TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_SHIFT) 1318c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_EIGHT_SLOTS (TEGRA20_I2S_FIFO_ATN_LVL_EIGHT_SLOTS << TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_SHIFT) 1328c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_TWELVE_SLOTS (TEGRA20_I2S_FIFO_ATN_LVL_TWELVE_SLOTS << TEGRA20_I2S_FIFO_SCR_FIFO2_ATN_LVL_SHIFT) 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_SHIFT 0 1358c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_MASK (3 << TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_SHIFT) 1368c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_ONE_SLOT (TEGRA20_I2S_FIFO_ATN_LVL_ONE_SLOT << TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_SHIFT) 1378c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_FOUR_SLOTS (TEGRA20_I2S_FIFO_ATN_LVL_FOUR_SLOTS << TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_SHIFT) 1388c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_EIGHT_SLOTS (TEGRA20_I2S_FIFO_ATN_LVL_EIGHT_SLOTS << TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_SHIFT) 1398c2ecf20Sopenharmony_ci#define TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_TWELVE_SLOTS (TEGRA20_I2S_FIFO_ATN_LVL_TWELVE_SLOTS << TEGRA20_I2S_FIFO_SCR_FIFO1_ATN_LVL_SHIFT) 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_cistruct tegra20_i2s { 1428c2ecf20Sopenharmony_ci struct snd_soc_dai_driver dai; 1438c2ecf20Sopenharmony_ci struct clk *clk_i2s; 1448c2ecf20Sopenharmony_ci struct snd_dmaengine_dai_dma_data capture_dma_data; 1458c2ecf20Sopenharmony_ci struct snd_dmaengine_dai_dma_data playback_dma_data; 1468c2ecf20Sopenharmony_ci struct regmap *regmap; 1478c2ecf20Sopenharmony_ci}; 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci#endif 150