Shouldn't the clock rate for AC97 be 12.288MHz? Though the clock is actually provided by external, the clock hierarchy implies an internal clock of 12.288MHz on both PXA25x DM and PXA3xx DM (unfortunately, not specified on PXA27x DM)
- eric
-----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: Wednesday, February 20, 2008 12:40 AM To: Mark Brown Cc: Eric Miao; Russell King; alsa-devel@alsa-project.org; linux-arm-kernel@lists.arm.linux.org.uk Subject: Re: [alsa-devel] [PATCH] Convert ASoC pxa2xx-ac97 driver to use the clock API
At Tue, 19 Feb 2008 16:04:17 +0000, Mark Brown wrote:
Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com Cc: Takashi Iwai tiwai@suse.de
Acked-by: Takashi Iwai tiwai@suse.de
Cc: alsa-devel@alsa-project.org
sound/soc/pxa/pxa2xx-ac97.c | 54
++++++++++++++++++++++++++++++++++--------
1 files changed, 43 insertions(+), 11 deletions(-)
diff --git a/sound/soc/pxa/pxa2xx-ac97.c b/sound/soc/pxa/pxa2xx-ac97.c index 815c153..b4d53d4 100644 --- a/sound/soc/pxa/pxa2xx-ac97.c +++ b/sound/soc/pxa/pxa2xx-ac97.c @@ -15,6 +15,7 @@ #include <linux/platform_device.h> #include <linux/interrupt.h> #include <linux/wait.h> +#include <linux/clk.h> #include <linux/delay.h>
#include <sound/core.h> @@ -35,6 +36,10 @@ static DEFINE_MUTEX(car_mutex); static DECLARE_WAIT_QUEUE_HEAD(gsr_wq); static volatile long gsr_bits; +static struct clk *ac97_clk; +#ifdef CONFIG_PXA27x +static struct clk *ac97conf_clk; +#endif
/*
- Beware PXA27x bugs:
@@ -159,9 +164,9 @@ static void pxa2xx_ac97_cold_reset(struct snd_ac97 *ac97) gsr_bits = 0; #ifdef CONFIG_PXA27x /* PXA27x Developers Manual section 13.5.2.2.1 */
- pxa_set_cken(CKEN_AC97CONF, 1);
- clk_enable(ac97conf_clk); udelay(5);
- pxa_set_cken(CKEN_AC97CONF, 0);
- clk_disable(ac97conf_clk); GCR = GCR_COLD_RST; udelay(50);
#else @@ -255,7 +260,7 @@ static int pxa2xx_ac97_suspend(struct platform_device
*pdev,
struct snd_soc_cpu_dai *dai) { GCR |= GCR_ACLINK_OFF;
- pxa_set_cken(CKEN_AC97, 0);
- clk_disable(ac97_clk); return 0;
}
@@ -270,7 +275,7 @@ static int pxa2xx_ac97_resume(struct platform_device
*pdev,
/* Use GPIO 113 as AC97 Reset on Bulverde */ pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT); #endif
- pxa_set_cken(CKEN_AC97, 1);
- clk_enable(ac97_clk); return 0;
}
@@ -294,16 +299,37 @@ static int pxa2xx_ac97_probe(struct platform_device
*pdev)
#ifdef CONFIG_PXA27x /* Use GPIO 113 as AC97 Reset on Bulverde */ pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
- ac97conf_clk = clk_get(&pdev->dev, "AC97CONFCLK");
- if (IS_ERR(ac97conf_clk)) {
ac97conf_clk = NULL;
ret = -ENODEV;
goto err_irq;
- }
#endif
- pxa_set_cken(CKEN_AC97, 1);
- ac97_clk = clk_get(&pdev->dev, "AC97CLK");
- if (IS_ERR(ac97_clk)) {
ac97_clk = NULL;
ret = -ENODEV;
goto err_irq;
- } return 0;
- err:
- if (CKEN & (1 << CKEN_AC97)) {
GCR |= GCR_ACLINK_OFF;
free_irq(IRQ_AC97, NULL);
pxa_set_cken(CKEN_AC97, 0);
- err_irq:
- GCR |= GCR_ACLINK_OFF;
- if (ac97_clk) {
clk_disable(ac97_clk);
clk_put(ac97_clk);
}ac97_clk = NULL;
+#ifdef CONFIG_PXA27x
- if (ac97conf_clk) {
clk_put(ac97conf_clk);
ac97conf_clk = NULL;
- }
+#endif
- free_irq(IRQ_AC97, NULL);
- err: return ret;
}
@@ -311,7 +337,13 @@ static void pxa2xx_ac97_remove(struct platform_device
*pdev)
{ GCR |= GCR_ACLINK_OFF; free_irq(IRQ_AC97, NULL);
- pxa_set_cken(CKEN_AC97, 0);
+#ifdef CONFIG_PXA27x
- clk_put(ac97conf_clk);
- ac97conf_clk = NULL;
+#endif
- clk_disable(ac97_clk);
- clk_put(ac97_clk);
- ac97_clk = NULL;
}
static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
1.5.4.2
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel