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