[alsa-devel] [PATCH 1/2] OMAP3: MCBSP: Suspend/resume failure fix

Mark Brown broonie at opensource.wolfsonmicro.com
Fri Nov 13 18:49:18 CET 2009


On 13 Nov 2009, at 17:39, Jane Wang <jwang at ti.com> wrote:

> McBSP fucntional clock is not disabled when suspend is triggerd which
> prevents PER domain entering target low-power state. To fix the  
> problem:
>
> 1. Disable/enable McBSP functional clock for suspend/resume.
>
> 2. In addition, reconfigure McBSP, this is needed when systerm comes  
> out of OFF state.
>

There is no need to resend your patches this iften - please allow at  
least a week or so for review. You only need to repost if addressing  
comments or it looks like the patch got missed.

> Signed-off-by: Jane Wang <jwang at ti.com>
> ---
> arch/arm/plat-omap/include/mach/mcbsp.h |    2 ++
> arch/arm/plat-omap/mcbsp.c              |   27 ++++++++++++++++++++++ 
> +++++
> sound/soc/omap/omap-mcbsp.c             |   14 ++++++++++++--
> 3 files changed, 41 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/plat-omap/include/mach/mcbsp.h b/arch/arm/plat- 
> omap/include/mach/mcbsp.h
> index e0d6eca..94e1c66 100644
> --- a/arch/arm/plat-omap/include/mach/mcbsp.h
> +++ b/arch/arm/plat-omap/include/mach/mcbsp.h
> @@ -440,6 +440,8 @@ static inline int omap_mcbsp_get_dma_op_mode 
> (unsigned int id) { return 0; }
> #endif
> int omap_mcbsp_request(unsigned int id);
> void omap_mcbsp_free(unsigned int id);
> +void omap_mcbsp_disable_fclk(unsigned int id);
> +void omap_mcbsp_enable_fclk(unsigned int id);
> void omap_mcbsp_start(unsigned int id, int tx, int rx);
> void omap_mcbsp_stop(unsigned int id, int tx, int rx);
> void omap_mcbsp_xmit_word(unsigned int id, u32 word);
> diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c
> index e664b91..bfe3c61 100644
> --- a/arch/arm/plat-omap/mcbsp.c
> +++ b/arch/arm/plat-omap/mcbsp.c
> @@ -459,6 +459,33 @@ int omap_mcbsp_request(unsigned int id)
> }
> EXPORT_SYMBOL(omap_mcbsp_request);
>
> +void omap_mcbsp_disable_fclk(unsigned int id)
> +{
> +    struct omap_mcbsp *mcbsp;
> +
> +    if (!omap_mcbsp_check_valid_id(id)) {
> +        printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1);
> +        return;
> +    }
> +    mcbsp = id_to_mcbsp_ptr(id);
> +    clk_disable(mcbsp->fclk);
> +}
> +EXPORT_SYMBOL(omap_mcbsp_disable_fclk);
> +
> +
> +void omap_mcbsp_enable_fclk(unsigned int id)
> +{
> +    struct omap_mcbsp *mcbsp;
> +
> +    if (!omap_mcbsp_check_valid_id(id)) {
> +        printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1);
> +        return;
> +    }
> +    mcbsp = id_to_mcbsp_ptr(id);
> +    clk_enable(mcbsp->fclk);
> +}
> +EXPORT_SYMBOL(omap_mcbsp_enable_fclk);
> +
> void omap_mcbsp_free(unsigned int id)
> {
>    struct omap_mcbsp *mcbsp;
> diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
> index 45be942..e56b5ff 100644
> --- a/sound/soc/omap/omap-mcbsp.c
> +++ b/sound/soc/omap/omap-mcbsp.c
> @@ -229,18 +229,28 @@ static int omap_mcbsp_dai_trigger(struct  
> snd_pcm_substream *substream, int cmd,
>
>    switch (cmd) {
>    case SNDRV_PCM_TRIGGER_START:
> -    case SNDRV_PCM_TRIGGER_RESUME:
>    case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
>        mcbsp_data->active++;
>        omap_mcbsp_start(mcbsp_data->bus_id, play, !play);
>        break;
> +    case SNDRV_PCM_TRIGGER_RESUME:
> +        mcbsp_data->active++;
> +        omap_mcbsp_enable_fclk(mcbsp_data->bus_id);
> +        omap_mcbsp_config(mcbsp_data->bus_id,
> +                    &mcbsp_data->regs);
> +        omap_mcbsp_start(mcbsp_data->bus_id, play, !play);
> +        break;
>
>    case SNDRV_PCM_TRIGGER_STOP:
> -    case SNDRV_PCM_TRIGGER_SUSPEND:
>    case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
>        omap_mcbsp_stop(mcbsp_data->bus_id, play, !play);
>        mcbsp_data->active--;
>        break;
> +    case SNDRV_PCM_TRIGGER_SUSPEND:
> +        omap_mcbsp_stop(mcbsp_data->bus_id, play, !play);
> +        omap_mcbsp_disable_fclk(mcbsp_data->bus_id);
> +        mcbsp_data->active--;
> +        break;
>    default:
>        err = -EINVAL;
>    }
> -- 
> 1.5.4.3
>


More information about the Alsa-devel mailing list