18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) STMicroelectronics SA 2015 48c2ecf20Sopenharmony_ci * Authors: Arnaud Pouliquen <arnaud.pouliquen@st.com> 58c2ecf20Sopenharmony_ci * for STMicroelectronics. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#ifndef __SND_ST_AUD_UNIPERIF_H 98c2ecf20Sopenharmony_ci#define __SND_ST_AUD_UNIPERIF_H 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <linux/regmap.h> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <sound/dmaengine_pcm.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci/* 168c2ecf20Sopenharmony_ci * Register access macros 178c2ecf20Sopenharmony_ci */ 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#define GET_UNIPERIF_REG(ip, offset, shift, mask) \ 208c2ecf20Sopenharmony_ci ((readl_relaxed(ip->base + offset) >> shift) & mask) 218c2ecf20Sopenharmony_ci#define SET_UNIPERIF_REG(ip, offset, shift, mask, value) \ 228c2ecf20Sopenharmony_ci writel_relaxed(((readl_relaxed(ip->base + offset) & \ 238c2ecf20Sopenharmony_ci ~(mask << shift)) | (((value) & mask) << shift)), ip->base + offset) 248c2ecf20Sopenharmony_ci#define SET_UNIPERIF_BIT_REG(ip, offset, shift, mask, value) \ 258c2ecf20Sopenharmony_ci writel_relaxed((((value) & mask) << shift), ip->base + offset) 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci/* 288c2ecf20Sopenharmony_ci * UNIPERIF_SOFT_RST reg 298c2ecf20Sopenharmony_ci */ 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci#define UNIPERIF_SOFT_RST_OFFSET(ip) 0x0000 328c2ecf20Sopenharmony_ci#define GET_UNIPERIF_SOFT_RST(ip) \ 338c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 348c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_SOFT_RST_OFFSET(ip)) : 0) 358c2ecf20Sopenharmony_ci#define SET_UNIPERIF_SOFT_RST(ip, value) \ 368c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_SOFT_RST_OFFSET(ip)) 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci/* SOFT_RST */ 398c2ecf20Sopenharmony_ci#define UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip) 0x0 408c2ecf20Sopenharmony_ci#define UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip) 0x1 418c2ecf20Sopenharmony_ci#define SET_UNIPERIF_SOFT_RST_SOFT_RST(ip) \ 428c2ecf20Sopenharmony_ci SET_UNIPERIF_BIT_REG(ip, \ 438c2ecf20Sopenharmony_ci UNIPERIF_SOFT_RST_OFFSET(ip), \ 448c2ecf20Sopenharmony_ci UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip), \ 458c2ecf20Sopenharmony_ci UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip), 1) 468c2ecf20Sopenharmony_ci#define GET_UNIPERIF_SOFT_RST_SOFT_RST(ip) \ 478c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 488c2ecf20Sopenharmony_ci UNIPERIF_SOFT_RST_OFFSET(ip), \ 498c2ecf20Sopenharmony_ci UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip), \ 508c2ecf20Sopenharmony_ci UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip)) 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci/* 538c2ecf20Sopenharmony_ci * UNIPERIF_FIFO_DATA reg 548c2ecf20Sopenharmony_ci */ 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci#define UNIPERIF_FIFO_DATA_OFFSET(ip) 0x0004 578c2ecf20Sopenharmony_ci#define SET_UNIPERIF_DATA(ip, value) \ 588c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_FIFO_DATA_OFFSET(ip)) 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ci/* 618c2ecf20Sopenharmony_ci * UNIPERIF_CHANNEL_STA_REGN reg 628c2ecf20Sopenharmony_ci */ 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci#define UNIPERIF_CHANNEL_STA_REGN(ip, n) (0x0060 + (4 * n)) 658c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CHANNEL_STA_REGN(ip) \ 668c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REGN(ip, n)) 678c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CHANNEL_STA_REGN(ip, n, value) \ 688c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + \ 698c2ecf20Sopenharmony_ci UNIPERIF_CHANNEL_STA_REGN(ip, n)) 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci#define UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip) 0x0060 728c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CHANNEL_STA_REG0(ip) \ 738c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip)) 748c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CHANNEL_STA_REG0(ip, value) \ 758c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip)) 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ci#define UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip) 0x0064 788c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CHANNEL_STA_REG1(ip) \ 798c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip)) 808c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CHANNEL_STA_REG1(ip, value) \ 818c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip)) 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci#define UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip) 0x0068 848c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CHANNEL_STA_REG2(ip) \ 858c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip)) 868c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CHANNEL_STA_REG2(ip, value) \ 878c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip)) 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ci#define UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip) 0x006C 908c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CHANNEL_STA_REG3(ip) \ 918c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip)) 928c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CHANNEL_STA_REG3(ip, value) \ 938c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip)) 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ci#define UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip) 0x0070 968c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CHANNEL_STA_REG4(ip) \ 978c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip)) 988c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CHANNEL_STA_REG4(ip, value) \ 998c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip)) 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci#define UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip) 0x0074 1028c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CHANNEL_STA_REG5(ip) \ 1038c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip)) 1048c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CHANNEL_STA_REG5(ip, value) \ 1058c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip)) 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ci/* 1088c2ecf20Sopenharmony_ci * UNIPERIF_ITS reg 1098c2ecf20Sopenharmony_ci */ 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_OFFSET(ip) 0x000C 1128c2ecf20Sopenharmony_ci#define GET_UNIPERIF_ITS(ip) \ 1138c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_ITS_OFFSET(ip)) 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_ci/* MEM_BLK_READ */ 1168c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_MEM_BLK_READ_SHIFT(ip) 5 1178c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_MEM_BLK_READ_MASK(ip) \ 1188c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITS_MEM_BLK_READ_SHIFT(ip))) 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci/* FIFO_ERROR */ 1218c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_FIFO_ERROR_SHIFT(ip) \ 1228c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 1238c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_FIFO_ERROR_MASK(ip) \ 1248c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITS_FIFO_ERROR_SHIFT(ip))) 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_ci/* DMA_ERROR */ 1278c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_DMA_ERROR_SHIFT(ip) 9 1288c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_DMA_ERROR_MASK(ip) \ 1298c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITS_DMA_ERROR_SHIFT(ip))) 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci/* UNDERFLOW_REC_DONE */ 1328c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_UNDERFLOW_REC_DONE_SHIFT(ip) \ 1338c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12) 1348c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_UNDERFLOW_REC_DONE_MASK(ip) \ 1358c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 1368c2ecf20Sopenharmony_ci 0 : (BIT(UNIPERIF_ITS_UNDERFLOW_REC_DONE_SHIFT(ip)))) 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ci/* UNDERFLOW_REC_FAILED */ 1398c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_UNDERFLOW_REC_FAILED_SHIFT(ip) \ 1408c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13) 1418c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_UNDERFLOW_REC_FAILED_MASK(ip) \ 1428c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 1438c2ecf20Sopenharmony_ci 0 : (BIT(UNIPERIF_ITS_UNDERFLOW_REC_FAILED_SHIFT(ip)))) 1448c2ecf20Sopenharmony_ci 1458c2ecf20Sopenharmony_ci/* 1468c2ecf20Sopenharmony_ci * UNIPERIF_ITS_BCLR reg 1478c2ecf20Sopenharmony_ci */ 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci/* FIFO_ERROR */ 1508c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_BCLR_FIFO_ERROR_SHIFT(ip) \ 1518c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 1528c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_BCLR_FIFO_ERROR_MASK(ip) \ 1538c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITS_BCLR_FIFO_ERROR_SHIFT(ip))) 1548c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITS_BCLR_FIFO_ERROR(ip) \ 1558c2ecf20Sopenharmony_ci SET_UNIPERIF_ITS_BCLR(ip, \ 1568c2ecf20Sopenharmony_ci UNIPERIF_ITS_BCLR_FIFO_ERROR_MASK(ip)) 1578c2ecf20Sopenharmony_ci 1588c2ecf20Sopenharmony_ci#define UNIPERIF_ITS_BCLR_OFFSET(ip) 0x0010 1598c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITS_BCLR(ip, value) \ 1608c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_ITS_BCLR_OFFSET(ip)) 1618c2ecf20Sopenharmony_ci 1628c2ecf20Sopenharmony_ci/* 1638c2ecf20Sopenharmony_ci * UNIPERIF_ITM reg 1648c2ecf20Sopenharmony_ci */ 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_OFFSET(ip) 0x0018 1678c2ecf20Sopenharmony_ci#define GET_UNIPERIF_ITM(ip) \ 1688c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_ITM_OFFSET(ip)) 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_ci/* FIFO_ERROR */ 1718c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_FIFO_ERROR_SHIFT(ip) \ 1728c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 1738c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_FIFO_ERROR_MASK(ip) \ 1748c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITM_FIFO_ERROR_SHIFT(ip))) 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_ci/* UNDERFLOW_REC_DONE */ 1778c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_UNDERFLOW_REC_DONE_SHIFT(ip) \ 1788c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12) 1798c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_UNDERFLOW_REC_DONE_MASK(ip) \ 1808c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 1818c2ecf20Sopenharmony_ci 0 : (BIT(UNIPERIF_ITM_UNDERFLOW_REC_DONE_SHIFT(ip)))) 1828c2ecf20Sopenharmony_ci 1838c2ecf20Sopenharmony_ci/* UNDERFLOW_REC_FAILED */ 1848c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_UNDERFLOW_REC_FAILED_SHIFT(ip) \ 1858c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13) 1868c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_UNDERFLOW_REC_FAILED_MASK(ip) \ 1878c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 1888c2ecf20Sopenharmony_ci 0 : (BIT(UNIPERIF_ITM_UNDERFLOW_REC_FAILED_SHIFT(ip)))) 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_ci/* 1918c2ecf20Sopenharmony_ci * UNIPERIF_ITM_BCLR reg 1928c2ecf20Sopenharmony_ci */ 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BCLR_OFFSET(ip) 0x001c 1958c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITM_BCLR(ip, value) \ 1968c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_ITM_BCLR_OFFSET(ip)) 1978c2ecf20Sopenharmony_ci 1988c2ecf20Sopenharmony_ci/* FIFO_ERROR */ 1998c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BCLR_FIFO_ERROR_SHIFT(ip) \ 2008c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 2018c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BCLR_FIFO_ERROR_MASK(ip) \ 2028c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITM_BCLR_FIFO_ERROR_SHIFT(ip))) 2038c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITM_BCLR_FIFO_ERROR(ip) \ 2048c2ecf20Sopenharmony_ci SET_UNIPERIF_ITM_BCLR(ip, \ 2058c2ecf20Sopenharmony_ci UNIPERIF_ITM_BCLR_FIFO_ERROR_MASK(ip)) 2068c2ecf20Sopenharmony_ci 2078c2ecf20Sopenharmony_ci/* DMA_ERROR */ 2088c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BCLR_DMA_ERROR_SHIFT(ip) 9 2098c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BCLR_DMA_ERROR_MASK(ip) \ 2108c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITM_BCLR_DMA_ERROR_SHIFT(ip))) 2118c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITM_BCLR_DMA_ERROR(ip) \ 2128c2ecf20Sopenharmony_ci SET_UNIPERIF_ITM_BCLR(ip, \ 2138c2ecf20Sopenharmony_ci UNIPERIF_ITM_BCLR_DMA_ERROR_MASK(ip)) 2148c2ecf20Sopenharmony_ci 2158c2ecf20Sopenharmony_ci/* 2168c2ecf20Sopenharmony_ci * UNIPERIF_ITM_BSET reg 2178c2ecf20Sopenharmony_ci */ 2188c2ecf20Sopenharmony_ci 2198c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_OFFSET(ip) 0x0020 2208c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITM_BSET(ip, value) \ 2218c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_ITM_BSET_OFFSET(ip)) 2228c2ecf20Sopenharmony_ci 2238c2ecf20Sopenharmony_ci/* FIFO_ERROR */ 2248c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_FIFO_ERROR_SHIFT(ip) \ 2258c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 2268c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_FIFO_ERROR_MASK(ip) \ 2278c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITM_BSET_FIFO_ERROR_SHIFT(ip))) 2288c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITM_BSET_FIFO_ERROR(ip) \ 2298c2ecf20Sopenharmony_ci SET_UNIPERIF_ITM_BSET(ip, \ 2308c2ecf20Sopenharmony_ci UNIPERIF_ITM_BSET_FIFO_ERROR_MASK(ip)) 2318c2ecf20Sopenharmony_ci 2328c2ecf20Sopenharmony_ci/* MEM_BLK_READ */ 2338c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_MEM_BLK_READ_SHIFT(ip) 5 2348c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_MEM_BLK_READ_MASK(ip) \ 2358c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITM_BSET_MEM_BLK_READ_SHIFT(ip))) 2368c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITM_BSET_MEM_BLK_READ(ip) \ 2378c2ecf20Sopenharmony_ci SET_UNIPERIF_ITM_BSET(ip, \ 2388c2ecf20Sopenharmony_ci UNIPERIF_ITM_BSET_MEM_BLK_READ_MASK(ip)) 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_ci/* DMA_ERROR */ 2418c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_DMA_ERROR_SHIFT(ip) 9 2428c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_DMA_ERROR_MASK(ip) \ 2438c2ecf20Sopenharmony_ci (BIT(UNIPERIF_ITM_BSET_DMA_ERROR_SHIFT(ip))) 2448c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITM_BSET_DMA_ERROR(ip) \ 2458c2ecf20Sopenharmony_ci SET_UNIPERIF_ITM_BSET(ip, \ 2468c2ecf20Sopenharmony_ci UNIPERIF_ITM_BSET_DMA_ERROR_MASK(ip)) 2478c2ecf20Sopenharmony_ci 2488c2ecf20Sopenharmony_ci/* UNDERFLOW_REC_DONE */ 2498c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_SHIFT(ip) \ 2508c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12) 2518c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_MASK(ip) \ 2528c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 2538c2ecf20Sopenharmony_ci 0 : (BIT(UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_SHIFT(ip)))) 2548c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE(ip) \ 2558c2ecf20Sopenharmony_ci SET_UNIPERIF_ITM_BSET(ip, \ 2568c2ecf20Sopenharmony_ci UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_MASK(ip)) 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_ci/* UNDERFLOW_REC_FAILED */ 2598c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_SHIFT(ip) \ 2608c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13) 2618c2ecf20Sopenharmony_ci#define UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_MASK(ip) \ 2628c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 2638c2ecf20Sopenharmony_ci 0 : (BIT(UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_SHIFT(ip)))) 2648c2ecf20Sopenharmony_ci#define SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED(ip) \ 2658c2ecf20Sopenharmony_ci SET_UNIPERIF_ITM_BSET(ip, \ 2668c2ecf20Sopenharmony_ci UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_MASK(ip)) 2678c2ecf20Sopenharmony_ci 2688c2ecf20Sopenharmony_ci/* 2698c2ecf20Sopenharmony_ci * UNIPERIF_CONFIG reg 2708c2ecf20Sopenharmony_ci */ 2718c2ecf20Sopenharmony_ci 2728c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_OFFSET(ip) 0x0040 2738c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG(ip) \ 2748c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CONFIG_OFFSET(ip)) 2758c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG(ip, value) \ 2768c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_CONFIG_OFFSET(ip)) 2778c2ecf20Sopenharmony_ci 2788c2ecf20Sopenharmony_ci/* PARITY_CNTR */ 2798c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip) 0 2808c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip) 0x1 2818c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_PARITY_CNTR(ip) \ 2828c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 2838c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 2848c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \ 2858c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip)) 2868c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_PARITY_CNTR_BY_HW(ip) \ 2878c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 2888c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 2898c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \ 2908c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip), 0) 2918c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_PARITY_CNTR_BY_SW(ip) \ 2928c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 2938c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 2948c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \ 2958c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip), 1) 2968c2ecf20Sopenharmony_ci 2978c2ecf20Sopenharmony_ci/* CHANNEL_STA_CNTR */ 2988c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip) 1 2998c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip) 0x1 3008c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR(ip) \ 3018c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 3028c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3038c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \ 3048c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip)) 3058c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR_BY_SW(ip) \ 3068c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 3078c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3088c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \ 3098c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip), 0) 3108c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR_BY_HW(ip) \ 3118c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 3128c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3138c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \ 3148c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip), 1) 3158c2ecf20Sopenharmony_ci 3168c2ecf20Sopenharmony_ci/* USER_DAT_CNTR */ 3178c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip) 2 3188c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip) 0x1 3198c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_USER_DAT_CNTR(ip) \ 3208c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 3218c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3228c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \ 3238c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip)) 3248c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_USER_DAT_CNTR_BY_HW(ip) \ 3258c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 3268c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3278c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \ 3288c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip), 1) 3298c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_USER_DAT_CNTR_BY_SW(ip) \ 3308c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 3318c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3328c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \ 3338c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip), 0) 3348c2ecf20Sopenharmony_ci 3358c2ecf20Sopenharmony_ci/* VALIDITY_DAT_CNTR */ 3368c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip) 3 3378c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip) 0x1 3388c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR(ip) \ 3398c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 3408c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3418c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \ 3428c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip)) 3438c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_BY_SW(ip) \ 3448c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 3458c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3468c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \ 3478c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip), 0) 3488c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_BY_HW(ip) \ 3498c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 3508c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3518c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \ 3528c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip), 1) 3538c2ecf20Sopenharmony_ci 3548c2ecf20Sopenharmony_ci/* ONE_BIT_AUD_SUPPORT */ 3558c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip) 4 3568c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip) 0x1 3578c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_ONE_BIT_AUD(ip) \ 3588c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 3598c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3608c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \ 3618c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip)) 3628c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_ONE_BIT_AUD_DISABLE(ip) \ 3638c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 3648c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3658c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \ 3668c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip), 0) 3678c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_ONE_BIT_AUD_ENABLE(ip) \ 3688c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 3698c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3708c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \ 3718c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip), 1) 3728c2ecf20Sopenharmony_ci 3738c2ecf20Sopenharmony_ci/* MEMORY_FMT */ 3748c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip) 5 3758c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_MEM_FMT_MASK(ip) 0x1 3768c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CONFIG_MEM_FMT_16_0(ip) 0 3778c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CONFIG_MEM_FMT_16_16(ip) 1 3788c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_MEM_FMT(ip) \ 3798c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 3808c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3818c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip), \ 3828c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MEM_FMT_MASK(ip)) 3838c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_MEM_FMT(ip, value) \ 3848c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 3858c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 3868c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip), \ 3878c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MEM_FMT_MASK(ip), value) 3888c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_MEM_FMT_16_0(ip) \ 3898c2ecf20Sopenharmony_ci SET_UNIPERIF_CONFIG_MEM_FMT(ip, \ 3908c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CONFIG_MEM_FMT_16_0(ip)) 3918c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_MEM_FMT_16_16(ip) \ 3928c2ecf20Sopenharmony_ci SET_UNIPERIF_CONFIG_MEM_FMT(ip, \ 3938c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CONFIG_MEM_FMT_16_16(ip)) 3948c2ecf20Sopenharmony_ci 3958c2ecf20Sopenharmony_ci/* REPEAT_CHL_STS */ 3968c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip) 6 3978c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip) 0x1 3988c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_REPEAT_CHL_STS(ip) \ 3998c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 4008c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4018c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \ 4028c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip)) 4038c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_REPEAT_CHL_STS_ENABLE(ip) \ 4048c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4058c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4068c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \ 4078c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip), 0) 4088c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_REPEAT_CHL_STS_DISABLE(ip) \ 4098c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4108c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4118c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \ 4128c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip), 1) 4138c2ecf20Sopenharmony_ci 4148c2ecf20Sopenharmony_ci/* BACK_STALL_REQ */ 4158c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip) \ 4168c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 7 : -1) 4178c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip) 0x1 4188c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_BACK_STALL_REQ(ip) \ 4198c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 4208c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4218c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \ 4228c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip)) 4238c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_BACK_STALL_REQ_DISABLE(ip) \ 4248c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4258c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4268c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \ 4278c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip), 0) 4288c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_BACK_STALL_REQ_ENABLE(ip) \ 4298c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4308c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4318c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \ 4328c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip), 1) 4338c2ecf20Sopenharmony_ci 4348c2ecf20Sopenharmony_ci/* FDMA_TRIGGER_LIMIT */ 4358c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip) 8 4368c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip) 0x7F 4378c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_DMA_TRIG_LIMIT(ip) \ 4388c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 4398c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4408c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip), \ 4418c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip)) 4428c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_DMA_TRIG_LIMIT(ip, value) \ 4438c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4448c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4458c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip), \ 4468c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip), value) 4478c2ecf20Sopenharmony_ci 4488c2ecf20Sopenharmony_ci/* CHL_STS_UPDATE */ 4498c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip) \ 4508c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 16 : -1) 4518c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip) 0x1 4528c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_CHL_STS_UPDATE(ip) \ 4538c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 4548c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4558c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip), \ 4568c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip)) 4578c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_CHL_STS_UPDATE(ip) \ 4588c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4598c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4608c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip), \ 4618c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip), 1) 4628c2ecf20Sopenharmony_ci 4638c2ecf20Sopenharmony_ci/* IDLE_MOD */ 4648c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip) 18 4658c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_IDLE_MOD_MASK(ip) 0x1 4668c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_IDLE_MOD(ip) \ 4678c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 4688c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4698c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \ 4708c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_IDLE_MOD_MASK(ip)) 4718c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_IDLE_MOD_DISABLE(ip) \ 4728c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4738c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4748c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \ 4758c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_IDLE_MOD_MASK(ip), 0) 4768c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_IDLE_MOD_ENABLE(ip) \ 4778c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4788c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4798c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \ 4808c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_IDLE_MOD_MASK(ip), 1) 4818c2ecf20Sopenharmony_ci 4828c2ecf20Sopenharmony_ci/* SUBFRAME_SELECTION */ 4838c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip) 19 4848c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip) 0x1 4858c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_SUBFRAME_SEL(ip) \ 4868c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 4878c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4888c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \ 4898c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip)) 4908c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_SUBFRAME_SEL_SUBF1_SUBF0(ip) \ 4918c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4928c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4938c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \ 4948c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip), 1) 4958c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_SUBFRAME_SEL_SUBF0_SUBF1(ip) \ 4968c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 4978c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 4988c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \ 4998c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip), 0) 5008c2ecf20Sopenharmony_ci 5018c2ecf20Sopenharmony_ci/* FULL_SW_CONTROL */ 5028c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip) 20 5038c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip) 0x1 5048c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_SPDIF_SW_CTRL(ip) \ 5058c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 5068c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 5078c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \ 5088c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip)) 5098c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_SPDIF_SW_CTRL_ENABLE(ip) \ 5108c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5118c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 5128c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \ 5138c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip), 1) 5148c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_SPDIF_SW_CTRL_DISABLE(ip) \ 5158c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5168c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 5178c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \ 5188c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip), 0) 5198c2ecf20Sopenharmony_ci 5208c2ecf20Sopenharmony_ci/* MASTER_CLKEDGE */ 5218c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip) \ 5228c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 24 : -1) 5238c2ecf20Sopenharmony_ci#define UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip) 0x1 5248c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CONFIG_MSTR_CLKEDGE(ip) \ 5258c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 5268c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 5278c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \ 5288c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip)) 5298c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_MSTR_CLKEDGE_FALLING(ip) \ 5308c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5318c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 5328c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \ 5338c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip), 1) 5348c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CONFIG_MSTR_CLKEDGE_RISING(ip) \ 5358c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5368c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_OFFSET(ip), \ 5378c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \ 5388c2ecf20Sopenharmony_ci UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip), 0) 5398c2ecf20Sopenharmony_ci 5408c2ecf20Sopenharmony_ci/* 5418c2ecf20Sopenharmony_ci * UNIPERIF_CTRL reg 5428c2ecf20Sopenharmony_ci */ 5438c2ecf20Sopenharmony_ci 5448c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_OFFSET(ip) 0x0044 5458c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL(ip) \ 5468c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CTRL_OFFSET(ip)) 5478c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL(ip, value) \ 5488c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_CTRL_OFFSET(ip)) 5498c2ecf20Sopenharmony_ci 5508c2ecf20Sopenharmony_ci/* OPERATION */ 5518c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_OPERATION_SHIFT(ip) 0 5528c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_OPERATION_MASK(ip) 0x7 5538c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_OPERATION(ip) \ 5548c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 5558c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 5568c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 5578c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_MASK(ip)) 5588c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CTRL_OPERATION_OFF(ip) 0 5598c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_OPERATION_OFF(ip) \ 5608c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5618c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 5628c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 5638c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_MASK(ip), \ 5648c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CTRL_OPERATION_OFF(ip)) 5658c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip) \ 5668c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 1 : -1) 5678c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip) \ 5688c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5698c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 5708c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 5718c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_MASK(ip), \ 5728c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip)) 5738c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip) \ 5748c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 2 : -1) 5758c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip) \ 5768c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5778c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 5788c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 5798c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_MASK(ip), \ 5808c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip)) 5818c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip) 3 5828c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip) \ 5838c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5848c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 5858c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 5868c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_MASK(ip), \ 5878c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip)) 5888c2ecf20Sopenharmony_ci/* This is the same as above! */ 5898c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip) 3 5908c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip) \ 5918c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5928c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 5938c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 5948c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_MASK(ip), \ 5958c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip)) 5968c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip) 4 5978c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip) \ 5988c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 5998c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6008c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 6018c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_MASK(ip), \ 6028c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip)) 6038c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CTRL_OPERATION_CD_DATA(ip) \ 6048c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 5 : -1) 6058c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_OPERATION_CD_DATA(ip) \ 6068c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 6078c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6088c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 6098c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_MASK(ip), \ 6108c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CTRL_OPERATION_CD_DATA(ip)) 6118c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_CTRL_OPERATION_STANDBY(ip) \ 6128c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 7) 6138c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_OPERATION_STANDBY(ip) \ 6148c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 6158c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6168c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 6178c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OPERATION_MASK(ip), \ 6188c2ecf20Sopenharmony_ci VALUE_UNIPERIF_CTRL_OPERATION_STANDBY(ip)) 6198c2ecf20Sopenharmony_ci 6208c2ecf20Sopenharmony_ci/* EXIT_STBY_ON_EOBLOCK */ 6218c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip) \ 6228c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 3) 6238c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip) 0x1 6248c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK(ip) \ 6258c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 6268c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6278c2ecf20Sopenharmony_ci UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \ 6288c2ecf20Sopenharmony_ci UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip)) 6298c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_OFF(ip) \ 6308c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 6318c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6328c2ecf20Sopenharmony_ci UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \ 6338c2ecf20Sopenharmony_ci UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip), 0) 6348c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_ON(ip) \ 6358c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 6368c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6378c2ecf20Sopenharmony_ci UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \ 6388c2ecf20Sopenharmony_ci UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip), 1) 6398c2ecf20Sopenharmony_ci 6408c2ecf20Sopenharmony_ci/* ROUNDING */ 6418c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_ROUNDING_SHIFT(ip) 4 6428c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_ROUNDING_MASK(ip) 0x1 6438c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_ROUNDING(ip) \ 6448c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 6458c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6468c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \ 6478c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ROUNDING_MASK(ip)) 6488c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_ROUNDING_OFF(ip) \ 6498c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 6508c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6518c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \ 6528c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ROUNDING_MASK(ip), 0) 6538c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_ROUNDING_ON(ip) \ 6548c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 6558c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6568c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \ 6578c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ROUNDING_MASK(ip), 1) 6588c2ecf20Sopenharmony_ci 6598c2ecf20Sopenharmony_ci/* DIVIDER */ 6608c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_DIVIDER_SHIFT(ip) 5 6618c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_DIVIDER_MASK(ip) 0xff 6628c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_DIVIDER(ip) \ 6638c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 6648c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6658c2ecf20Sopenharmony_ci UNIPERIF_CTRL_DIVIDER_SHIFT(ip), \ 6668c2ecf20Sopenharmony_ci UNIPERIF_CTRL_DIVIDER_MASK(ip)) 6678c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_DIVIDER(ip, value) \ 6688c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 6698c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6708c2ecf20Sopenharmony_ci UNIPERIF_CTRL_DIVIDER_SHIFT(ip), \ 6718c2ecf20Sopenharmony_ci UNIPERIF_CTRL_DIVIDER_MASK(ip), value) 6728c2ecf20Sopenharmony_ci 6738c2ecf20Sopenharmony_ci/* BYTE_SWAP */ 6748c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip) \ 6758c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 13 : -1) 6768c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_BYTE_SWP_MASK(ip) 0x1 6778c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_BYTE_SWP(ip) \ 6788c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 6798c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6808c2ecf20Sopenharmony_ci UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \ 6818c2ecf20Sopenharmony_ci UNIPERIF_CTRL_BYTE_SWP_MASK(ip)) 6828c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_BYTE_SWP_OFF(ip) \ 6838c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 6848c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6858c2ecf20Sopenharmony_ci UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \ 6868c2ecf20Sopenharmony_ci UNIPERIF_CTRL_BYTE_SWP_MASK(ip), 0) 6878c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_BYTE_SWP_ON(ip) \ 6888c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 6898c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 6908c2ecf20Sopenharmony_ci UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \ 6918c2ecf20Sopenharmony_ci UNIPERIF_CTRL_BYTE_SWP_MASK(ip), 1) 6928c2ecf20Sopenharmony_ci 6938c2ecf20Sopenharmony_ci/* ZERO_STUFFING_HW_SW */ 6948c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip) \ 6958c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 14 : -1) 6968c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_ZERO_STUFF_MASK(ip) 0x1 6978c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_ZERO_STUFF(ip) \ 6988c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 6998c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7008c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \ 7018c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ZERO_STUFF_MASK(ip)) 7028c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_ZERO_STUFF_HW(ip) \ 7038c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 7048c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7058c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \ 7068c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ZERO_STUFF_MASK(ip), 1) 7078c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_ZERO_STUFF_SW(ip) \ 7088c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 7098c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7108c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \ 7118c2ecf20Sopenharmony_ci UNIPERIF_CTRL_ZERO_STUFF_MASK(ip), 0) 7128c2ecf20Sopenharmony_ci 7138c2ecf20Sopenharmony_ci/* SPDIF_LAT */ 7148c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip) \ 7158c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 16 : -1) 7168c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_SPDIF_LAT_MASK(ip) 0x1 7178c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_SPDIF_LAT(ip) \ 7188c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 7198c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7208c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \ 7218c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_LAT_MASK(ip)) 7228c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_SPDIF_LAT_ON(ip) \ 7238c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 7248c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7258c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \ 7268c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_LAT_MASK(ip), 1) 7278c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_SPDIF_LAT_OFF(ip) \ 7288c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 7298c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7308c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \ 7318c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_LAT_MASK(ip), 0) 7328c2ecf20Sopenharmony_ci 7338c2ecf20Sopenharmony_ci/* EN_SPDIF_FORMATTING */ 7348c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip) 17 7358c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_SPDIF_FMT_MASK(ip) 0x1 7368c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_SPDIF_FMT(ip) \ 7378c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 7388c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7398c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \ 7408c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_FMT_MASK(ip)) 7418c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_SPDIF_FMT_ON(ip) \ 7428c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 7438c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7448c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \ 7458c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_FMT_MASK(ip), 1) 7468c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_SPDIF_FMT_OFF(ip) \ 7478c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 7488c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7498c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \ 7508c2ecf20Sopenharmony_ci UNIPERIF_CTRL_SPDIF_FMT_MASK(ip), 0) 7518c2ecf20Sopenharmony_ci 7528c2ecf20Sopenharmony_ci/* READER_OUT_SELECT */ 7538c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip) \ 7548c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 18 : -1) 7558c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip) 0x1 7568c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_READER_OUT_SEL(ip) \ 7578c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 7588c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7598c2ecf20Sopenharmony_ci UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \ 7608c2ecf20Sopenharmony_ci UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip)) 7618c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_READER_OUT_SEL_IN_MEM(ip) \ 7628c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 7638c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7648c2ecf20Sopenharmony_ci UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \ 7658c2ecf20Sopenharmony_ci UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip), 0) 7668c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_READER_OUT_SEL_ON_I2S_LINE(ip) \ 7678c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 7688c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7698c2ecf20Sopenharmony_ci UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \ 7708c2ecf20Sopenharmony_ci UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip), 1) 7718c2ecf20Sopenharmony_ci 7728c2ecf20Sopenharmony_ci/* UNDERFLOW_REC_WINDOW */ 7738c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip) 20 7748c2ecf20Sopenharmony_ci#define UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip) 0xff 7758c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW(ip) \ 7768c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 7778c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7788c2ecf20Sopenharmony_ci UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip), \ 7798c2ecf20Sopenharmony_ci UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip)) 7808c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW(ip, value) \ 7818c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 7828c2ecf20Sopenharmony_ci UNIPERIF_CTRL_OFFSET(ip), \ 7838c2ecf20Sopenharmony_ci UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip), \ 7848c2ecf20Sopenharmony_ci UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip), value) 7858c2ecf20Sopenharmony_ci 7868c2ecf20Sopenharmony_ci/* 7878c2ecf20Sopenharmony_ci * UNIPERIF_I2S_FMT a.k.a UNIPERIF_FORMAT reg 7888c2ecf20Sopenharmony_ci */ 7898c2ecf20Sopenharmony_ci 7908c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_OFFSET(ip) 0x0048 7918c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT(ip) \ 7928c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_I2S_FMT_OFFSET(ip)) 7938c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT(ip, value) \ 7948c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_I2S_FMT_OFFSET(ip)) 7958c2ecf20Sopenharmony_ci 7968c2ecf20Sopenharmony_ci/* NBIT */ 7978c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_NBIT_SHIFT(ip) 0 7988c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_NBIT_MASK(ip) 0x1 7998c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT_NBIT(ip) \ 8008c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 8018c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8028c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \ 8038c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NBIT_MASK(ip)) 8048c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_NBIT_32(ip) \ 8058c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8068c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8078c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \ 8088c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NBIT_MASK(ip), 0) 8098c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_NBIT_16(ip) \ 8108c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8118c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8128c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \ 8138c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NBIT_MASK(ip), 1) 8148c2ecf20Sopenharmony_ci 8158c2ecf20Sopenharmony_ci/* DATA_SIZE */ 8168c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip) 1 8178c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip) 0x7 8188c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT_DATA_SIZE(ip) \ 8198c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 8208c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8218c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 8228c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip)) 8238c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_DATA_SIZE_16(ip) \ 8248c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8258c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8268c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 8278c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 0) 8288c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_DATA_SIZE_18(ip) \ 8298c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8308c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8318c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 8328c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 1) 8338c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_DATA_SIZE_20(ip) \ 8348c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8358c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8368c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 8378c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 2) 8388c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_DATA_SIZE_24(ip) \ 8398c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8408c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8418c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 8428c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 3) 8438c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMTL_DATA_SIZE_28(ip) \ 8448c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8458c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8468c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 8478c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 4) 8488c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_DATA_SIZE_32(ip) \ 8498c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8508c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8518c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 8528c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 5) 8538c2ecf20Sopenharmony_ci 8548c2ecf20Sopenharmony_ci/* LR_POL */ 8558c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip) 4 8568c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_LR_POL_MASK(ip) 0x1 8578c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_I2S_FMT_LR_POL_LOW(ip) 0x0 8588c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_I2S_FMT_LR_POL_HIG(ip) 0x1 8598c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT_LR_POL(ip) \ 8608c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 8618c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8628c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip), \ 8638c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_LR_POL_MASK(ip)) 8648c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_LR_POL(ip, value) \ 8658c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8668c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8678c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip), \ 8688c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_LR_POL_MASK(ip), value) 8698c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_LR_POL_LOW(ip) \ 8708c2ecf20Sopenharmony_ci SET_UNIPERIF_I2S_FMT_LR_POL(ip, \ 8718c2ecf20Sopenharmony_ci VALUE_UNIPERIF_I2S_FMT_LR_POL_LOW(ip)) 8728c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_LR_POL_HIG(ip) \ 8738c2ecf20Sopenharmony_ci SET_UNIPERIF_I2S_FMT_LR_POL(ip, \ 8748c2ecf20Sopenharmony_ci VALUE_UNIPERIF_I2S_FMT_LR_POL_HIG(ip)) 8758c2ecf20Sopenharmony_ci 8768c2ecf20Sopenharmony_ci/* SCLK_EDGE */ 8778c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip) 5 8788c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip) 0x1 8798c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT_SCLK_EDGE(ip) \ 8808c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 8818c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8828c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \ 8838c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip)) 8848c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_SCLK_EDGE_RISING(ip) \ 8858c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8868c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8878c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \ 8888c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip), 0) 8898c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_SCLK_EDGE_FALLING(ip) \ 8908c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 8918c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 8928c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \ 8938c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip), 1) 8948c2ecf20Sopenharmony_ci 8958c2ecf20Sopenharmony_ci/* PADDING */ 8968c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_PADDING_SHIFT(ip) 6 8978c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_PADDING_MASK(ip) 0x1 8988c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_PADDING_MASK(ip) 0x1 8998c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip) 0x0 9008c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip) 0x1 9018c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT_PADDING(ip) \ 9028c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 9038c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9048c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_PADDING_SHIFT(ip), \ 9058c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_PADDING_MASK(ip)) 9068c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_PADDING(ip, value) \ 9078c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 9088c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9098c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_PADDING_SHIFT(ip), \ 9108c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_PADDING_MASK(ip), value) 9118c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip) \ 9128c2ecf20Sopenharmony_ci SET_UNIPERIF_I2S_FMT_PADDING(ip, \ 9138c2ecf20Sopenharmony_ci VALUE_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip)) 9148c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip) \ 9158c2ecf20Sopenharmony_ci SET_UNIPERIF_I2S_FMT_PADDING(ip, \ 9168c2ecf20Sopenharmony_ci VALUE_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip)) 9178c2ecf20Sopenharmony_ci 9188c2ecf20Sopenharmony_ci/* ALIGN */ 9198c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip) 7 9208c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_ALIGN_MASK(ip) 0x1 9218c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT_ALIGN(ip) \ 9228c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 9238c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9248c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \ 9258c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ALIGN_MASK(ip)) 9268c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_ALIGN_LEFT(ip) \ 9278c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 9288c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9298c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \ 9308c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ALIGN_MASK(ip), 0) 9318c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_ALIGN_RIGHT(ip) \ 9328c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 9338c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9348c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \ 9358c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ALIGN_MASK(ip), 1) 9368c2ecf20Sopenharmony_ci 9378c2ecf20Sopenharmony_ci/* ORDER */ 9388c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_ORDER_SHIFT(ip) 8 9398c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_ORDER_MASK(ip) 0x1 9408c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT_ORDER(ip) \ 9418c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 9428c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9438c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \ 9448c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ORDER_MASK(ip)) 9458c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_ORDER_LSB(ip) \ 9468c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 9478c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9488c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \ 9498c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ORDER_MASK(ip), 0) 9508c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_ORDER_MSB(ip) \ 9518c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 9528c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9538c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \ 9548c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_ORDER_MASK(ip), 1) 9558c2ecf20Sopenharmony_ci 9568c2ecf20Sopenharmony_ci/* NUM_CH */ 9578c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip) 9 9588c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_NUM_CH_MASK(ip) 0x7 9598c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT_NUM_CH(ip) \ 9608c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 9618c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9628c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip), \ 9638c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NUM_CH_MASK(ip)) 9648c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_NUM_CH(ip, value) \ 9658c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 9668c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9678c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip), \ 9688c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NUM_CH_MASK(ip), value) 9698c2ecf20Sopenharmony_ci 9708c2ecf20Sopenharmony_ci/* NO_OF_SAMPLES_TO_READ */ 9718c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip) 12 9728c2ecf20Sopenharmony_ci#define UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip) 0xfffff 9738c2ecf20Sopenharmony_ci#define GET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(ip) \ 9748c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 9758c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9768c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip), \ 9778c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip)) 9788c2ecf20Sopenharmony_ci#define SET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(ip, value) \ 9798c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 9808c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_OFFSET(ip), \ 9818c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip), \ 9828c2ecf20Sopenharmony_ci UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip), value) 9838c2ecf20Sopenharmony_ci 9848c2ecf20Sopenharmony_ci/* 9858c2ecf20Sopenharmony_ci * UNIPERIF_BIT_CONTROL reg 9868c2ecf20Sopenharmony_ci */ 9878c2ecf20Sopenharmony_ci 9888c2ecf20Sopenharmony_ci#define UNIPERIF_BIT_CONTROL_OFFSET(ip) \ 9898c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0x004c) 9908c2ecf20Sopenharmony_ci#define GET_UNIPERIF_BIT_CONTROL(ip) \ 9918c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_BIT_CONTROL_OFFSET(ip)) 9928c2ecf20Sopenharmony_ci#define SET_UNIPERIF_BIT_CONTROL(ip, value) \ 9938c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_BIT_CONTROL_OFFSET(ip)) 9948c2ecf20Sopenharmony_ci 9958c2ecf20Sopenharmony_ci/* CLR_UNDERFLOW_DURATION */ 9968c2ecf20Sopenharmony_ci#define UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip) 0 9978c2ecf20Sopenharmony_ci#define UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip) 0x1 9988c2ecf20Sopenharmony_ci#define GET_UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION(ip) \ 9998c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 10008c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_OFFSET(ip), \ 10018c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip), \ 10028c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip)) 10038c2ecf20Sopenharmony_ci#define SET_UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION(ip) \ 10048c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 10058c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_OFFSET(ip), \ 10068c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip), \ 10078c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip), 1) 10088c2ecf20Sopenharmony_ci 10098c2ecf20Sopenharmony_ci/* CHL_STS_UPDATE */ 10108c2ecf20Sopenharmony_ci#define UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip) 1 10118c2ecf20Sopenharmony_ci#define UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip) 0x1 10128c2ecf20Sopenharmony_ci#define GET_UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE(ip) \ 10138c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 10148c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_OFFSET(ip), \ 10158c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip), \ 10168c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip)) 10178c2ecf20Sopenharmony_ci#define SET_UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE(ip) \ 10188c2ecf20Sopenharmony_ci SET_UNIPERIF_BIT_REG(ip, \ 10198c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_OFFSET(ip), \ 10208c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip), \ 10218c2ecf20Sopenharmony_ci UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip), 1) 10228c2ecf20Sopenharmony_ci 10238c2ecf20Sopenharmony_ci/* 10248c2ecf20Sopenharmony_ci * UNIPERIF_STATUS_1 reg 10258c2ecf20Sopenharmony_ci */ 10268c2ecf20Sopenharmony_ci 10278c2ecf20Sopenharmony_ci#define UNIPERIF_STATUS_1_OFFSET(ip) 0x0050 10288c2ecf20Sopenharmony_ci#define GET_UNIPERIF_STATUS_1(ip) \ 10298c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_STATUS_1_OFFSET(ip)) 10308c2ecf20Sopenharmony_ci#define SET_UNIPERIF_STATUS_1(ip, value) \ 10318c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_STATUS_1_OFFSET(ip)) 10328c2ecf20Sopenharmony_ci 10338c2ecf20Sopenharmony_ci/* UNDERFLOW_DURATION */ 10348c2ecf20Sopenharmony_ci#define UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip) \ 10358c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0) 10368c2ecf20Sopenharmony_ci#define UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip) 0xff 10378c2ecf20Sopenharmony_ci#define GET_UNIPERIF_STATUS_1_UNDERFLOW_DURATION(ip) \ 10388c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 10398c2ecf20Sopenharmony_ci UNIPERIF_STATUS_1_OFFSET(ip), \ 10408c2ecf20Sopenharmony_ci UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip), \ 10418c2ecf20Sopenharmony_ci UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip)) 10428c2ecf20Sopenharmony_ci#define SET_UNIPERIF_STATUS_1_UNDERFLOW_DURATION(ip, value) \ 10438c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 10448c2ecf20Sopenharmony_ci UNIPERIF_STATUS_1_OFFSET(ip), \ 10458c2ecf20Sopenharmony_ci UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip), \ 10468c2ecf20Sopenharmony_ci UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip), value) 10478c2ecf20Sopenharmony_ci 10488c2ecf20Sopenharmony_ci/* 10498c2ecf20Sopenharmony_ci * UNIPERIF_CHANNEL_STA_REGN reg 10508c2ecf20Sopenharmony_ci */ 10518c2ecf20Sopenharmony_ci 10528c2ecf20Sopenharmony_ci#define UNIPERIF_CHANNEL_STA_REGN(ip, n) (0x0060 + (4 * n)) 10538c2ecf20Sopenharmony_ci#define GET_UNIPERIF_CHANNEL_STA_REGN(ip) \ 10548c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REGN(ip, n)) 10558c2ecf20Sopenharmony_ci#define SET_UNIPERIF_CHANNEL_STA_REGN(ip, n, value) \ 10568c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + \ 10578c2ecf20Sopenharmony_ci UNIPERIF_CHANNEL_STA_REGN(ip, n)) 10588c2ecf20Sopenharmony_ci 10598c2ecf20Sopenharmony_ci/* 10608c2ecf20Sopenharmony_ci * UNIPERIF_USER_VALIDITY reg 10618c2ecf20Sopenharmony_ci */ 10628c2ecf20Sopenharmony_ci 10638c2ecf20Sopenharmony_ci#define UNIPERIF_USER_VALIDITY_OFFSET(ip) 0x0090 10648c2ecf20Sopenharmony_ci#define GET_UNIPERIF_USER_VALIDITY(ip) \ 10658c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_USER_VALIDITY_OFFSET(ip)) 10668c2ecf20Sopenharmony_ci#define SET_UNIPERIF_USER_VALIDITY(ip, value) \ 10678c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_USER_VALIDITY_OFFSET(ip)) 10688c2ecf20Sopenharmony_ci 10698c2ecf20Sopenharmony_ci/* VALIDITY_LEFT_AND_RIGHT */ 10708c2ecf20Sopenharmony_ci#define UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip) 0 10718c2ecf20Sopenharmony_ci#define UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip) 0x3 10728c2ecf20Sopenharmony_ci#define GET_UNIPERIF_USER_VALIDITY_VALIDITY_LR(ip) \ 10738c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 10748c2ecf20Sopenharmony_ci UNIPERIF_USER_VALIDITY_OFFSET(ip), \ 10758c2ecf20Sopenharmony_ci UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip), \ 10768c2ecf20Sopenharmony_ci UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip)) 10778c2ecf20Sopenharmony_ci#define SET_UNIPERIF_USER_VALIDITY_VALIDITY_LR(ip, value) \ 10788c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 10798c2ecf20Sopenharmony_ci UNIPERIF_USER_VALIDITY_OFFSET(ip), \ 10808c2ecf20Sopenharmony_ci UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip), \ 10818c2ecf20Sopenharmony_ci UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip), \ 10828c2ecf20Sopenharmony_ci value ? 0x3 : 0) 10838c2ecf20Sopenharmony_ci 10848c2ecf20Sopenharmony_ci/* 10858c2ecf20Sopenharmony_ci * UNIPERIF_DBG_STANDBY_LEFT_SP reg 10868c2ecf20Sopenharmony_ci */ 10878c2ecf20Sopenharmony_ci#define UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip) 0x0150 10888c2ecf20Sopenharmony_ci#define UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip) \ 10898c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0) 10908c2ecf20Sopenharmony_ci#define UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip) \ 10918c2ecf20Sopenharmony_ci ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 0xFFFFFF) 10928c2ecf20Sopenharmony_ci#define GET_UNIPERIF_DBG_STANDBY_LEFT_SP(ip) \ 10938c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 10948c2ecf20Sopenharmony_ci UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip), \ 10958c2ecf20Sopenharmony_ci UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip), \ 10968c2ecf20Sopenharmony_ci UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip)) 10978c2ecf20Sopenharmony_ci#define SET_UNIPERIF_DBG_STANDBY_LEFT_SP(ip, value) \ 10988c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 10998c2ecf20Sopenharmony_ci UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip), \ 11008c2ecf20Sopenharmony_ci UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip), \ 11018c2ecf20Sopenharmony_ci UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip), value) 11028c2ecf20Sopenharmony_ci 11038c2ecf20Sopenharmony_ci/* 11048c2ecf20Sopenharmony_ci * UNIPERIF_TDM_ENABLE 11058c2ecf20Sopenharmony_ci */ 11068c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_ENABLE_OFFSET(ip) 0x0118 11078c2ecf20Sopenharmony_ci#define GET_UNIPERIF_TDM_ENABLE(ip) \ 11088c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_TDM_ENABLE_OFFSET(ip)) 11098c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_ENABLE(ip, value) \ 11108c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + UNIPERIF_TDM_ENABLE_OFFSET(ip)) 11118c2ecf20Sopenharmony_ci 11128c2ecf20Sopenharmony_ci/* TDM_ENABLE */ 11138c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_ENABLE_EN_TDM_SHIFT(ip) 0x0 11148c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_ENABLE_EN_TDM_MASK(ip) 0x1 11158c2ecf20Sopenharmony_ci#define GET_UNIPERIF_TDM_ENABLE_EN_TDM(ip) \ 11168c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 11178c2ecf20Sopenharmony_ci UNIPERIF_TDM_ENABLE_OFFSET(ip), \ 11188c2ecf20Sopenharmony_ci UNIPERIF_TDM_ENABLE_EN_TDM_SHIFT(ip), \ 11198c2ecf20Sopenharmony_ci UNIPERIF_TDM_ENABLE_EN_TDM_MASK(ip)) 11208c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_ENABLE_TDM_ENABLE(ip) \ 11218c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 11228c2ecf20Sopenharmony_ci UNIPERIF_TDM_ENABLE_OFFSET(ip), \ 11238c2ecf20Sopenharmony_ci UNIPERIF_TDM_ENABLE_EN_TDM_SHIFT(ip), \ 11248c2ecf20Sopenharmony_ci UNIPERIF_TDM_ENABLE_EN_TDM_MASK(ip), 1) 11258c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_ENABLE_TDM_DISABLE(ip) \ 11268c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 11278c2ecf20Sopenharmony_ci UNIPERIF_TDM_ENABLE_OFFSET(ip), \ 11288c2ecf20Sopenharmony_ci UNIPERIF_TDM_ENABLE_EN_TDM_SHIFT(ip), \ 11298c2ecf20Sopenharmony_ci UNIPERIF_TDM_ENABLE_EN_TDM_MASK(ip), 0) 11308c2ecf20Sopenharmony_ci 11318c2ecf20Sopenharmony_ci/* 11328c2ecf20Sopenharmony_ci * UNIPERIF_TDM_FS_REF_FREQ 11338c2ecf20Sopenharmony_ci */ 11348c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip) 0x011c 11358c2ecf20Sopenharmony_ci#define GET_UNIPERIF_TDM_FS_REF_FREQ(ip) \ 11368c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip)) 11378c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_FS_REF_FREQ(ip, value) \ 11388c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + \ 11398c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip)) 11408c2ecf20Sopenharmony_ci 11418c2ecf20Sopenharmony_ci/* REF_FREQ */ 11428c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip) 0x0 11438c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_TDM_FS_REF_FREQ_8KHZ(ip) 0 11448c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_TDM_FS_REF_FREQ_16KHZ(ip) 1 11458c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_TDM_FS_REF_FREQ_32KHZ(ip) 2 11468c2ecf20Sopenharmony_ci#define VALUE_UNIPERIF_TDM_FS_REF_FREQ_48KHZ(ip) 3 11478c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip) 0x3 11488c2ecf20Sopenharmony_ci#define GET_UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ(ip) \ 11498c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 11508c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \ 11518c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \ 11528c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip)) 11538c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_FS_REF_FREQ_8KHZ(ip) \ 11548c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 11558c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \ 11568c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \ 11578c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip), \ 11588c2ecf20Sopenharmony_ci VALUE_UNIPERIF_TDM_FS_REF_FREQ_8KHZ(ip)) 11598c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_FS_REF_FREQ_16KHZ(ip) \ 11608c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 11618c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \ 11628c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \ 11638c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip), \ 11648c2ecf20Sopenharmony_ci VALUE_UNIPERIF_TDM_FS_REF_FREQ_16KHZ(ip)) 11658c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_FS_REF_FREQ_32KHZ(ip) \ 11668c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 11678c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \ 11688c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \ 11698c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip), \ 11708c2ecf20Sopenharmony_ci VALUE_UNIPERIF_TDM_FS_REF_FREQ_32KHZ(ip)) 11718c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_FS_REF_FREQ_48KHZ(ip) \ 11728c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 11738c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \ 11748c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \ 11758c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip), \ 11768c2ecf20Sopenharmony_ci VALUE_UNIPERIF_TDM_FS_REF_FREQ_48KHZ(ip)) 11778c2ecf20Sopenharmony_ci 11788c2ecf20Sopenharmony_ci/* 11798c2ecf20Sopenharmony_ci * UNIPERIF_TDM_FS_REF_DIV 11808c2ecf20Sopenharmony_ci */ 11818c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip) 0x0120 11828c2ecf20Sopenharmony_ci#define GET_UNIPERIF_TDM_FS_REF_DIV(ip) \ 11838c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip)) 11848c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_FS_REF_DIV(ip, value) \ 11858c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + \ 11868c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip)) 11878c2ecf20Sopenharmony_ci 11888c2ecf20Sopenharmony_ci/* NUM_TIMESLOT */ 11898c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_SHIFT(ip) 0x0 11908c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_MASK(ip) 0xff 11918c2ecf20Sopenharmony_ci#define GET_UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT(ip) \ 11928c2ecf20Sopenharmony_ci GET_UNIPERIF_REG(ip, \ 11938c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip), \ 11948c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_SHIFT(ip), \ 11958c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_MASK(ip)) 11968c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT(ip, value) \ 11978c2ecf20Sopenharmony_ci SET_UNIPERIF_REG(ip, \ 11988c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip), \ 11998c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_SHIFT(ip), \ 12008c2ecf20Sopenharmony_ci UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_MASK(ip), value) 12018c2ecf20Sopenharmony_ci 12028c2ecf20Sopenharmony_ci/* 12038c2ecf20Sopenharmony_ci * UNIPERIF_TDM_WORD_POS_X_Y 12048c2ecf20Sopenharmony_ci * 32 bits of UNIPERIF_TDM_WORD_POS_X_Y register shall be set in 1 shot 12058c2ecf20Sopenharmony_ci */ 12068c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_WORD_POS_1_2_OFFSET(ip) 0x013c 12078c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_WORD_POS_3_4_OFFSET(ip) 0x0140 12088c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_WORD_POS_5_6_OFFSET(ip) 0x0144 12098c2ecf20Sopenharmony_ci#define UNIPERIF_TDM_WORD_POS_7_8_OFFSET(ip) 0x0148 12108c2ecf20Sopenharmony_ci#define GET_UNIPERIF_TDM_WORD_POS(ip, words) \ 12118c2ecf20Sopenharmony_ci readl_relaxed(ip->base + UNIPERIF_TDM_WORD_POS_##words##_OFFSET(ip)) 12128c2ecf20Sopenharmony_ci#define SET_UNIPERIF_TDM_WORD_POS(ip, words, value) \ 12138c2ecf20Sopenharmony_ci writel_relaxed(value, ip->base + \ 12148c2ecf20Sopenharmony_ci UNIPERIF_TDM_WORD_POS_##words##_OFFSET(ip)) 12158c2ecf20Sopenharmony_ci/* 12168c2ecf20Sopenharmony_ci * uniperipheral IP capabilities 12178c2ecf20Sopenharmony_ci */ 12188c2ecf20Sopenharmony_ci 12198c2ecf20Sopenharmony_ci#define UNIPERIF_FIFO_SIZE 70 /* FIFO is 70 cells deep */ 12208c2ecf20Sopenharmony_ci#define UNIPERIF_FIFO_FRAMES 4 /* FDMA trigger limit in frames */ 12218c2ecf20Sopenharmony_ci 12228c2ecf20Sopenharmony_ci#define UNIPERIF_TYPE_IS_HDMI(p) \ 12238c2ecf20Sopenharmony_ci ((p)->type == SND_ST_UNIPERIF_TYPE_HDMI) 12248c2ecf20Sopenharmony_ci#define UNIPERIF_TYPE_IS_PCM(p) \ 12258c2ecf20Sopenharmony_ci ((p)->type == SND_ST_UNIPERIF_TYPE_PCM) 12268c2ecf20Sopenharmony_ci#define UNIPERIF_TYPE_IS_SPDIF(p) \ 12278c2ecf20Sopenharmony_ci ((p)->type == SND_ST_UNIPERIF_TYPE_SPDIF) 12288c2ecf20Sopenharmony_ci#define UNIPERIF_TYPE_IS_IEC958(p) \ 12298c2ecf20Sopenharmony_ci (UNIPERIF_TYPE_IS_HDMI(p) || \ 12308c2ecf20Sopenharmony_ci UNIPERIF_TYPE_IS_SPDIF(p)) 12318c2ecf20Sopenharmony_ci#define UNIPERIF_TYPE_IS_TDM(p) \ 12328c2ecf20Sopenharmony_ci ((p)->type == SND_ST_UNIPERIF_TYPE_TDM) 12338c2ecf20Sopenharmony_ci 12348c2ecf20Sopenharmony_ci/* 12358c2ecf20Sopenharmony_ci * Uniperipheral IP revisions 12368c2ecf20Sopenharmony_ci */ 12378c2ecf20Sopenharmony_cienum uniperif_version { 12388c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_VERSION_UNKNOWN, 12398c2ecf20Sopenharmony_ci /* SASG1 (Orly), Newman */ 12408c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_VERSION_C6AUD0_UNI_1_0, 12418c2ecf20Sopenharmony_ci /* SASC1, SASG2 (Orly2) */ 12428c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_VERSION_UNI_PLR_1_0, 12438c2ecf20Sopenharmony_ci /* SASC1, SASG2 (Orly2), TELSS, Cannes */ 12448c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_VERSION_UNI_RDR_1_0, 12458c2ecf20Sopenharmony_ci /* TELSS (SASC1) */ 12468c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_VERSION_TDM_PLR_1_0, 12478c2ecf20Sopenharmony_ci /* Cannes/Monaco */ 12488c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 12498c2ecf20Sopenharmony_ci}; 12508c2ecf20Sopenharmony_ci 12518c2ecf20Sopenharmony_cienum uniperif_type { 12528c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_TYPE_NONE = 0x00, 12538c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_TYPE_HDMI = 0x01, 12548c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_TYPE_PCM = 0x02, 12558c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_TYPE_SPDIF = 0x04, 12568c2ecf20Sopenharmony_ci SND_ST_UNIPERIF_TYPE_TDM = 0x08 12578c2ecf20Sopenharmony_ci}; 12588c2ecf20Sopenharmony_ci 12598c2ecf20Sopenharmony_cienum uniperif_state { 12608c2ecf20Sopenharmony_ci UNIPERIF_STATE_STOPPED, 12618c2ecf20Sopenharmony_ci UNIPERIF_STATE_STARTED, 12628c2ecf20Sopenharmony_ci UNIPERIF_STATE_STANDBY, 12638c2ecf20Sopenharmony_ci UNIPERIF_STATE_UNDERFLOW, 12648c2ecf20Sopenharmony_ci UNIPERIF_STATE_OVERFLOW = UNIPERIF_STATE_UNDERFLOW, 12658c2ecf20Sopenharmony_ci UNIPERIF_STATE_XRUN 12668c2ecf20Sopenharmony_ci}; 12678c2ecf20Sopenharmony_ci 12688c2ecf20Sopenharmony_cienum uniperif_iec958_encoding_mode { 12698c2ecf20Sopenharmony_ci UNIPERIF_IEC958_ENCODING_MODE_PCM, 12708c2ecf20Sopenharmony_ci UNIPERIF_IEC958_ENCODING_MODE_ENCODED 12718c2ecf20Sopenharmony_ci}; 12728c2ecf20Sopenharmony_ci 12738c2ecf20Sopenharmony_cienum uniperif_word_pos { 12748c2ecf20Sopenharmony_ci WORD_1_2, 12758c2ecf20Sopenharmony_ci WORD_3_4, 12768c2ecf20Sopenharmony_ci WORD_5_6, 12778c2ecf20Sopenharmony_ci WORD_7_8, 12788c2ecf20Sopenharmony_ci WORD_MAX 12798c2ecf20Sopenharmony_ci}; 12808c2ecf20Sopenharmony_ci 12818c2ecf20Sopenharmony_cistruct uniperif_iec958_settings { 12828c2ecf20Sopenharmony_ci enum uniperif_iec958_encoding_mode encoding_mode; 12838c2ecf20Sopenharmony_ci struct snd_aes_iec958 iec958; 12848c2ecf20Sopenharmony_ci}; 12858c2ecf20Sopenharmony_ci 12868c2ecf20Sopenharmony_cistruct dai_tdm_slot { 12878c2ecf20Sopenharmony_ci unsigned int mask; 12888c2ecf20Sopenharmony_ci int slots; 12898c2ecf20Sopenharmony_ci int slot_width; 12908c2ecf20Sopenharmony_ci unsigned int avail_slots; 12918c2ecf20Sopenharmony_ci}; 12928c2ecf20Sopenharmony_ci 12938c2ecf20Sopenharmony_cistruct uniperif { 12948c2ecf20Sopenharmony_ci /* System information */ 12958c2ecf20Sopenharmony_ci enum uniperif_type type; 12968c2ecf20Sopenharmony_ci int underflow_enabled; /* Underflow recovery mode */ 12978c2ecf20Sopenharmony_ci struct device *dev; 12988c2ecf20Sopenharmony_ci int id; /* instance value of the uniperipheral IP */ 12998c2ecf20Sopenharmony_ci int ver; /* IP version, used by register access macros */ 13008c2ecf20Sopenharmony_ci struct regmap_field *clk_sel; 13018c2ecf20Sopenharmony_ci struct regmap_field *valid_sel; 13028c2ecf20Sopenharmony_ci spinlock_t irq_lock; /* use to prevent race condition with IRQ */ 13038c2ecf20Sopenharmony_ci 13048c2ecf20Sopenharmony_ci /* capabilities */ 13058c2ecf20Sopenharmony_ci const struct snd_pcm_hardware *hw; 13068c2ecf20Sopenharmony_ci 13078c2ecf20Sopenharmony_ci /* Resources */ 13088c2ecf20Sopenharmony_ci struct resource *mem_region; 13098c2ecf20Sopenharmony_ci void __iomem *base; 13108c2ecf20Sopenharmony_ci unsigned long fifo_phys_address; 13118c2ecf20Sopenharmony_ci int irq; 13128c2ecf20Sopenharmony_ci 13138c2ecf20Sopenharmony_ci /* Clocks */ 13148c2ecf20Sopenharmony_ci struct clk *clk; 13158c2ecf20Sopenharmony_ci int mclk; 13168c2ecf20Sopenharmony_ci int clk_adj; 13178c2ecf20Sopenharmony_ci 13188c2ecf20Sopenharmony_ci /* Runtime data */ 13198c2ecf20Sopenharmony_ci enum uniperif_state state; 13208c2ecf20Sopenharmony_ci 13218c2ecf20Sopenharmony_ci struct snd_pcm_substream *substream; 13228c2ecf20Sopenharmony_ci 13238c2ecf20Sopenharmony_ci /* Specific to IEC958 player */ 13248c2ecf20Sopenharmony_ci struct uniperif_iec958_settings stream_settings; 13258c2ecf20Sopenharmony_ci struct mutex ctrl_lock; /* For resource updated by stream and controls*/ 13268c2ecf20Sopenharmony_ci 13278c2ecf20Sopenharmony_ci /*alsa ctrl*/ 13288c2ecf20Sopenharmony_ci struct snd_kcontrol_new *snd_ctrls; 13298c2ecf20Sopenharmony_ci int num_ctrls; 13308c2ecf20Sopenharmony_ci 13318c2ecf20Sopenharmony_ci /* dai properties */ 13328c2ecf20Sopenharmony_ci unsigned int daifmt; 13338c2ecf20Sopenharmony_ci struct dai_tdm_slot tdm_slot; 13348c2ecf20Sopenharmony_ci 13358c2ecf20Sopenharmony_ci /* DAI callbacks */ 13368c2ecf20Sopenharmony_ci const struct snd_soc_dai_ops *dai_ops; 13378c2ecf20Sopenharmony_ci}; 13388c2ecf20Sopenharmony_ci 13398c2ecf20Sopenharmony_cistruct sti_uniperiph_dai { 13408c2ecf20Sopenharmony_ci int stream; 13418c2ecf20Sopenharmony_ci struct uniperif *uni; 13428c2ecf20Sopenharmony_ci struct snd_dmaengine_dai_dma_data dma_data; 13438c2ecf20Sopenharmony_ci}; 13448c2ecf20Sopenharmony_ci 13458c2ecf20Sopenharmony_cistruct sti_uniperiph_data { 13468c2ecf20Sopenharmony_ci struct platform_device *pdev; 13478c2ecf20Sopenharmony_ci struct snd_soc_dai_driver *dai; 13488c2ecf20Sopenharmony_ci struct sti_uniperiph_dai dai_data; 13498c2ecf20Sopenharmony_ci}; 13508c2ecf20Sopenharmony_ci 13518c2ecf20Sopenharmony_cistatic __maybe_unused const struct snd_pcm_hardware uni_tdm_hw = { 13528c2ecf20Sopenharmony_ci .info = SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | 13538c2ecf20Sopenharmony_ci SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP | 13548c2ecf20Sopenharmony_ci SNDRV_PCM_INFO_MMAP_VALID, 13558c2ecf20Sopenharmony_ci 13568c2ecf20Sopenharmony_ci .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S16_LE, 13578c2ecf20Sopenharmony_ci 13588c2ecf20Sopenharmony_ci .rates = SNDRV_PCM_RATE_CONTINUOUS, 13598c2ecf20Sopenharmony_ci .rate_min = 8000, 13608c2ecf20Sopenharmony_ci .rate_max = 48000, 13618c2ecf20Sopenharmony_ci 13628c2ecf20Sopenharmony_ci .channels_min = 1, 13638c2ecf20Sopenharmony_ci .channels_max = 32, 13648c2ecf20Sopenharmony_ci 13658c2ecf20Sopenharmony_ci .periods_min = 2, 13668c2ecf20Sopenharmony_ci .periods_max = 10, 13678c2ecf20Sopenharmony_ci 13688c2ecf20Sopenharmony_ci .period_bytes_min = 128, 13698c2ecf20Sopenharmony_ci .period_bytes_max = 64 * PAGE_SIZE, 13708c2ecf20Sopenharmony_ci .buffer_bytes_max = 256 * PAGE_SIZE 13718c2ecf20Sopenharmony_ci}; 13728c2ecf20Sopenharmony_ci 13738c2ecf20Sopenharmony_ci/* uniperiph player*/ 13748c2ecf20Sopenharmony_ciint uni_player_init(struct platform_device *pdev, 13758c2ecf20Sopenharmony_ci struct uniperif *uni_player); 13768c2ecf20Sopenharmony_ciint uni_player_resume(struct uniperif *player); 13778c2ecf20Sopenharmony_ci 13788c2ecf20Sopenharmony_ci/* uniperiph reader */ 13798c2ecf20Sopenharmony_ciint uni_reader_init(struct platform_device *pdev, 13808c2ecf20Sopenharmony_ci struct uniperif *uni_reader); 13818c2ecf20Sopenharmony_ci 13828c2ecf20Sopenharmony_ci/* common */ 13838c2ecf20Sopenharmony_ciint sti_uniperiph_dai_set_fmt(struct snd_soc_dai *dai, 13848c2ecf20Sopenharmony_ci unsigned int fmt); 13858c2ecf20Sopenharmony_ci 13868c2ecf20Sopenharmony_ciint sti_uniperiph_dai_hw_params(struct snd_pcm_substream *substream, 13878c2ecf20Sopenharmony_ci struct snd_pcm_hw_params *params, 13888c2ecf20Sopenharmony_ci struct snd_soc_dai *dai); 13898c2ecf20Sopenharmony_ci 13908c2ecf20Sopenharmony_cistatic inline int sti_uniperiph_get_user_frame_size( 13918c2ecf20Sopenharmony_ci struct snd_pcm_runtime *runtime) 13928c2ecf20Sopenharmony_ci{ 13938c2ecf20Sopenharmony_ci return (runtime->channels * snd_pcm_format_width(runtime->format) / 8); 13948c2ecf20Sopenharmony_ci} 13958c2ecf20Sopenharmony_ci 13968c2ecf20Sopenharmony_cistatic inline int sti_uniperiph_get_unip_tdm_frame_size(struct uniperif *uni) 13978c2ecf20Sopenharmony_ci{ 13988c2ecf20Sopenharmony_ci return (uni->tdm_slot.slots * uni->tdm_slot.slot_width / 8); 13998c2ecf20Sopenharmony_ci} 14008c2ecf20Sopenharmony_ci 14018c2ecf20Sopenharmony_ciint sti_uniperiph_reset(struct uniperif *uni); 14028c2ecf20Sopenharmony_ci 14038c2ecf20Sopenharmony_ciint sti_uniperiph_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, 14048c2ecf20Sopenharmony_ci unsigned int rx_mask, int slots, 14058c2ecf20Sopenharmony_ci int slot_width); 14068c2ecf20Sopenharmony_ci 14078c2ecf20Sopenharmony_ciint sti_uniperiph_get_tdm_word_pos(struct uniperif *uni, 14088c2ecf20Sopenharmony_ci unsigned int *word_pos); 14098c2ecf20Sopenharmony_ci 14108c2ecf20Sopenharmony_ciint sti_uniperiph_fix_tdm_chan(struct snd_pcm_hw_params *params, 14118c2ecf20Sopenharmony_ci struct snd_pcm_hw_rule *rule); 14128c2ecf20Sopenharmony_ci 14138c2ecf20Sopenharmony_ciint sti_uniperiph_fix_tdm_format(struct snd_pcm_hw_params *params, 14148c2ecf20Sopenharmony_ci struct snd_pcm_hw_rule *rule); 14158c2ecf20Sopenharmony_ci 14168c2ecf20Sopenharmony_ci#endif 1417