^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (C) STMicroelectronics SA 2015
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Authors: Arnaud Pouliquen <arnaud.pouliquen@st.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * for STMicroelectronics.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #ifndef __SND_ST_AUD_UNIPERIF_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #define __SND_ST_AUD_UNIPERIF_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/regmap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <sound/dmaengine_pcm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * Register access macros
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define GET_UNIPERIF_REG(ip, offset, shift, mask) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) ((readl_relaxed(ip->base + offset) >> shift) & mask)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define SET_UNIPERIF_REG(ip, offset, shift, mask, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) writel_relaxed(((readl_relaxed(ip->base + offset) & \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) ~(mask << shift)) | (((value) & mask) << shift)), ip->base + offset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define SET_UNIPERIF_BIT_REG(ip, offset, shift, mask, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) writel_relaxed((((value) & mask) << shift), ip->base + offset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * UNIPERIF_SOFT_RST reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define UNIPERIF_SOFT_RST_OFFSET(ip) 0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define GET_UNIPERIF_SOFT_RST(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) readl_relaxed(ip->base + UNIPERIF_SOFT_RST_OFFSET(ip)) : 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define SET_UNIPERIF_SOFT_RST(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) writel_relaxed(value, ip->base + UNIPERIF_SOFT_RST_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) /* SOFT_RST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip) 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define SET_UNIPERIF_SOFT_RST_SOFT_RST(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) SET_UNIPERIF_BIT_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) UNIPERIF_SOFT_RST_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define GET_UNIPERIF_SOFT_RST_SOFT_RST(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) UNIPERIF_SOFT_RST_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) * UNIPERIF_FIFO_DATA reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define UNIPERIF_FIFO_DATA_OFFSET(ip) 0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define SET_UNIPERIF_DATA(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) writel_relaxed(value, ip->base + UNIPERIF_FIFO_DATA_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) * UNIPERIF_CHANNEL_STA_REGN reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define UNIPERIF_CHANNEL_STA_REGN(ip, n) (0x0060 + (4 * n))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define GET_UNIPERIF_CHANNEL_STA_REGN(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REGN(ip, n))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define SET_UNIPERIF_CHANNEL_STA_REGN(ip, n, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) writel_relaxed(value, ip->base + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) UNIPERIF_CHANNEL_STA_REGN(ip, n))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip) 0x0060
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define GET_UNIPERIF_CHANNEL_STA_REG0(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define SET_UNIPERIF_CHANNEL_STA_REG0(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip) 0x0064
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define GET_UNIPERIF_CHANNEL_STA_REG1(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define SET_UNIPERIF_CHANNEL_STA_REG1(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip) 0x0068
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define GET_UNIPERIF_CHANNEL_STA_REG2(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define SET_UNIPERIF_CHANNEL_STA_REG2(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip) 0x006C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define GET_UNIPERIF_CHANNEL_STA_REG3(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define SET_UNIPERIF_CHANNEL_STA_REG3(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip) 0x0070
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define GET_UNIPERIF_CHANNEL_STA_REG4(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define SET_UNIPERIF_CHANNEL_STA_REG4(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip) 0x0074
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define GET_UNIPERIF_CHANNEL_STA_REG5(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define SET_UNIPERIF_CHANNEL_STA_REG5(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) * UNIPERIF_ITS reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define UNIPERIF_ITS_OFFSET(ip) 0x000C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define GET_UNIPERIF_ITS(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) readl_relaxed(ip->base + UNIPERIF_ITS_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) /* MEM_BLK_READ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define UNIPERIF_ITS_MEM_BLK_READ_SHIFT(ip) 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define UNIPERIF_ITS_MEM_BLK_READ_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) (BIT(UNIPERIF_ITS_MEM_BLK_READ_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) /* FIFO_ERROR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define UNIPERIF_ITS_FIFO_ERROR_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define UNIPERIF_ITS_FIFO_ERROR_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) (BIT(UNIPERIF_ITS_FIFO_ERROR_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) /* DMA_ERROR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define UNIPERIF_ITS_DMA_ERROR_SHIFT(ip) 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define UNIPERIF_ITS_DMA_ERROR_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) (BIT(UNIPERIF_ITS_DMA_ERROR_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) /* UNDERFLOW_REC_DONE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define UNIPERIF_ITS_UNDERFLOW_REC_DONE_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define UNIPERIF_ITS_UNDERFLOW_REC_DONE_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 0 : (BIT(UNIPERIF_ITS_UNDERFLOW_REC_DONE_SHIFT(ip))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) /* UNDERFLOW_REC_FAILED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define UNIPERIF_ITS_UNDERFLOW_REC_FAILED_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define UNIPERIF_ITS_UNDERFLOW_REC_FAILED_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 0 : (BIT(UNIPERIF_ITS_UNDERFLOW_REC_FAILED_SHIFT(ip))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) * UNIPERIF_ITS_BCLR reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) /* FIFO_ERROR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define UNIPERIF_ITS_BCLR_FIFO_ERROR_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define UNIPERIF_ITS_BCLR_FIFO_ERROR_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) (BIT(UNIPERIF_ITS_BCLR_FIFO_ERROR_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define SET_UNIPERIF_ITS_BCLR_FIFO_ERROR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) SET_UNIPERIF_ITS_BCLR(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) UNIPERIF_ITS_BCLR_FIFO_ERROR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define UNIPERIF_ITS_BCLR_OFFSET(ip) 0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define SET_UNIPERIF_ITS_BCLR(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) writel_relaxed(value, ip->base + UNIPERIF_ITS_BCLR_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) * UNIPERIF_ITM reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define UNIPERIF_ITM_OFFSET(ip) 0x0018
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define GET_UNIPERIF_ITM(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) readl_relaxed(ip->base + UNIPERIF_ITM_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) /* FIFO_ERROR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define UNIPERIF_ITM_FIFO_ERROR_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define UNIPERIF_ITM_FIFO_ERROR_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) (BIT(UNIPERIF_ITM_FIFO_ERROR_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /* UNDERFLOW_REC_DONE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define UNIPERIF_ITM_UNDERFLOW_REC_DONE_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define UNIPERIF_ITM_UNDERFLOW_REC_DONE_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 0 : (BIT(UNIPERIF_ITM_UNDERFLOW_REC_DONE_SHIFT(ip))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) /* UNDERFLOW_REC_FAILED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #define UNIPERIF_ITM_UNDERFLOW_REC_FAILED_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #define UNIPERIF_ITM_UNDERFLOW_REC_FAILED_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 0 : (BIT(UNIPERIF_ITM_UNDERFLOW_REC_FAILED_SHIFT(ip))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) * UNIPERIF_ITM_BCLR reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #define UNIPERIF_ITM_BCLR_OFFSET(ip) 0x001c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define SET_UNIPERIF_ITM_BCLR(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) writel_relaxed(value, ip->base + UNIPERIF_ITM_BCLR_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) /* FIFO_ERROR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #define UNIPERIF_ITM_BCLR_FIFO_ERROR_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define UNIPERIF_ITM_BCLR_FIFO_ERROR_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) (BIT(UNIPERIF_ITM_BCLR_FIFO_ERROR_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define SET_UNIPERIF_ITM_BCLR_FIFO_ERROR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) SET_UNIPERIF_ITM_BCLR(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) UNIPERIF_ITM_BCLR_FIFO_ERROR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) /* DMA_ERROR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define UNIPERIF_ITM_BCLR_DMA_ERROR_SHIFT(ip) 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define UNIPERIF_ITM_BCLR_DMA_ERROR_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) (BIT(UNIPERIF_ITM_BCLR_DMA_ERROR_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define SET_UNIPERIF_ITM_BCLR_DMA_ERROR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) SET_UNIPERIF_ITM_BCLR(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) UNIPERIF_ITM_BCLR_DMA_ERROR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) * UNIPERIF_ITM_BSET reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define UNIPERIF_ITM_BSET_OFFSET(ip) 0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #define SET_UNIPERIF_ITM_BSET(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) writel_relaxed(value, ip->base + UNIPERIF_ITM_BSET_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) /* FIFO_ERROR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define UNIPERIF_ITM_BSET_FIFO_ERROR_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #define UNIPERIF_ITM_BSET_FIFO_ERROR_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) (BIT(UNIPERIF_ITM_BSET_FIFO_ERROR_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #define SET_UNIPERIF_ITM_BSET_FIFO_ERROR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) SET_UNIPERIF_ITM_BSET(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) UNIPERIF_ITM_BSET_FIFO_ERROR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) /* MEM_BLK_READ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #define UNIPERIF_ITM_BSET_MEM_BLK_READ_SHIFT(ip) 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define UNIPERIF_ITM_BSET_MEM_BLK_READ_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) (BIT(UNIPERIF_ITM_BSET_MEM_BLK_READ_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define SET_UNIPERIF_ITM_BSET_MEM_BLK_READ(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) SET_UNIPERIF_ITM_BSET(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) UNIPERIF_ITM_BSET_MEM_BLK_READ_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) /* DMA_ERROR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #define UNIPERIF_ITM_BSET_DMA_ERROR_SHIFT(ip) 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #define UNIPERIF_ITM_BSET_DMA_ERROR_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) (BIT(UNIPERIF_ITM_BSET_DMA_ERROR_SHIFT(ip)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #define SET_UNIPERIF_ITM_BSET_DMA_ERROR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) SET_UNIPERIF_ITM_BSET(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) UNIPERIF_ITM_BSET_DMA_ERROR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) /* UNDERFLOW_REC_DONE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 0 : (BIT(UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_SHIFT(ip))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #define SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) SET_UNIPERIF_ITM_BSET(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) /* UNDERFLOW_REC_FAILED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 0 : (BIT(UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_SHIFT(ip))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) #define SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) SET_UNIPERIF_ITM_BSET(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) * UNIPERIF_CONFIG reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define UNIPERIF_CONFIG_OFFSET(ip) 0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) #define GET_UNIPERIF_CONFIG(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) readl_relaxed(ip->base + UNIPERIF_CONFIG_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) #define SET_UNIPERIF_CONFIG(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) writel_relaxed(value, ip->base + UNIPERIF_CONFIG_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) /* PARITY_CNTR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) #define UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip) 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) #define UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #define GET_UNIPERIF_CONFIG_PARITY_CNTR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) #define SET_UNIPERIF_CONFIG_PARITY_CNTR_BY_HW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) #define SET_UNIPERIF_CONFIG_PARITY_CNTR_BY_SW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) /* CHANNEL_STA_CNTR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) #define UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip) 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) #define UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) #define GET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) #define SET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR_BY_SW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) #define SET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR_BY_HW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) /* USER_DAT_CNTR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) #define UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip) 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) #define UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) #define GET_UNIPERIF_CONFIG_USER_DAT_CNTR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) #define SET_UNIPERIF_CONFIG_USER_DAT_CNTR_BY_HW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) #define SET_UNIPERIF_CONFIG_USER_DAT_CNTR_BY_SW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) /* VALIDITY_DAT_CNTR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) #define UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip) 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) #define UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) #define GET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) #define SET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_BY_SW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) #define SET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_BY_HW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) /* ONE_BIT_AUD_SUPPORT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) #define UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip) 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) #define UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) #define GET_UNIPERIF_CONFIG_ONE_BIT_AUD(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) #define SET_UNIPERIF_CONFIG_ONE_BIT_AUD_DISABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) #define SET_UNIPERIF_CONFIG_ONE_BIT_AUD_ENABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) /* MEMORY_FMT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) #define UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip) 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) #define UNIPERIF_CONFIG_MEM_FMT_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) #define VALUE_UNIPERIF_CONFIG_MEM_FMT_16_0(ip) 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) #define VALUE_UNIPERIF_CONFIG_MEM_FMT_16_16(ip) 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) #define GET_UNIPERIF_CONFIG_MEM_FMT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) UNIPERIF_CONFIG_MEM_FMT_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) #define SET_UNIPERIF_CONFIG_MEM_FMT(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) UNIPERIF_CONFIG_MEM_FMT_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) #define SET_UNIPERIF_CONFIG_MEM_FMT_16_0(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) SET_UNIPERIF_CONFIG_MEM_FMT(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) VALUE_UNIPERIF_CONFIG_MEM_FMT_16_0(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) #define SET_UNIPERIF_CONFIG_MEM_FMT_16_16(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) SET_UNIPERIF_CONFIG_MEM_FMT(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) VALUE_UNIPERIF_CONFIG_MEM_FMT_16_16(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) /* REPEAT_CHL_STS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) #define UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip) 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) #define UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) #define GET_UNIPERIF_CONFIG_REPEAT_CHL_STS(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) #define SET_UNIPERIF_CONFIG_REPEAT_CHL_STS_ENABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) #define SET_UNIPERIF_CONFIG_REPEAT_CHL_STS_DISABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) /* BACK_STALL_REQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) #define UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 7 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) #define UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) #define GET_UNIPERIF_CONFIG_BACK_STALL_REQ(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) #define SET_UNIPERIF_CONFIG_BACK_STALL_REQ_DISABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) #define SET_UNIPERIF_CONFIG_BACK_STALL_REQ_ENABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) /* FDMA_TRIGGER_LIMIT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) #define UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip) 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) #define UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip) 0x7F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) #define GET_UNIPERIF_CONFIG_DMA_TRIG_LIMIT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) #define SET_UNIPERIF_CONFIG_DMA_TRIG_LIMIT(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) /* CHL_STS_UPDATE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) #define UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 16 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) #define UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) #define GET_UNIPERIF_CONFIG_CHL_STS_UPDATE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) #define SET_UNIPERIF_CONFIG_CHL_STS_UPDATE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) /* IDLE_MOD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) #define UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip) 18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) #define UNIPERIF_CONFIG_IDLE_MOD_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) #define GET_UNIPERIF_CONFIG_IDLE_MOD(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) UNIPERIF_CONFIG_IDLE_MOD_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) #define SET_UNIPERIF_CONFIG_IDLE_MOD_DISABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) UNIPERIF_CONFIG_IDLE_MOD_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) #define SET_UNIPERIF_CONFIG_IDLE_MOD_ENABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) UNIPERIF_CONFIG_IDLE_MOD_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) /* SUBFRAME_SELECTION */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) #define UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip) 19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) #define UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) #define GET_UNIPERIF_CONFIG_SUBFRAME_SEL(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) #define SET_UNIPERIF_CONFIG_SUBFRAME_SEL_SUBF1_SUBF0(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) #define SET_UNIPERIF_CONFIG_SUBFRAME_SEL_SUBF0_SUBF1(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) /* FULL_SW_CONTROL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) #define UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip) 20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) #define UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) #define GET_UNIPERIF_CONFIG_SPDIF_SW_CTRL(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) #define SET_UNIPERIF_CONFIG_SPDIF_SW_CTRL_ENABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) #define SET_UNIPERIF_CONFIG_SPDIF_SW_CTRL_DISABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) /* MASTER_CLKEDGE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) #define UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 24 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) #define UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) #define GET_UNIPERIF_CONFIG_MSTR_CLKEDGE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) #define SET_UNIPERIF_CONFIG_MSTR_CLKEDGE_FALLING(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) #define SET_UNIPERIF_CONFIG_MSTR_CLKEDGE_RISING(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) UNIPERIF_CONFIG_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) * UNIPERIF_CTRL reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) #define UNIPERIF_CTRL_OFFSET(ip) 0x0044
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) #define GET_UNIPERIF_CTRL(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) readl_relaxed(ip->base + UNIPERIF_CTRL_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) #define SET_UNIPERIF_CTRL(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) writel_relaxed(value, ip->base + UNIPERIF_CTRL_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) /* OPERATION */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) #define UNIPERIF_CTRL_OPERATION_SHIFT(ip) 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) #define UNIPERIF_CTRL_OPERATION_MASK(ip) 0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) #define GET_UNIPERIF_CTRL_OPERATION(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) UNIPERIF_CTRL_OPERATION_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) #define VALUE_UNIPERIF_CTRL_OPERATION_OFF(ip) 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) #define SET_UNIPERIF_CTRL_OPERATION_OFF(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) UNIPERIF_CTRL_OPERATION_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) VALUE_UNIPERIF_CTRL_OPERATION_OFF(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) #define VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 1 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) #define SET_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) UNIPERIF_CTRL_OPERATION_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) #define VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 2 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) #define SET_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) UNIPERIF_CTRL_OPERATION_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) #define VALUE_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip) 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) #define SET_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) UNIPERIF_CTRL_OPERATION_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) VALUE_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) /* This is the same as above! */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) #define VALUE_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip) 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) #define SET_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) UNIPERIF_CTRL_OPERATION_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) VALUE_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) #define VALUE_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip) 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) #define SET_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) UNIPERIF_CTRL_OPERATION_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) VALUE_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) #define VALUE_UNIPERIF_CTRL_OPERATION_CD_DATA(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 5 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) #define SET_UNIPERIF_CTRL_OPERATION_CD_DATA(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) UNIPERIF_CTRL_OPERATION_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) VALUE_UNIPERIF_CTRL_OPERATION_CD_DATA(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) #define VALUE_UNIPERIF_CTRL_OPERATION_STANDBY(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) #define SET_UNIPERIF_CTRL_OPERATION_STANDBY(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) UNIPERIF_CTRL_OPERATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) UNIPERIF_CTRL_OPERATION_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) VALUE_UNIPERIF_CTRL_OPERATION_STANDBY(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) /* EXIT_STBY_ON_EOBLOCK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) #define UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) #define UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) #define GET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) #define SET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_OFF(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) #define SET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_ON(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) /* ROUNDING */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) #define UNIPERIF_CTRL_ROUNDING_SHIFT(ip) 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) #define UNIPERIF_CTRL_ROUNDING_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) #define GET_UNIPERIF_CTRL_ROUNDING(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) UNIPERIF_CTRL_ROUNDING_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) #define SET_UNIPERIF_CTRL_ROUNDING_OFF(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) UNIPERIF_CTRL_ROUNDING_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) #define SET_UNIPERIF_CTRL_ROUNDING_ON(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) UNIPERIF_CTRL_ROUNDING_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) /* DIVIDER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) #define UNIPERIF_CTRL_DIVIDER_SHIFT(ip) 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) #define UNIPERIF_CTRL_DIVIDER_MASK(ip) 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) #define GET_UNIPERIF_CTRL_DIVIDER(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) UNIPERIF_CTRL_DIVIDER_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) UNIPERIF_CTRL_DIVIDER_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) #define SET_UNIPERIF_CTRL_DIVIDER(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) UNIPERIF_CTRL_DIVIDER_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) UNIPERIF_CTRL_DIVIDER_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) /* BYTE_SWAP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) #define UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 13 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) #define UNIPERIF_CTRL_BYTE_SWP_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) #define GET_UNIPERIF_CTRL_BYTE_SWP(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) UNIPERIF_CTRL_BYTE_SWP_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) #define SET_UNIPERIF_CTRL_BYTE_SWP_OFF(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) UNIPERIF_CTRL_BYTE_SWP_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) #define SET_UNIPERIF_CTRL_BYTE_SWP_ON(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) UNIPERIF_CTRL_BYTE_SWP_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) /* ZERO_STUFFING_HW_SW */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) #define UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 14 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) #define UNIPERIF_CTRL_ZERO_STUFF_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) #define GET_UNIPERIF_CTRL_ZERO_STUFF(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) UNIPERIF_CTRL_ZERO_STUFF_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) #define SET_UNIPERIF_CTRL_ZERO_STUFF_HW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) UNIPERIF_CTRL_ZERO_STUFF_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) #define SET_UNIPERIF_CTRL_ZERO_STUFF_SW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) UNIPERIF_CTRL_ZERO_STUFF_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) /* SPDIF_LAT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) #define UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 16 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) #define UNIPERIF_CTRL_SPDIF_LAT_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) #define GET_UNIPERIF_CTRL_SPDIF_LAT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) UNIPERIF_CTRL_SPDIF_LAT_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) #define SET_UNIPERIF_CTRL_SPDIF_LAT_ON(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) UNIPERIF_CTRL_SPDIF_LAT_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) #define SET_UNIPERIF_CTRL_SPDIF_LAT_OFF(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) UNIPERIF_CTRL_SPDIF_LAT_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) /* EN_SPDIF_FORMATTING */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) #define UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip) 17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) #define UNIPERIF_CTRL_SPDIF_FMT_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) #define GET_UNIPERIF_CTRL_SPDIF_FMT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) UNIPERIF_CTRL_SPDIF_FMT_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) #define SET_UNIPERIF_CTRL_SPDIF_FMT_ON(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) UNIPERIF_CTRL_SPDIF_FMT_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) #define SET_UNIPERIF_CTRL_SPDIF_FMT_OFF(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) UNIPERIF_CTRL_SPDIF_FMT_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) /* READER_OUT_SELECT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) #define UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 18 : -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) #define UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) #define GET_UNIPERIF_CTRL_READER_OUT_SEL(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) #define SET_UNIPERIF_CTRL_READER_OUT_SEL_IN_MEM(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) #define SET_UNIPERIF_CTRL_READER_OUT_SEL_ON_I2S_LINE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) /* UNDERFLOW_REC_WINDOW */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) #define UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip) 20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) #define UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip) 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) #define GET_UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) #define SET_UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) UNIPERIF_CTRL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) * UNIPERIF_I2S_FMT a.k.a UNIPERIF_FORMAT reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) #define UNIPERIF_I2S_FMT_OFFSET(ip) 0x0048
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) #define GET_UNIPERIF_I2S_FMT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) readl_relaxed(ip->base + UNIPERIF_I2S_FMT_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) #define SET_UNIPERIF_I2S_FMT(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) writel_relaxed(value, ip->base + UNIPERIF_I2S_FMT_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) /* NBIT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) #define UNIPERIF_I2S_FMT_NBIT_SHIFT(ip) 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) #define UNIPERIF_I2S_FMT_NBIT_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) #define GET_UNIPERIF_I2S_FMT_NBIT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) UNIPERIF_I2S_FMT_NBIT_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) #define SET_UNIPERIF_I2S_FMT_NBIT_32(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) UNIPERIF_I2S_FMT_NBIT_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) #define SET_UNIPERIF_I2S_FMT_NBIT_16(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) UNIPERIF_I2S_FMT_NBIT_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) /* DATA_SIZE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) #define UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip) 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) #define UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip) 0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) #define GET_UNIPERIF_I2S_FMT_DATA_SIZE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_16(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_18(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_20(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_24(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) #define SET_UNIPERIF_I2S_FMTL_DATA_SIZE_28(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_32(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) /* LR_POL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) #define UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip) 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) #define UNIPERIF_I2S_FMT_LR_POL_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) #define VALUE_UNIPERIF_I2S_FMT_LR_POL_LOW(ip) 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) #define VALUE_UNIPERIF_I2S_FMT_LR_POL_HIG(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) #define GET_UNIPERIF_I2S_FMT_LR_POL(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) UNIPERIF_I2S_FMT_LR_POL_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) #define SET_UNIPERIF_I2S_FMT_LR_POL(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) UNIPERIF_I2S_FMT_LR_POL_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) #define SET_UNIPERIF_I2S_FMT_LR_POL_LOW(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) SET_UNIPERIF_I2S_FMT_LR_POL(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) VALUE_UNIPERIF_I2S_FMT_LR_POL_LOW(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) #define SET_UNIPERIF_I2S_FMT_LR_POL_HIG(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) SET_UNIPERIF_I2S_FMT_LR_POL(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) VALUE_UNIPERIF_I2S_FMT_LR_POL_HIG(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) /* SCLK_EDGE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) #define UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip) 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) #define UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) #define GET_UNIPERIF_I2S_FMT_SCLK_EDGE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) #define SET_UNIPERIF_I2S_FMT_SCLK_EDGE_RISING(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) #define SET_UNIPERIF_I2S_FMT_SCLK_EDGE_FALLING(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) /* PADDING */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) #define UNIPERIF_I2S_FMT_PADDING_SHIFT(ip) 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) #define UNIPERIF_I2S_FMT_PADDING_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) #define UNIPERIF_I2S_FMT_PADDING_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) #define VALUE_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip) 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) #define VALUE_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) #define GET_UNIPERIF_I2S_FMT_PADDING(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) UNIPERIF_I2S_FMT_PADDING_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) UNIPERIF_I2S_FMT_PADDING_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) #define SET_UNIPERIF_I2S_FMT_PADDING(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) UNIPERIF_I2S_FMT_PADDING_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) UNIPERIF_I2S_FMT_PADDING_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) #define SET_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) SET_UNIPERIF_I2S_FMT_PADDING(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) VALUE_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) #define SET_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) SET_UNIPERIF_I2S_FMT_PADDING(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) VALUE_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) /* ALIGN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) #define UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip) 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) #define UNIPERIF_I2S_FMT_ALIGN_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) #define GET_UNIPERIF_I2S_FMT_ALIGN(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) UNIPERIF_I2S_FMT_ALIGN_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) #define SET_UNIPERIF_I2S_FMT_ALIGN_LEFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) UNIPERIF_I2S_FMT_ALIGN_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) #define SET_UNIPERIF_I2S_FMT_ALIGN_RIGHT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) UNIPERIF_I2S_FMT_ALIGN_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) /* ORDER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) #define UNIPERIF_I2S_FMT_ORDER_SHIFT(ip) 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) #define UNIPERIF_I2S_FMT_ORDER_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) #define GET_UNIPERIF_I2S_FMT_ORDER(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) UNIPERIF_I2S_FMT_ORDER_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) #define SET_UNIPERIF_I2S_FMT_ORDER_LSB(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) UNIPERIF_I2S_FMT_ORDER_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) #define SET_UNIPERIF_I2S_FMT_ORDER_MSB(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) UNIPERIF_I2S_FMT_ORDER_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) /* NUM_CH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) #define UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip) 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) #define UNIPERIF_I2S_FMT_NUM_CH_MASK(ip) 0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) #define GET_UNIPERIF_I2S_FMT_NUM_CH(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) UNIPERIF_I2S_FMT_NUM_CH_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) #define SET_UNIPERIF_I2S_FMT_NUM_CH(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) UNIPERIF_I2S_FMT_NUM_CH_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) /* NO_OF_SAMPLES_TO_READ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) #define UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip) 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) #define UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip) 0xfffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) #define GET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) #define SET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) UNIPERIF_I2S_FMT_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) * UNIPERIF_BIT_CONTROL reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) #define UNIPERIF_BIT_CONTROL_OFFSET(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0x004c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) #define GET_UNIPERIF_BIT_CONTROL(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) readl_relaxed(ip->base + UNIPERIF_BIT_CONTROL_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) #define SET_UNIPERIF_BIT_CONTROL(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) writel_relaxed(value, ip->base + UNIPERIF_BIT_CONTROL_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) /* CLR_UNDERFLOW_DURATION */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996) #define UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip) 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) #define UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) #define GET_UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) UNIPERIF_BIT_CONTROL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) #define SET_UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) UNIPERIF_BIT_CONTROL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) /* CHL_STS_UPDATE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) #define UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip) 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) #define UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) #define GET_UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) UNIPERIF_BIT_CONTROL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) #define SET_UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) SET_UNIPERIF_BIT_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) UNIPERIF_BIT_CONTROL_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) * UNIPERIF_STATUS_1 reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) #define UNIPERIF_STATUS_1_OFFSET(ip) 0x0050
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) #define GET_UNIPERIF_STATUS_1(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) readl_relaxed(ip->base + UNIPERIF_STATUS_1_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) #define SET_UNIPERIF_STATUS_1(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) writel_relaxed(value, ip->base + UNIPERIF_STATUS_1_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) /* UNDERFLOW_DURATION */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) #define UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) #define UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip) 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) #define GET_UNIPERIF_STATUS_1_UNDERFLOW_DURATION(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) UNIPERIF_STATUS_1_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) #define SET_UNIPERIF_STATUS_1_UNDERFLOW_DURATION(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) UNIPERIF_STATUS_1_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) * UNIPERIF_CHANNEL_STA_REGN reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) #define UNIPERIF_CHANNEL_STA_REGN(ip, n) (0x0060 + (4 * n))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) #define GET_UNIPERIF_CHANNEL_STA_REGN(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REGN(ip, n))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) #define SET_UNIPERIF_CHANNEL_STA_REGN(ip, n, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) writel_relaxed(value, ip->base + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) UNIPERIF_CHANNEL_STA_REGN(ip, n))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) * UNIPERIF_USER_VALIDITY reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) #define UNIPERIF_USER_VALIDITY_OFFSET(ip) 0x0090
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) #define GET_UNIPERIF_USER_VALIDITY(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) readl_relaxed(ip->base + UNIPERIF_USER_VALIDITY_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) #define SET_UNIPERIF_USER_VALIDITY(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) writel_relaxed(value, ip->base + UNIPERIF_USER_VALIDITY_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) /* VALIDITY_LEFT_AND_RIGHT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) #define UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip) 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) #define UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip) 0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) #define GET_UNIPERIF_USER_VALIDITY_VALIDITY_LR(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) UNIPERIF_USER_VALIDITY_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) #define SET_UNIPERIF_USER_VALIDITY_VALIDITY_LR(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) UNIPERIF_USER_VALIDITY_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) value ? 0x3 : 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) * UNIPERIF_DBG_STANDBY_LEFT_SP reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) #define UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip) 0x0150
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) #define UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) #define UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 0xFFFFFF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) #define GET_UNIPERIF_DBG_STANDBY_LEFT_SP(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) #define SET_UNIPERIF_DBG_STANDBY_LEFT_SP(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) * UNIPERIF_TDM_ENABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) #define UNIPERIF_TDM_ENABLE_OFFSET(ip) 0x0118
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) #define GET_UNIPERIF_TDM_ENABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) readl_relaxed(ip->base + UNIPERIF_TDM_ENABLE_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) #define SET_UNIPERIF_TDM_ENABLE(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) writel_relaxed(value, ip->base + UNIPERIF_TDM_ENABLE_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) /* TDM_ENABLE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) #define UNIPERIF_TDM_ENABLE_EN_TDM_SHIFT(ip) 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) #define UNIPERIF_TDM_ENABLE_EN_TDM_MASK(ip) 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) #define GET_UNIPERIF_TDM_ENABLE_EN_TDM(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) UNIPERIF_TDM_ENABLE_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) UNIPERIF_TDM_ENABLE_EN_TDM_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) UNIPERIF_TDM_ENABLE_EN_TDM_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) #define SET_UNIPERIF_TDM_ENABLE_TDM_ENABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) UNIPERIF_TDM_ENABLE_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) UNIPERIF_TDM_ENABLE_EN_TDM_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) UNIPERIF_TDM_ENABLE_EN_TDM_MASK(ip), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) #define SET_UNIPERIF_TDM_ENABLE_TDM_DISABLE(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) UNIPERIF_TDM_ENABLE_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) UNIPERIF_TDM_ENABLE_EN_TDM_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) UNIPERIF_TDM_ENABLE_EN_TDM_MASK(ip), 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) * UNIPERIF_TDM_FS_REF_FREQ
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) #define UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip) 0x011c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) #define GET_UNIPERIF_TDM_FS_REF_FREQ(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) readl_relaxed(ip->base + UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) #define SET_UNIPERIF_TDM_FS_REF_FREQ(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) writel_relaxed(value, ip->base + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) /* REF_FREQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) #define UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip) 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) #define VALUE_UNIPERIF_TDM_FS_REF_FREQ_8KHZ(ip) 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) #define VALUE_UNIPERIF_TDM_FS_REF_FREQ_16KHZ(ip) 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) #define VALUE_UNIPERIF_TDM_FS_REF_FREQ_32KHZ(ip) 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) #define VALUE_UNIPERIF_TDM_FS_REF_FREQ_48KHZ(ip) 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) #define UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip) 0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) #define GET_UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) #define SET_UNIPERIF_TDM_FS_REF_FREQ_8KHZ(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) VALUE_UNIPERIF_TDM_FS_REF_FREQ_8KHZ(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) #define SET_UNIPERIF_TDM_FS_REF_FREQ_16KHZ(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) VALUE_UNIPERIF_TDM_FS_REF_FREQ_16KHZ(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) #define SET_UNIPERIF_TDM_FS_REF_FREQ_32KHZ(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) VALUE_UNIPERIF_TDM_FS_REF_FREQ_32KHZ(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) #define SET_UNIPERIF_TDM_FS_REF_FREQ_48KHZ(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) UNIPERIF_TDM_FS_REF_FREQ_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) UNIPERIF_TDM_FS_REF_FREQ_REF_FREQ_MASK(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) VALUE_UNIPERIF_TDM_FS_REF_FREQ_48KHZ(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) * UNIPERIF_TDM_FS_REF_DIV
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) #define UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip) 0x0120
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) #define GET_UNIPERIF_TDM_FS_REF_DIV(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) readl_relaxed(ip->base + UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) #define SET_UNIPERIF_TDM_FS_REF_DIV(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) writel_relaxed(value, ip->base + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) /* NUM_TIMESLOT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) #define UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_SHIFT(ip) 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) #define UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_MASK(ip) 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) #define GET_UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT(ip) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) GET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_MASK(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) #define SET_UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT(ip, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) SET_UNIPERIF_REG(ip, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) UNIPERIF_TDM_FS_REF_DIV_OFFSET(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_SHIFT(ip), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) UNIPERIF_TDM_FS_REF_DIV_NUM_TIMESLOT_MASK(ip), value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) * UNIPERIF_TDM_WORD_POS_X_Y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) * 32 bits of UNIPERIF_TDM_WORD_POS_X_Y register shall be set in 1 shot
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) #define UNIPERIF_TDM_WORD_POS_1_2_OFFSET(ip) 0x013c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) #define UNIPERIF_TDM_WORD_POS_3_4_OFFSET(ip) 0x0140
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) #define UNIPERIF_TDM_WORD_POS_5_6_OFFSET(ip) 0x0144
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) #define UNIPERIF_TDM_WORD_POS_7_8_OFFSET(ip) 0x0148
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) #define GET_UNIPERIF_TDM_WORD_POS(ip, words) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) readl_relaxed(ip->base + UNIPERIF_TDM_WORD_POS_##words##_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) #define SET_UNIPERIF_TDM_WORD_POS(ip, words, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) writel_relaxed(value, ip->base + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) UNIPERIF_TDM_WORD_POS_##words##_OFFSET(ip))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) * uniperipheral IP capabilities
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) #define UNIPERIF_FIFO_SIZE 70 /* FIFO is 70 cells deep */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) #define UNIPERIF_FIFO_FRAMES 4 /* FDMA trigger limit in frames */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) #define UNIPERIF_TYPE_IS_HDMI(p) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) ((p)->type == SND_ST_UNIPERIF_TYPE_HDMI)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) #define UNIPERIF_TYPE_IS_PCM(p) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) ((p)->type == SND_ST_UNIPERIF_TYPE_PCM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) #define UNIPERIF_TYPE_IS_SPDIF(p) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) ((p)->type == SND_ST_UNIPERIF_TYPE_SPDIF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) #define UNIPERIF_TYPE_IS_IEC958(p) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) (UNIPERIF_TYPE_IS_HDMI(p) || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) UNIPERIF_TYPE_IS_SPDIF(p))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) #define UNIPERIF_TYPE_IS_TDM(p) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) ((p)->type == SND_ST_UNIPERIF_TYPE_TDM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) * Uniperipheral IP revisions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) enum uniperif_version {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) SND_ST_UNIPERIF_VERSION_UNKNOWN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) /* SASG1 (Orly), Newman */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) SND_ST_UNIPERIF_VERSION_C6AUD0_UNI_1_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) /* SASC1, SASG2 (Orly2) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) SND_ST_UNIPERIF_VERSION_UNI_PLR_1_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) /* SASC1, SASG2 (Orly2), TELSS, Cannes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) SND_ST_UNIPERIF_VERSION_UNI_RDR_1_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) /* TELSS (SASC1) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) SND_ST_UNIPERIF_VERSION_TDM_PLR_1_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) /* Cannes/Monaco */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) enum uniperif_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) SND_ST_UNIPERIF_TYPE_NONE = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) SND_ST_UNIPERIF_TYPE_HDMI = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) SND_ST_UNIPERIF_TYPE_PCM = 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) SND_ST_UNIPERIF_TYPE_SPDIF = 0x04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) SND_ST_UNIPERIF_TYPE_TDM = 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) enum uniperif_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) UNIPERIF_STATE_STOPPED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) UNIPERIF_STATE_STARTED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) UNIPERIF_STATE_STANDBY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) UNIPERIF_STATE_UNDERFLOW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) UNIPERIF_STATE_OVERFLOW = UNIPERIF_STATE_UNDERFLOW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) UNIPERIF_STATE_XRUN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) enum uniperif_iec958_encoding_mode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) UNIPERIF_IEC958_ENCODING_MODE_PCM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) UNIPERIF_IEC958_ENCODING_MODE_ENCODED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) enum uniperif_word_pos {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) WORD_1_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) WORD_3_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) WORD_5_6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) WORD_7_8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) WORD_MAX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) struct uniperif_iec958_settings {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) enum uniperif_iec958_encoding_mode encoding_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) struct snd_aes_iec958 iec958;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) struct dai_tdm_slot {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) unsigned int mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) int slots;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) int slot_width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) unsigned int avail_slots;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) struct uniperif {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) /* System information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) enum uniperif_type type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) int underflow_enabled; /* Underflow recovery mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) struct device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) int id; /* instance value of the uniperipheral IP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) int ver; /* IP version, used by register access macros */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) struct regmap_field *clk_sel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) struct regmap_field *valid_sel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) spinlock_t irq_lock; /* use to prevent race condition with IRQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) /* capabilities */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) const struct snd_pcm_hardware *hw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) /* Resources */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) struct resource *mem_region;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) void __iomem *base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) unsigned long fifo_phys_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) int irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) /* Clocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) struct clk *clk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) int mclk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) int clk_adj;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) /* Runtime data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) enum uniperif_state state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) struct snd_pcm_substream *substream;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) /* Specific to IEC958 player */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) struct uniperif_iec958_settings stream_settings;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) struct mutex ctrl_lock; /* For resource updated by stream and controls*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) /*alsa ctrl*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) struct snd_kcontrol_new *snd_ctrls;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) int num_ctrls;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) /* dai properties */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) unsigned int daifmt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) struct dai_tdm_slot tdm_slot;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) /* DAI callbacks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) const struct snd_soc_dai_ops *dai_ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) struct sti_uniperiph_dai {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) int stream;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) struct uniperif *uni;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) struct snd_dmaengine_dai_dma_data dma_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) struct sti_uniperiph_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) struct platform_device *pdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) struct snd_soc_dai_driver *dai;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) struct sti_uniperiph_dai dai_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) static __maybe_unused const struct snd_pcm_hardware uni_tdm_hw = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) .info = SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354) SNDRV_PCM_INFO_MMAP_VALID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S16_LE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) .rates = SNDRV_PCM_RATE_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) .rate_min = 8000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) .rate_max = 48000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362) .channels_min = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) .channels_max = 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) .periods_min = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) .periods_max = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368) .period_bytes_min = 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369) .period_bytes_max = 64 * PAGE_SIZE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370) .buffer_bytes_max = 256 * PAGE_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) /* uniperiph player*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) int uni_player_init(struct platform_device *pdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) struct uniperif *uni_player);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) int uni_player_resume(struct uniperif *player);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378) /* uniperiph reader */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) int uni_reader_init(struct platform_device *pdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) struct uniperif *uni_reader);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) /* common */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) int sti_uniperiph_dai_set_fmt(struct snd_soc_dai *dai,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384) unsigned int fmt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) int sti_uniperiph_dai_hw_params(struct snd_pcm_substream *substream,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) struct snd_pcm_hw_params *params,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) struct snd_soc_dai *dai);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) static inline int sti_uniperiph_get_user_frame_size(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) struct snd_pcm_runtime *runtime)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) return (runtime->channels * snd_pcm_format_width(runtime->format) / 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) static inline int sti_uniperiph_get_unip_tdm_frame_size(struct uniperif *uni)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) return (uni->tdm_slot.slots * uni->tdm_slot.slot_width / 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) int sti_uniperiph_reset(struct uniperif *uni);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) int sti_uniperiph_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) unsigned int rx_mask, int slots,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) int slot_width);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) int sti_uniperiph_get_tdm_word_pos(struct uniperif *uni,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) unsigned int *word_pos);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) int sti_uniperiph_fix_tdm_chan(struct snd_pcm_hw_params *params,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) struct snd_pcm_hw_rule *rule);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) int sti_uniperiph_fix_tdm_format(struct snd_pcm_hw_params *params,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) struct snd_pcm_hw_rule *rule);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) #endif