linux/include/sound/soc-dpcm.h
<<
>>
Prefs
   1/*
   2 * linux/sound/soc-dpcm.h -- ALSA SoC Dynamic PCM Support
   3 *
   4 * Author:              Liam Girdwood <lrg@ti.com>
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#ifndef __LINUX_SND_SOC_DPCM_H
  12#define __LINUX_SND_SOC_DPCM_H
  13
  14#include <linux/list.h>
  15#include <sound/pcm.h>
  16
  17struct snd_soc_pcm_runtime;
  18
  19/*
  20 * Types of runtime_update to perform. e.g. originated from FE PCM ops
  21 * or audio route changes triggered by muxes/mixers.
  22 */
  23enum snd_soc_dpcm_update {
  24        SND_SOC_DPCM_UPDATE_NO  = 0,
  25        SND_SOC_DPCM_UPDATE_BE,
  26        SND_SOC_DPCM_UPDATE_FE,
  27};
  28
  29/*
  30 * Dynamic PCM Frontend -> Backend link management states.
  31 */
  32enum snd_soc_dpcm_link_state {
  33        SND_SOC_DPCM_LINK_STATE_NEW     = 0,    /* newly created link */
  34        SND_SOC_DPCM_LINK_STATE_FREE,           /* link to be dismantled */
  35};
  36
  37/*
  38 * Dynamic PCM Frontend -> Backend link PCM states.
  39 */
  40enum snd_soc_dpcm_state {
  41        SND_SOC_DPCM_STATE_NEW  = 0,
  42        SND_SOC_DPCM_STATE_OPEN,
  43        SND_SOC_DPCM_STATE_HW_PARAMS,
  44        SND_SOC_DPCM_STATE_PREPARE,
  45        SND_SOC_DPCM_STATE_START,
  46        SND_SOC_DPCM_STATE_STOP,
  47        SND_SOC_DPCM_STATE_PAUSED,
  48        SND_SOC_DPCM_STATE_SUSPEND,
  49        SND_SOC_DPCM_STATE_HW_FREE,
  50        SND_SOC_DPCM_STATE_CLOSE,
  51};
  52
  53/*
  54 * Dynamic PCM trigger ordering. Triggering flexibility is required as some
  55 * DSPs require triggering before/after their CPU platform and DAIs.
  56 *
  57 * i.e. some clients may want to manually order this call in their PCM
  58 * trigger() whilst others will just use the regular core ordering.
  59 */
  60enum snd_soc_dpcm_trigger {
  61        SND_SOC_DPCM_TRIGGER_PRE                = 0,
  62        SND_SOC_DPCM_TRIGGER_POST,
  63        SND_SOC_DPCM_TRIGGER_BESPOKE,
  64};
  65
  66/*
  67 * Dynamic PCM link
  68 * This links together a FE and BE DAI at runtime and stores the link
  69 * state information and the hw_params configuration.
  70 */
  71struct snd_soc_dpcm {
  72        /* FE and BE DAIs*/
  73        struct snd_soc_pcm_runtime *be;
  74        struct snd_soc_pcm_runtime *fe;
  75
  76        /* link state */
  77        enum snd_soc_dpcm_link_state state;
  78
  79        /* list of BE and FE for this DPCM link */
  80        struct list_head list_be;
  81        struct list_head list_fe;
  82
  83        /* hw params for this link - may be different for each link */
  84        struct snd_pcm_hw_params hw_params;
  85#ifdef CONFIG_DEBUG_FS
  86        struct dentry *debugfs_state;
  87#endif
  88};
  89
  90/*
  91 * Dynamic PCM runtime data.
  92 */
  93struct snd_soc_dpcm_runtime {
  94        struct list_head be_clients;
  95        struct list_head fe_clients;
  96
  97        int users;
  98        struct snd_pcm_runtime *runtime;
  99        struct snd_pcm_hw_params hw_params;
 100
 101        /* state and update */
 102        enum snd_soc_dpcm_update runtime_update;
 103        enum snd_soc_dpcm_state state;
 104};
 105
 106/* can this BE stop and free */
 107int snd_soc_dpcm_can_be_free_stop(struct snd_soc_pcm_runtime *fe,
 108                struct snd_soc_pcm_runtime *be, int stream);
 109
 110/* can this BE perform a hw_params() */
 111int snd_soc_dpcm_can_be_params(struct snd_soc_pcm_runtime *fe,
 112                struct snd_soc_pcm_runtime *be, int stream);
 113
 114/* is the current PCM operation for this FE ? */
 115int snd_soc_dpcm_fe_can_update(struct snd_soc_pcm_runtime *fe, int stream);
 116
 117/* is the current PCM operation for this BE ? */
 118int snd_soc_dpcm_be_can_update(struct snd_soc_pcm_runtime *fe,
 119                struct snd_soc_pcm_runtime *be, int stream);
 120
 121/* get the substream for this BE */
 122struct snd_pcm_substream *
 123        snd_soc_dpcm_get_substream(struct snd_soc_pcm_runtime *be, int stream);
 124
 125/* get the BE runtime state */
 126enum snd_soc_dpcm_state
 127        snd_soc_dpcm_be_get_state(struct snd_soc_pcm_runtime *be, int stream);
 128
 129/* set the BE runtime state */
 130void snd_soc_dpcm_be_set_state(struct snd_soc_pcm_runtime *be, int stream,
 131        enum snd_soc_dpcm_state state);
 132
 133/* internal use only */
 134int soc_dpcm_be_digital_mute(struct snd_soc_pcm_runtime *fe, int mute);
 135int soc_dpcm_debugfs_add(struct snd_soc_pcm_runtime *rtd);
 136int soc_dpcm_runtime_update(struct snd_soc_dapm_widget *);
 137
 138#endif
 139
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.