summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/tegra3_i2s.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/tegra3_i2s.c')
-rw-r--r--arch/arm/mach-tegra/tegra3_i2s.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/arm/mach-tegra/tegra3_i2s.c b/arch/arm/mach-tegra/tegra3_i2s.c
index 1bdfc5cd05d7..1ef9ecd8d5e5 100644
--- a/arch/arm/mach-tegra/tegra3_i2s.c
+++ b/arch/arm/mach-tegra/tegra3_i2s.c
@@ -74,10 +74,14 @@ static struct audio_cif audiocif;
static inline void i2s_writel(int ifc, u32 val, u32 reg)
{
+ struct i2s_controller_info *info = &i2s_cont_info[ifc];
+
I2S_DEBUG_PRINT("i2s Write 0x%x : %08x\n",
(unsigned int)i2s_base[ifc] + reg, val);
__raw_writel(val, i2s_base[ifc] + reg);
+
+ info->i2s_regcache[(reg >> 2)] = val;
}
static inline u32 i2s_readl(int ifc, u32 reg)
@@ -794,8 +798,9 @@ int i2s_set_acif(int ifc, int fifo_mode, struct audio_cif *cifInfo)
int apbif_ifc = i2s_get_apbif_channel(ifc, fifo_mode);
if (fifo_mode == AUDIO_TX_MODE)
- audio_switch_set_acif((unsigned int)i2s_base[ifc] +
- I2S_AUDIOCIF_I2STX_CTRL_0, cifInfo);
+ info->i2s_regcache[(I2S_AUDIOCIF_I2STX_CTRL_0 >> 2)] =
+ audio_switch_set_acif((unsigned int)i2s_base[ifc] +
+ I2S_AUDIOCIF_I2STX_CTRL_0, cifInfo);
else {
struct audio_cif reccifInfo;
memcpy(&reccifInfo, cifInfo, sizeof(struct audio_cif));
@@ -805,7 +810,8 @@ int i2s_set_acif(int ifc, int fifo_mode, struct audio_cif *cifInfo)
(cifInfo->client_channels == AUDIO_CHANNEL_1))
reccifInfo.client_channels = AUDIO_CHANNEL_2;
- audio_switch_set_acif((unsigned int)i2s_base[ifc] +
+ info->i2s_regcache[(I2S_AUDIOCIF_I2SRX_CTRL_0 >> 2)] =
+ audio_switch_set_acif((unsigned int)i2s_base[ifc] +
I2S_AUDIOCIF_I2SRX_CTRL_0, &reccifInfo);
}