summaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm8974.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs/wm8974.c')
-rw-r--r--sound/soc/codecs/wm8974.c78
1 files changed, 38 insertions, 40 deletions
diff --git a/sound/soc/codecs/wm8974.c b/sound/soc/codecs/wm8974.c
index 2b0c99c3e65..b5f1a707cd7 100644
--- a/sound/soc/codecs/wm8974.c
+++ b/sound/soc/codecs/wm8974.c
@@ -28,9 +28,6 @@
#include "wm8974.h"
-#define AUDIO_NAME "wm8974"
-#define WM8974_VERSION "0.6"
-
struct snd_soc_codec_device soc_codec_dev_wm8974;
/*
@@ -39,27 +36,27 @@ struct snd_soc_codec_device soc_codec_dev_wm8974;
* using 2 wire for device control, so we cache them instead.
*/
static const u16 wm8974_reg[WM8974_CACHEREGNUM] = {
- 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0050, 0x0000, 0x0140, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x00ff,
- 0x0000, 0x0000, 0x0100, 0x00ff,
- 0x0000, 0x0000, 0x012c, 0x002c,
- 0x002c, 0x002c, 0x002c, 0x0000,
- 0x0032, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0038, 0x000b, 0x0032, 0x0000,
- 0x0008, 0x000c, 0x0093, 0x00e9,
- 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0003, 0x0010, 0x0000, 0x0000,
- 0x0000, 0x0002, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0039, 0x0000,
- 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0050, 0x0000, 0x0140, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x00ff,
+ 0x0000, 0x0000, 0x0100, 0x00ff,
+ 0x0000, 0x0000, 0x012c, 0x002c,
+ 0x002c, 0x002c, 0x002c, 0x0000,
+ 0x0032, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0038, 0x000b, 0x0032, 0x0000,
+ 0x0008, 0x000c, 0x0093, 0x00e9,
+ 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0003, 0x0010, 0x0000, 0x0000,
+ 0x0000, 0x0002, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0039, 0x0000,
+ 0x0000,
};
/*
* read wm8974 register cache
*/
-static inline unsigned int wm8974_read_reg_cache(struct snd_soc_codec * codec,
+static inline unsigned int wm8974_read_reg_cache(struct snd_soc_codec *codec,
unsigned int reg)
{
u16 *cache = codec->reg_cache;
@@ -97,7 +94,7 @@ static int wm8974_write(struct snd_soc_codec *codec, unsigned int reg,
data[0] = (reg << 1) | ((value >> 8) & 0x0001);
data[1] = value & 0x00ff;
- wm8974_write_reg_cache (codec, reg, value);
+ wm8974_write_reg_cache(codec, reg, value);
if (codec->hw_write(codec->control_data, data, 2) == 2)
return 0;
else
@@ -215,7 +212,8 @@ static int wm8974_add_controls(struct snd_soc_codec *codec)
for (i = 0; i < ARRAY_SIZE(wm8974_snd_controls); i++) {
err = snd_ctl_add(codec->card,
- snd_soc_cnew(&wm8974_snd_controls[i],codec, NULL));
+ snd_soc_cnew(&wm8974_snd_controls[i],
+ codec, NULL));
if (err < 0)
return err;
}
@@ -347,13 +345,14 @@ struct pll_ {
};
static struct pll_ pll[] = {
- {12000000, 11289600, 0, 7, 0x86c220},
- {12000000, 12288000, 0, 8, 0x3126e8},
- {13000000, 11289600, 0, 6, 0xf28bd4},
- {13000000, 12288000, 0, 7, 0x8fd525},
- {12288000, 11289600, 0, 7, 0x59999a},
- {11289600, 12288000, 0, 8, 0x80dee9},
- /* liam - add more entries */
+ { 12000000, 11289600, 0, 7, 0x86c220 },
+ { 12000000, 12288000, 0, 8, 0x3126e8 },
+ { 13000000, 11289600, 0, 6, 0xf28bd4 },
+ { 13000000, 12288000, 0, 7, 0x8fd525 },
+ { 12288000, 11289600, 0, 7, 0x59999a },
+ { 11289600, 12288000, 0, 8, 0x80dee9 },
+ { 25000000, 11289600, 1, 7, 0x39B024 },
+ { 25000000, 24576000, 1, 7, 0xdd4413 }
};
static int wm8974_set_dai_pll(struct snd_soc_dai *codec_dai,
@@ -363,23 +362,26 @@ static int wm8974_set_dai_pll(struct snd_soc_dai *codec_dai,
int i;
u16 reg;
- if(freq_in == 0 || freq_out == 0) {
+ if (freq_in == 0 || freq_out == 0) {
reg = wm8974_read_reg_cache(codec, WM8974_POWER1);
wm8974_write(codec, WM8974_POWER1, reg & 0x1df);
return 0;
}
- for(i = 0; i < ARRAY_SIZE(pll); i++) {
+ for (i = 0; i < ARRAY_SIZE(pll); i++) {
if (freq_in == pll[i].in_hz && freq_out == pll[i].out_hz) {
- wm8974_write(codec, WM8974_PLLN, (pll[i].pre << 4) | pll[i].n);
+ wm8974_write(codec, WM8974_PLLN,
+ (pll[i].pre << 4) | pll[i].n);
wm8974_write(codec, WM8974_PLLK1, pll[i].k >> 18);
- wm8974_write(codec, WM8974_PLLK2, (pll[i].k >> 9) & 0x1ff);
+ wm8974_write(codec, WM8974_PLLK2,
+ (pll[i].k >> 9) & 0x1ff);
wm8974_write(codec, WM8974_PLLK3, pll[i].k & 0x1ff);
reg = wm8974_read_reg_cache(codec, WM8974_POWER1);
wm8974_write(codec, WM8974_POWER1, reg | 0x020);
return 0;
}
}
+
return -EINVAL;
}
@@ -394,7 +396,7 @@ static int wm8974_set_dai_clkdiv(struct snd_soc_dai *codec_dai,
switch (div_id) {
case WM8974_OPCLKDIV:
- reg = wm8974_read_reg_cache(codec, WM8974_GPIO) & 0x1cf;
+ reg = wm8974_read_reg_cache(codec, WM8974_GPIO) & 0x1cf;
wm8974_write(codec, WM8974_GPIO, reg | div);
break;
case WM8974_MCLKDIV:
@@ -531,7 +533,7 @@ static int wm8974_mute(struct snd_soc_dai *dai, int mute)
struct snd_soc_codec *codec = dai->codec;
u16 mute_reg = wm8974_read_reg_cache(codec, WM8974_DAC) & 0xffbf;
- if(mute)
+ if (mute)
wm8974_write(codec, WM8974_DAC, mute_reg | 0x40);
else
wm8974_write(codec, WM8974_DAC, mute_reg);
@@ -562,9 +564,7 @@ static int wm8974_set_bias_level(struct snd_soc_codec *codec,
return 0;
}
-#define WM8974_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
- SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \
- SNDRV_PCM_RATE_48000)
+#define WM8974_RATES (SNDRV_PCM_RATE_8000_48000)
#define WM8974_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
@@ -649,7 +649,7 @@ static int wm8974_init(struct snd_soc_device *socdev)
/* register pcms */
ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
- if(ret < 0) {
+ if (ret < 0) {
printk(KERN_ERR "wm8974: failed to create pcms\n");
goto pcm_err;
}
@@ -773,8 +773,6 @@ static int wm8974_probe(struct platform_device *pdev)
struct snd_soc_codec *codec;
int ret = 0;
- pr_info("WM8974 Audio Codec %s", WM8974_VERSION);
-
setup = socdev->codec_data;
codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
if (codec == NULL)