/* 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