| From 2d6dfbd200d8de9bef8fb30bec90594acea9a145 Mon Sep 17 00:00:00 2001 |
| From: Dong Aisheng <aisheng.dong@nxp.com> |
| Date: Fri, 16 Aug 2019 18:01:26 +0800 |
| Subject: [PATCH] Revert "ASoC: fsl_sai: Add support for SAI new version" |
| |
| This reverts commit 4f7a0728b5305e2d865f543fbcffd617e03c7674. |
| --- |
| sound/soc/fsl/fsl_sai.c | 228 ++++++++++++++++++++---------------------------- |
| sound/soc/fsl/fsl_sai.h | 41 +++++---- |
| 2 files changed, 113 insertions(+), 156 deletions(-) |
| |
| --- a/sound/soc/fsl/fsl_sai.c |
| +++ b/sound/soc/fsl/fsl_sai.c |
| @@ -40,7 +40,6 @@ static const struct snd_pcm_hw_constrain |
| static irqreturn_t fsl_sai_isr(int irq, void *devid) |
| { |
| struct fsl_sai *sai = (struct fsl_sai *)devid; |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| struct device *dev = &sai->pdev->dev; |
| u32 flags, xcsr, mask; |
| bool irq_none = true; |
| @@ -53,7 +52,7 @@ static irqreturn_t fsl_sai_isr(int irq, |
| mask = (FSL_SAI_FLAGS >> FSL_SAI_CSR_xIE_SHIFT) << FSL_SAI_CSR_xF_SHIFT; |
| |
| /* Tx IRQ */ |
| - regmap_read(sai->regmap, FSL_SAI_TCSR(ofs), &xcsr); |
| + regmap_read(sai->regmap, FSL_SAI_TCSR, &xcsr); |
| flags = xcsr & mask; |
| |
| if (flags) |
| @@ -83,11 +82,11 @@ static irqreturn_t fsl_sai_isr(int irq, |
| xcsr &= ~FSL_SAI_CSR_xF_MASK; |
| |
| if (flags) |
| - regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), flags | xcsr); |
| + regmap_write(sai->regmap, FSL_SAI_TCSR, flags | xcsr); |
| |
| irq_rx: |
| /* Rx IRQ */ |
| - regmap_read(sai->regmap, FSL_SAI_RCSR(ofs), &xcsr); |
| + regmap_read(sai->regmap, FSL_SAI_RCSR, &xcsr); |
| flags = xcsr & mask; |
| |
| if (flags) |
| @@ -117,7 +116,7 @@ irq_rx: |
| xcsr &= ~FSL_SAI_CSR_xF_MASK; |
| |
| if (flags) |
| - regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), flags | xcsr); |
| + regmap_write(sai->regmap, FSL_SAI_RCSR, flags | xcsr); |
| |
| out: |
| if (irq_none) |
| @@ -141,7 +140,6 @@ static int fsl_sai_set_dai_sysclk_tr(str |
| int clk_id, unsigned int freq, int fsl_dir) |
| { |
| struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| bool tx = fsl_dir == FSL_FMT_TRANSMITTER; |
| u32 val_cr2 = 0; |
| |
| @@ -162,7 +160,7 @@ static int fsl_sai_set_dai_sysclk_tr(str |
| return -EINVAL; |
| } |
| |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx), |
| FSL_SAI_CR2_MSEL_MASK, val_cr2); |
| |
| return 0; |
| @@ -195,7 +193,6 @@ static int fsl_sai_set_dai_fmt_tr(struct |
| unsigned int fmt, int fsl_dir) |
| { |
| struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| bool tx = fsl_dir == FSL_FMT_TRANSMITTER; |
| u32 val_cr2 = 0, val_cr4 = 0; |
| |
| @@ -291,9 +288,9 @@ static int fsl_sai_set_dai_fmt_tr(struct |
| return -EINVAL; |
| } |
| |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx), |
| FSL_SAI_CR2_BCP | FSL_SAI_CR2_BCD_MSTR, val_cr2); |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCR4(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCR4(tx), |
| FSL_SAI_CR4_MF | FSL_SAI_CR4_FSE | |
| FSL_SAI_CR4_FSP | FSL_SAI_CR4_FSD_MSTR, val_cr4); |
| |
| @@ -320,7 +317,6 @@ static int fsl_sai_set_dai_fmt(struct sn |
| static int fsl_sai_set_bclk(struct snd_soc_dai *dai, bool tx, u32 freq) |
| { |
| struct fsl_sai *sai = snd_soc_dai_get_drvdata(dai); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| unsigned long clk_rate; |
| u32 savediv = 0, ratio, savesub = freq; |
| u32 id; |
| @@ -383,17 +379,17 @@ static int fsl_sai_set_bclk(struct snd_s |
| */ |
| if ((sai->synchronous[TX] && !sai->synchronous[RX]) || |
| (!tx && !sai->synchronous[RX])) { |
| - regmap_update_bits(sai->regmap, FSL_SAI_RCR2(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_RCR2, |
| FSL_SAI_CR2_MSEL_MASK, |
| FSL_SAI_CR2_MSEL(sai->mclk_id[tx])); |
| - regmap_update_bits(sai->regmap, FSL_SAI_RCR2(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_RCR2, |
| FSL_SAI_CR2_DIV_MASK, savediv - 1); |
| } else if ((sai->synchronous[RX] && !sai->synchronous[TX]) || |
| (tx && !sai->synchronous[TX])) { |
| - regmap_update_bits(sai->regmap, FSL_SAI_TCR2(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_TCR2, |
| FSL_SAI_CR2_MSEL_MASK, |
| FSL_SAI_CR2_MSEL(sai->mclk_id[tx])); |
| - regmap_update_bits(sai->regmap, FSL_SAI_TCR2(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_TCR2, |
| FSL_SAI_CR2_DIV_MASK, savediv - 1); |
| } |
| |
| @@ -408,7 +404,6 @@ static int fsl_sai_hw_params(struct snd_ |
| struct snd_soc_dai *cpu_dai) |
| { |
| struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; |
| unsigned int channels = params_channels(params); |
| u32 word_width = params_width(params); |
| @@ -461,19 +456,19 @@ static int fsl_sai_hw_params(struct snd_ |
| |
| if (!sai->is_slave_mode) { |
| if (!sai->synchronous[TX] && sai->synchronous[RX] && !tx) { |
| - regmap_update_bits(sai->regmap, FSL_SAI_TCR4(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_TCR4, |
| FSL_SAI_CR4_SYWD_MASK | FSL_SAI_CR4_FRSZ_MASK, |
| val_cr4); |
| - regmap_update_bits(sai->regmap, FSL_SAI_TCR5(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_TCR5, |
| FSL_SAI_CR5_WNW_MASK | FSL_SAI_CR5_W0W_MASK | |
| FSL_SAI_CR5_FBT_MASK, val_cr5); |
| regmap_write(sai->regmap, FSL_SAI_TMR, |
| ~0UL - ((1 << channels) - 1)); |
| } else if (!sai->synchronous[RX] && sai->synchronous[TX] && tx) { |
| - regmap_update_bits(sai->regmap, FSL_SAI_RCR4(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_RCR4, |
| FSL_SAI_CR4_SYWD_MASK | FSL_SAI_CR4_FRSZ_MASK, |
| val_cr4); |
| - regmap_update_bits(sai->regmap, FSL_SAI_RCR5(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_RCR5, |
| FSL_SAI_CR5_WNW_MASK | FSL_SAI_CR5_W0W_MASK | |
| FSL_SAI_CR5_FBT_MASK, val_cr5); |
| regmap_write(sai->regmap, FSL_SAI_RMR, |
| @@ -481,10 +476,10 @@ static int fsl_sai_hw_params(struct snd_ |
| } |
| } |
| |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCR4(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCR4(tx), |
| FSL_SAI_CR4_SYWD_MASK | FSL_SAI_CR4_FRSZ_MASK, |
| val_cr4); |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCR5(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCR5(tx), |
| FSL_SAI_CR5_WNW_MASK | FSL_SAI_CR5_W0W_MASK | |
| FSL_SAI_CR5_FBT_MASK, val_cr5); |
| regmap_write(sai->regmap, FSL_SAI_xMR(tx), ~0UL - ((1 << channels) - 1)); |
| @@ -512,8 +507,6 @@ static int fsl_sai_trigger(struct snd_pc |
| struct snd_soc_dai *cpu_dai) |
| { |
| struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| - |
| bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; |
| u32 xcsr, count = 100; |
| |
| @@ -522,9 +515,9 @@ static int fsl_sai_trigger(struct snd_pc |
| * Rx sync with Tx clocks: Clear SYNC for Tx, set it for Rx. |
| * Tx sync with Rx clocks: Clear SYNC for Rx, set it for Tx. |
| */ |
| - regmap_update_bits(sai->regmap, FSL_SAI_TCR2(ofs), FSL_SAI_CR2_SYNC, |
| - sai->synchronous[TX] ? FSL_SAI_CR2_SYNC : 0); |
| - regmap_update_bits(sai->regmap, FSL_SAI_RCR2(ofs), FSL_SAI_CR2_SYNC, |
| + regmap_update_bits(sai->regmap, FSL_SAI_TCR2, FSL_SAI_CR2_SYNC, |
| + sai->synchronous[TX] ? FSL_SAI_CR2_SYNC : 0); |
| + regmap_update_bits(sai->regmap, FSL_SAI_RCR2, FSL_SAI_CR2_SYNC, |
| sai->synchronous[RX] ? FSL_SAI_CR2_SYNC : 0); |
| |
| /* |
| @@ -535,44 +528,43 @@ static int fsl_sai_trigger(struct snd_pc |
| case SNDRV_PCM_TRIGGER_START: |
| case SNDRV_PCM_TRIGGER_RESUME: |
| case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), |
| FSL_SAI_CSR_FRDE, FSL_SAI_CSR_FRDE); |
| |
| - regmap_update_bits(sai->regmap, FSL_SAI_RCSR(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_RCSR, |
| FSL_SAI_CSR_TERE, FSL_SAI_CSR_TERE); |
| - regmap_update_bits(sai->regmap, FSL_SAI_TCSR(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_TCSR, |
| FSL_SAI_CSR_TERE, FSL_SAI_CSR_TERE); |
| |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), |
| FSL_SAI_CSR_xIE_MASK, FSL_SAI_FLAGS); |
| break; |
| case SNDRV_PCM_TRIGGER_STOP: |
| case SNDRV_PCM_TRIGGER_SUSPEND: |
| case SNDRV_PCM_TRIGGER_PAUSE_PUSH: |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), |
| FSL_SAI_CSR_FRDE, 0); |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx), |
| FSL_SAI_CSR_xIE_MASK, 0); |
| |
| /* Check if the opposite FRDE is also disabled */ |
| - regmap_read(sai->regmap, FSL_SAI_xCSR(!tx, ofs), &xcsr); |
| + regmap_read(sai->regmap, FSL_SAI_xCSR(!tx), &xcsr); |
| if (!(xcsr & FSL_SAI_CSR_FRDE)) { |
| /* Disable both directions and reset their FIFOs */ |
| - regmap_update_bits(sai->regmap, FSL_SAI_TCSR(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_TCSR, |
| FSL_SAI_CSR_TERE, 0); |
| - regmap_update_bits(sai->regmap, FSL_SAI_RCSR(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_RCSR, |
| FSL_SAI_CSR_TERE, 0); |
| |
| /* TERE will remain set till the end of current frame */ |
| do { |
| udelay(10); |
| - regmap_read(sai->regmap, |
| - FSL_SAI_xCSR(tx, ofs), &xcsr); |
| + regmap_read(sai->regmap, FSL_SAI_xCSR(tx), &xcsr); |
| } while (--count && xcsr & FSL_SAI_CSR_TERE); |
| |
| - regmap_update_bits(sai->regmap, FSL_SAI_TCSR(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_TCSR, |
| FSL_SAI_CSR_FR, FSL_SAI_CSR_FR); |
| - regmap_update_bits(sai->regmap, FSL_SAI_RCSR(ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_RCSR, |
| FSL_SAI_CSR_FR, FSL_SAI_CSR_FR); |
| |
| /* |
| @@ -584,13 +576,13 @@ static int fsl_sai_trigger(struct snd_pc |
| */ |
| if (!sai->is_slave_mode) { |
| /* Software Reset for both Tx and Rx */ |
| - regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), |
| - FSL_SAI_CSR_SR); |
| - regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), |
| - FSL_SAI_CSR_SR); |
| + regmap_write(sai->regmap, |
| + FSL_SAI_TCSR, FSL_SAI_CSR_SR); |
| + regmap_write(sai->regmap, |
| + FSL_SAI_RCSR, FSL_SAI_CSR_SR); |
| /* Clear SR bit to finish the reset */ |
| - regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), 0); |
| - regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), 0); |
| + regmap_write(sai->regmap, FSL_SAI_TCSR, 0); |
| + regmap_write(sai->regmap, FSL_SAI_RCSR, 0); |
| } |
| } |
| break; |
| @@ -605,11 +597,10 @@ static int fsl_sai_startup(struct snd_pc |
| struct snd_soc_dai *cpu_dai) |
| { |
| struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; |
| int ret; |
| |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCR3(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCR3(tx), |
| FSL_SAI_CR3_TRCE_MASK, |
| FSL_SAI_CR3_TRCE); |
| |
| @@ -623,10 +614,9 @@ static void fsl_sai_shutdown(struct snd_ |
| struct snd_soc_dai *cpu_dai) |
| { |
| struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; |
| |
| - regmap_update_bits(sai->regmap, FSL_SAI_xCR3(tx, ofs), |
| + regmap_update_bits(sai->regmap, FSL_SAI_xCR3(tx), |
| FSL_SAI_CR3_TRCE_MASK, 0); |
| } |
| |
| @@ -644,20 +634,17 @@ static const struct snd_soc_dai_ops fsl_ |
| static int fsl_sai_dai_probe(struct snd_soc_dai *cpu_dai) |
| { |
| struct fsl_sai *sai = dev_get_drvdata(cpu_dai->dev); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| |
| /* Software Reset for both Tx and Rx */ |
| - regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), FSL_SAI_CSR_SR); |
| - regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), FSL_SAI_CSR_SR); |
| + regmap_write(sai->regmap, FSL_SAI_TCSR, FSL_SAI_CSR_SR); |
| + regmap_write(sai->regmap, FSL_SAI_RCSR, FSL_SAI_CSR_SR); |
| /* Clear SR bit to finish the reset */ |
| - regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), 0); |
| - regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), 0); |
| + regmap_write(sai->regmap, FSL_SAI_TCSR, 0); |
| + regmap_write(sai->regmap, FSL_SAI_RCSR, 0); |
| |
| - regmap_update_bits(sai->regmap, FSL_SAI_TCR1(ofs), |
| - FSL_SAI_CR1_RFW_MASK(sai->soc_data->fifo_depth), |
| + regmap_update_bits(sai->regmap, FSL_SAI_TCR1, FSL_SAI_CR1_RFW_MASK, |
| sai->soc_data->fifo_depth - FSL_SAI_MAXBURST_TX); |
| - regmap_update_bits(sai->regmap, FSL_SAI_RCR1(ofs), |
| - FSL_SAI_CR1_RFW_MASK(sai->soc_data->fifo_depth), |
| + regmap_update_bits(sai->regmap, FSL_SAI_RCR1, FSL_SAI_CR1_RFW_MASK, |
| FSL_SAI_MAXBURST_RX - 1); |
| |
| snd_soc_dai_init_dma_data(cpu_dai, &sai->dma_params_tx, |
| @@ -695,12 +682,12 @@ static const struct snd_soc_component_dr |
| .name = "fsl-sai", |
| }; |
| |
| -static struct reg_default fsl_sai_reg_defaults_ofs0[] = { |
| - {FSL_SAI_TCR1(0), 0}, |
| - {FSL_SAI_TCR2(0), 0}, |
| - {FSL_SAI_TCR3(0), 0}, |
| - {FSL_SAI_TCR4(0), 0}, |
| - {FSL_SAI_TCR5(0), 0}, |
| +static struct reg_default fsl_sai_reg_defaults[] = { |
| + {FSL_SAI_TCR1, 0}, |
| + {FSL_SAI_TCR2, 0}, |
| + {FSL_SAI_TCR3, 0}, |
| + {FSL_SAI_TCR4, 0}, |
| + {FSL_SAI_TCR5, 0}, |
| {FSL_SAI_TDR0, 0}, |
| {FSL_SAI_TDR1, 0}, |
| {FSL_SAI_TDR2, 0}, |
| @@ -709,50 +696,24 @@ static struct reg_default fsl_sai_reg_de |
| {FSL_SAI_TDR5, 0}, |
| {FSL_SAI_TDR6, 0}, |
| {FSL_SAI_TDR7, 0}, |
| - {FSL_SAI_TMR, 0}, |
| - {FSL_SAI_RCR1(0), 0}, |
| - {FSL_SAI_RCR2(0), 0}, |
| - {FSL_SAI_RCR3(0), 0}, |
| - {FSL_SAI_RCR4(0), 0}, |
| - {FSL_SAI_RCR5(0), 0}, |
| - {FSL_SAI_RMR, 0}, |
| -}; |
| - |
| -static struct reg_default fsl_sai_reg_defaults_ofs8[] = { |
| - {FSL_SAI_TCR1(8), 0}, |
| - {FSL_SAI_TCR2(8), 0}, |
| - {FSL_SAI_TCR3(8), 0}, |
| - {FSL_SAI_TCR4(8), 0}, |
| - {FSL_SAI_TCR5(8), 0}, |
| - {FSL_SAI_TDR0, 0}, |
| - {FSL_SAI_TDR1, 0}, |
| - {FSL_SAI_TDR2, 0}, |
| - {FSL_SAI_TDR3, 0}, |
| - {FSL_SAI_TDR4, 0}, |
| - {FSL_SAI_TDR5, 0}, |
| - {FSL_SAI_TDR6, 0}, |
| - {FSL_SAI_TDR7, 0}, |
| - {FSL_SAI_TMR, 0}, |
| - {FSL_SAI_RCR1(8), 0}, |
| - {FSL_SAI_RCR2(8), 0}, |
| - {FSL_SAI_RCR3(8), 0}, |
| - {FSL_SAI_RCR4(8), 0}, |
| - {FSL_SAI_RCR5(8), 0}, |
| - {FSL_SAI_RMR, 0}, |
| + {FSL_SAI_TMR, 0}, |
| + {FSL_SAI_RCR1, 0}, |
| + {FSL_SAI_RCR2, 0}, |
| + {FSL_SAI_RCR3, 0}, |
| + {FSL_SAI_RCR4, 0}, |
| + {FSL_SAI_RCR5, 0}, |
| + {FSL_SAI_RMR, 0}, |
| }; |
| |
| static bool fsl_sai_readable_reg(struct device *dev, unsigned int reg) |
| { |
| - struct fsl_sai *sai = dev_get_drvdata(dev); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| - |
| - if (reg >= FSL_SAI_TCSR(ofs) && reg <= FSL_SAI_TCR5(ofs)) |
| - return true; |
| - |
| - if (reg >= FSL_SAI_RCSR(ofs) && reg <= FSL_SAI_RCR5(ofs)) |
| - return true; |
| - |
| switch (reg) { |
| + case FSL_SAI_TCSR: |
| + case FSL_SAI_TCR1: |
| + case FSL_SAI_TCR2: |
| + case FSL_SAI_TCR3: |
| + case FSL_SAI_TCR4: |
| + case FSL_SAI_TCR5: |
| case FSL_SAI_TFR0: |
| case FSL_SAI_TFR1: |
| case FSL_SAI_TFR2: |
| @@ -762,6 +723,12 @@ static bool fsl_sai_readable_reg(struct |
| case FSL_SAI_TFR6: |
| case FSL_SAI_TFR7: |
| case FSL_SAI_TMR: |
| + case FSL_SAI_RCSR: |
| + case FSL_SAI_RCR1: |
| + case FSL_SAI_RCR2: |
| + case FSL_SAI_RCR3: |
| + case FSL_SAI_RCR4: |
| + case FSL_SAI_RCR5: |
| case FSL_SAI_RDR0: |
| case FSL_SAI_RDR1: |
| case FSL_SAI_RDR2: |
| @@ -787,13 +754,9 @@ static bool fsl_sai_readable_reg(struct |
| |
| static bool fsl_sai_volatile_reg(struct device *dev, unsigned int reg) |
| { |
| - struct fsl_sai *sai = dev_get_drvdata(dev); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| - |
| - if (reg == FSL_SAI_TCSR(ofs) || reg == FSL_SAI_RCSR(ofs)) |
| - return true; |
| - |
| switch (reg) { |
| + case FSL_SAI_TCSR: |
| + case FSL_SAI_RCSR: |
| case FSL_SAI_TFR0: |
| case FSL_SAI_TFR1: |
| case FSL_SAI_TFR2: |
| @@ -826,16 +789,13 @@ static bool fsl_sai_volatile_reg(struct |
| |
| static bool fsl_sai_writeable_reg(struct device *dev, unsigned int reg) |
| { |
| - struct fsl_sai *sai = dev_get_drvdata(dev); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| - |
| - if (reg >= FSL_SAI_TCSR(ofs) && reg <= FSL_SAI_TCR5(ofs)) |
| - return true; |
| - |
| - if (reg >= FSL_SAI_RCSR(ofs) && reg <= FSL_SAI_RCR5(ofs)) |
| - return true; |
| - |
| switch (reg) { |
| + case FSL_SAI_TCSR: |
| + case FSL_SAI_TCR1: |
| + case FSL_SAI_TCR2: |
| + case FSL_SAI_TCR3: |
| + case FSL_SAI_TCR4: |
| + case FSL_SAI_TCR5: |
| case FSL_SAI_TDR0: |
| case FSL_SAI_TDR1: |
| case FSL_SAI_TDR2: |
| @@ -845,6 +805,12 @@ static bool fsl_sai_writeable_reg(struct |
| case FSL_SAI_TDR6: |
| case FSL_SAI_TDR7: |
| case FSL_SAI_TMR: |
| + case FSL_SAI_RCSR: |
| + case FSL_SAI_RCR1: |
| + case FSL_SAI_RCR2: |
| + case FSL_SAI_RCR3: |
| + case FSL_SAI_RCR4: |
| + case FSL_SAI_RCR5: |
| case FSL_SAI_RMR: |
| return true; |
| default: |
| @@ -852,15 +818,15 @@ static bool fsl_sai_writeable_reg(struct |
| } |
| } |
| |
| -static struct regmap_config fsl_sai_regmap_config = { |
| +static const struct regmap_config fsl_sai_regmap_config = { |
| .reg_bits = 32, |
| .reg_stride = 4, |
| .val_bits = 32, |
| .fast_io = true, |
| |
| .max_register = FSL_SAI_RMR, |
| - .reg_defaults = fsl_sai_reg_defaults_ofs0, |
| - .num_reg_defaults = ARRAY_SIZE(fsl_sai_reg_defaults_ofs0), |
| + .reg_defaults = fsl_sai_reg_defaults, |
| + .num_reg_defaults = ARRAY_SIZE(fsl_sai_reg_defaults), |
| .readable_reg = fsl_sai_readable_reg, |
| .volatile_reg = fsl_sai_volatile_reg, |
| .writeable_reg = fsl_sai_writeable_reg, |
| @@ -892,12 +858,6 @@ static int fsl_sai_probe(struct platform |
| if (IS_ERR(base)) |
| return PTR_ERR(base); |
| |
| - if (sai->soc_data->reg_offset == 8) { |
| - fsl_sai_regmap_config.reg_defaults = fsl_sai_reg_defaults_ofs8; |
| - fsl_sai_regmap_config.num_reg_defaults = |
| - ARRAY_SIZE(fsl_sai_reg_defaults_ofs8); |
| - } |
| - |
| sai->regmap = devm_regmap_init_mmio_clk(&pdev->dev, |
| "bus", base, &fsl_sai_regmap_config); |
| |
| @@ -1027,13 +987,11 @@ static int fsl_sai_remove(struct platfor |
| static const struct fsl_sai_soc_data fsl_sai_vf610_data = { |
| .use_imx_pcm = false, |
| .fifo_depth = 32, |
| - .reg_offset = 0, |
| }; |
| |
| static const struct fsl_sai_soc_data fsl_sai_imx6sx_data = { |
| .use_imx_pcm = true, |
| .fifo_depth = 32, |
| - .reg_offset = 0, |
| }; |
| |
| static const struct of_device_id fsl_sai_ids[] = { |
| @@ -1066,7 +1024,6 @@ static int fsl_sai_runtime_suspend(struc |
| static int fsl_sai_runtime_resume(struct device *dev) |
| { |
| struct fsl_sai *sai = dev_get_drvdata(dev); |
| - unsigned int ofs = sai->soc_data->reg_offset; |
| int ret; |
| |
| ret = clk_prepare_enable(sai->bus_clk); |
| @@ -1088,11 +1045,11 @@ static int fsl_sai_runtime_resume(struct |
| } |
| |
| regcache_cache_only(sai->regmap, false); |
| - regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), FSL_SAI_CSR_SR); |
| - regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), FSL_SAI_CSR_SR); |
| + regmap_write(sai->regmap, FSL_SAI_TCSR, FSL_SAI_CSR_SR); |
| + regmap_write(sai->regmap, FSL_SAI_RCSR, FSL_SAI_CSR_SR); |
| usleep_range(1000, 2000); |
| - regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), 0); |
| - regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), 0); |
| + regmap_write(sai->regmap, FSL_SAI_TCSR, 0); |
| + regmap_write(sai->regmap, FSL_SAI_RCSR, 0); |
| |
| ret = regcache_sync(sai->regmap); |
| if (ret) |
| --- a/sound/soc/fsl/fsl_sai.h |
| +++ b/sound/soc/fsl/fsl_sai.h |
| @@ -14,12 +14,12 @@ |
| SNDRV_PCM_FMTBIT_S32_LE) |
| |
| /* SAI Register Map Register */ |
| -#define FSL_SAI_TCSR(ofs) (0x00 + ofs) /* SAI Transmit Control */ |
| -#define FSL_SAI_TCR1(ofs) (0x04 + ofs) /* SAI Transmit Configuration 1 */ |
| -#define FSL_SAI_TCR2(ofs) (0x08 + ofs) /* SAI Transmit Configuration 2 */ |
| -#define FSL_SAI_TCR3(ofs) (0x0c + ofs) /* SAI Transmit Configuration 3 */ |
| -#define FSL_SAI_TCR4(ofs) (0x10 + ofs) /* SAI Transmit Configuration 4 */ |
| -#define FSL_SAI_TCR5(ofs) (0x14 + ofs) /* SAI Transmit Configuration 5 */ |
| +#define FSL_SAI_TCSR 0x00 /* SAI Transmit Control */ |
| +#define FSL_SAI_TCR1 0x04 /* SAI Transmit Configuration 1 */ |
| +#define FSL_SAI_TCR2 0x08 /* SAI Transmit Configuration 2 */ |
| +#define FSL_SAI_TCR3 0x0c /* SAI Transmit Configuration 3 */ |
| +#define FSL_SAI_TCR4 0x10 /* SAI Transmit Configuration 4 */ |
| +#define FSL_SAI_TCR5 0x14 /* SAI Transmit Configuration 5 */ |
| #define FSL_SAI_TDR0 0x20 /* SAI Transmit Data 0 */ |
| #define FSL_SAI_TDR1 0x24 /* SAI Transmit Data 1 */ |
| #define FSL_SAI_TDR2 0x28 /* SAI Transmit Data 2 */ |
| @@ -37,12 +37,12 @@ |
| #define FSL_SAI_TFR6 0x58 /* SAI Transmit FIFO 6 */ |
| #define FSL_SAI_TFR7 0x5C /* SAI Transmit FIFO 7 */ |
| #define FSL_SAI_TMR 0x60 /* SAI Transmit Mask */ |
| -#define FSL_SAI_RCSR(ofs) (0x80 + ofs) /* SAI Receive Control */ |
| -#define FSL_SAI_RCR1(ofs) (0x84 + ofs)/* SAI Receive Configuration 1 */ |
| -#define FSL_SAI_RCR2(ofs) (0x88 + ofs) /* SAI Receive Configuration 2 */ |
| -#define FSL_SAI_RCR3(ofs) (0x8c + ofs) /* SAI Receive Configuration 3 */ |
| -#define FSL_SAI_RCR4(ofs) (0x90 + ofs) /* SAI Receive Configuration 4 */ |
| -#define FSL_SAI_RCR5(ofs) (0x94 + ofs) /* SAI Receive Configuration 5 */ |
| +#define FSL_SAI_RCSR 0x80 /* SAI Receive Control */ |
| +#define FSL_SAI_RCR1 0x84 /* SAI Receive Configuration 1 */ |
| +#define FSL_SAI_RCR2 0x88 /* SAI Receive Configuration 2 */ |
| +#define FSL_SAI_RCR3 0x8c /* SAI Receive Configuration 3 */ |
| +#define FSL_SAI_RCR4 0x90 /* SAI Receive Configuration 4 */ |
| +#define FSL_SAI_RCR5 0x94 /* SAI Receive Configuration 5 */ |
| #define FSL_SAI_RDR0 0xa0 /* SAI Receive Data 0 */ |
| #define FSL_SAI_RDR1 0xa4 /* SAI Receive Data 1 */ |
| #define FSL_SAI_RDR2 0xa8 /* SAI Receive Data 2 */ |
| @@ -61,14 +61,14 @@ |
| #define FSL_SAI_RFR7 0xdc /* SAI Receive FIFO 7 */ |
| #define FSL_SAI_RMR 0xe0 /* SAI Receive Mask */ |
| |
| -#define FSL_SAI_xCSR(tx, ofs) (tx ? FSL_SAI_TCSR(ofs) : FSL_SAI_RCSR(ofs)) |
| -#define FSL_SAI_xCR1(tx, ofs) (tx ? FSL_SAI_TCR1(ofs) : FSL_SAI_RCR1(ofs)) |
| -#define FSL_SAI_xCR2(tx, ofs) (tx ? FSL_SAI_TCR2(ofs) : FSL_SAI_RCR2(ofs)) |
| -#define FSL_SAI_xCR3(tx, ofs) (tx ? FSL_SAI_TCR3(ofs) : FSL_SAI_RCR3(ofs)) |
| -#define FSL_SAI_xCR4(tx, ofs) (tx ? FSL_SAI_TCR4(ofs) : FSL_SAI_RCR4(ofs)) |
| -#define FSL_SAI_xCR5(tx, ofs) (tx ? FSL_SAI_TCR5(ofs) : FSL_SAI_RCR5(ofs)) |
| -#define FSL_SAI_xDR0(tx) (tx ? FSL_SAI_TDR0 : FSL_SAI_RDR0) |
| -#define FSL_SAI_xFR0(tx) (tx ? FSL_SAI_TFR0 : FSL_SAI_RFR0) |
| +#define FSL_SAI_xCSR(tx) (tx ? FSL_SAI_TCSR : FSL_SAI_RCSR) |
| +#define FSL_SAI_xCR1(tx) (tx ? FSL_SAI_TCR1 : FSL_SAI_RCR1) |
| +#define FSL_SAI_xCR2(tx) (tx ? FSL_SAI_TCR2 : FSL_SAI_RCR2) |
| +#define FSL_SAI_xCR3(tx) (tx ? FSL_SAI_TCR3 : FSL_SAI_RCR3) |
| +#define FSL_SAI_xCR4(tx) (tx ? FSL_SAI_TCR4 : FSL_SAI_RCR4) |
| +#define FSL_SAI_xCR5(tx) (tx ? FSL_SAI_TCR5 : FSL_SAI_RCR5) |
| +#define FSL_SAI_xDR(tx) (tx ? FSL_SAI_TDR : FSL_SAI_RDR) |
| +#define FSL_SAI_xFR(tx) (tx ? FSL_SAI_TFR : FSL_SAI_RFR) |
| #define FSL_SAI_xMR(tx) (tx ? FSL_SAI_TMR : FSL_SAI_RMR) |
| |
| /* SAI Transmit/Receive Control Register */ |
| @@ -158,7 +158,6 @@ |
| struct fsl_sai_soc_data { |
| bool use_imx_pcm; |
| unsigned int fifo_depth; |
| - unsigned int reg_offset; |
| }; |
| |
| struct fsl_sai { |