cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

uniperif.h (49560B)


      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 */
   1237enum 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
   1251enum 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
   1259enum 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
   1268enum uniperif_iec958_encoding_mode {
   1269	UNIPERIF_IEC958_ENCODING_MODE_PCM,
   1270	UNIPERIF_IEC958_ENCODING_MODE_ENCODED
   1271};
   1272
   1273enum uniperif_word_pos {
   1274	WORD_1_2,
   1275	WORD_3_4,
   1276	WORD_5_6,
   1277	WORD_7_8,
   1278	WORD_MAX
   1279};
   1280
   1281struct uniperif_iec958_settings {
   1282	enum uniperif_iec958_encoding_mode encoding_mode;
   1283	struct snd_aes_iec958 iec958;
   1284};
   1285
   1286struct dai_tdm_slot {
   1287	unsigned int mask;
   1288	int slots;
   1289	int slot_width;
   1290	unsigned int avail_slots;
   1291};
   1292
   1293struct 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
   1339struct sti_uniperiph_dai {
   1340	int stream;
   1341	struct uniperif *uni;
   1342	struct snd_dmaengine_dai_dma_data dma_data;
   1343};
   1344
   1345struct sti_uniperiph_data {
   1346	struct platform_device *pdev;
   1347	struct snd_soc_dai_driver *dai;
   1348	struct sti_uniperiph_dai dai_data;
   1349};
   1350
   1351static __maybe_unused 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*/
   1374int uni_player_init(struct platform_device *pdev,
   1375		    struct uniperif *player);
   1376int uni_player_resume(struct uniperif *player);
   1377
   1378/* uniperiph reader */
   1379int uni_reader_init(struct platform_device *pdev,
   1380		    struct uniperif *reader);
   1381
   1382/* common */
   1383int sti_uniperiph_dai_set_fmt(struct snd_soc_dai *dai,
   1384			      unsigned int fmt);
   1385
   1386int sti_uniperiph_dai_hw_params(struct snd_pcm_substream *substream,
   1387				struct snd_pcm_hw_params *params,
   1388				struct snd_soc_dai *dai);
   1389
   1390static 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
   1396static 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
   1401int  sti_uniperiph_reset(struct uniperif *uni);
   1402
   1403int 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
   1407int sti_uniperiph_get_tdm_word_pos(struct uniperif *uni,
   1408				   unsigned int *word_pos);
   1409
   1410int sti_uniperiph_fix_tdm_chan(struct snd_pcm_hw_params *params,
   1411			       struct snd_pcm_hw_rule *rule);
   1412
   1413int sti_uniperiph_fix_tdm_format(struct snd_pcm_hw_params *params,
   1414				 struct snd_pcm_hw_rule *rule);
   1415
   1416#endif