From: Marcus Cooper <[email protected]>
Signed-off-by: Marcus Cooper <[email protected]>
---
sound/soc/sunxi/sunxi-codec.c | 88 +++++++++++++++++++++----------------------
sound/soc/sunxi/sunxi-codec.h | 9 +++++
2 files changed, 53 insertions(+), 44 deletions(-)
diff --git a/sound/soc/sunxi/sunxi-codec.c b/sound/soc/sunxi/sunxi-codec.c
index d351282..741ac72 100644
--- a/sound/soc/sunxi/sunxi-codec.c
+++ b/sound/soc/sunxi/sunxi-codec.c
@@ -982,8 +982,8 @@ static int snd_sunxi_codec_prepare(struct snd_pcm_substream
*substream)
clk_set_rate(codec_pll2clk, 22579200);
clk_set_rate(codec_moduleclk, 22579200);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (0<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_48KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
@@ -991,88 +991,88 @@ static int snd_sunxi_codec_prepare(struct
snd_pcm_substream *substream)
clk_set_rate(codec_pll2clk, 22579200);
clk_set_rate(codec_moduleclk, 22579200);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (2<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_24KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
case 11025:
clk_set_rate(codec_pll2clk, 22579200);
clk_set_rate(codec_moduleclk, 22579200);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (4<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_12KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
case 48000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (0<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_48KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
case 96000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (7<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_96KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
case 192000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (6<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_192KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
case 32000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (1<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_32KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
case 24000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (2<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_24KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
case 16000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (3<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_16KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
case 12000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (4<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_12KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
case 8000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (5<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_8KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
default:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_DAC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (0<<29);
+ reg_val &= ~SUNXI_DAC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_DAC_FIFOC_SAMPLE_RATE_48KHZ;
writel(reg_val, baseaddr + SUNXI_DAC_FIFOC);
break;
}
@@ -1100,8 +1100,8 @@ static int snd_sunxi_codec_prepare(struct
snd_pcm_substream *substream)
clk_set_rate(codec_pll2clk, 22579200);
clk_set_rate(codec_moduleclk, 22579200);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (0<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_48KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
@@ -1109,72 +1109,72 @@ static int snd_sunxi_codec_prepare(struct
snd_pcm_substream *substream)
clk_set_rate(codec_pll2clk, 22579200);
clk_set_rate(codec_moduleclk, 22579200);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (2<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_24KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
case 11025:
clk_set_rate(codec_pll2clk, 22579200);
clk_set_rate(codec_moduleclk, 22579200);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (4<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_12KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
case 48000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (0<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_48KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
case 32000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (1<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_32KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
case 24000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (2<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_24KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
case 16000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (3<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_16KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
case 12000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (4<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_12KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
case 8000:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (5<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_8KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
default:
clk_set_rate(codec_pll2clk, 24576000);
clk_set_rate(codec_moduleclk, 24576000);
reg_val = readl(baseaddr + SUNXI_ADC_FIFOC);
- reg_val &= ~(7<<29);
- reg_val |= (0<<29);
+ reg_val &= ~SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK;
+ reg_val |= SUNXI_ADC_FIFOC_SAMPLE_RATE_48KHZ;
writel(reg_val, baseaddr + SUNXI_ADC_FIFOC);
break;
}
diff --git a/sound/soc/sunxi/sunxi-codec.h b/sound/soc/sunxi/sunxi-codec.h
index e714a6e..cfcb8a8 100644
--- a/sound/soc/sunxi/sunxi-codec.h
+++ b/sound/soc/sunxi/sunxi-codec.h
@@ -80,6 +80,15 @@
#define SUNXI_DAC_DEBUG_DAC_CHANNEL (1 << 6)
#define SUNXI_ADC_FIFOC (0x1c)
+ #define SUNXI_ADC_FIFOC_SAMPLE_RATE_96KHZ (7 << 29)
+ #define SUNXI_ADC_FIFOC_SAMPLE_RATE_192KHZ (6 << 29)
+ #define SUNXI_ADC_FIFOC_SAMPLE_RATE_8KHZ (5 << 29)
+ #define SUNXI_ADC_FIFOC_SAMPLE_RATE_12KHZ (4 << 29)
+ #define SUNXI_ADC_FIFOC_SAMPLE_RATE_16KHZ (3 << 29)
+ #define SUNXI_ADC_FIFOC_SAMPLE_RATE_24KHZ (2 << 29)
+ #define SUNXI_ADC_FIFOC_SAMPLE_RATE_32KHZ (1 << 29)
+ #define SUNXI_ADC_FIFOC_SAMPLE_RATE_48KHZ (0 << 29)
+ #define SUNXI_ADC_FIFOC_SAMPLE_RATE_MASK (7 << 29)
#define SUNXI_ADC_FIFOC_ADC_DIG_EN (1 << 28)
#define SUNXI_ADC_FIFOC_RX_FIFO_MODE (1 << 24)
#define SUNXI_ADC_FIFOC_RX_TRI_LEVEL (1 << 8)
--
1.9.1
--
You received this message because you are subscribed to the Google Groups
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.