blob: bbe49617706e40e27b674fd2afaa3521fbc79f5e [file] [log] [blame]
/* Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef __ASM_ARCH_MSM_AUDIO_DMA_H
#define BANK_OFFSET 0x1000
#define LPAIF_PCM_CTL_OFFSET 0x0000
#define CTRL_DATA_OE (1 << 18)
#define RATE_8KHZ (0 << 15)
#define RATE_16KHZ (1 << 15)
#define RATE_32KHZ (2 << 15)
#define RATE_64KHZ (4 << 15)
#define RATE_128KHZ (8 << 15)
#define RATE_256KHZ (9 << 15)
#define PCM_LOOPBACK (1 << 14)
#define SYNC_SRC_INT (0 << 13)
#define SYNC_SRC_EXT (1 << 13)
#define PCM_MODE (0 << 12)
#define AUX_MODE (1 << 12)
#define RPCM_WIDTH_8 (0 << 11)
#define RPCM_WIDTH_16 (1 << 11)
#define TPCM_WIDTH_8 (0 << 10)
#define TPCM_WIDTH_16 (1 << 10)
#define RPCM_SLOT(x) (x << 5)
#define TPCM_SLOT(x) x
#define LPAIF_I2S_CTL_OFFSET(x) (0x0004 + (0x4 * x))
#define I2S_LOOPBACK (1 << 15)
#define SPK_EN_DISABLE (0 << 14)
#define SPK_EN_ENABLE (1 << 14)
#define SPK_MODE_NONE (0 << 10)
#define SPK_MODE_SD0 (1 << 10)
#define SPK_MODE_SD1 (2 << 10)
#define SPK_MODE_SD2 (3 << 10)
#define SPK_MODE_SD3 (4 << 10)
#define SPK_MODE_QUAD01 (5 << 10)
#define SPK_MODE_QUAD23 (6 << 10)
#define SPK_MODE_6CH (7 << 10)
#define SPK_MODE_8CH (8 << 10)
#define SPK_MONO_STEREO (0 << 9)
#define SPK_MONO_MONO (1 << 9)
#define MIC_EN_DISABLE (0 << 8)
#define MIC_EN_ENABLE (1 << 8)
#define MIC_MODE_NONE (0 << 4)
#define MIC_MODE_SD0 (1 << 4)
#define MIC_MODE_SD1 (2 << 4)
#define MIC_MODE_SD2 (3 << 4)
#define MIC_MODE_SD3 (4 << 4)
#define MIC_MODE_QUAD01 (5 << 4)
#define MIC_MODE_QUAD23 (6 << 4)
#define MIC_MODE_6CH (7 << 4)
#define MIC_MODE_8CH (8 << 4)
#define MIC_MONO_STEREO (0 << 3)
#define MIC_MONO_MONO (1 << 3)
#define WS_SRC_INT (0 << 2)
#define WS_SRC_EXT (1 << 2)
#define BIT_WIDTH_16 (0 << 0)
#define BIT_WIDTH_24 (1 << 0)
#define BIT_WIDTH_32 (2 << 0)
#define LPAIF_DMIC_CTL 0x0018
#define DMIC_EN_DISABLE (0 << 4)
#define DMIC_EN_ENABLE (1 << 4)
#define DMIC_MODE_NONE (0 << 1)
#define DMIC_MODE_LEFT0 (1 << 1)
#define DMIC_MODE_RIGHT0 (2 << 1)
#define DMIC_MODE_LEFT1 (3 << 1)
#define DMIC_MODE_RIGHT1 (4 << 1)
#define DMIC_MODE_STEREO0 (5 << 1)
#define DMIC_MODE_STEREO1 (6 << 1)
#define DMIC_MODE_QUAD (7 << 1)
#define BIT_WIDTH_DMIC_16 (0 << 0)
#define BIT_WIDTH_DMIC_20 (1 << 0)
#define LPAIF_DMIC_VOL_CTL(x) (0x001c + (0x4 * x))
#define UPDATE_STATUS_COMP (0 << 20)
#define UPDATE_STATUS_PEND (1 << 20) /* Timeout or Zero Crossing */
#define UPDATE_GAIN_NO (0 << 19)
#define UPDATE_GAIN_YES (1 << 19)
#define TX_HPF_BP_DC_BLOCK (0 << 18)
#define TX_HPF_BP_BYPASS_DC_BLOCK (1 << 18)
#define DMIC_GAIN_BP_GAIN (0 << 17)
#define DMIC_GAIN_BP_BYPASS_GAIN (1 << 17)
#define MUTE_EN_NORMAL (0 << 16)
#define MUTE_EN_MUTE (1 << 16)
#define TIMEOUT_VAL(x) (x << 8)
#define DMIC_GAIN_MUL(x) (x << 0)
#define LPAIF_SPARE 0x0030
#define LPAIF_WRDMA_LPBK_MIX 0x1000
#define WRDMA_LPBK_MIX_BLOCK(x) (0 << (x - 5))
#define WRDMA_LPBK_MIX_ALLOW(x) (1 << (x - 5))
#define LPAIF_DEBUG_CTL 0x1004
#define TESTMODE_OFF (0 << 4)
#define TESTMODE_ON (1 << 4)
#define TESTSEL_CH0 (0 << 0)
#define TESTSEL_CH1 (1 << 0)
#define TESTSEL_CH2 (2 << 0)
#define TESTSEL_CH3 (3 << 0)
#define TESTSEL_CH4 (4 << 0)
#define TESTSEL_CH5 (5 << 0)
#define TESTSEL_CH6 (6 << 0)
#define TESTSEL_CH7 (7 << 0)
#define TESTSEL_CH8 (8 << 0)
#define TESTSEL_MIXER (9 << 0)
#define TESTSEL_CODEC_SPKR (10 << 0)
#define TESTSEL_CODEC_MIC (11 << 0)
#define TESTSEL_MI2S (12 << 0)
#define TESTSEL_SEC_SPKR (13 << 0)
#define TESTSEL_SEC_MIC (14 << 0)
#define TESTSEL_DMIC (15 << 0)
#define LPAIF_MIXER_CTL 0x2000
#define OVR_DETECTED_NO (0 << 10)
#define OVR_DETECTED_YES (1 << 10)
#define OVR_CLR_NO (0 << 9)
#define OVR_CLR_YES (1 << 9)
#define SAT_EN_DISABLE (0 << 8)
#define SAT_EN_ENABLE (1 << 8)
#define MIXER_BIT_WIDTH_8 (0 << 6)
#define MIXER_BIT_WIDTH_16 (1 << 6)
#define MIXER_BIT_WIDTH_24 (2 << 6)
#define MIXER_BIT_WIDTH_32 (3 << 6)
#define PORT1_CH_NONE (0 << 3)
#define PORT1_CH_0 (1 << 3)
#define PORT1_CH_1 (2 << 3)
#define PORT1_CH_2 (3 << 3)
#define PORT1_CH_3 (4 << 3)
#define PORT1_CH_4 (5 << 3)
#define PORT0_CH_NONE (0 << 0)
#define PORT0_CH_0 (1 << 0)
#define PORT0_CH_1 (2 << 0)
#define PORT0_CH_2 (3 << 0)
#define PORT0_CH_3 (4 << 0)
#define PORT0_CH_4 (5 << 0)
#define DMA_IRQ_BASE 0x3000
#define DMA_IRQ_INDEX(x) (BANK_OFFSET * x)
#define DMA_IRQ_ADDR(irq, addr) (DMA_IRQ_BASE \
+ DMA_IRQ_INDEX(irq) + addr)
/* Audio Interrupt registers for DMA channel confuguration */
#define LPAIF_IRQ_EN(x) DMA_IRQ_ADDR(x, 0x00)
#define LPAIF_IRQ_STAT(x) DMA_IRQ_ADDR(x, 0x04)
#define LPAIF_IRQ_RAW_STAT(x) DMA_IRQ_ADDR(x, 0x08)
#define LPAIF_IRQ_CLEAR(x) DMA_IRQ_ADDR(x, 0x0c)
#define LPAIF_IRQ_FORCE(x) DMA_IRQ_ADDR(x, 0x10)
#define PER_CH(x) (1 << (3 * x))
#define UNDER_CH(x) (2 << (3 * x))
#define ERR_CH(x) (4 << (3 * x))
/* Audio DMA registers for DMA channel confuguration */
#define DMA_CH_CTL_BASE 0x6000
#define DMA_CH_INDEX(ch) (BANK_OFFSET * ch)
#define DMA_CTRL_ADDR(ch, addr) (DMA_CH_CTL_BASE \
+ (DMA_CH_INDEX(ch) + addr))
#define LPAIF_DMA_CTL(x) DMA_CTRL_ADDR(x, 0x00)
#define BURST_EN (1 << 11)
#define WPSCNT_ONE (0 << 8)
#define WPSCNT_TWO (1 << 8)
#define WPSCNT_THREE (2 << 8)
#define WPSCNT_FOUR (3 << 8)
#define WPSCNT_SIX (5 << 8)
#define WPSCNT_EIGHT (7 << 8)
#define AUDIO_INTF_NONE (0 << 4)
#define AUDIO_INTF_CODEC (1 << 4)
#define AUDIO_INTF_PCM (2 << 4)
#define AUDIO_INTF_SEC_I2S (3 << 4)
#define AUDIO_INTF_MI2S (4 << 4)
#define AUDIO_INTF_HDMI (5 << 4)
#define AUDIO_INTF_MIXOUT (6 << 4)
#define AUDIO_INTF_LOOPBACK1 (7 << 4)
#define AUDIO_INTF_LOOPBACK2 (8 << 4)
#define FIFO_WATERMRK(x) ((x & 0x7) << 1)
#define ENABLE (1 << 0)
#define LPAIF_DMA_BASE(x) DMA_CTRL_ADDR(x, 0x04)
#define BASE_ADDR (0xFFFFFFFF << 4)
#define LPAIF_DMA_BUFF_LEN(x) DMA_CTRL_ADDR(x, 0x08)
#define LPAIF_DMA_CURR_ADDR(x) DMA_CTRL_ADDR(x, 0x0c)
#define LPAIF_DMA_PER_LEN(x) DMA_CTRL_ADDR(x, 0x10)
#define LPAIF_DMA_PER_CNT(x) DMA_CTRL_ADDR(x, 0x14)
#define LPAIF_DMA_FRM(x) DMA_CTRL_ADDR(x, 0x18)
#define LPAIF_DMA_FRMCLR(x) DMA_CTRL_ADDR(x, 0x1c)
#define LPAIF_DMA_SET_BUFF_CNT(x) DMA_CTRL_ADDR(x, 0x20)
#define LPAIF_DMA_SET_PER_CNT(x) DMA_CTRL_ADDR(x, 0x24)
#define LPAIF_DMA_PER_CNT_PER_CNT_MASK 0x000FFFFF
#define LPAIF_DMA_PER_CNT_PER_CNT_SHIFT 0
#define LPAIF_DMA_PER_CNT_FIFO_WORDCNT_MASK 0x00F00000
#define LPAIF_DMA_PER_CNT_FIFO_WORDCNT_SHIFT 20
/* channel assignments */
#define DMA_CH_0 0
#define DMA_CH_1 1
#define DMA_CH_2 2
#define DMA_CH_3 3
#define DMA_CH_4 4
#define DMA_CH_5 5
#define DMA_CH_6 6
#define DMA_CH_7 7
#endif