diff options
| -rw-r--r-- | Documentation/devicetree/bindings/sound/wm8994.txt | 4 | ||||
| -rw-r--r-- | sound/soc/codecs/wm8994.c | 35 |
2 files changed, 24 insertions, 15 deletions
diff --git a/Documentation/devicetree/bindings/sound/wm8994.txt b/Documentation/devicetree/bindings/sound/wm8994.txt index f2f3e80934d2..e045e90a0924 100644 --- a/Documentation/devicetree/bindings/sound/wm8994.txt +++ b/Documentation/devicetree/bindings/sound/wm8994.txt | |||
| @@ -32,6 +32,10 @@ Optional properties: | |||
| 32 | The second cell is the flags, encoded as the trigger masks from | 32 | The second cell is the flags, encoded as the trigger masks from |
| 33 | Documentation/devicetree/bindings/interrupts.txt | 33 | Documentation/devicetree/bindings/interrupts.txt |
| 34 | 34 | ||
| 35 | - clocks : A list of up to two phandle and clock specifier pairs | ||
| 36 | - clock-names : A list of clock names sorted in the same order as clocks. | ||
| 37 | Valid clock names are "MCLK1" and "MCLK2". | ||
| 38 | |||
| 35 | - wlf,gpio-cfg : A list of GPIO configuration register values. If absent, | 39 | - wlf,gpio-cfg : A list of GPIO configuration register values. If absent, |
| 36 | no configuration of these registers is performed. If any value is | 40 | no configuration of these registers is performed. If any value is |
| 37 | over 0xffff then the register will be left as default. If present 11 | 41 | over 0xffff then the register will be left as default. If present 11 |
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index eee2a01f2691..86426a117b07 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
| @@ -819,8 +819,9 @@ static int clk_sys_event(struct snd_soc_dapm_widget *w, | |||
| 819 | * don't want false reports. | 819 | * don't want false reports. |
| 820 | */ | 820 | */ |
| 821 | if (wm8994->jackdet && !wm8994->clk_has_run) { | 821 | if (wm8994->jackdet && !wm8994->clk_has_run) { |
| 822 | schedule_delayed_work(&wm8994->jackdet_bootstrap, | 822 | queue_delayed_work(system_power_efficient_wq, |
| 823 | msecs_to_jiffies(1000)); | 823 | &wm8994->jackdet_bootstrap, |
| 824 | msecs_to_jiffies(1000)); | ||
| 824 | wm8994->clk_has_run = true; | 825 | wm8994->clk_has_run = true; |
| 825 | } | 826 | } |
| 826 | break; | 827 | break; |
| @@ -1432,7 +1433,7 @@ SOC_DAPM_SINGLE("AIF1.1 Switch", WM8994_DAC2_RIGHT_MIXER_ROUTING, | |||
| 1432 | 1433 | ||
| 1433 | #define WM8994_CLASS_W_SWITCH(xname, reg, shift, max, invert) \ | 1434 | #define WM8994_CLASS_W_SWITCH(xname, reg, shift, max, invert) \ |
| 1434 | SOC_SINGLE_EXT(xname, reg, shift, max, invert, \ | 1435 | SOC_SINGLE_EXT(xname, reg, shift, max, invert, \ |
| 1435 | snd_soc_get_volsw, wm8994_put_class_w) | 1436 | snd_soc_dapm_get_volsw, wm8994_put_class_w) |
| 1436 | 1437 | ||
| 1437 | static int wm8994_put_class_w(struct snd_kcontrol *kcontrol, | 1438 | static int wm8994_put_class_w(struct snd_kcontrol *kcontrol, |
| 1438 | struct snd_ctl_elem_value *ucontrol) | 1439 | struct snd_ctl_elem_value *ucontrol) |
| @@ -3485,7 +3486,8 @@ static irqreturn_t wm8994_mic_irq(int irq, void *data) | |||
| 3485 | 3486 | ||
| 3486 | pm_wakeup_event(codec->dev, 300); | 3487 | pm_wakeup_event(codec->dev, 300); |
| 3487 | 3488 | ||
| 3488 | schedule_delayed_work(&priv->mic_work, msecs_to_jiffies(250)); | 3489 | queue_delayed_work(system_power_efficient_wq, |
| 3490 | &priv->mic_work, msecs_to_jiffies(250)); | ||
| 3489 | 3491 | ||
| 3490 | return IRQ_HANDLED; | 3492 | return IRQ_HANDLED; |
| 3491 | } | 3493 | } |
| @@ -3573,8 +3575,9 @@ static void wm8958_mic_id(void *data, u16 status) | |||
| 3573 | /* If nothing present then clear our statuses */ | 3575 | /* If nothing present then clear our statuses */ |
| 3574 | dev_dbg(codec->dev, "Detected open circuit\n"); | 3576 | dev_dbg(codec->dev, "Detected open circuit\n"); |
| 3575 | 3577 | ||
| 3576 | schedule_delayed_work(&wm8994->open_circuit_work, | 3578 | queue_delayed_work(system_power_efficient_wq, |
| 3577 | msecs_to_jiffies(2500)); | 3579 | &wm8994->open_circuit_work, |
| 3580 | msecs_to_jiffies(2500)); | ||
| 3578 | return; | 3581 | return; |
| 3579 | } | 3582 | } |
| 3580 | 3583 | ||
| @@ -3688,8 +3691,9 @@ static irqreturn_t wm1811_jackdet_irq(int irq, void *data) | |||
| 3688 | WM1811_JACKDET_DB, 0); | 3691 | WM1811_JACKDET_DB, 0); |
| 3689 | 3692 | ||
| 3690 | delay = control->pdata.micdet_delay; | 3693 | delay = control->pdata.micdet_delay; |
| 3691 | schedule_delayed_work(&wm8994->mic_work, | 3694 | queue_delayed_work(system_power_efficient_wq, |
| 3692 | msecs_to_jiffies(delay)); | 3695 | &wm8994->mic_work, |
| 3696 | msecs_to_jiffies(delay)); | ||
| 3693 | } else { | 3697 | } else { |
| 3694 | dev_dbg(codec->dev, "Jack not detected\n"); | 3698 | dev_dbg(codec->dev, "Jack not detected\n"); |
| 3695 | 3699 | ||
| @@ -3934,8 +3938,9 @@ static irqreturn_t wm8958_mic_irq(int irq, void *data) | |||
| 3934 | id_delay = wm8994->wm8994->pdata.mic_id_delay; | 3938 | id_delay = wm8994->wm8994->pdata.mic_id_delay; |
| 3935 | 3939 | ||
| 3936 | if (wm8994->mic_detecting) | 3940 | if (wm8994->mic_detecting) |
| 3937 | schedule_delayed_work(&wm8994->mic_complete_work, | 3941 | queue_delayed_work(system_power_efficient_wq, |
| 3938 | msecs_to_jiffies(id_delay)); | 3942 | &wm8994->mic_complete_work, |
| 3943 | msecs_to_jiffies(id_delay)); | ||
| 3939 | else | 3944 | else |
| 3940 | wm8958_button_det(codec, reg); | 3945 | wm8958_button_det(codec, reg); |
| 3941 | 3946 | ||
| @@ -4008,9 +4013,6 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec) | |||
| 4008 | 4013 | ||
| 4009 | wm8994->micdet_irq = control->pdata.micdet_irq; | 4014 | wm8994->micdet_irq = control->pdata.micdet_irq; |
| 4010 | 4015 | ||
| 4011 | pm_runtime_enable(codec->dev); | ||
| 4012 | pm_runtime_idle(codec->dev); | ||
| 4013 | |||
| 4014 | /* By default use idle_bias_off, will override for WM8994 */ | 4016 | /* By default use idle_bias_off, will override for WM8994 */ |
| 4015 | codec->dapm.idle_bias_off = 1; | 4017 | codec->dapm.idle_bias_off = 1; |
| 4016 | 4018 | ||
| @@ -4383,8 +4385,6 @@ static int wm8994_codec_remove(struct snd_soc_codec *codec) | |||
| 4383 | 4385 | ||
| 4384 | wm8994_set_bias_level(codec, SND_SOC_BIAS_OFF); | 4386 | wm8994_set_bias_level(codec, SND_SOC_BIAS_OFF); |
| 4385 | 4387 | ||
| 4386 | pm_runtime_disable(codec->dev); | ||
| 4387 | |||
| 4388 | for (i = 0; i < ARRAY_SIZE(wm8994->fll_locked); i++) | 4388 | for (i = 0; i < ARRAY_SIZE(wm8994->fll_locked); i++) |
| 4389 | wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_FLL1_LOCK + i, | 4389 | wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_FLL1_LOCK + i, |
| 4390 | &wm8994->fll_locked[i]); | 4390 | &wm8994->fll_locked[i]); |
| @@ -4443,6 +4443,9 @@ static int wm8994_probe(struct platform_device *pdev) | |||
| 4443 | 4443 | ||
| 4444 | wm8994->wm8994 = dev_get_drvdata(pdev->dev.parent); | 4444 | wm8994->wm8994 = dev_get_drvdata(pdev->dev.parent); |
| 4445 | 4445 | ||
| 4446 | pm_runtime_enable(&pdev->dev); | ||
| 4447 | pm_runtime_idle(&pdev->dev); | ||
| 4448 | |||
| 4446 | return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm8994, | 4449 | return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm8994, |
| 4447 | wm8994_dai, ARRAY_SIZE(wm8994_dai)); | 4450 | wm8994_dai, ARRAY_SIZE(wm8994_dai)); |
| 4448 | } | 4451 | } |
| @@ -4450,6 +4453,8 @@ static int wm8994_probe(struct platform_device *pdev) | |||
| 4450 | static int wm8994_remove(struct platform_device *pdev) | 4453 | static int wm8994_remove(struct platform_device *pdev) |
| 4451 | { | 4454 | { |
| 4452 | snd_soc_unregister_codec(&pdev->dev); | 4455 | snd_soc_unregister_codec(&pdev->dev); |
| 4456 | pm_runtime_disable(&pdev->dev); | ||
| 4457 | |||
| 4453 | return 0; | 4458 | return 0; |
| 4454 | } | 4459 | } |
| 4455 | 4460 | ||
