aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm8750.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs/wm8750.c')
-rw-r--r--sound/soc/codecs/wm8750.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c
index 16cd5d4d5ad9..62423f4493b0 100644
--- a/sound/soc/codecs/wm8750.c
+++ b/sound/soc/codecs/wm8750.c
@@ -686,29 +686,29 @@ static int wm8750_mute(struct snd_soc_codec_dai *dai, int mute)
686 return 0; 686 return 0;
687} 687}
688 688
689static int wm8750_dapm_event(struct snd_soc_codec *codec, int event) 689static int wm8750_set_bias_level(struct snd_soc_codec *codec,
690 enum snd_soc_bias_level level)
690{ 691{
691 u16 pwr_reg = wm8750_read_reg_cache(codec, WM8750_PWR1) & 0xfe3e; 692 u16 pwr_reg = wm8750_read_reg_cache(codec, WM8750_PWR1) & 0xfe3e;
692 693
693 switch (event) { 694 switch (level) {
694 case SNDRV_CTL_POWER_D0: /* full On */ 695 case SND_SOC_BIAS_ON:
695 /* set vmid to 50k and unmute dac */ 696 /* set vmid to 50k and unmute dac */
696 wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x00c0); 697 wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x00c0);
697 break; 698 break;
698 case SNDRV_CTL_POWER_D1: /* partial On */ 699 case SND_SOC_BIAS_PREPARE:
699 case SNDRV_CTL_POWER_D2: /* partial On */
700 /* set vmid to 5k for quick power up */ 700 /* set vmid to 5k for quick power up */
701 wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x01c1); 701 wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x01c1);
702 break; 702 break;
703 case SNDRV_CTL_POWER_D3hot: /* Off, with power */ 703 case SND_SOC_BIAS_STANDBY:
704 /* mute dac and set vmid to 500k, enable VREF */ 704 /* mute dac and set vmid to 500k, enable VREF */
705 wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x0141); 705 wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x0141);
706 break; 706 break;
707 case SNDRV_CTL_POWER_D3cold: /* Off, without power */ 707 case SND_SOC_BIAS_OFF:
708 wm8750_write(codec, WM8750_PWR1, 0x0001); 708 wm8750_write(codec, WM8750_PWR1, 0x0001);
709 break; 709 break;
710 } 710 }
711 codec->dapm_state = event; 711 codec->bias_level = level;
712 return 0; 712 return 0;
713} 713}
714 714
@@ -748,7 +748,7 @@ static void wm8750_work(struct work_struct *work)
748{ 748{
749 struct snd_soc_codec *codec = 749 struct snd_soc_codec *codec =
750 container_of(work, struct snd_soc_codec, delayed_work.work); 750 container_of(work, struct snd_soc_codec, delayed_work.work);
751 wm8750_dapm_event(codec, codec->dapm_state); 751 wm8750_set_bias_level(codec, codec->bias_level);
752} 752}
753 753
754static int wm8750_suspend(struct platform_device *pdev, pm_message_t state) 754static int wm8750_suspend(struct platform_device *pdev, pm_message_t state)
@@ -756,7 +756,7 @@ static int wm8750_suspend(struct platform_device *pdev, pm_message_t state)
756 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 756 struct snd_soc_device *socdev = platform_get_drvdata(pdev);
757 struct snd_soc_codec *codec = socdev->codec; 757 struct snd_soc_codec *codec = socdev->codec;
758 758
759 wm8750_dapm_event(codec, SNDRV_CTL_POWER_D3cold); 759 wm8750_set_bias_level(codec, SND_SOC_BIAS_OFF);
760 return 0; 760 return 0;
761} 761}
762 762
@@ -777,12 +777,12 @@ static int wm8750_resume(struct platform_device *pdev)
777 codec->hw_write(codec->control_data, data, 2); 777 codec->hw_write(codec->control_data, data, 2);
778 } 778 }
779 779
780 wm8750_dapm_event(codec, SNDRV_CTL_POWER_D3hot); 780 wm8750_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
781 781
782 /* charge wm8750 caps */ 782 /* charge wm8750 caps */
783 if (codec->suspend_dapm_state == SNDRV_CTL_POWER_D0) { 783 if (codec->suspend_bias_level == SND_SOC_BIAS_ON) {
784 wm8750_dapm_event(codec, SNDRV_CTL_POWER_D2); 784 wm8750_set_bias_level(codec, SND_SOC_BIAS_PREPARE);
785 codec->dapm_state = SNDRV_CTL_POWER_D0; 785 codec->bias_level = SND_SOC_BIAS_ON;
786 schedule_delayed_work(&codec->delayed_work, 786 schedule_delayed_work(&codec->delayed_work,
787 msecs_to_jiffies(1000)); 787 msecs_to_jiffies(1000));
788 } 788 }
@@ -803,7 +803,7 @@ static int wm8750_init(struct snd_soc_device *socdev)
803 codec->owner = THIS_MODULE; 803 codec->owner = THIS_MODULE;
804 codec->read = wm8750_read_reg_cache; 804 codec->read = wm8750_read_reg_cache;
805 codec->write = wm8750_write; 805 codec->write = wm8750_write;
806 codec->dapm_event = wm8750_dapm_event; 806 codec->set_bias_level = wm8750_set_bias_level;
807 codec->dai = &wm8750_dai; 807 codec->dai = &wm8750_dai;
808 codec->num_dai = 1; 808 codec->num_dai = 1;
809 codec->reg_cache_size = sizeof(wm8750_reg); 809 codec->reg_cache_size = sizeof(wm8750_reg);
@@ -821,8 +821,8 @@ static int wm8750_init(struct snd_soc_device *socdev)
821 } 821 }
822 822
823 /* charge output caps */ 823 /* charge output caps */
824 wm8750_dapm_event(codec, SNDRV_CTL_POWER_D2); 824 wm8750_set_bias_level(codec, SND_SOC_BIAS_PREPARE);
825 codec->dapm_state = SNDRV_CTL_POWER_D3hot; 825 codec->bias_level = SND_SOC_BIAS_STANDBY;
826 schedule_delayed_work(&codec->delayed_work, msecs_to_jiffies(1000)); 826 schedule_delayed_work(&codec->delayed_work, msecs_to_jiffies(1000));
827 827
828 /* set the update bits */ 828 /* set the update bits */
@@ -1021,7 +1021,7 @@ static int wm8750_remove(struct platform_device *pdev)
1021 struct snd_soc_codec *codec = socdev->codec; 1021 struct snd_soc_codec *codec = socdev->codec;
1022 1022
1023 if (codec->control_data) 1023 if (codec->control_data)
1024 wm8750_dapm_event(codec, SNDRV_CTL_POWER_D3cold); 1024 wm8750_set_bias_level(codec, SND_SOC_BIAS_OFF);
1025 run_delayed_work(&codec->delayed_work); 1025 run_delayed_work(&codec->delayed_work);
1026 snd_soc_free_pcms(socdev); 1026 snd_soc_free_pcms(socdev);
1027 snd_soc_dapm_free(socdev); 1027 snd_soc_dapm_free(socdev);