Merge remote-tracking branch 'asoc/for-5.8' into asoc-linus
[sfrench/cifs-2.6.git] / include / sound / soc.h
index 53e2062b9cef0a9e0c4de42a219ee0a2e1942c8e..ef5dd28e10a9d9bdf4e721ea279ba23d6e8cef72 100644 (file)
@@ -414,11 +414,6 @@ enum snd_soc_pcm_subclass {
        SND_SOC_PCM_CLASS_BE    = 1,
 };
 
-enum snd_soc_card_subclass {
-       SND_SOC_CARD_CLASS_INIT         = 0,
-       SND_SOC_CARD_CLASS_RUNTIME      = 1,
-};
-
 int snd_soc_register_card(struct snd_soc_card *card);
 int snd_soc_unregister_card(struct snd_soc_card *card);
 int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card);
@@ -468,8 +463,19 @@ struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card,
                                struct snd_soc_dai_link *dai_link);
 
 bool snd_soc_runtime_ignore_pmdown_time(struct snd_soc_pcm_runtime *rtd);
-void snd_soc_runtime_activate(struct snd_soc_pcm_runtime *rtd, int stream);
-void snd_soc_runtime_deactivate(struct snd_soc_pcm_runtime *rtd, int stream);
+
+void snd_soc_runtime_action(struct snd_soc_pcm_runtime *rtd,
+                           int stream, int action);
+static inline void snd_soc_runtime_activate(struct snd_soc_pcm_runtime *rtd,
+                                    int stream)
+{
+       snd_soc_runtime_action(rtd, stream, 1);
+}
+static inline void snd_soc_runtime_deactivate(struct snd_soc_pcm_runtime *rtd,
+                                      int stream)
+{
+       snd_soc_runtime_action(rtd, stream, -1);
+}
 
 int snd_soc_runtime_calc_hw(struct snd_soc_pcm_runtime *rtd,
                            struct snd_pcm_hardware *hw, int stream);
@@ -498,10 +504,6 @@ int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
        const struct snd_pcm_hardware *hw);
 
 /* Jack reporting */
-int snd_soc_card_jack_new(struct snd_soc_card *card, const char *id, int type,
-       struct snd_soc_jack *jack, struct snd_soc_jack_pin *pins,
-       unsigned int num_pins);
-
 void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask);
 int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count,
                          struct snd_soc_jack_pin *pins);
@@ -571,8 +573,6 @@ static inline int snd_soc_set_ac97_ops(struct snd_ac97_bus_ops *ops)
 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
                                  void *data, const char *long_name,
                                  const char *prefix);
-struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card,
-                                              const char *name);
 int snd_soc_add_component_controls(struct snd_soc_component *component,
        const struct snd_kcontrol_new *controls, unsigned int num_controls);
 int snd_soc_add_card_controls(struct snd_soc_card *soc_card,
@@ -806,7 +806,7 @@ struct snd_soc_dai_link {
        const struct snd_soc_compr_ops *compr_ops;
 
        /* Mark this pcm with non atomic ops */
-       bool nonatomic;
+       unsigned int nonatomic:1;
 
        /* For unidirectional dai links */
        unsigned int playback_only:1;
@@ -1002,9 +1002,6 @@ struct snd_soc_card {
 
        spinlock_t dpcm_lock;
 
-       bool instantiated;
-       bool topology_shortname_created;
-
        int (*probe)(struct snd_soc_card *card);
        int (*late_probe)(struct snd_soc_card *card);
        int (*remove)(struct snd_soc_card *card);
@@ -1065,8 +1062,6 @@ struct snd_soc_card {
        int num_of_dapm_widgets;
        const struct snd_soc_dapm_route *of_dapm_routes;
        int num_of_dapm_routes;
-       bool fully_routed;
-       bool disable_route_checks;
 
        /* lists of probed devices belonging to this card */
        struct list_head component_dev_list;
@@ -1093,6 +1088,13 @@ struct snd_soc_card {
 #endif
        u32 pop_time;
 
+       /* bit field */
+       unsigned int instantiated:1;
+       unsigned int topology_shortname_created:1;
+       unsigned int fully_routed:1;
+       unsigned int disable_route_checks:1;
+       unsigned int probed:1;
+
        void *drvdata;
 };
 #define for_each_card_prelinks(card, i, link)                          \
@@ -1143,14 +1145,16 @@ struct snd_soc_pcm_runtime {
        /* runtime devices */
        struct snd_pcm *pcm;
        struct snd_compr *compr;
-       struct snd_soc_dai *codec_dai;
-       struct snd_soc_dai *cpu_dai;
-       struct snd_soc_dai **dais;
 
-       struct snd_soc_dai **codec_dais;
+       /*
+        * dais = cpu_dai + codec_dai
+        * see
+        *      soc_new_pcm_runtime()
+        *      asoc_rtd_to_cpu()
+        *      asoc_rtd_to_codec()
+        */
+       struct snd_soc_dai **dais;
        unsigned int num_codecs;
-
-       struct snd_soc_dai **cpu_dais;
        unsigned int num_cpus;
 
        struct snd_soc_dapm_widget *playback_widget;
@@ -1170,28 +1174,28 @@ struct snd_soc_pcm_runtime {
        unsigned int fe_compr:1; /* for Dynamic PCM */
 
        int num_components;
-       struct snd_soc_component *components[0]; /* CPU/Codec/Platform */
+       struct snd_soc_component *components[]; /* CPU/Codec/Platform */
 };
 /* see soc_new_pcm_runtime()  */
 #define asoc_rtd_to_cpu(rtd, n)   (rtd)->dais[n]
 #define asoc_rtd_to_codec(rtd, n) (rtd)->dais[n + (rtd)->num_cpus]
 
 #define for_each_rtd_components(rtd, i, component)                     \
-       for ((i) = 0;                                                   \
+       for ((i) = 0, component = NULL;                                 \
             ((i) < rtd->num_components) && ((component) = rtd->components[i]);\
             (i)++)
 #define for_each_rtd_cpu_dais(rtd, i, dai)                             \
        for ((i) = 0;                                                   \
-            ((i) < rtd->num_cpus) && ((dai) = rtd->cpu_dais[i]);       \
+            ((i) < rtd->num_cpus) && ((dai) = asoc_rtd_to_cpu(rtd, i)); \
             (i)++)
 #define for_each_rtd_cpu_dais_rollback(rtd, i, dai)            \
-       for (; (--(i) >= 0) && ((dai) = rtd->cpu_dais[i]);)
+       for (; (--(i) >= 0) && ((dai) = asoc_rtd_to_cpu(rtd, i));)
 #define for_each_rtd_codec_dais(rtd, i, dai)                           \
        for ((i) = 0;                                                   \
-            ((i) < rtd->num_codecs) && ((dai) = rtd->codec_dais[i]);   \
+            ((i) < rtd->num_codecs) && ((dai) = asoc_rtd_to_codec(rtd, i)); \
             (i)++)
 #define for_each_rtd_codec_dais_rollback(rtd, i, dai)          \
-       for (; (--(i) >= 0) && ((dai) = rtd->codec_dais[i]);)
+       for (; (--(i) >= 0) && ((dai) = asoc_rtd_to_codec(rtd, i));)
 #define for_each_rtd_dais(rtd, i, dai)                                 \
        for ((i) = 0;                                                   \
             ((i) < (rtd)->num_cpus + (rtd)->num_codecs) &&             \
@@ -1252,29 +1256,16 @@ struct soc_enum {
 #endif
 };
 
-/* device driver data */
-
-static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card,
-               void *data)
-{
-       card->drvdata = data;
-}
-
-static inline void *snd_soc_card_get_drvdata(struct snd_soc_card *card)
-{
-       return card->drvdata;
-}
-
 static inline bool snd_soc_volsw_is_stereo(struct soc_mixer_control *mc)
 {
        if (mc->reg == mc->rreg && mc->shift == mc->rshift)
-               return 0;
+               return false;
        /*
         * mc->reg == mc->rreg && mc->shift != mc->rshift, or
         * mc->reg != mc->rreg means that the control is
         * stereo (bits in one register or in two registers)
         */
-       return 1;
+       return true;
 }
 
 static inline unsigned int snd_soc_enum_val_to_item(struct soc_enum *e,
@@ -1377,20 +1368,6 @@ struct snd_soc_dai *snd_soc_find_dai(
 
 #include <sound/soc-dai.h>
 
-static inline
-struct snd_soc_dai *snd_soc_card_get_codec_dai(struct snd_soc_card *card,
-                                              const char *dai_name)
-{
-       struct snd_soc_pcm_runtime *rtd;
-
-       list_for_each_entry(rtd, &card->rtd_list, list) {
-               if (!strcmp(rtd->codec_dai->name, dai_name))
-                       return rtd->codec_dai;
-       }
-
-       return NULL;
-}
-
 static inline
 int snd_soc_fixup_dai_links_platform_name(struct snd_soc_card *card,
                                          const char *platform_name)
@@ -1436,5 +1413,6 @@ static inline void snd_soc_dapm_mutex_unlock(struct snd_soc_dapm_context *dapm)
 }
 
 #include <sound/soc-component.h>
+#include <sound/soc-card.h>
 
 #endif