1e1ecace6SArnaud Pouliquen /* 2e1ecace6SArnaud Pouliquen * Copyright (C) STMicroelectronics SA 2015 3e1ecace6SArnaud Pouliquen * Authors: Arnaud Pouliquen <arnaud.pouliquen@st.com> 4e1ecace6SArnaud Pouliquen * for STMicroelectronics. 5e1ecace6SArnaud Pouliquen * License terms: GNU General Public License (GPL), version 2 6e1ecace6SArnaud Pouliquen */ 7e1ecace6SArnaud Pouliquen 8e1ecace6SArnaud Pouliquen #ifndef __SND_ST_AUD_UNIPERIF_H 9e1ecace6SArnaud Pouliquen #define __SND_ST_AUD_UNIPERIF_H 10e1ecace6SArnaud Pouliquen 11e1ecace6SArnaud Pouliquen #include <linux/regmap.h> 12e1ecace6SArnaud Pouliquen 1376c2145dSArnaud Pouliquen #include <sound/dmaengine_pcm.h> 1476c2145dSArnaud Pouliquen 15e1ecace6SArnaud Pouliquen /* 16e1ecace6SArnaud Pouliquen * Register access macros 17e1ecace6SArnaud Pouliquen */ 18e1ecace6SArnaud Pouliquen 19e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_REG(ip, offset, shift, mask) \ 20e1ecace6SArnaud Pouliquen ((readl_relaxed(ip->base + offset) >> shift) & mask) 21e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_REG(ip, offset, shift, mask, value) \ 22e1ecace6SArnaud Pouliquen writel_relaxed(((readl_relaxed(ip->base + offset) & \ 23e1ecace6SArnaud Pouliquen ~(mask << shift)) | (((value) & mask) << shift)), ip->base + offset) 24e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_BIT_REG(ip, offset, shift, mask, value) \ 25e1ecace6SArnaud Pouliquen writel_relaxed((((value) & mask) << shift), ip->base + offset) 26e1ecace6SArnaud Pouliquen 27e1ecace6SArnaud Pouliquen /* 28e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_SOFT_RST reg 29e1ecace6SArnaud Pouliquen */ 30e1ecace6SArnaud Pouliquen 31e1ecace6SArnaud Pouliquen #define UNIPERIF_SOFT_RST_OFFSET(ip) 0x0000 32e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_SOFT_RST(ip) \ 33e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 34e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_SOFT_RST_OFFSET(ip)) : 0) 35e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_SOFT_RST(ip, value) \ 36e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_SOFT_RST_OFFSET(ip)) 37e1ecace6SArnaud Pouliquen 38e1ecace6SArnaud Pouliquen /* SOFT_RST */ 39e1ecace6SArnaud Pouliquen #define UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip) 0x0 40e1ecace6SArnaud Pouliquen #define UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip) 0x1 41e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_SOFT_RST_SOFT_RST(ip) \ 42e1ecace6SArnaud Pouliquen SET_UNIPERIF_BIT_REG(ip, \ 43e1ecace6SArnaud Pouliquen UNIPERIF_SOFT_RST_OFFSET(ip), \ 44e1ecace6SArnaud Pouliquen UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip), \ 45e1ecace6SArnaud Pouliquen UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip), 1) 46e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_SOFT_RST_SOFT_RST(ip) \ 47e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 48e1ecace6SArnaud Pouliquen UNIPERIF_SOFT_RST_OFFSET(ip), \ 49e1ecace6SArnaud Pouliquen UNIPERIF_SOFT_RST_SOFT_RST_SHIFT(ip), \ 50e1ecace6SArnaud Pouliquen UNIPERIF_SOFT_RST_SOFT_RST_MASK(ip)) 51e1ecace6SArnaud Pouliquen 52e1ecace6SArnaud Pouliquen /* 53e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_FIFO_DATA reg 54e1ecace6SArnaud Pouliquen */ 55e1ecace6SArnaud Pouliquen 56e1ecace6SArnaud Pouliquen #define UNIPERIF_FIFO_DATA_OFFSET(ip) 0x0004 57e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_DATA(ip, value) \ 58e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_FIFO_DATA_OFFSET(ip)) 59e1ecace6SArnaud Pouliquen 60e1ecace6SArnaud Pouliquen /* 61e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_CHANNEL_STA_REGN reg 62e1ecace6SArnaud Pouliquen */ 63e1ecace6SArnaud Pouliquen 64e1ecace6SArnaud Pouliquen #define UNIPERIF_CHANNEL_STA_REGN(ip, n) (0x0060 + (4 * n)) 65e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CHANNEL_STA_REGN(ip) \ 66e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REGN(ip, n)) 67e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CHANNEL_STA_REGN(ip, n, value) \ 68e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + \ 69e1ecace6SArnaud Pouliquen UNIPERIF_CHANNEL_STA_REGN(ip, n)) 70e1ecace6SArnaud Pouliquen 71e1ecace6SArnaud Pouliquen #define UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip) 0x0060 72e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CHANNEL_STA_REG0(ip) \ 73e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip)) 74e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CHANNEL_STA_REG0(ip, value) \ 75e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG0_OFFSET(ip)) 76e1ecace6SArnaud Pouliquen 77e1ecace6SArnaud Pouliquen #define UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip) 0x0064 78e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CHANNEL_STA_REG1(ip) \ 79e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip)) 80e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CHANNEL_STA_REG1(ip, value) \ 81e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG1_OFFSET(ip)) 82e1ecace6SArnaud Pouliquen 83e1ecace6SArnaud Pouliquen #define UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip) 0x0068 84e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CHANNEL_STA_REG2(ip) \ 85e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip)) 86e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CHANNEL_STA_REG2(ip, value) \ 87e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG2_OFFSET(ip)) 88e1ecace6SArnaud Pouliquen 89e1ecace6SArnaud Pouliquen #define UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip) 0x006C 90e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CHANNEL_STA_REG3(ip) \ 91e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip)) 92e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CHANNEL_STA_REG3(ip, value) \ 93e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG3_OFFSET(ip)) 94e1ecace6SArnaud Pouliquen 95e1ecace6SArnaud Pouliquen #define UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip) 0x0070 96e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CHANNEL_STA_REG4(ip) \ 97e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip)) 98e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CHANNEL_STA_REG4(ip, value) \ 99e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG4_OFFSET(ip)) 100e1ecace6SArnaud Pouliquen 101e1ecace6SArnaud Pouliquen #define UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip) 0x0074 102e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CHANNEL_STA_REG5(ip) \ 103e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip)) 104e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CHANNEL_STA_REG5(ip, value) \ 105e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_CHANNEL_STA_REG5_OFFSET(ip)) 106e1ecace6SArnaud Pouliquen 107e1ecace6SArnaud Pouliquen /* 108e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_ITS reg 109e1ecace6SArnaud Pouliquen */ 110e1ecace6SArnaud Pouliquen 111e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_OFFSET(ip) 0x000C 112e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_ITS(ip) \ 113e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_ITS_OFFSET(ip)) 114e1ecace6SArnaud Pouliquen 115e1ecace6SArnaud Pouliquen /* MEM_BLK_READ */ 116e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_MEM_BLK_READ_SHIFT(ip) 5 117e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_MEM_BLK_READ_MASK(ip) \ 118e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITS_MEM_BLK_READ_SHIFT(ip))) 119e1ecace6SArnaud Pouliquen 120e1ecace6SArnaud Pouliquen /* FIFO_ERROR */ 121e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_FIFO_ERROR_SHIFT(ip) \ 122e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 123e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_FIFO_ERROR_MASK(ip) \ 124e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITS_FIFO_ERROR_SHIFT(ip))) 125e1ecace6SArnaud Pouliquen 126e1ecace6SArnaud Pouliquen /* DMA_ERROR */ 127e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_DMA_ERROR_SHIFT(ip) 9 128e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_DMA_ERROR_MASK(ip) \ 129e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITS_DMA_ERROR_SHIFT(ip))) 130e1ecace6SArnaud Pouliquen 131e1ecace6SArnaud Pouliquen /* UNDERFLOW_REC_DONE */ 132e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_UNDERFLOW_REC_DONE_SHIFT(ip) \ 133e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12) 134e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_UNDERFLOW_REC_DONE_MASK(ip) \ 135e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 136e1ecace6SArnaud Pouliquen 0 : (BIT(UNIPERIF_ITS_UNDERFLOW_REC_DONE_SHIFT(ip)))) 137e1ecace6SArnaud Pouliquen 138e1ecace6SArnaud Pouliquen /* UNDERFLOW_REC_FAILED */ 139e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_UNDERFLOW_REC_FAILED_SHIFT(ip) \ 140e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13) 141e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_UNDERFLOW_REC_FAILED_MASK(ip) \ 142e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 143e1ecace6SArnaud Pouliquen 0 : (BIT(UNIPERIF_ITS_UNDERFLOW_REC_FAILED_SHIFT(ip)))) 144e1ecace6SArnaud Pouliquen 145e1ecace6SArnaud Pouliquen /* 146e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_ITS_BCLR reg 147e1ecace6SArnaud Pouliquen */ 148e1ecace6SArnaud Pouliquen 149e1ecace6SArnaud Pouliquen /* FIFO_ERROR */ 150e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_BCLR_FIFO_ERROR_SHIFT(ip) \ 151e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 152e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_BCLR_FIFO_ERROR_MASK(ip) \ 153e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITS_BCLR_FIFO_ERROR_SHIFT(ip))) 154e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITS_BCLR_FIFO_ERROR(ip) \ 155e1ecace6SArnaud Pouliquen SET_UNIPERIF_ITS_BCLR(ip, \ 156e1ecace6SArnaud Pouliquen UNIPERIF_ITS_BCLR_FIFO_ERROR_MASK(ip)) 157e1ecace6SArnaud Pouliquen 158e1ecace6SArnaud Pouliquen #define UNIPERIF_ITS_BCLR_OFFSET(ip) 0x0010 159e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITS_BCLR(ip, value) \ 160e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_ITS_BCLR_OFFSET(ip)) 161e1ecace6SArnaud Pouliquen 162e1ecace6SArnaud Pouliquen /* 163e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_ITM reg 164e1ecace6SArnaud Pouliquen */ 165e1ecace6SArnaud Pouliquen 166e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_OFFSET(ip) 0x0018 167e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_ITM(ip) \ 168e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_ITM_OFFSET(ip)) 169e1ecace6SArnaud Pouliquen 170e1ecace6SArnaud Pouliquen /* FIFO_ERROR */ 171e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_FIFO_ERROR_SHIFT(ip) \ 172e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 173e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_FIFO_ERROR_MASK(ip) \ 174e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITM_FIFO_ERROR_SHIFT(ip))) 175e1ecace6SArnaud Pouliquen 176e1ecace6SArnaud Pouliquen /* UNDERFLOW_REC_DONE */ 177e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_UNDERFLOW_REC_DONE_SHIFT(ip) \ 178e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12) 179e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_UNDERFLOW_REC_DONE_MASK(ip) \ 180e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 181e1ecace6SArnaud Pouliquen 0 : (BIT(UNIPERIF_ITM_UNDERFLOW_REC_DONE_SHIFT(ip)))) 182e1ecace6SArnaud Pouliquen 183e1ecace6SArnaud Pouliquen /* UNDERFLOW_REC_FAILED */ 184e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_UNDERFLOW_REC_FAILED_SHIFT(ip) \ 185e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13) 186e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_UNDERFLOW_REC_FAILED_MASK(ip) \ 187e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 188e1ecace6SArnaud Pouliquen 0 : (BIT(UNIPERIF_ITM_UNDERFLOW_REC_FAILED_SHIFT(ip)))) 189e1ecace6SArnaud Pouliquen 190e1ecace6SArnaud Pouliquen /* 191e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_ITM_BCLR reg 192e1ecace6SArnaud Pouliquen */ 193e1ecace6SArnaud Pouliquen 194e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BCLR_OFFSET(ip) 0x001c 195e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITM_BCLR(ip, value) \ 196e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_ITM_BCLR_OFFSET(ip)) 197e1ecace6SArnaud Pouliquen 198e1ecace6SArnaud Pouliquen /* FIFO_ERROR */ 199e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BCLR_FIFO_ERROR_SHIFT(ip) \ 200e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 201e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BCLR_FIFO_ERROR_MASK(ip) \ 202e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITM_BCLR_FIFO_ERROR_SHIFT(ip))) 203e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITM_BCLR_FIFO_ERROR(ip) \ 204e1ecace6SArnaud Pouliquen SET_UNIPERIF_ITM_BCLR(ip, \ 205e1ecace6SArnaud Pouliquen UNIPERIF_ITM_BCLR_FIFO_ERROR_MASK(ip)) 206e1ecace6SArnaud Pouliquen 207e1ecace6SArnaud Pouliquen /* DMA_ERROR */ 208e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BCLR_DMA_ERROR_SHIFT(ip) 9 209e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BCLR_DMA_ERROR_MASK(ip) \ 210e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITM_BCLR_DMA_ERROR_SHIFT(ip))) 211e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITM_BCLR_DMA_ERROR(ip) \ 212e1ecace6SArnaud Pouliquen SET_UNIPERIF_ITM_BCLR(ip, \ 213e1ecace6SArnaud Pouliquen UNIPERIF_ITM_BCLR_DMA_ERROR_MASK(ip)) 214e1ecace6SArnaud Pouliquen 215e1ecace6SArnaud Pouliquen /* 216e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_ITM_BSET reg 217e1ecace6SArnaud Pouliquen */ 218e1ecace6SArnaud Pouliquen 219e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_OFFSET(ip) 0x0020 220e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITM_BSET(ip, value) \ 221e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_ITM_BSET_OFFSET(ip)) 222e1ecace6SArnaud Pouliquen 223e1ecace6SArnaud Pouliquen /* FIFO_ERROR */ 224e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_FIFO_ERROR_SHIFT(ip) \ 225e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 8) 226e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_FIFO_ERROR_MASK(ip) \ 227e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITM_BSET_FIFO_ERROR_SHIFT(ip))) 228e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITM_BSET_FIFO_ERROR(ip) \ 229e1ecace6SArnaud Pouliquen SET_UNIPERIF_ITM_BSET(ip, \ 230e1ecace6SArnaud Pouliquen UNIPERIF_ITM_BSET_FIFO_ERROR_MASK(ip)) 231e1ecace6SArnaud Pouliquen 232e1ecace6SArnaud Pouliquen /* MEM_BLK_READ */ 233e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_MEM_BLK_READ_SHIFT(ip) 5 234e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_MEM_BLK_READ_MASK(ip) \ 235e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITM_BSET_MEM_BLK_READ_SHIFT(ip))) 236e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITM_BSET_MEM_BLK_READ(ip) \ 237e1ecace6SArnaud Pouliquen SET_UNIPERIF_ITM_BSET(ip, \ 238e1ecace6SArnaud Pouliquen UNIPERIF_ITM_BSET_MEM_BLK_READ_MASK(ip)) 239e1ecace6SArnaud Pouliquen 240e1ecace6SArnaud Pouliquen /* DMA_ERROR */ 241e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_DMA_ERROR_SHIFT(ip) 9 242e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_DMA_ERROR_MASK(ip) \ 243e1ecace6SArnaud Pouliquen (BIT(UNIPERIF_ITM_BSET_DMA_ERROR_SHIFT(ip))) 244e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITM_BSET_DMA_ERROR(ip) \ 245e1ecace6SArnaud Pouliquen SET_UNIPERIF_ITM_BSET(ip, \ 246e1ecace6SArnaud Pouliquen UNIPERIF_ITM_BSET_DMA_ERROR_MASK(ip)) 247e1ecace6SArnaud Pouliquen 248e1ecace6SArnaud Pouliquen /* UNDERFLOW_REC_DONE */ 249e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_SHIFT(ip) \ 250e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 12) 251e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_MASK(ip) \ 252e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 253e1ecace6SArnaud Pouliquen 0 : (BIT(UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_SHIFT(ip)))) 254e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE(ip) \ 255e1ecace6SArnaud Pouliquen SET_UNIPERIF_ITM_BSET(ip, \ 256e1ecace6SArnaud Pouliquen UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE_MASK(ip)) 257e1ecace6SArnaud Pouliquen 258e1ecace6SArnaud Pouliquen /* UNDERFLOW_REC_FAILED */ 259e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_SHIFT(ip) \ 260e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 13) 261e1ecace6SArnaud Pouliquen #define UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_MASK(ip) \ 262e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? \ 263e1ecace6SArnaud Pouliquen 0 : (BIT(UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_SHIFT(ip)))) 264e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED(ip) \ 265e1ecace6SArnaud Pouliquen SET_UNIPERIF_ITM_BSET(ip, \ 266e1ecace6SArnaud Pouliquen UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED_MASK(ip)) 267e1ecace6SArnaud Pouliquen 268e1ecace6SArnaud Pouliquen /* 269e1ecace6SArnaud Pouliquen * UNIPERIF_CONFIG reg 270e1ecace6SArnaud Pouliquen */ 271e1ecace6SArnaud Pouliquen 272e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_OFFSET(ip) 0x0040 273e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG(ip) \ 274e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CONFIG_OFFSET(ip)) 275e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG(ip, value) \ 276e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_CONFIG_OFFSET(ip)) 277e1ecace6SArnaud Pouliquen 278e1ecace6SArnaud Pouliquen /* PARITY_CNTR */ 279e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip) 0 280e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip) 0x1 281e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_PARITY_CNTR(ip) \ 282e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 283e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 284e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \ 285e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip)) 286e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_PARITY_CNTR_BY_HW(ip) \ 287e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 288e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 289e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \ 290e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip), 0) 291e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_PARITY_CNTR_BY_SW(ip) \ 292e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 293e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 294e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_PARITY_CNTR_SHIFT(ip), \ 295e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_PARITY_CNTR_MASK(ip), 1) 296e1ecace6SArnaud Pouliquen 297e1ecace6SArnaud Pouliquen /* CHANNEL_STA_CNTR */ 298e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip) 1 299e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip) 0x1 300e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR(ip) \ 301e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 302e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 303e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \ 304e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip)) 305e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR_BY_SW(ip) \ 306e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 307e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 308e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \ 309e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip), 0) 310e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_CHANNEL_STA_CNTR_BY_HW(ip) \ 311e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 312e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 313e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHANNEL_STA_CNTR_SHIFT(ip), \ 314e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHANNEL_STA_CNTR_MASK(ip), 1) 315e1ecace6SArnaud Pouliquen 316e1ecace6SArnaud Pouliquen /* USER_DAT_CNTR */ 317e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip) 2 318e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip) 0x1 319e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_USER_DAT_CNTR(ip) \ 320e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 321e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 322e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \ 323e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip)) 324e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_USER_DAT_CNTR_BY_HW(ip) \ 325e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 326e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 327e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \ 328e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip), 1) 329e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_USER_DAT_CNTR_BY_SW(ip) \ 330e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 331e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 332e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_USER_DAT_CNTR_SHIFT(ip), \ 333e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_USER_DAT_CNTR_MASK(ip), 0) 334e1ecace6SArnaud Pouliquen 335e1ecace6SArnaud Pouliquen /* VALIDITY_DAT_CNTR */ 336e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip) 3 337e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip) 0x1 338e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR(ip) \ 339e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 340e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 341e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \ 342e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip)) 343e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_BY_SW(ip) \ 344e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 345e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 346e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \ 347e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip), 0) 348e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_BY_HW(ip) \ 349e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 350e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 351e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_SHIFT(ip), \ 352e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_VALIDITY_DAT_CNTR_MASK(ip), 1) 353e1ecace6SArnaud Pouliquen 354e1ecace6SArnaud Pouliquen /* ONE_BIT_AUD_SUPPORT */ 355e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip) 4 356e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip) 0x1 357e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_ONE_BIT_AUD(ip) \ 358e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 359e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 360e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \ 361e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip)) 362e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_ONE_BIT_AUD_DISABLE(ip) \ 363e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 364e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 365e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \ 366e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip), 0) 367e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_ONE_BIT_AUD_ENABLE(ip) \ 368e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 369e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 370e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_ONE_BIT_AUD_SHIFT(ip), \ 371e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_ONE_BIT_AUD_MASK(ip), 1) 372e1ecace6SArnaud Pouliquen 373e1ecace6SArnaud Pouliquen /* MEMORY_FMT */ 374e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip) 5 375e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_MEM_FMT_MASK(ip) 0x1 376e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CONFIG_MEM_FMT_16_0(ip) 0 377e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CONFIG_MEM_FMT_16_16(ip) 1 378e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_MEM_FMT(ip) \ 379e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 380e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 381e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip), \ 382e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MEM_FMT_MASK(ip)) 383e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_MEM_FMT(ip, value) \ 384e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 385e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 386e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MEM_FMT_SHIFT(ip), \ 387e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MEM_FMT_MASK(ip), value) 388e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_MEM_FMT_16_0(ip) \ 389e1ecace6SArnaud Pouliquen SET_UNIPERIF_CONFIG_MEM_FMT(ip, \ 390e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CONFIG_MEM_FMT_16_0(ip)) 391e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_MEM_FMT_16_16(ip) \ 392e1ecace6SArnaud Pouliquen SET_UNIPERIF_CONFIG_MEM_FMT(ip, \ 393e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CONFIG_MEM_FMT_16_16(ip)) 394e1ecace6SArnaud Pouliquen 395e1ecace6SArnaud Pouliquen /* REPEAT_CHL_STS */ 396e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip) 6 397e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip) 0x1 398e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_REPEAT_CHL_STS(ip) \ 399e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 400e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 401e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \ 402e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip)) 403e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_REPEAT_CHL_STS_ENABLE(ip) \ 404e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 405e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 406e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \ 407e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip), 0) 408e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_REPEAT_CHL_STS_DISABLE(ip) \ 409e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 410e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 411e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_REPEAT_CHL_STS_SHIFT(ip), \ 412e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_REPEAT_CHL_STS_MASK(ip), 1) 413e1ecace6SArnaud Pouliquen 414e1ecace6SArnaud Pouliquen /* BACK_STALL_REQ */ 415e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip) \ 416e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 7 : -1) 417e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip) 0x1 418e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_BACK_STALL_REQ(ip) \ 419e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 420e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 421e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \ 422e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip)) 423e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_BACK_STALL_REQ_DISABLE(ip) \ 424e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 425e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 426e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \ 427e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip), 0) 428e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_BACK_STALL_REQ_ENABLE(ip) \ 429e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 430e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 431e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_BACK_STALL_REQ_SHIFT(ip), \ 432e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_BACK_STALL_REQ_MASK(ip), 1) 433e1ecace6SArnaud Pouliquen 434e1ecace6SArnaud Pouliquen /* FDMA_TRIGGER_LIMIT */ 435e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip) 8 436e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip) 0x7F 437e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_DMA_TRIG_LIMIT(ip) \ 438e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 439e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 440e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip), \ 441e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip)) 442e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_DMA_TRIG_LIMIT(ip, value) \ 443e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 444e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 445e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_DMA_TRIG_LIMIT_SHIFT(ip), \ 446e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(ip), value) 447e1ecace6SArnaud Pouliquen 448e1ecace6SArnaud Pouliquen /* CHL_STS_UPDATE */ 449e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip) \ 450e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 16 : -1) 451e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip) 0x1 452e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_CHL_STS_UPDATE(ip) \ 453e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 454e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 455e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip), \ 456e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip)) 457e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_CHL_STS_UPDATE(ip) \ 458e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 459e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 460e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHL_STS_UPDATE_SHIFT(ip), \ 461e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_CHL_STS_UPDATE_MASK(ip), 1) 462e1ecace6SArnaud Pouliquen 463e1ecace6SArnaud Pouliquen /* IDLE_MOD */ 464e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip) 18 465e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_IDLE_MOD_MASK(ip) 0x1 466e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_IDLE_MOD(ip) \ 467e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 468e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 469e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \ 470e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_IDLE_MOD_MASK(ip)) 471e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_IDLE_MOD_DISABLE(ip) \ 472e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 473e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 474e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \ 475e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_IDLE_MOD_MASK(ip), 0) 476e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_IDLE_MOD_ENABLE(ip) \ 477e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 478e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 479e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_IDLE_MOD_SHIFT(ip), \ 480e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_IDLE_MOD_MASK(ip), 1) 481e1ecace6SArnaud Pouliquen 482e1ecace6SArnaud Pouliquen /* SUBFRAME_SELECTION */ 483e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip) 19 484e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip) 0x1 485e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_SUBFRAME_SEL(ip) \ 486e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 487e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 488e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \ 489e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip)) 490e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_SUBFRAME_SEL_SUBF1_SUBF0(ip) \ 491e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 492e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 493e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \ 494e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip), 1) 495e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_SUBFRAME_SEL_SUBF0_SUBF1(ip) \ 496e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 497e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 498e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SUBFRAME_SEL_SHIFT(ip), \ 499e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SUBFRAME_SEL_MASK(ip), 0) 500e1ecace6SArnaud Pouliquen 501e1ecace6SArnaud Pouliquen /* FULL_SW_CONTROL */ 502e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip) 20 503e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip) 0x1 504e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_SPDIF_SW_CTRL(ip) \ 505e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 506e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 507e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \ 508e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip)) 509e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_SPDIF_SW_CTRL_ENABLE(ip) \ 510e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 511e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 512e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \ 513e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip), 1) 514e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_SPDIF_SW_CTRL_DISABLE(ip) \ 515e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 516e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 517e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SPDIF_SW_CTRL_SHIFT(ip), \ 518e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_SPDIF_SW_CTRL_MASK(ip), 0) 519e1ecace6SArnaud Pouliquen 520e1ecace6SArnaud Pouliquen /* MASTER_CLKEDGE */ 521e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip) \ 522e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 24 : -1) 523e1ecace6SArnaud Pouliquen #define UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip) 0x1 524e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CONFIG_MSTR_CLKEDGE(ip) \ 525e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 526e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 527e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \ 528e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip)) 529e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_MSTR_CLKEDGE_FALLING(ip) \ 530e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 531e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 532e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \ 533e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip), 1) 534e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CONFIG_MSTR_CLKEDGE_RISING(ip) \ 535e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 536e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_OFFSET(ip), \ 537e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MSTR_CLKEDGE_SHIFT(ip), \ 538e1ecace6SArnaud Pouliquen UNIPERIF_CONFIG_MSTR_CLKEDGE_MASK(ip), 0) 539e1ecace6SArnaud Pouliquen 540e1ecace6SArnaud Pouliquen /* 541e1ecace6SArnaud Pouliquen * UNIPERIF_CTRL reg 542e1ecace6SArnaud Pouliquen */ 543e1ecace6SArnaud Pouliquen 544e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_OFFSET(ip) 0x0044 545e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL(ip) \ 546e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CTRL_OFFSET(ip)) 547e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL(ip, value) \ 548e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_CTRL_OFFSET(ip)) 549e1ecace6SArnaud Pouliquen 550e1ecace6SArnaud Pouliquen /* OPERATION */ 551e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_OPERATION_SHIFT(ip) 0 552e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_OPERATION_MASK(ip) 0x7 553e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_OPERATION(ip) \ 554e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 555e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 556e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 557e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_MASK(ip)) 558e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CTRL_OPERATION_OFF(ip) 0 559e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_OPERATION_OFF(ip) \ 560e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 561e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 562e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 563e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_MASK(ip), \ 564e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CTRL_OPERATION_OFF(ip)) 565e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip) \ 566e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 1 : -1) 567e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip) \ 568e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 569e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 570e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 571e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_MASK(ip), \ 572e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PCM_NULL(ip)) 573e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip) \ 574e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 2 : -1) 575e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip) \ 576e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 577e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 578e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 579e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_MASK(ip), \ 580e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CTRL_OPERATION_MUTE_PAUSE_BURST(ip)) 581e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip) 3 582e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip) \ 583e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 584e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 585e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 586e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_MASK(ip), \ 587e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CTRL_OPERATION_PCM_DATA(ip)) 588e1ecace6SArnaud Pouliquen /* This is the same as above! */ 589e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip) 3 590e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip) \ 591e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 592e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 593e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 594e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_MASK(ip), \ 595e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CTRL_OPERATION_AUDIO_DATA(ip)) 596e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip) 4 597e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip) \ 598e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 599e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 600e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 601e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_MASK(ip), \ 602e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CTRL_OPERATION_ENC_DATA(ip)) 603e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CTRL_OPERATION_CD_DATA(ip) \ 604e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 5 : -1) 605e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_OPERATION_CD_DATA(ip) \ 606e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 607e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 608e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 609e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_MASK(ip), \ 610e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CTRL_OPERATION_CD_DATA(ip)) 611e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_CTRL_OPERATION_STANDBY(ip) \ 612e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 7) 613e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_OPERATION_STANDBY(ip) \ 614e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 615e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 616e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_SHIFT(ip), \ 617e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OPERATION_MASK(ip), \ 618e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_CTRL_OPERATION_STANDBY(ip)) 619e1ecace6SArnaud Pouliquen 620e1ecace6SArnaud Pouliquen /* EXIT_STBY_ON_EOBLOCK */ 621e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip) \ 622e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 3) 623e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip) 0x1 624e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK(ip) \ 625e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 626e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 627e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \ 628e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip)) 629e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_OFF(ip) \ 630e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 631e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 632e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \ 633e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip), 0) 634e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_ON(ip) \ 635e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 636e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 637e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_SHIFT(ip), \ 638e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_EXIT_STBY_ON_EOBLOCK_MASK(ip), 1) 639e1ecace6SArnaud Pouliquen 640e1ecace6SArnaud Pouliquen /* ROUNDING */ 641e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_ROUNDING_SHIFT(ip) 4 642e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_ROUNDING_MASK(ip) 0x1 643e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_ROUNDING(ip) \ 644e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 645e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 646e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \ 647e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ROUNDING_MASK(ip)) 648e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_ROUNDING_OFF(ip) \ 649e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 650e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 651e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \ 652e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ROUNDING_MASK(ip), 0) 653e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_ROUNDING_ON(ip) \ 654e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 655e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 656e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ROUNDING_SHIFT(ip), \ 657e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ROUNDING_MASK(ip), 1) 658e1ecace6SArnaud Pouliquen 659e1ecace6SArnaud Pouliquen /* DIVIDER */ 660e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_DIVIDER_SHIFT(ip) 5 661e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_DIVIDER_MASK(ip) 0xff 662e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_DIVIDER(ip) \ 663e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 664e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 665e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_DIVIDER_SHIFT(ip), \ 666e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_DIVIDER_MASK(ip)) 667e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_DIVIDER(ip, value) \ 668e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 669e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 670e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_DIVIDER_SHIFT(ip), \ 671e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_DIVIDER_MASK(ip), value) 672e1ecace6SArnaud Pouliquen 673e1ecace6SArnaud Pouliquen /* BYTE_SWAP */ 674e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip) \ 675e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 13 : -1) 676e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_BYTE_SWP_MASK(ip) 0x1 677e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_BYTE_SWP(ip) \ 678e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 679e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 680e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \ 681e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_BYTE_SWP_MASK(ip)) 682e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_BYTE_SWP_OFF(ip) \ 683e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 684e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 685e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \ 686e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_BYTE_SWP_MASK(ip), 0) 687e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_BYTE_SWP_ON(ip) \ 688e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 689e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 690e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_BYTE_SWP_SHIFT(ip), \ 691e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_BYTE_SWP_MASK(ip), 1) 692e1ecace6SArnaud Pouliquen 693e1ecace6SArnaud Pouliquen /* ZERO_STUFFING_HW_SW */ 694e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip) \ 695e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 14 : -1) 696e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_ZERO_STUFF_MASK(ip) 0x1 697e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_ZERO_STUFF(ip) \ 698e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 699e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 700e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \ 701e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ZERO_STUFF_MASK(ip)) 702e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_ZERO_STUFF_HW(ip) \ 703e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 704e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 705e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \ 706e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ZERO_STUFF_MASK(ip), 1) 707e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_ZERO_STUFF_SW(ip) \ 708e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 709e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 710e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ZERO_STUFF_SHIFT(ip), \ 711e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_ZERO_STUFF_MASK(ip), 0) 712e1ecace6SArnaud Pouliquen 713e1ecace6SArnaud Pouliquen /* SPDIF_LAT */ 714e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip) \ 715e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 16 : -1) 716e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_SPDIF_LAT_MASK(ip) 0x1 717e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_SPDIF_LAT(ip) \ 718e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 719e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 720e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \ 721e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_LAT_MASK(ip)) 722e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_SPDIF_LAT_ON(ip) \ 723e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 724e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 725e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \ 726e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_LAT_MASK(ip), 1) 727e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_SPDIF_LAT_OFF(ip) \ 728e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 729e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 730e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_LAT_SHIFT(ip), \ 731e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_LAT_MASK(ip), 0) 732e1ecace6SArnaud Pouliquen 733e1ecace6SArnaud Pouliquen /* EN_SPDIF_FORMATTING */ 734e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip) 17 735e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_SPDIF_FMT_MASK(ip) 0x1 736e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_SPDIF_FMT(ip) \ 737e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 738e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 739e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \ 740e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_FMT_MASK(ip)) 741e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_SPDIF_FMT_ON(ip) \ 742e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 743e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 744e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \ 745e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_FMT_MASK(ip), 1) 746e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_SPDIF_FMT_OFF(ip) \ 747e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 748e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 749e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_FMT_SHIFT(ip), \ 750e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_SPDIF_FMT_MASK(ip), 0) 751e1ecace6SArnaud Pouliquen 752e1ecace6SArnaud Pouliquen /* READER_OUT_SELECT */ 753e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip) \ 754e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 18 : -1) 755e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip) 0x1 756e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_READER_OUT_SEL(ip) \ 757e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 758e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 759e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \ 760e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip)) 761e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_READER_OUT_SEL_IN_MEM(ip) \ 762e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 763e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 764e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \ 765e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip), 0) 766e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_READER_OUT_SEL_ON_I2S_LINE(ip) \ 767e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 768e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 769e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_READER_OUT_SEL_SHIFT(ip), \ 770e1ecace6SArnaud Pouliquen CORAUD_UNIPERIF_CTRL_READER_OUT_SEL_MASK(ip), 1) 771e1ecace6SArnaud Pouliquen 772e1ecace6SArnaud Pouliquen /* UNDERFLOW_REC_WINDOW */ 773e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip) 20 774e1ecace6SArnaud Pouliquen #define UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip) 0xff 775e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW(ip) \ 776e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 777e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 778e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip), \ 779e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip)) 780e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW(ip, value) \ 781e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 782e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_OFFSET(ip), \ 783e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_SHIFT(ip), \ 784e1ecace6SArnaud Pouliquen UNIPERIF_CTRL_UNDERFLOW_REC_WINDOW_MASK(ip), value) 785e1ecace6SArnaud Pouliquen 786e1ecace6SArnaud Pouliquen /* 787e1ecace6SArnaud Pouliquen * UNIPERIF_I2S_FMT a.k.a UNIPERIF_FORMAT reg 788e1ecace6SArnaud Pouliquen */ 789e1ecace6SArnaud Pouliquen 790e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_OFFSET(ip) 0x0048 791e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT(ip) \ 792e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_I2S_FMT_OFFSET(ip)) 793e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT(ip, value) \ 794e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_I2S_FMT_OFFSET(ip)) 795e1ecace6SArnaud Pouliquen 796e1ecace6SArnaud Pouliquen /* NBIT */ 797e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_NBIT_SHIFT(ip) 0 798e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_NBIT_MASK(ip) 0x1 799e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT_NBIT(ip) \ 800e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 801e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 802e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \ 803e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NBIT_MASK(ip)) 804e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_NBIT_32(ip) \ 805e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 806e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 807e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \ 808e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NBIT_MASK(ip), 0) 809e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_NBIT_16(ip) \ 810e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 811e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 812e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NBIT_SHIFT(ip), \ 813e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NBIT_MASK(ip), 1) 814e1ecace6SArnaud Pouliquen 815e1ecace6SArnaud Pouliquen /* DATA_SIZE */ 816e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip) 1 817e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip) 0x7 818e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT_DATA_SIZE(ip) \ 819e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 820e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 821e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 822e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip)) 823e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_16(ip) \ 824e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 825e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 826e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 827e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 0) 828e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_18(ip) \ 829e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 830e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 831e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 832e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 1) 833e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_20(ip) \ 834e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 835e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 836e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 837e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 2) 838e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_24(ip) \ 839e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 840e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 841e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 842e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 3) 843e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMTL_DATA_SIZE_28(ip) \ 844e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 845e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 846e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 847e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 4) 848e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_DATA_SIZE_32(ip) \ 849e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 850e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 851e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_SHIFT(ip), \ 852e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_DATA_SIZE_MASK(ip), 5) 853e1ecace6SArnaud Pouliquen 854e1ecace6SArnaud Pouliquen /* LR_POL */ 855e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip) 4 856e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_LR_POL_MASK(ip) 0x1 857e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_I2S_FMT_LR_POL_LOW(ip) 0x0 858e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_I2S_FMT_LR_POL_HIG(ip) 0x1 859e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT_LR_POL(ip) \ 860e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 861e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 862e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip), \ 863e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_LR_POL_MASK(ip)) 864e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_LR_POL(ip, value) \ 865e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 866e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 867e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_LR_POL_SHIFT(ip), \ 868e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_LR_POL_MASK(ip), value) 869e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_LR_POL_LOW(ip) \ 870e1ecace6SArnaud Pouliquen SET_UNIPERIF_I2S_FMT_LR_POL(ip, \ 871e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_I2S_FMT_LR_POL_LOW(ip)) 872e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_LR_POL_HIG(ip) \ 873e1ecace6SArnaud Pouliquen SET_UNIPERIF_I2S_FMT_LR_POL(ip, \ 874e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_I2S_FMT_LR_POL_HIG(ip)) 875e1ecace6SArnaud Pouliquen 876e1ecace6SArnaud Pouliquen /* SCLK_EDGE */ 877e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip) 5 878e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip) 0x1 879e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT_SCLK_EDGE(ip) \ 880e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 881e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 882e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \ 883e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip)) 884e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_SCLK_EDGE_RISING(ip) \ 885e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 886e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 887e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \ 888e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip), 0) 889e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_SCLK_EDGE_FALLING(ip) \ 890e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 891e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 892e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_SCLK_EDGE_SHIFT(ip), \ 893e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_SCLK_EDGE_MASK(ip), 1) 894e1ecace6SArnaud Pouliquen 895e1ecace6SArnaud Pouliquen /* PADDING */ 896e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_PADDING_SHIFT(ip) 6 897e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_PADDING_MASK(ip) 0x1 898e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_PADDING_MASK(ip) 0x1 899e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip) 0x0 900e1ecace6SArnaud Pouliquen #define VALUE_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip) 0x1 901e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT_PADDING(ip) \ 902e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 903e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 904e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_PADDING_SHIFT(ip), \ 905e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_PADDING_MASK(ip)) 906e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_PADDING(ip, value) \ 907e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 908e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 909e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_PADDING_SHIFT(ip), \ 910e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_PADDING_MASK(ip), value) 911e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip) \ 912e1ecace6SArnaud Pouliquen SET_UNIPERIF_I2S_FMT_PADDING(ip, \ 913e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(ip)) 914e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip) \ 915e1ecace6SArnaud Pouliquen SET_UNIPERIF_I2S_FMT_PADDING(ip, \ 916e1ecace6SArnaud Pouliquen VALUE_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(ip)) 917e1ecace6SArnaud Pouliquen 918e1ecace6SArnaud Pouliquen /* ALIGN */ 919e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip) 7 920e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_ALIGN_MASK(ip) 0x1 921e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT_ALIGN(ip) \ 922e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 923e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 924e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \ 925e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ALIGN_MASK(ip)) 926e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_ALIGN_LEFT(ip) \ 927e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 928e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 929e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \ 930e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ALIGN_MASK(ip), 0) 931e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_ALIGN_RIGHT(ip) \ 932e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 933e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 934e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ALIGN_SHIFT(ip), \ 935e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ALIGN_MASK(ip), 1) 936e1ecace6SArnaud Pouliquen 937e1ecace6SArnaud Pouliquen /* ORDER */ 938e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_ORDER_SHIFT(ip) 8 939e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_ORDER_MASK(ip) 0x1 940e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT_ORDER(ip) \ 941e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 942e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 943e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \ 944e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ORDER_MASK(ip)) 945e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_ORDER_LSB(ip) \ 946e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 947e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 948e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \ 949e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ORDER_MASK(ip), 0) 950e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_ORDER_MSB(ip) \ 951e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 952e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 953e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ORDER_SHIFT(ip), \ 954e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_ORDER_MASK(ip), 1) 955e1ecace6SArnaud Pouliquen 956e1ecace6SArnaud Pouliquen /* NUM_CH */ 957e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip) 9 958e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_NUM_CH_MASK(ip) 0x7 959e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT_NUM_CH(ip) \ 960e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 961e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 962e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip), \ 963e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NUM_CH_MASK(ip)) 964e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_NUM_CH(ip, value) \ 965e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 966e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 967e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NUM_CH_SHIFT(ip), \ 968e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NUM_CH_MASK(ip), value) 969e1ecace6SArnaud Pouliquen 970e1ecace6SArnaud Pouliquen /* NO_OF_SAMPLES_TO_READ */ 971e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip) 12 972e1ecace6SArnaud Pouliquen #define UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip) 0xfffff 973e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(ip) \ 974e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 975e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 976e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip), \ 977e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip)) 978e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(ip, value) \ 979e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 980e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_OFFSET(ip), \ 981e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_SHIFT(ip), \ 982e1ecace6SArnaud Pouliquen UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ_MASK(ip), value) 983e1ecace6SArnaud Pouliquen 984e1ecace6SArnaud Pouliquen /* 985e1ecace6SArnaud Pouliquen * UNIPERIF_BIT_CONTROL reg 986e1ecace6SArnaud Pouliquen */ 987e1ecace6SArnaud Pouliquen 988e1ecace6SArnaud Pouliquen #define UNIPERIF_BIT_CONTROL_OFFSET(ip) \ 989e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0x004c) 990e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_BIT_CONTROL(ip) \ 991e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_BIT_CONTROL_OFFSET(ip)) 992e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_BIT_CONTROL(ip, value) \ 993e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_BIT_CONTROL_OFFSET(ip)) 994e1ecace6SArnaud Pouliquen 995e1ecace6SArnaud Pouliquen /* CLR_UNDERFLOW_DURATION */ 996e1ecace6SArnaud Pouliquen #define UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip) 0 997e1ecace6SArnaud Pouliquen #define UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip) 0x1 998e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION(ip) \ 999e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 1000e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_OFFSET(ip), \ 1001e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip), \ 1002e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip)) 1003e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION(ip) \ 1004e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 1005e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_OFFSET(ip), \ 1006e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_SHIFT(ip), \ 1007e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION_MASK(ip), 1) 1008e1ecace6SArnaud Pouliquen 1009e1ecace6SArnaud Pouliquen /* CHL_STS_UPDATE */ 1010e1ecace6SArnaud Pouliquen #define UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip) 1 1011e1ecace6SArnaud Pouliquen #define UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip) 0x1 1012e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE(ip) \ 1013e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 1014e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_OFFSET(ip), \ 1015e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip), \ 1016e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip)) 1017e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE(ip) \ 1018e1ecace6SArnaud Pouliquen SET_UNIPERIF_BIT_REG(ip, \ 1019e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_OFFSET(ip), \ 1020e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_SHIFT(ip), \ 1021e1ecace6SArnaud Pouliquen UNIPERIF_BIT_CONTROL_CHL_STS_UPDATE_MASK(ip), 1) 1022e1ecace6SArnaud Pouliquen 1023e1ecace6SArnaud Pouliquen /* 1024e1ecace6SArnaud Pouliquen * UNIPERIF_STATUS_1 reg 1025e1ecace6SArnaud Pouliquen */ 1026e1ecace6SArnaud Pouliquen 1027e1ecace6SArnaud Pouliquen #define UNIPERIF_STATUS_1_OFFSET(ip) 0x0050 1028e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_STATUS_1(ip) \ 1029e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_STATUS_1_OFFSET(ip)) 1030e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_STATUS_1(ip, value) \ 1031e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_STATUS_1_OFFSET(ip)) 1032e1ecace6SArnaud Pouliquen 1033e1ecace6SArnaud Pouliquen /* UNDERFLOW_DURATION */ 1034e1ecace6SArnaud Pouliquen #define UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip) \ 1035e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0) 1036e1ecace6SArnaud Pouliquen #define UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip) 0xff 1037e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_STATUS_1_UNDERFLOW_DURATION(ip) \ 1038e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 1039e1ecace6SArnaud Pouliquen UNIPERIF_STATUS_1_OFFSET(ip), \ 1040e1ecace6SArnaud Pouliquen UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip), \ 1041e1ecace6SArnaud Pouliquen UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip)) 1042e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_STATUS_1_UNDERFLOW_DURATION(ip, value) \ 1043e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 1044e1ecace6SArnaud Pouliquen UNIPERIF_STATUS_1_OFFSET(ip), \ 1045e1ecace6SArnaud Pouliquen UNIPERIF_STATUS_1_UNDERFLOW_DURATION_SHIFT(ip), \ 1046e1ecace6SArnaud Pouliquen UNIPERIF_STATUS_1_UNDERFLOW_DURATION_MASK(ip), value) 1047e1ecace6SArnaud Pouliquen 1048e1ecace6SArnaud Pouliquen /* 1049e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_CHANNEL_STA_REGN reg 1050e1ecace6SArnaud Pouliquen */ 1051e1ecace6SArnaud Pouliquen 1052e1ecace6SArnaud Pouliquen #define UNIPERIF_CHANNEL_STA_REGN(ip, n) (0x0060 + (4 * n)) 1053e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_CHANNEL_STA_REGN(ip) \ 1054e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_CHANNEL_STA_REGN(ip, n)) 1055e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_CHANNEL_STA_REGN(ip, n, value) \ 1056e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + \ 1057e1ecace6SArnaud Pouliquen UNIPERIF_CHANNEL_STA_REGN(ip, n)) 1058e1ecace6SArnaud Pouliquen 1059e1ecace6SArnaud Pouliquen /* 1060e1ecace6SArnaud Pouliquen * AUD_UNIPERIF_USER_VALIDITY reg 1061e1ecace6SArnaud Pouliquen */ 1062e1ecace6SArnaud Pouliquen 1063e1ecace6SArnaud Pouliquen #define UNIPERIF_USER_VALIDITY_OFFSET(ip) 0x0090 1064e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_USER_VALIDITY(ip) \ 1065e1ecace6SArnaud Pouliquen readl_relaxed(ip->base + UNIPERIF_USER_VALIDITY_OFFSET(ip)) 1066e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_USER_VALIDITY(ip, value) \ 1067e1ecace6SArnaud Pouliquen writel_relaxed(value, ip->base + UNIPERIF_USER_VALIDITY_OFFSET(ip)) 1068e1ecace6SArnaud Pouliquen 1069e1ecace6SArnaud Pouliquen /* VALIDITY_LEFT_AND_RIGHT */ 1070e1ecace6SArnaud Pouliquen #define UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip) 0 1071e1ecace6SArnaud Pouliquen #define UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip) 0x3 1072e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_USER_VALIDITY_VALIDITY_LR(ip) \ 1073e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 1074e1ecace6SArnaud Pouliquen UNIPERIF_USER_VALIDITY_OFFSET(ip), \ 1075e1ecace6SArnaud Pouliquen UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip), \ 1076e1ecace6SArnaud Pouliquen UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip)) 1077e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_USER_VALIDITY_VALIDITY_LR(ip, value) \ 1078e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 1079e1ecace6SArnaud Pouliquen UNIPERIF_USER_VALIDITY_OFFSET(ip), \ 1080e1ecace6SArnaud Pouliquen UNIPERIF_USER_VALIDITY_VALIDITY_LR_SHIFT(ip), \ 1081e1ecace6SArnaud Pouliquen UNIPERIF_USER_VALIDITY_VALIDITY_LR_MASK(ip), \ 1082e1ecace6SArnaud Pouliquen value ? 0x3 : 0) 1083e1ecace6SArnaud Pouliquen 1084e1ecace6SArnaud Pouliquen /* 1085e1ecace6SArnaud Pouliquen * UNIPERIF_DBG_STANDBY_LEFT_SP reg 1086e1ecace6SArnaud Pouliquen */ 1087e1ecace6SArnaud Pouliquen #define UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip) 0x0150 1088e1ecace6SArnaud Pouliquen #define UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip) \ 1089e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? -1 : 0) 1090e1ecace6SArnaud Pouliquen #define UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip) \ 1091e1ecace6SArnaud Pouliquen ((ip)->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 ? 0 : 0xFFFFFF) 1092e1ecace6SArnaud Pouliquen #define GET_UNIPERIF_DBG_STANDBY_LEFT_SP(ip) \ 1093e1ecace6SArnaud Pouliquen GET_UNIPERIF_REG(ip, \ 1094e1ecace6SArnaud Pouliquen UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip), \ 1095e1ecace6SArnaud Pouliquen UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip), \ 1096e1ecace6SArnaud Pouliquen UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip)) 1097e1ecace6SArnaud Pouliquen #define SET_UNIPERIF_DBG_STANDBY_LEFT_SP(ip, value) \ 1098e1ecace6SArnaud Pouliquen SET_UNIPERIF_REG(ip, \ 1099e1ecace6SArnaud Pouliquen UNIPERIF_DBG_STANDBY_LEFT_SP_OFFSET(ip), \ 1100e1ecace6SArnaud Pouliquen UNIPERIF_DBG_STANDBY_LEFT_SP_SHIFT(ip), \ 1101e1ecace6SArnaud Pouliquen UNIPERIF_DBG_STANDBY_LEFT_SP_MASK(ip), value) 110276c2145dSArnaud Pouliquen 110376c2145dSArnaud Pouliquen /* 110476c2145dSArnaud Pouliquen * uniperipheral IP capabilities 110576c2145dSArnaud Pouliquen */ 110676c2145dSArnaud Pouliquen 110776c2145dSArnaud Pouliquen #define UNIPERIF_FIFO_SIZE 70 /* FIFO is 70 cells deep */ 110876c2145dSArnaud Pouliquen #define UNIPERIF_FIFO_FRAMES 4 /* FDMA trigger limit in frames */ 110976c2145dSArnaud Pouliquen 111076c2145dSArnaud Pouliquen /* 111176c2145dSArnaud Pouliquen * Uniperipheral IP revisions 111276c2145dSArnaud Pouliquen */ 111376c2145dSArnaud Pouliquen enum uniperif_version { 111476c2145dSArnaud Pouliquen SND_ST_UNIPERIF_VERSION_UNKNOWN, 111576c2145dSArnaud Pouliquen /* SASG1 (Orly), Newman */ 111676c2145dSArnaud Pouliquen SND_ST_UNIPERIF_VERSION_C6AUD0_UNI_1_0, 111776c2145dSArnaud Pouliquen /* SASC1, SASG2 (Orly2) */ 111876c2145dSArnaud Pouliquen SND_ST_UNIPERIF_VERSION_UNI_PLR_1_0, 111976c2145dSArnaud Pouliquen /* SASC1, SASG2 (Orly2), TELSS, Cannes */ 112076c2145dSArnaud Pouliquen SND_ST_UNIPERIF_VERSION_UNI_RDR_1_0, 112176c2145dSArnaud Pouliquen /* TELSS (SASC1) */ 112276c2145dSArnaud Pouliquen SND_ST_UNIPERIF_VERSION_TDM_PLR_1_0, 112376c2145dSArnaud Pouliquen /* Cannes/Monaco */ 112476c2145dSArnaud Pouliquen SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 112576c2145dSArnaud Pouliquen }; 112676c2145dSArnaud Pouliquen 112776c2145dSArnaud Pouliquen enum uniperif_type { 112876c2145dSArnaud Pouliquen SND_ST_UNIPERIF_PLAYER_TYPE_NONE, 112976c2145dSArnaud Pouliquen SND_ST_UNIPERIF_PLAYER_TYPE_HDMI, 113076c2145dSArnaud Pouliquen SND_ST_UNIPERIF_PLAYER_TYPE_PCM, 113176c2145dSArnaud Pouliquen SND_ST_UNIPERIF_PLAYER_TYPE_SPDIF 113276c2145dSArnaud Pouliquen }; 113376c2145dSArnaud Pouliquen 113476c2145dSArnaud Pouliquen enum uniperif_state { 113576c2145dSArnaud Pouliquen UNIPERIF_STATE_STOPPED, 113676c2145dSArnaud Pouliquen UNIPERIF_STATE_STARTED, 113776c2145dSArnaud Pouliquen UNIPERIF_STATE_STANDBY, 113876c2145dSArnaud Pouliquen UNIPERIF_STATE_UNDERFLOW, 113976c2145dSArnaud Pouliquen UNIPERIF_STATE_OVERFLOW = UNIPERIF_STATE_UNDERFLOW, 114076c2145dSArnaud Pouliquen UNIPERIF_STATE_XRUN 114176c2145dSArnaud Pouliquen }; 114276c2145dSArnaud Pouliquen 114376c2145dSArnaud Pouliquen enum uniperif_iec958_encoding_mode { 114476c2145dSArnaud Pouliquen UNIPERIF_IEC958_ENCODING_MODE_PCM, 114576c2145dSArnaud Pouliquen UNIPERIF_IEC958_ENCODING_MODE_ENCODED 114676c2145dSArnaud Pouliquen }; 114776c2145dSArnaud Pouliquen 114876c2145dSArnaud Pouliquen struct uniperif_info { 114976c2145dSArnaud Pouliquen int id; /* instance value of the uniperipheral IP */ 115076c2145dSArnaud Pouliquen enum uniperif_type player_type; 115176c2145dSArnaud Pouliquen int underflow_enabled; /* Underflow recovery mode */ 115276c2145dSArnaud Pouliquen }; 115376c2145dSArnaud Pouliquen 115476c2145dSArnaud Pouliquen struct uniperif_iec958_settings { 115576c2145dSArnaud Pouliquen enum uniperif_iec958_encoding_mode encoding_mode; 115676c2145dSArnaud Pouliquen struct snd_aes_iec958 iec958; 115776c2145dSArnaud Pouliquen }; 115876c2145dSArnaud Pouliquen 115976c2145dSArnaud Pouliquen struct uniperif { 116076c2145dSArnaud Pouliquen /* System information */ 116176c2145dSArnaud Pouliquen struct uniperif_info *info; 116276c2145dSArnaud Pouliquen struct device *dev; 116376c2145dSArnaud Pouliquen int ver; /* IP version, used by register access macros */ 116476c2145dSArnaud Pouliquen struct regmap_field *clk_sel; 116576c2145dSArnaud Pouliquen 116676c2145dSArnaud Pouliquen /* capabilities */ 116776c2145dSArnaud Pouliquen const struct snd_pcm_hardware *hw; 116876c2145dSArnaud Pouliquen 116976c2145dSArnaud Pouliquen /* Resources */ 117076c2145dSArnaud Pouliquen struct resource *mem_region; 117176c2145dSArnaud Pouliquen void *base; 117276c2145dSArnaud Pouliquen unsigned long fifo_phys_address; 117376c2145dSArnaud Pouliquen int irq; 117476c2145dSArnaud Pouliquen 117576c2145dSArnaud Pouliquen /* Clocks */ 117676c2145dSArnaud Pouliquen struct clk *clk; 117776c2145dSArnaud Pouliquen int mclk; 117876c2145dSArnaud Pouliquen 117976c2145dSArnaud Pouliquen /* Runtime data */ 118076c2145dSArnaud Pouliquen enum uniperif_state state; 118176c2145dSArnaud Pouliquen 118276c2145dSArnaud Pouliquen struct snd_pcm_substream *substream; 118376c2145dSArnaud Pouliquen 118476c2145dSArnaud Pouliquen /* Specific to IEC958 player */ 118576c2145dSArnaud Pouliquen struct uniperif_iec958_settings stream_settings; 118676c2145dSArnaud Pouliquen 118776c2145dSArnaud Pouliquen /*alsa ctrl*/ 118876c2145dSArnaud Pouliquen struct snd_kcontrol_new *snd_ctrls; 118976c2145dSArnaud Pouliquen int num_ctrls; 119076c2145dSArnaud Pouliquen 119176c2145dSArnaud Pouliquen /* dai properties */ 119276c2145dSArnaud Pouliquen unsigned int daifmt; 119376c2145dSArnaud Pouliquen 119476c2145dSArnaud Pouliquen /* DAI callbacks */ 119576c2145dSArnaud Pouliquen const struct snd_soc_dai_ops *dai_ops; 119676c2145dSArnaud Pouliquen }; 119776c2145dSArnaud Pouliquen 119876c2145dSArnaud Pouliquen struct sti_uniperiph_dai { 119976c2145dSArnaud Pouliquen int stream; 120076c2145dSArnaud Pouliquen struct uniperif *uni; 120176c2145dSArnaud Pouliquen struct snd_dmaengine_dai_dma_data dma_data; 120276c2145dSArnaud Pouliquen }; 120376c2145dSArnaud Pouliquen 120476c2145dSArnaud Pouliquen struct sti_uniperiph_data { 120576c2145dSArnaud Pouliquen struct platform_device *pdev; 120676c2145dSArnaud Pouliquen struct snd_soc_dai_driver *dai; 120776c2145dSArnaud Pouliquen struct sti_uniperiph_dai dai_data; 120876c2145dSArnaud Pouliquen }; 120976c2145dSArnaud Pouliquen 121076c2145dSArnaud Pouliquen /* uniperiph player*/ 121176c2145dSArnaud Pouliquen int uni_player_init(struct platform_device *pdev, 121276c2145dSArnaud Pouliquen struct uniperif *uni_player); 121376c2145dSArnaud Pouliquen int uni_player_resume(struct uniperif *player); 121476c2145dSArnaud Pouliquen 1215c3a0003aSArnaud Pouliquen /* uniperiph reader */ 1216c3a0003aSArnaud Pouliquen int uni_reader_init(struct platform_device *pdev, 1217c3a0003aSArnaud Pouliquen struct uniperif *uni_reader); 1218f3bd847eSArnaud Pouliquen 1219f3bd847eSArnaud Pouliquen /* common */ 1220f3bd847eSArnaud Pouliquen int sti_uniperiph_dai_set_fmt(struct snd_soc_dai *dai, 1221f3bd847eSArnaud Pouliquen unsigned int fmt); 1222f3bd847eSArnaud Pouliquen 1223f3bd847eSArnaud Pouliquen int sti_uniperiph_dai_hw_params(struct snd_pcm_substream *substream, 1224f3bd847eSArnaud Pouliquen struct snd_pcm_hw_params *params, 1225f3bd847eSArnaud Pouliquen struct snd_soc_dai *dai); 1226f3bd847eSArnaud Pouliquen 122776c2145dSArnaud Pouliquen #endif 1228