Commit 1941246d authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
  ALSA: ASoC: Fix error paths in N810 machine driver init and release clocks at exit
  ALSA: oxygen: prevent muting of nonexistent AC97 controls
parents 1ef708ea e784539f
...@@ -512,9 +512,12 @@ static int ac97_switch_get(struct snd_kcontrol *ctl, ...@@ -512,9 +512,12 @@ static int ac97_switch_get(struct snd_kcontrol *ctl,
static void mute_ac97_ctl(struct oxygen *chip, unsigned int control) static void mute_ac97_ctl(struct oxygen *chip, unsigned int control)
{ {
unsigned int priv_idx = chip->controls[control]->private_value & 0xff; unsigned int priv_idx;
u16 value; u16 value;
if (!chip->controls[control])
return;
priv_idx = chip->controls[control]->private_value & 0xff;
value = oxygen_read_ac97(chip, 0, priv_idx); value = oxygen_read_ac97(chip, 0, priv_idx);
if (!(value & 0x8000)) { if (!(value & 0x8000)) {
oxygen_write_ac97(chip, 0, priv_idx, value | 0x8000); oxygen_write_ac97(chip, 0, priv_idx, value | 0x8000);
......
...@@ -329,12 +329,14 @@ static int __init n810_soc_init(void) ...@@ -329,12 +329,14 @@ static int __init n810_soc_init(void)
sys_clkout2_src = clk_get(dev, "sys_clkout2_src"); sys_clkout2_src = clk_get(dev, "sys_clkout2_src");
if (IS_ERR(sys_clkout2_src)) { if (IS_ERR(sys_clkout2_src)) {
dev_err(dev, "Could not get sys_clkout2_src clock\n"); dev_err(dev, "Could not get sys_clkout2_src clock\n");
return -ENODEV; err = PTR_ERR(sys_clkout2_src);
goto err2;
} }
sys_clkout2 = clk_get(dev, "sys_clkout2"); sys_clkout2 = clk_get(dev, "sys_clkout2");
if (IS_ERR(sys_clkout2)) { if (IS_ERR(sys_clkout2)) {
dev_err(dev, "Could not get sys_clkout2\n"); dev_err(dev, "Could not get sys_clkout2\n");
goto err1; err = PTR_ERR(sys_clkout2);
goto err3;
} }
/* /*
* Configure 12 MHz output on SYS_CLKOUT2. Therefore we must use * Configure 12 MHz output on SYS_CLKOUT2. Therefore we must use
...@@ -343,7 +345,8 @@ static int __init n810_soc_init(void) ...@@ -343,7 +345,8 @@ static int __init n810_soc_init(void)
func96m_clk = clk_get(dev, "func_96m_ck"); func96m_clk = clk_get(dev, "func_96m_ck");
if (IS_ERR(func96m_clk)) { if (IS_ERR(func96m_clk)) {
dev_err(dev, "Could not get func 96M clock\n"); dev_err(dev, "Could not get func 96M clock\n");
goto err2; err = PTR_ERR(func96m_clk);
goto err4;
} }
clk_set_parent(sys_clkout2_src, func96m_clk); clk_set_parent(sys_clkout2_src, func96m_clk);
clk_set_rate(sys_clkout2, 12000000); clk_set_rate(sys_clkout2, 12000000);
...@@ -356,20 +359,25 @@ static int __init n810_soc_init(void) ...@@ -356,20 +359,25 @@ static int __init n810_soc_init(void)
gpio_direction_output(N810_SPEAKER_AMP_GPIO, 0); gpio_direction_output(N810_SPEAKER_AMP_GPIO, 0);
return 0; return 0;
err2: err4:
clk_put(sys_clkout2); clk_put(sys_clkout2);
err3:
clk_put(sys_clkout2_src);
err2:
platform_device_del(n810_snd_device); platform_device_del(n810_snd_device);
err1: err1:
platform_device_put(n810_snd_device); platform_device_put(n810_snd_device);
return err; return err;
} }
static void __exit n810_soc_exit(void) static void __exit n810_soc_exit(void)
{ {
gpio_free(N810_SPEAKER_AMP_GPIO); gpio_free(N810_SPEAKER_AMP_GPIO);
gpio_free(N810_HEADSET_AMP_GPIO); gpio_free(N810_HEADSET_AMP_GPIO);
clk_put(sys_clkout2_src);
clk_put(sys_clkout2);
clk_put(func96m_clk);
platform_device_unregister(n810_snd_device); platform_device_unregister(n810_snd_device);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment