#include "wm8974.h"
-#define AUDIO_NAME "wm8974"
-#define WM8974_VERSION "0.6"
-
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;
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
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;
}
};
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,
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;
}
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:
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);
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)
/* 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;
}
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)