diff options
-rw-r--r-- | sound/soc/codecs/wm9712.c | 62 |
1 files changed, 29 insertions, 33 deletions
diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c index d2d79e182a45..76c1e2d33e7d 100644 --- a/sound/soc/codecs/wm9712.c +++ b/sound/soc/codecs/wm9712.c | |||
@@ -37,23 +37,23 @@ static int ac97_write(struct snd_soc_codec *codec, | |||
37 | * WM9712 register cache | 37 | * WM9712 register cache |
38 | */ | 38 | */ |
39 | static const u16 wm9712_reg[] = { | 39 | static const u16 wm9712_reg[] = { |
40 | 0x6174, 0x8000, 0x8000, 0x8000, // 6 | 40 | 0x6174, 0x8000, 0x8000, 0x8000, /* 6 */ |
41 | 0x0f0f, 0xaaa0, 0xc008, 0x6808, // e | 41 | 0x0f0f, 0xaaa0, 0xc008, 0x6808, /* e */ |
42 | 0xe808, 0xaaa0, 0xad00, 0x8000, // 16 | 42 | 0xe808, 0xaaa0, 0xad00, 0x8000, /* 16 */ |
43 | 0xe808, 0x3000, 0x8000, 0x0000, // 1e | 43 | 0xe808, 0x3000, 0x8000, 0x0000, /* 1e */ |
44 | 0x0000, 0x0000, 0x0000, 0x000f, // 26 | 44 | 0x0000, 0x0000, 0x0000, 0x000f, /* 26 */ |
45 | 0x0405, 0x0410, 0xbb80, 0xbb80, // 2e | 45 | 0x0405, 0x0410, 0xbb80, 0xbb80, /* 2e */ |
46 | 0x0000, 0xbb80, 0x0000, 0x0000, // 36 | 46 | 0x0000, 0xbb80, 0x0000, 0x0000, /* 36 */ |
47 | 0x0000, 0x2000, 0x0000, 0x0000, // 3e | 47 | 0x0000, 0x2000, 0x0000, 0x0000, /* 3e */ |
48 | 0x0000, 0x0000, 0x0000, 0x0000, // 46 | 48 | 0x0000, 0x0000, 0x0000, 0x0000, /* 46 */ |
49 | 0x0000, 0x0000, 0xf83e, 0xffff, // 4e | 49 | 0x0000, 0x0000, 0xf83e, 0xffff, /* 4e */ |
50 | 0x0000, 0x0000, 0x0000, 0xf83e, // 56 | 50 | 0x0000, 0x0000, 0x0000, 0xf83e, /* 56 */ |
51 | 0x0008, 0x0000, 0x0000, 0x0000, // 5e | 51 | 0x0008, 0x0000, 0x0000, 0x0000, /* 5e */ |
52 | 0xb032, 0x3e00, 0x0000, 0x0000, // 66 | 52 | 0xb032, 0x3e00, 0x0000, 0x0000, /* 66 */ |
53 | 0x0000, 0x0000, 0x0000, 0x0000, // 6e | 53 | 0x0000, 0x0000, 0x0000, 0x0000, /* 6e */ |
54 | 0x0000, 0x0000, 0x0000, 0x0006, // 76 | 54 | 0x0000, 0x0000, 0x0000, 0x0006, /* 76 */ |
55 | 0x0001, 0x0000, 0x574d, 0x4c12, // 7e | 55 | 0x0001, 0x0000, 0x574d, 0x4c12, /* 7e */ |
56 | 0x0000, 0x0000 // virtual hp mixers | 56 | 0x0000, 0x0000 /* virtual hp mixers */ |
57 | }; | 57 | }; |
58 | 58 | ||
59 | /* virtual HP mixers regs */ | 59 | /* virtual HP mixers regs */ |
@@ -94,7 +94,7 @@ static const struct snd_kcontrol_new wm9712_snd_ac97_controls[] = { | |||
94 | SOC_DOUBLE("Speaker Playback Volume", AC97_MASTER, 8, 0, 31, 1), | 94 | SOC_DOUBLE("Speaker Playback Volume", AC97_MASTER, 8, 0, 31, 1), |
95 | SOC_SINGLE("Speaker Playback Switch", AC97_MASTER, 15, 1, 1), | 95 | SOC_SINGLE("Speaker Playback Switch", AC97_MASTER, 15, 1, 1), |
96 | SOC_DOUBLE("Headphone Playback Volume", AC97_HEADPHONE, 8, 0, 31, 1), | 96 | SOC_DOUBLE("Headphone Playback Volume", AC97_HEADPHONE, 8, 0, 31, 1), |
97 | SOC_SINGLE("Headphone Playback Switch", AC97_HEADPHONE,15, 1, 1), | 97 | SOC_SINGLE("Headphone Playback Switch", AC97_HEADPHONE, 15, 1, 1), |
98 | SOC_DOUBLE("PCM Playback Volume", AC97_PCM, 8, 0, 31, 1), | 98 | SOC_DOUBLE("PCM Playback Volume", AC97_PCM, 8, 0, 31, 1), |
99 | 99 | ||
100 | SOC_SINGLE("Speaker Playback ZC Switch", AC97_MASTER, 7, 1, 0), | 100 | SOC_SINGLE("Speaker Playback ZC Switch", AC97_MASTER, 7, 1, 0), |
@@ -165,7 +165,8 @@ static int wm9712_add_controls(struct snd_soc_codec *codec) | |||
165 | 165 | ||
166 | for (i = 0; i < ARRAY_SIZE(wm9712_snd_ac97_controls); i++) { | 166 | for (i = 0; i < ARRAY_SIZE(wm9712_snd_ac97_controls); i++) { |
167 | err = snd_ctl_add(codec->card, | 167 | err = snd_ctl_add(codec->card, |
168 | snd_soc_cnew(&wm9712_snd_ac97_controls[i],codec, NULL)); | 168 | snd_soc_cnew(&wm9712_snd_ac97_controls[i], |
169 | codec, NULL)); | ||
169 | if (err < 0) | 170 | if (err < 0) |
170 | return err; | 171 | return err; |
171 | } | 172 | } |
@@ -363,7 +364,6 @@ static const char *audio_map[][3] = { | |||
363 | {"Left HP Mixer", "PCM Playback Switch", "Left DAC"}, | 364 | {"Left HP Mixer", "PCM Playback Switch", "Left DAC"}, |
364 | {"Left HP Mixer", "Mic Sidetone Switch", "Mic PGA"}, | 365 | {"Left HP Mixer", "Mic Sidetone Switch", "Mic PGA"}, |
365 | {"Left HP Mixer", NULL, "ALC Sidetone Mux"}, | 366 | {"Left HP Mixer", NULL, "ALC Sidetone Mux"}, |
366 | //{"Right HP Mixer", NULL, "HP Mixer"}, | ||
367 | 367 | ||
368 | /* Right HP mixer */ | 368 | /* Right HP mixer */ |
369 | {"Right HP Mixer", "PCBeep Bypass Switch", "PCBEEP"}, | 369 | {"Right HP Mixer", "PCBeep Bypass Switch", "PCBEEP"}, |
@@ -454,15 +454,13 @@ static int wm9712_add_widgets(struct snd_soc_codec *codec) | |||
454 | { | 454 | { |
455 | int i; | 455 | int i; |
456 | 456 | ||
457 | for(i = 0; i < ARRAY_SIZE(wm9712_dapm_widgets); i++) { | 457 | for (i = 0; i < ARRAY_SIZE(wm9712_dapm_widgets); i++) |
458 | snd_soc_dapm_new_control(codec, &wm9712_dapm_widgets[i]); | 458 | snd_soc_dapm_new_control(codec, &wm9712_dapm_widgets[i]); |
459 | } | ||
460 | 459 | ||
461 | /* set up audio path audio_mapnects */ | 460 | /* set up audio path connects */ |
462 | for(i = 0; audio_map[i][0] != NULL; i++) { | 461 | for (i = 0; audio_map[i][0] != NULL; i++) |
463 | snd_soc_dapm_connect_input(codec, audio_map[i][0], | 462 | snd_soc_dapm_connect_input(codec, audio_map[i][0], |
464 | audio_map[i][1], audio_map[i][2]); | 463 | audio_map[i][1], audio_map[i][2]); |
465 | } | ||
466 | 464 | ||
467 | snd_soc_dapm_new_widgets(codec); | 465 | snd_soc_dapm_new_widgets(codec); |
468 | return 0; | 466 | return 0; |
@@ -540,7 +538,8 @@ static int ac97_aux_prepare(struct snd_pcm_substream *substream) | |||
540 | } | 538 | } |
541 | 539 | ||
542 | #define WM9712_AC97_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ | 540 | #define WM9712_AC97_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ |
543 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000) | 541 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 |\ |
542 | SNDRV_PCM_RATE_48000) | ||
544 | 543 | ||
545 | struct snd_soc_codec_dai wm9712_dai[] = { | 544 | struct snd_soc_codec_dai wm9712_dai[] = { |
546 | { | 545 | { |
@@ -577,8 +576,6 @@ EXPORT_SYMBOL_GPL(wm9712_dai); | |||
577 | 576 | ||
578 | static int wm9712_dapm_event(struct snd_soc_codec *codec, int event) | 577 | static int wm9712_dapm_event(struct snd_soc_codec *codec, int event) |
579 | { | 578 | { |
580 | u16 reg; | ||
581 | |||
582 | switch (event) { | 579 | switch (event) { |
583 | case SNDRV_CTL_POWER_D0: /* full On */ | 580 | case SNDRV_CTL_POWER_D0: /* full On */ |
584 | case SNDRV_CTL_POWER_D1: /* partial On */ | 581 | case SNDRV_CTL_POWER_D1: /* partial On */ |
@@ -633,7 +630,7 @@ static int wm9712_soc_resume(struct platform_device *pdev) | |||
633 | u16 *cache = codec->reg_cache; | 630 | u16 *cache = codec->reg_cache; |
634 | 631 | ||
635 | ret = wm9712_reset(codec, 1); | 632 | ret = wm9712_reset(codec, 1); |
636 | if (ret < 0){ | 633 | if (ret < 0) { |
637 | printk(KERN_ERR "could not reset AC97 codec\n"); | 634 | printk(KERN_ERR "could not reset AC97 codec\n"); |
638 | return ret; | 635 | return ret; |
639 | } | 636 | } |
@@ -642,9 +639,9 @@ static int wm9712_soc_resume(struct platform_device *pdev) | |||
642 | 639 | ||
643 | if (ret == 0) { | 640 | if (ret == 0) { |
644 | /* Sync reg_cache with the hardware after cold reset */ | 641 | /* Sync reg_cache with the hardware after cold reset */ |
645 | for (i = 2; i < ARRAY_SIZE(wm9712_reg) << 1; i+=2) { | 642 | for (i = 2; i < ARRAY_SIZE(wm9712_reg) << 1; i += 2) { |
646 | if (i == AC97_INT_PAGING || i == AC97_POWERDOWN || | 643 | if (i == AC97_INT_PAGING || i == AC97_POWERDOWN || |
647 | (i > 0x58 && i != 0x5c)) | 644 | (i > 0x58 && i != 0x5c)) |
648 | continue; | 645 | continue; |
649 | soc_ac97_ops.write(codec->ac97, i, cache[i>>1]); | 646 | soc_ac97_ops.write(codec->ac97, i, cache[i>>1]); |
650 | } | 647 | } |
@@ -757,7 +754,6 @@ struct snd_soc_codec_device soc_codec_dev_wm9712 = { | |||
757 | .suspend = wm9712_soc_suspend, | 754 | .suspend = wm9712_soc_suspend, |
758 | .resume = wm9712_soc_resume, | 755 | .resume = wm9712_soc_resume, |
759 | }; | 756 | }; |
760 | |||
761 | EXPORT_SYMBOL_GPL(soc_codec_dev_wm9712); | 757 | EXPORT_SYMBOL_GPL(soc_codec_dev_wm9712); |
762 | 758 | ||
763 | MODULE_DESCRIPTION("ASoC WM9711/WM9712 driver"); | 759 | MODULE_DESCRIPTION("ASoC WM9711/WM9712 driver"); |