[alsa-devel] [PATCH] Convert ASoC pxa2xx-ac97 driver to use the clock API

Eric Miao ymiao3 at marvell.com
Wed Feb 20 01:59:00 CET 2008


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 at suse.de]
> Sent: Wednesday, February 20, 2008 12:40 AM
> To: Mark Brown
> Cc: Eric Miao; Russell King; alsa-devel at alsa-project.org;
> linux-arm-kernel at 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 at opensource.wolfsonmicro.com>
> > Cc: Takashi Iwai <tiwai at suse.de>
> 
> Acked-by: Takashi Iwai <tiwai at suse.de>
> 
> > Cc: alsa-devel at 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 at alsa-project.org
> > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> >


More information about the Alsa-devel mailing list