root/sound/soc/sti/uniperif.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. sti_uniperiph_get_user_frame_size
  2. sti_uniperiph_get_unip_tdm_frame_size

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

/* [<][>][^][v][top][bottom][index][help] */