Re: [PATCH 2/3] ASoC: atmel_ssc_dai: refactor the startup and shutdown

2015-02-08 Thread Bo Shen

Hi Mark,

On 01/30/2015 09:20 PM, Mark Brown wrote:

On Fri, Jan 30, 2015 at 05:38:43PM +0800, Bo Shen wrote:

In startup function, enable ssc clock and in shutdown function,
disable clock. And also remove disable ssc in shutdown function,
as ssc is disabled in prepare function.


Applied, thanks.  You probably want to convert to clk_prepare_enable()
too but that's a separate thing.


OK, thanks, I will check that. As now, we prepare clock in ssc driver, 
then enable it in dai driver.


Best Regards,
Bo Shen

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/3] ASoC: atmel_ssc_dai: refactor the startup and shutdown

2015-02-08 Thread Bo Shen

Hi Mark,

On 01/30/2015 09:20 PM, Mark Brown wrote:

On Fri, Jan 30, 2015 at 05:38:43PM +0800, Bo Shen wrote:

In startup function, enable ssc clock and in shutdown function,
disable clock. And also remove disable ssc in shutdown function,
as ssc is disabled in prepare function.


Applied, thanks.  You probably want to convert to clk_prepare_enable()
too but that's a separate thing.


OK, thanks, I will check that. As now, we prepare clock in ssc driver, 
then enable it in dai driver.


Best Regards,
Bo Shen

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/3] ASoC: atmel_ssc_dai: refactor the startup and shutdown

2015-02-07 Thread Mark Brown
On Fri, Jan 30, 2015 at 05:38:43PM +0800, Bo Shen wrote:
> In startup function, enable ssc clock and in shutdown function,
> disable clock. And also remove disable ssc in shutdown function,
> as ssc is disabled in prepare function.

Applied, thanks.  You probably want to convert to clk_prepare_enable()
too but that's a separate thing.


signature.asc
Description: Digital signature


Re: [PATCH 2/3] ASoC: atmel_ssc_dai: refactor the startup and shutdown

2015-02-07 Thread Mark Brown
On Fri, Jan 30, 2015 at 05:38:43PM +0800, Bo Shen wrote:
 In startup function, enable ssc clock and in shutdown function,
 disable clock. And also remove disable ssc in shutdown function,
 as ssc is disabled in prepare function.

Applied, thanks.  You probably want to convert to clk_prepare_enable()
too but that's a separate thing.


signature.asc
Description: Digital signature


[PATCH 2/3] ASoC: atmel_ssc_dai: refactor the startup and shutdown

2015-01-30 Thread Bo Shen
In startup function, enable ssc clock and in shutdown function,
disable clock. And also remove disable ssc in shutdown function,
as ssc is disabled in prepare function.

Signed-off-by: Bo Shen 
---

 sound/soc/atmel/atmel_ssc_dai.c | 28 +++-
 1 file changed, 11 insertions(+), 17 deletions(-)

diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
index c1d93b8..0ed5ac3 100644
--- a/sound/soc/atmel/atmel_ssc_dai.c
+++ b/sound/soc/atmel/atmel_ssc_dai.c
@@ -204,6 +204,13 @@ static int atmel_ssc_startup(struct snd_pcm_substream 
*substream,
pr_debug("atmel_ssc_startup: SSC_SR=0x%u\n",
ssc_readl(ssc_p->ssc->regs, SR));
 
+   /* Enable PMC peripheral clock for this SSC */
+   pr_debug("atmel_ssc_dai: Starting clock\n");
+   clk_enable(ssc_p->ssc->clk);
+
+   /* Reset the SSC to keep it at a clean status */
+   ssc_writel(ssc_p->ssc->regs, CR, SSC_BIT(CR_SWRST));
+
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
dir = 0;
dir_mask = SSC_DIR_MASK_PLAYBACK;
@@ -250,11 +257,6 @@ static void atmel_ssc_shutdown(struct snd_pcm_substream 
*substream,
dma_params = ssc_p->dma_params[dir];
 
if (dma_params != NULL) {
-   ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_disable);
-   pr_debug("atmel_ssc_shutdown: %s disabled SSC_SR=0x%08x\n",
-   (dir ? "receive" : "transmit"),
-   ssc_readl(ssc_p->ssc->regs, SR));
-
dma_params->ssc = NULL;
dma_params->substream = NULL;
ssc_p->dma_params[dir] = NULL;
@@ -266,10 +268,6 @@ static void atmel_ssc_shutdown(struct snd_pcm_substream 
*substream,
ssc_p->dir_mask &= ~dir_mask;
if (!ssc_p->dir_mask) {
if (ssc_p->initialized) {
-   /* Shutdown the SSC clock. */
-   pr_debug("atmel_ssc_dai: Stopping clock\n");
-   clk_disable(ssc_p->ssc->clk);
-
free_irq(ssc_p->ssc->irq, ssc_p);
ssc_p->initialized = 0;
}
@@ -280,6 +278,10 @@ static void atmel_ssc_shutdown(struct snd_pcm_substream 
*substream,
ssc_p->cmr_div = ssc_p->tcmr_period = ssc_p->rcmr_period = 0;
}
spin_unlock_irq(_p->lock);
+
+   /* Shutdown the SSC clock. */
+   pr_debug("atmel_ssc_dai: Stopping clock\n");
+   clk_disable(ssc_p->ssc->clk);
 }
 
 
@@ -597,14 +599,6 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream 
*substream,
rcmr, rfmr, tcmr, tfmr);
 
if (!ssc_p->initialized) {
-
-   /* Enable PMC peripheral clock for this SSC */
-   pr_debug("atmel_ssc_dai: Starting clock\n");
-   clk_enable(ssc_p->ssc->clk);
-
-   /* Reset the SSC and its PDC registers */
-   ssc_writel(ssc_p->ssc->regs, CR, SSC_BIT(CR_SWRST));
-
ssc_writel(ssc_p->ssc->regs, PDC_RPR, 0);
ssc_writel(ssc_p->ssc->regs, PDC_RCR, 0);
ssc_writel(ssc_p->ssc->regs, PDC_RNPR, 0);
-- 
2.3.0.rc0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/3] ASoC: atmel_ssc_dai: refactor the startup and shutdown

2015-01-30 Thread Bo Shen
In startup function, enable ssc clock and in shutdown function,
disable clock. And also remove disable ssc in shutdown function,
as ssc is disabled in prepare function.

Signed-off-by: Bo Shen voice.s...@atmel.com
---

 sound/soc/atmel/atmel_ssc_dai.c | 28 +++-
 1 file changed, 11 insertions(+), 17 deletions(-)

diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
index c1d93b8..0ed5ac3 100644
--- a/sound/soc/atmel/atmel_ssc_dai.c
+++ b/sound/soc/atmel/atmel_ssc_dai.c
@@ -204,6 +204,13 @@ static int atmel_ssc_startup(struct snd_pcm_substream 
*substream,
pr_debug(atmel_ssc_startup: SSC_SR=0x%u\n,
ssc_readl(ssc_p-ssc-regs, SR));
 
+   /* Enable PMC peripheral clock for this SSC */
+   pr_debug(atmel_ssc_dai: Starting clock\n);
+   clk_enable(ssc_p-ssc-clk);
+
+   /* Reset the SSC to keep it at a clean status */
+   ssc_writel(ssc_p-ssc-regs, CR, SSC_BIT(CR_SWRST));
+
if (substream-stream == SNDRV_PCM_STREAM_PLAYBACK) {
dir = 0;
dir_mask = SSC_DIR_MASK_PLAYBACK;
@@ -250,11 +257,6 @@ static void atmel_ssc_shutdown(struct snd_pcm_substream 
*substream,
dma_params = ssc_p-dma_params[dir];
 
if (dma_params != NULL) {
-   ssc_writel(ssc_p-ssc-regs, CR, dma_params-mask-ssc_disable);
-   pr_debug(atmel_ssc_shutdown: %s disabled SSC_SR=0x%08x\n,
-   (dir ? receive : transmit),
-   ssc_readl(ssc_p-ssc-regs, SR));
-
dma_params-ssc = NULL;
dma_params-substream = NULL;
ssc_p-dma_params[dir] = NULL;
@@ -266,10 +268,6 @@ static void atmel_ssc_shutdown(struct snd_pcm_substream 
*substream,
ssc_p-dir_mask = ~dir_mask;
if (!ssc_p-dir_mask) {
if (ssc_p-initialized) {
-   /* Shutdown the SSC clock. */
-   pr_debug(atmel_ssc_dai: Stopping clock\n);
-   clk_disable(ssc_p-ssc-clk);
-
free_irq(ssc_p-ssc-irq, ssc_p);
ssc_p-initialized = 0;
}
@@ -280,6 +278,10 @@ static void atmel_ssc_shutdown(struct snd_pcm_substream 
*substream,
ssc_p-cmr_div = ssc_p-tcmr_period = ssc_p-rcmr_period = 0;
}
spin_unlock_irq(ssc_p-lock);
+
+   /* Shutdown the SSC clock. */
+   pr_debug(atmel_ssc_dai: Stopping clock\n);
+   clk_disable(ssc_p-ssc-clk);
 }
 
 
@@ -597,14 +599,6 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream 
*substream,
rcmr, rfmr, tcmr, tfmr);
 
if (!ssc_p-initialized) {
-
-   /* Enable PMC peripheral clock for this SSC */
-   pr_debug(atmel_ssc_dai: Starting clock\n);
-   clk_enable(ssc_p-ssc-clk);
-
-   /* Reset the SSC and its PDC registers */
-   ssc_writel(ssc_p-ssc-regs, CR, SSC_BIT(CR_SWRST));
-
ssc_writel(ssc_p-ssc-regs, PDC_RPR, 0);
ssc_writel(ssc_p-ssc-regs, PDC_RCR, 0);
ssc_writel(ssc_p-ssc-regs, PDC_RNPR, 0);
-- 
2.3.0.rc0

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/