Re: [PATCH] Convert ASoC pxa2xx-ac97 driver to use the clock API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxx]
> Sent: Wednesday, February 20, 2008 12:40 AM
> To: Mark Brown
> Cc: Eric Miao; Russell King; alsa-devel@xxxxxxxxxxxxxxxx;
> linux-arm-kernel@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re:  [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@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
> > Cc: Takashi Iwai <tiwai@xxxxxxx>
> 
> Acked-by: Takashi Iwai <tiwai@xxxxxxx>
> 
> > Cc: alsa-devel@xxxxxxxxxxxxxxxx
> > ---
> >  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@xxxxxxxxxxxxxxxx
> > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> >
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux