]> www.infradead.org Git - users/hch/dma-mapping.git/commitdiff
ASoC: add soc-component.c
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 26 Jul 2019 04:49:48 +0000 (13:49 +0900)
committerMark Brown <broonie@kernel.org>
Mon, 5 Aug 2019 15:16:19 +0000 (16:16 +0100)
ALSA SoC has many snd_soc_component_xxx(), but these are randomly
located in many files. Because of it, code is difficult to read.
This patch creates new soc-component.c, and moves existing
snd_soc_component_xxx() into it.
But not yet fully. We need more cleanup it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87imrp5roa.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc-component.h [new file with mode: 0644]
include/sound/soc.h
sound/soc/Makefile
sound/soc/soc-component.c [new file with mode: 0644]
sound/soc/soc-core.c
sound/soc/soc-jack.c
sound/soc/soc-utils.c

diff --git a/include/sound/soc-component.h b/include/sound/soc-component.h
new file mode 100644 (file)
index 0000000..a97d499
--- /dev/null
@@ -0,0 +1,328 @@
+/* SPDX-License-Identifier: GPL-2.0
+ *
+ * soc-component.h
+ *
+ * Copyright (c) 2019 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __SOC_COMPONENT_H
+#define __SOC_COMPONENT_H
+
+#include <sound/soc.h>
+
+/*
+ * Component probe and remove ordering levels for components with runtime
+ * dependencies.
+ */
+#define SND_SOC_COMP_ORDER_FIRST       -2
+#define SND_SOC_COMP_ORDER_EARLY       -1
+#define SND_SOC_COMP_ORDER_NORMAL       0
+#define SND_SOC_COMP_ORDER_LATE                 1
+#define SND_SOC_COMP_ORDER_LAST                 2
+
+#define for_each_comp_order(order)             \
+       for (order  = SND_SOC_COMP_ORDER_FIRST; \
+            order <= SND_SOC_COMP_ORDER_LAST;  \
+            order++)
+
+/* component interface */
+struct snd_soc_component_driver {
+       const char *name;
+
+       /* Default control and setup, added after probe() is run */
+       const struct snd_kcontrol_new *controls;
+       unsigned int num_controls;
+       const struct snd_soc_dapm_widget *dapm_widgets;
+       unsigned int num_dapm_widgets;
+       const struct snd_soc_dapm_route *dapm_routes;
+       unsigned int num_dapm_routes;
+
+       int (*probe)(struct snd_soc_component *component);
+       void (*remove)(struct snd_soc_component *component);
+       int (*suspend)(struct snd_soc_component *component);
+       int (*resume)(struct snd_soc_component *component);
+
+       unsigned int (*read)(struct snd_soc_component *component,
+                            unsigned int reg);
+       int (*write)(struct snd_soc_component *component,
+                    unsigned int reg, unsigned int val);
+
+       /* pcm creation and destruction */
+       int (*pcm_new)(struct snd_soc_pcm_runtime *rtd);
+       void (*pcm_free)(struct snd_pcm *pcm);
+
+       /* component wide operations */
+       int (*set_sysclk)(struct snd_soc_component *component,
+                         int clk_id, int source, unsigned int freq, int dir);
+       int (*set_pll)(struct snd_soc_component *component, int pll_id,
+                      int source, unsigned int freq_in, unsigned int freq_out);
+       int (*set_jack)(struct snd_soc_component *component,
+                       struct snd_soc_jack *jack,  void *data);
+
+       /* DT */
+       int (*of_xlate_dai_name)(struct snd_soc_component *component,
+                                struct of_phandle_args *args,
+                                const char **dai_name);
+       int (*of_xlate_dai_id)(struct snd_soc_component *comment,
+                              struct device_node *endpoint);
+       void (*seq_notifier)(struct snd_soc_component *component,
+                            enum snd_soc_dapm_type type, int subseq);
+       int (*stream_event)(struct snd_soc_component *component, int event);
+       int (*set_bias_level)(struct snd_soc_component *component,
+                             enum snd_soc_bias_level level);
+
+       const struct snd_pcm_ops *ops;
+       const struct snd_compr_ops *compr_ops;
+
+       /* probe ordering - for components with runtime dependencies */
+       int probe_order;
+       int remove_order;
+
+       /*
+        * signal if the module handling the component should not be removed
+        * if a pcm is open. Setting this would prevent the module
+        * refcount being incremented in probe() but allow it be incremented
+        * when a pcm is opened and decremented when it is closed.
+        */
+       unsigned int module_get_upon_open:1;
+
+       /* bits */
+       unsigned int idle_bias_on:1;
+       unsigned int suspend_bias_off:1;
+       unsigned int use_pmdown_time:1; /* care pmdown_time at stop */
+       unsigned int endianness:1;
+       unsigned int non_legacy_dai_naming:1;
+
+       /* this component uses topology and ignore machine driver FEs */
+       const char *ignore_machine;
+       const char *topology_name_prefix;
+       int (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *rtd,
+                                 struct snd_pcm_hw_params *params);
+       bool use_dai_pcm_id;    /* use DAI link PCM ID as PCM device number */
+       int be_pcm_base;        /* base device ID for all BE PCMs */
+};
+
+struct snd_soc_component {
+       const char *name;
+       int id;
+       const char *name_prefix;
+       struct device *dev;
+       struct snd_soc_card *card;
+
+       unsigned int active;
+
+       unsigned int suspended:1; /* is in suspend PM state */
+
+       struct list_head list;
+       struct list_head card_aux_list; /* for auxiliary bound components */
+       struct list_head card_list;
+
+       const struct snd_soc_component_driver *driver;
+
+       struct list_head dai_list;
+       int num_dai;
+
+       struct regmap *regmap;
+       int val_bytes;
+
+       struct mutex io_mutex;
+
+       /* attached dynamic objects */
+       struct list_head dobj_list;
+
+       /*
+        * DO NOT use any of the fields below in drivers, they are temporary and
+        * are going to be removed again soon. If you use them in driver code
+        * the driver will be marked as BROKEN when these fields are removed.
+        */
+
+       /* Don't use these, use snd_soc_component_get_dapm() */
+       struct snd_soc_dapm_context dapm;
+
+       /* machine specific init */
+       int (*init)(struct snd_soc_component *component);
+
+#ifdef CONFIG_DEBUG_FS
+       struct dentry *debugfs_root;
+       const char *debugfs_prefix;
+#endif
+};
+
+#define for_each_component_dais(component, dai)\
+       list_for_each_entry(dai, &(component)->dai_list, list)
+#define for_each_component_dais_safe(component, dai, _dai)\
+       list_for_each_entry_safe(dai, _dai, &(component)->dai_list, list)
+
+/**
+ * snd_soc_dapm_to_component() - Casts a DAPM context to the component it is
+ *  embedded in
+ * @dapm: The DAPM context to cast to the component
+ *
+ * This function must only be used on DAPM contexts that are known to be part of
+ * a component (e.g. in a component driver). Otherwise the behavior is
+ * undefined.
+ */
+static inline struct snd_soc_component *snd_soc_dapm_to_component(
+       struct snd_soc_dapm_context *dapm)
+{
+       return container_of(dapm, struct snd_soc_component, dapm);
+}
+
+/**
+ * snd_soc_component_get_dapm() - Returns the DAPM context associated with a
+ *  component
+ * @component: The component for which to get the DAPM context
+ */
+static inline struct snd_soc_dapm_context *snd_soc_component_get_dapm(
+       struct snd_soc_component *component)
+{
+       return &component->dapm;
+}
+
+/**
+ * snd_soc_component_init_bias_level() - Initialize COMPONENT DAPM bias level
+ * @component: The COMPONENT for which to initialize the DAPM bias level
+ * @level: The DAPM level to initialize to
+ *
+ * Initializes the COMPONENT DAPM bias level. See snd_soc_dapm_init_bias_level()
+ */
+static inline void
+snd_soc_component_init_bias_level(struct snd_soc_component *component,
+                                 enum snd_soc_bias_level level)
+{
+       snd_soc_dapm_init_bias_level(
+               snd_soc_component_get_dapm(component), level);
+}
+
+/**
+ * snd_soc_component_get_bias_level() - Get current COMPONENT DAPM bias level
+ * @component: The COMPONENT for which to get the DAPM bias level
+ *
+ * Returns: The current DAPM bias level of the COMPONENT.
+ */
+static inline enum snd_soc_bias_level
+snd_soc_component_get_bias_level(struct snd_soc_component *component)
+{
+       return snd_soc_dapm_get_bias_level(
+               snd_soc_component_get_dapm(component));
+}
+
+/**
+ * snd_soc_component_force_bias_level() - Set the COMPONENT DAPM bias level
+ * @component: The COMPONENT for which to set the level
+ * @level: The level to set to
+ *
+ * Forces the COMPONENT bias level to a specific state. See
+ * snd_soc_dapm_force_bias_level().
+ */
+static inline int
+snd_soc_component_force_bias_level(struct snd_soc_component *component,
+                                  enum snd_soc_bias_level level)
+{
+       return snd_soc_dapm_force_bias_level(
+               snd_soc_component_get_dapm(component),
+               level);
+}
+
+/**
+ * snd_soc_dapm_kcontrol_component() - Returns the component associated to a
+ * kcontrol
+ * @kcontrol: The kcontrol
+ *
+ * This function must only be used on DAPM contexts that are known to be part of
+ * a COMPONENT (e.g. in a COMPONENT driver). Otherwise the behavior is undefined
+ */
+static inline struct snd_soc_component *snd_soc_dapm_kcontrol_component(
+       struct snd_kcontrol *kcontrol)
+{
+       return snd_soc_dapm_to_component(snd_soc_dapm_kcontrol_dapm(kcontrol));
+}
+
+/**
+ * snd_soc_component_cache_sync() - Sync the register cache with the hardware
+ * @component: COMPONENT to sync
+ *
+ * Note: This function will call regcache_sync()
+ */
+static inline int snd_soc_component_cache_sync(
+       struct snd_soc_component *component)
+{
+       return regcache_sync(component->regmap);
+}
+
+/* component IO */
+int snd_soc_component_read(struct snd_soc_component *component,
+                          unsigned int reg, unsigned int *val);
+unsigned int snd_soc_component_read32(struct snd_soc_component *component,
+                                     unsigned int reg);
+int snd_soc_component_write(struct snd_soc_component *component,
+                           unsigned int reg, unsigned int val);
+int snd_soc_component_update_bits(struct snd_soc_component *component,
+                                 unsigned int reg, unsigned int mask,
+                                 unsigned int val);
+int snd_soc_component_update_bits_async(struct snd_soc_component *component,
+                                       unsigned int reg, unsigned int mask,
+                                       unsigned int val);
+void snd_soc_component_async_complete(struct snd_soc_component *component);
+int snd_soc_component_test_bits(struct snd_soc_component *component,
+                               unsigned int reg, unsigned int mask,
+                               unsigned int value);
+
+/* component wide operations */
+int snd_soc_component_set_sysclk(struct snd_soc_component *component,
+                                int clk_id, int source,
+                                unsigned int freq, int dir);
+int snd_soc_component_set_pll(struct snd_soc_component *component, int pll_id,
+                             int source, unsigned int freq_in,
+                             unsigned int freq_out);
+int snd_soc_component_set_jack(struct snd_soc_component *component,
+                              struct snd_soc_jack *jack, void *data);
+
+#ifdef CONFIG_REGMAP
+void snd_soc_component_init_regmap(struct snd_soc_component *component,
+                                  struct regmap *regmap);
+void snd_soc_component_exit_regmap(struct snd_soc_component *component);
+#endif
+
+static inline void snd_soc_component_set_drvdata(struct snd_soc_component *c,
+                                                void *data)
+{
+       dev_set_drvdata(c->dev, data);
+}
+
+static inline void *snd_soc_component_get_drvdata(struct snd_soc_component *c)
+{
+       return dev_get_drvdata(c->dev);
+}
+
+static inline bool snd_soc_component_is_active(
+       struct snd_soc_component *component)
+{
+       return component->active != 0;
+}
+
+/* component pin */
+int snd_soc_component_enable_pin(struct snd_soc_component *component,
+                                const char *pin);
+int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component,
+                                         const char *pin);
+int snd_soc_component_disable_pin(struct snd_soc_component *component,
+                                 const char *pin);
+int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component,
+                                          const char *pin);
+int snd_soc_component_nc_pin(struct snd_soc_component *component,
+                            const char *pin);
+int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component,
+                                     const char *pin);
+int snd_soc_component_get_pin_status(struct snd_soc_component *component,
+                                    const char *pin);
+int snd_soc_component_force_enable_pin(struct snd_soc_component *component,
+                                      const char *pin);
+int snd_soc_component_force_enable_pin_unlocked(
+       struct snd_soc_component *component,
+       const char *pin);
+
+#endif /* __SOC_COMPONENT_H */
index f0797792dd8dc426c58eb6aaeb96572c4424e07c..6ac6481b48828890875ea6fb03ff2e04b16abb2f 100644 (file)
 #define SOC_ENUM_SINGLE_VIRT_DECL(name, xtexts) \
        const struct soc_enum name = SOC_ENUM_SINGLE_VIRT(ARRAY_SIZE(xtexts), xtexts)
 
-/*
- * Component probe and remove ordering levels for components with runtime
- * dependencies.
- */
-#define SND_SOC_COMP_ORDER_FIRST               -2
-#define SND_SOC_COMP_ORDER_EARLY               -1
-#define SND_SOC_COMP_ORDER_NORMAL              0
-#define SND_SOC_COMP_ORDER_LATE                1
-#define SND_SOC_COMP_ORDER_LAST                2
-
-#define for_each_comp_order(order)             \
-       for (order  = SND_SOC_COMP_ORDER_FIRST; \
-            order <= SND_SOC_COMP_ORDER_LAST;  \
-            order++)
-
 /*
  * Bias levels
  *
@@ -747,132 +732,6 @@ struct snd_soc_compr_ops {
        int (*trigger)(struct snd_compr_stream *);
 };
 
-/* component interface */
-struct snd_soc_component_driver {
-       const char *name;
-
-       /* Default control and setup, added after probe() is run */
-       const struct snd_kcontrol_new *controls;
-       unsigned int num_controls;
-       const struct snd_soc_dapm_widget *dapm_widgets;
-       unsigned int num_dapm_widgets;
-       const struct snd_soc_dapm_route *dapm_routes;
-       unsigned int num_dapm_routes;
-
-       int (*probe)(struct snd_soc_component *);
-       void (*remove)(struct snd_soc_component *);
-       int (*suspend)(struct snd_soc_component *);
-       int (*resume)(struct snd_soc_component *);
-
-       unsigned int (*read)(struct snd_soc_component *, unsigned int);
-       int (*write)(struct snd_soc_component *, unsigned int, unsigned int);
-
-       /* pcm creation and destruction */
-       int (*pcm_new)(struct snd_soc_pcm_runtime *);
-       void (*pcm_free)(struct snd_pcm *);
-
-       /* component wide operations */
-       int (*set_sysclk)(struct snd_soc_component *component,
-                         int clk_id, int source, unsigned int freq, int dir);
-       int (*set_pll)(struct snd_soc_component *component, int pll_id,
-                      int source, unsigned int freq_in, unsigned int freq_out);
-       int (*set_jack)(struct snd_soc_component *component,
-                       struct snd_soc_jack *jack,  void *data);
-
-       /* DT */
-       int (*of_xlate_dai_name)(struct snd_soc_component *component,
-                                struct of_phandle_args *args,
-                                const char **dai_name);
-       int (*of_xlate_dai_id)(struct snd_soc_component *comment,
-                              struct device_node *endpoint);
-       void (*seq_notifier)(struct snd_soc_component *, enum snd_soc_dapm_type,
-               int subseq);
-       int (*stream_event)(struct snd_soc_component *, int event);
-       int (*set_bias_level)(struct snd_soc_component *component,
-                             enum snd_soc_bias_level level);
-
-       const struct snd_pcm_ops *ops;
-       const struct snd_compr_ops *compr_ops;
-
-       /* probe ordering - for components with runtime dependencies */
-       int probe_order;
-       int remove_order;
-
-       /*
-        * signal if the module handling the component should not be removed
-        * if a pcm is open. Setting this would prevent the module
-        * refcount being incremented in probe() but allow it be incremented
-        * when a pcm is opened and decremented when it is closed.
-        */
-       unsigned int module_get_upon_open:1;
-
-       /* bits */
-       unsigned int idle_bias_on:1;
-       unsigned int suspend_bias_off:1;
-       unsigned int use_pmdown_time:1; /* care pmdown_time at stop */
-       unsigned int endianness:1;
-       unsigned int non_legacy_dai_naming:1;
-
-       /* this component uses topology and ignore machine driver FEs */
-       const char *ignore_machine;
-       const char *topology_name_prefix;
-       int (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *rtd,
-                                 struct snd_pcm_hw_params *params);
-       bool use_dai_pcm_id;    /* use the DAI link PCM ID as PCM device number */
-       int be_pcm_base;        /* base device ID for all BE PCMs */
-};
-
-struct snd_soc_component {
-       const char *name;
-       int id;
-       const char *name_prefix;
-       struct device *dev;
-       struct snd_soc_card *card;
-
-       unsigned int active;
-
-       unsigned int suspended:1; /* is in suspend PM state */
-
-       struct list_head list;
-       struct list_head card_aux_list; /* for auxiliary bound components */
-       struct list_head card_list;
-
-       const struct snd_soc_component_driver *driver;
-
-       struct list_head dai_list;
-       int num_dai;
-
-       struct regmap *regmap;
-       int val_bytes;
-
-       struct mutex io_mutex;
-
-       /* attached dynamic objects */
-       struct list_head dobj_list;
-
-       /*
-       * DO NOT use any of the fields below in drivers, they are temporary and
-       * are going to be removed again soon. If you use them in driver code the
-       * driver will be marked as BROKEN when these fields are removed.
-       */
-
-       /* Don't use these, use snd_soc_component_get_dapm() */
-       struct snd_soc_dapm_context dapm;
-
-       /* machine specific init */
-       int (*init)(struct snd_soc_component *component);
-
-#ifdef CONFIG_DEBUG_FS
-       struct dentry *debugfs_root;
-       const char *debugfs_prefix;
-#endif
-};
-
-#define for_each_component_dais(component, dai)\
-       list_for_each_entry(dai, &(component)->dai_list, list)
-#define for_each_component_dais_safe(component, dai, _dai)\
-       list_for_each_entry_safe(dai, _dai, &(component)->dai_list, list)
-
 struct snd_soc_rtdcom_list {
        struct snd_soc_component *component;
        struct list_head list; /* rtd::component_list */
@@ -1337,134 +1196,6 @@ struct soc_enum {
        struct snd_soc_dobj dobj;
 };
 
-/**
- * snd_soc_dapm_to_component() - Casts a DAPM context to the component it is
- *  embedded in
- * @dapm: The DAPM context to cast to the component
- *
- * This function must only be used on DAPM contexts that are known to be part of
- * a component (e.g. in a component driver). Otherwise the behavior is
- * undefined.
- */
-static inline struct snd_soc_component *snd_soc_dapm_to_component(
-       struct snd_soc_dapm_context *dapm)
-{
-       return container_of(dapm, struct snd_soc_component, dapm);
-}
-
-/**
- * snd_soc_component_get_dapm() - Returns the DAPM context associated with a
- *  component
- * @component: The component for which to get the DAPM context
- */
-static inline struct snd_soc_dapm_context *snd_soc_component_get_dapm(
-       struct snd_soc_component *component)
-{
-       return &component->dapm;
-}
-
-/**
- * snd_soc_component_init_bias_level() - Initialize COMPONENT DAPM bias level
- * @component: The COMPONENT for which to initialize the DAPM bias level
- * @level: The DAPM level to initialize to
- *
- * Initializes the COMPONENT DAPM bias level. See snd_soc_dapm_init_bias_level().
- */
-static inline void
-snd_soc_component_init_bias_level(struct snd_soc_component *component,
-                                 enum snd_soc_bias_level level)
-{
-       snd_soc_dapm_init_bias_level(
-               snd_soc_component_get_dapm(component), level);
-}
-
-/**
- * snd_soc_component_get_bias_level() - Get current COMPONENT DAPM bias level
- * @component: The COMPONENT for which to get the DAPM bias level
- *
- * Returns: The current DAPM bias level of the COMPONENT.
- */
-static inline enum snd_soc_bias_level
-snd_soc_component_get_bias_level(struct snd_soc_component *component)
-{
-       return snd_soc_dapm_get_bias_level(
-               snd_soc_component_get_dapm(component));
-}
-
-/**
- * snd_soc_component_force_bias_level() - Set the COMPONENT DAPM bias level
- * @component: The COMPONENT for which to set the level
- * @level: The level to set to
- *
- * Forces the COMPONENT bias level to a specific state. See
- * snd_soc_dapm_force_bias_level().
- */
-static inline int
-snd_soc_component_force_bias_level(struct snd_soc_component *component,
-                                  enum snd_soc_bias_level level)
-{
-       return snd_soc_dapm_force_bias_level(
-               snd_soc_component_get_dapm(component),
-               level);
-}
-
-/**
- * snd_soc_dapm_kcontrol_component() - Returns the component associated to a kcontrol
- * @kcontrol: The kcontrol
- *
- * This function must only be used on DAPM contexts that are known to be part of
- * a COMPONENT (e.g. in a COMPONENT driver). Otherwise the behavior is undefined.
- */
-static inline struct snd_soc_component *snd_soc_dapm_kcontrol_component(
-       struct snd_kcontrol *kcontrol)
-{
-       return snd_soc_dapm_to_component(snd_soc_dapm_kcontrol_dapm(kcontrol));
-}
-
-/**
- * snd_soc_component_cache_sync() - Sync the register cache with the hardware
- * @component: COMPONENT to sync
- *
- * Note: This function will call regcache_sync()
- */
-static inline int snd_soc_component_cache_sync(
-       struct snd_soc_component *component)
-{
-       return regcache_sync(component->regmap);
-}
-
-/* component IO */
-int snd_soc_component_read(struct snd_soc_component *component,
-       unsigned int reg, unsigned int *val);
-unsigned int snd_soc_component_read32(struct snd_soc_component *component,
-                                     unsigned int reg);
-int snd_soc_component_write(struct snd_soc_component *component,
-       unsigned int reg, unsigned int val);
-int snd_soc_component_update_bits(struct snd_soc_component *component,
-       unsigned int reg, unsigned int mask, unsigned int val);
-int snd_soc_component_update_bits_async(struct snd_soc_component *component,
-       unsigned int reg, unsigned int mask, unsigned int val);
-void snd_soc_component_async_complete(struct snd_soc_component *component);
-int snd_soc_component_test_bits(struct snd_soc_component *component,
-       unsigned int reg, unsigned int mask, unsigned int value);
-
-/* component wide operations */
-int snd_soc_component_set_sysclk(struct snd_soc_component *component,
-                       int clk_id, int source, unsigned int freq, int dir);
-int snd_soc_component_set_pll(struct snd_soc_component *component, int pll_id,
-                             int source, unsigned int freq_in,
-                             unsigned int freq_out);
-int snd_soc_component_set_jack(struct snd_soc_component *component,
-                              struct snd_soc_jack *jack, void *data);
-
-#ifdef CONFIG_REGMAP
-
-void snd_soc_component_init_regmap(struct snd_soc_component *component,
-       struct regmap *regmap);
-void snd_soc_component_exit_regmap(struct snd_soc_component *component);
-
-#endif
-
 /* device driver data */
 
 static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card,
@@ -1478,17 +1209,6 @@ static inline void *snd_soc_card_get_drvdata(struct snd_soc_card *card)
        return card->drvdata;
 }
 
-static inline void snd_soc_component_set_drvdata(struct snd_soc_component *c,
-               void *data)
-{
-       dev_set_drvdata(c->dev, data);
-}
-
-static inline void *snd_soc_component_get_drvdata(struct snd_soc_component *c)
-{
-       return dev_get_drvdata(c->dev);
-}
-
 static inline void snd_soc_initialize_card_lists(struct snd_soc_card *card)
 {
        INIT_LIST_HEAD(&card->widgets);
@@ -1535,12 +1255,6 @@ static inline unsigned int snd_soc_enum_item_to_val(struct soc_enum *e,
        return e->values[item];
 }
 
-static inline bool snd_soc_component_is_active(
-       struct snd_soc_component *component)
-{
-       return component->active != 0;
-}
-
 /**
  * snd_soc_kcontrol_component() - Returns the component that registered the
  *  control
@@ -1676,24 +1390,6 @@ static inline void snd_soc_dapm_mutex_unlock(struct snd_soc_dapm_context *dapm)
        mutex_unlock(&dapm->card->dapm_mutex);
 }
 
-int snd_soc_component_enable_pin(struct snd_soc_component *component,
-                                const char *pin);
-int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component,
-                                         const char *pin);
-int snd_soc_component_disable_pin(struct snd_soc_component *component,
-                                 const char *pin);
-int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component,
-                                          const char *pin);
-int snd_soc_component_nc_pin(struct snd_soc_component *component,
-                            const char *pin);
-int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component,
-                                     const char *pin);
-int snd_soc_component_get_pin_status(struct snd_soc_component *component,
-                                    const char *pin);
-int snd_soc_component_force_enable_pin(struct snd_soc_component *component,
-                                      const char *pin);
-int snd_soc_component_force_enable_pin_unlocked(
-                                       struct snd_soc_component *component,
-                                       const char *pin);
+#include <sound/soc-component.h>
 
 #endif
index 919c3c027c62e9af2d826f20b632939bb3b06a21..250a0dea929459b6898b12b49f558f39cad12917 100644 (file)
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0
-snd-soc-core-objs := soc-core.o soc-dapm.o soc-jack.o soc-utils.o soc-dai.o
+snd-soc-core-objs := soc-core.o soc-dapm.o soc-jack.o soc-utils.o soc-dai.o soc-component.o
 snd-soc-core-objs += soc-pcm.o soc-io.o soc-devres.o soc-ops.o
 snd-soc-core-$(CONFIG_SND_SOC_COMPRESS) += soc-compress.o
 
diff --git a/sound/soc/soc-component.c b/sound/soc/soc-component.c
new file mode 100644 (file)
index 0000000..e19f78b
--- /dev/null
@@ -0,0 +1,269 @@
+// SPDX-License-Identifier: GPL-2.0
+//
+// soc-component.c
+//
+// Copyright (C) 2019 Renesas Electronics Corp.
+// Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+//
+#include <sound/soc.h>
+
+/**
+ * snd_soc_component_set_sysclk - configure COMPONENT system or master clock.
+ * @component: COMPONENT
+ * @clk_id: DAI specific clock ID
+ * @source: Source for the clock
+ * @freq: new clock frequency in Hz
+ * @dir: new clock direction - input/output.
+ *
+ * Configures the CODEC master (MCLK) or system (SYSCLK) clocking.
+ */
+int snd_soc_component_set_sysclk(struct snd_soc_component *component,
+                                int clk_id, int source, unsigned int freq,
+                                int dir)
+{
+       if (component->driver->set_sysclk)
+               return component->driver->set_sysclk(component, clk_id, source,
+                                                    freq, dir);
+
+       return -ENOTSUPP;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_set_sysclk);
+
+/*
+ * snd_soc_component_set_pll - configure component PLL.
+ * @component: COMPONENT
+ * @pll_id: DAI specific PLL ID
+ * @source: DAI specific source for the PLL
+ * @freq_in: PLL input clock frequency in Hz
+ * @freq_out: requested PLL output clock frequency in Hz
+ *
+ * Configures and enables PLL to generate output clock based on input clock.
+ */
+int snd_soc_component_set_pll(struct snd_soc_component *component, int pll_id,
+                             int source, unsigned int freq_in,
+                             unsigned int freq_out)
+{
+       if (component->driver->set_pll)
+               return component->driver->set_pll(component, pll_id, source,
+                                                 freq_in, freq_out);
+
+       return -EINVAL;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_set_pll);
+
+int snd_soc_component_enable_pin(struct snd_soc_component *component,
+                                const char *pin)
+{
+       struct snd_soc_dapm_context *dapm =
+               snd_soc_component_get_dapm(component);
+       char *full_name;
+       int ret;
+
+       if (!component->name_prefix)
+               return snd_soc_dapm_enable_pin(dapm, pin);
+
+       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
+       if (!full_name)
+               return -ENOMEM;
+
+       ret = snd_soc_dapm_enable_pin(dapm, full_name);
+       kfree(full_name);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_enable_pin);
+
+int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component,
+                                         const char *pin)
+{
+       struct snd_soc_dapm_context *dapm =
+               snd_soc_component_get_dapm(component);
+       char *full_name;
+       int ret;
+
+       if (!component->name_prefix)
+               return snd_soc_dapm_enable_pin_unlocked(dapm, pin);
+
+       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
+       if (!full_name)
+               return -ENOMEM;
+
+       ret = snd_soc_dapm_enable_pin_unlocked(dapm, full_name);
+       kfree(full_name);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_enable_pin_unlocked);
+
+int snd_soc_component_disable_pin(struct snd_soc_component *component,
+                                 const char *pin)
+{
+       struct snd_soc_dapm_context *dapm =
+               snd_soc_component_get_dapm(component);
+       char *full_name;
+       int ret;
+
+       if (!component->name_prefix)
+               return snd_soc_dapm_disable_pin(dapm, pin);
+
+       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
+       if (!full_name)
+               return -ENOMEM;
+
+       ret = snd_soc_dapm_disable_pin(dapm, full_name);
+       kfree(full_name);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_disable_pin);
+
+int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component,
+                                          const char *pin)
+{
+       struct snd_soc_dapm_context *dapm =
+               snd_soc_component_get_dapm(component);
+       char *full_name;
+       int ret;
+
+       if (!component->name_prefix)
+               return snd_soc_dapm_disable_pin_unlocked(dapm, pin);
+
+       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
+       if (!full_name)
+               return -ENOMEM;
+
+       ret = snd_soc_dapm_disable_pin_unlocked(dapm, full_name);
+       kfree(full_name);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_disable_pin_unlocked);
+
+int snd_soc_component_nc_pin(struct snd_soc_component *component,
+                            const char *pin)
+{
+       struct snd_soc_dapm_context *dapm =
+               snd_soc_component_get_dapm(component);
+       char *full_name;
+       int ret;
+
+       if (!component->name_prefix)
+               return snd_soc_dapm_nc_pin(dapm, pin);
+
+       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
+       if (!full_name)
+               return -ENOMEM;
+
+       ret = snd_soc_dapm_nc_pin(dapm, full_name);
+       kfree(full_name);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_nc_pin);
+
+int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component,
+                                     const char *pin)
+{
+       struct snd_soc_dapm_context *dapm =
+               snd_soc_component_get_dapm(component);
+       char *full_name;
+       int ret;
+
+       if (!component->name_prefix)
+               return snd_soc_dapm_nc_pin_unlocked(dapm, pin);
+
+       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
+       if (!full_name)
+               return -ENOMEM;
+
+       ret = snd_soc_dapm_nc_pin_unlocked(dapm, full_name);
+       kfree(full_name);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_nc_pin_unlocked);
+
+int snd_soc_component_get_pin_status(struct snd_soc_component *component,
+                                    const char *pin)
+{
+       struct snd_soc_dapm_context *dapm =
+               snd_soc_component_get_dapm(component);
+       char *full_name;
+       int ret;
+
+       if (!component->name_prefix)
+               return snd_soc_dapm_get_pin_status(dapm, pin);
+
+       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
+       if (!full_name)
+               return -ENOMEM;
+
+       ret = snd_soc_dapm_get_pin_status(dapm, full_name);
+       kfree(full_name);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_get_pin_status);
+
+int snd_soc_component_force_enable_pin(struct snd_soc_component *component,
+                                      const char *pin)
+{
+       struct snd_soc_dapm_context *dapm =
+               snd_soc_component_get_dapm(component);
+       char *full_name;
+       int ret;
+
+       if (!component->name_prefix)
+               return snd_soc_dapm_force_enable_pin(dapm, pin);
+
+       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
+       if (!full_name)
+               return -ENOMEM;
+
+       ret = snd_soc_dapm_force_enable_pin(dapm, full_name);
+       kfree(full_name);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_force_enable_pin);
+
+int snd_soc_component_force_enable_pin_unlocked(
+       struct snd_soc_component *component,
+       const char *pin)
+{
+       struct snd_soc_dapm_context *dapm =
+               snd_soc_component_get_dapm(component);
+       char *full_name;
+       int ret;
+
+       if (!component->name_prefix)
+               return snd_soc_dapm_force_enable_pin_unlocked(dapm, pin);
+
+       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
+       if (!full_name)
+               return -ENOMEM;
+
+       ret = snd_soc_dapm_force_enable_pin_unlocked(dapm, full_name);
+       kfree(full_name);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_force_enable_pin_unlocked);
+
+/**
+ * snd_soc_component_set_jack - configure component jack.
+ * @component: COMPONENTs
+ * @jack: structure to use for the jack
+ * @data: can be used if codec driver need extra data for configuring jack
+ *
+ * Configures and enables jack detection function.
+ */
+int snd_soc_component_set_jack(struct snd_soc_component *component,
+                              struct snd_soc_jack *jack, void *data)
+{
+       if (component->driver->set_jack)
+               return component->driver->set_jack(component, jack, data);
+
+       return -ENOTSUPP;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_set_jack);
index ed66d2c68d102ca04d1b4cc8f0579e631ee680c7..dc3e45547da217dae7ad213a11ecca97fe376adb 100644 (file)
@@ -2345,50 +2345,6 @@ int snd_soc_add_dai_controls(struct snd_soc_dai *dai,
 }
 EXPORT_SYMBOL_GPL(snd_soc_add_dai_controls);
 
-/**
- * snd_soc_component_set_sysclk - configure COMPONENT system or master clock.
- * @component: COMPONENT
- * @clk_id: DAI specific clock ID
- * @source: Source for the clock
- * @freq: new clock frequency in Hz
- * @dir: new clock direction - input/output.
- *
- * Configures the CODEC master (MCLK) or system (SYSCLK) clocking.
- */
-int snd_soc_component_set_sysclk(struct snd_soc_component *component,
-                                int clk_id, int source, unsigned int freq,
-                                int dir)
-{
-       if (component->driver->set_sysclk)
-               return component->driver->set_sysclk(component, clk_id, source,
-                                                freq, dir);
-
-       return -ENOTSUPP;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_set_sysclk);
-
-/*
- * snd_soc_component_set_pll - configure component PLL.
- * @component: COMPONENT
- * @pll_id: DAI specific PLL ID
- * @source: DAI specific source for the PLL
- * @freq_in: PLL input clock frequency in Hz
- * @freq_out: requested PLL output clock frequency in Hz
- *
- * Configures and enables PLL to generate output clock based on input clock.
- */
-int snd_soc_component_set_pll(struct snd_soc_component *component, int pll_id,
-                             int source, unsigned int freq_in,
-                             unsigned int freq_out)
-{
-       if (component->driver->set_pll)
-               return component->driver->set_pll(component, pll_id, source,
-                                                 freq_in, freq_out);
-
-       return -EINVAL;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_set_pll);
-
 static int snd_soc_bind_card(struct snd_soc_card *card)
 {
        struct snd_soc_pcm_runtime *rtd;
index c7b990abdbaa62a5182fb475c3e13884ad9f5341..a71d2340eb050606b1d57866956f765e0bcdd5c2 100644 (file)
@@ -23,24 +23,6 @@ struct jack_gpio_tbl {
        struct snd_soc_jack_gpio *gpios;
 };
 
-/**
- * snd_soc_component_set_jack - configure component jack.
- * @component: COMPONENTs
- * @jack: structure to use for the jack
- * @data: can be used if codec driver need extra data for configuring jack
- *
- * Configures and enables jack detection function.
- */
-int snd_soc_component_set_jack(struct snd_soc_component *component,
-                              struct snd_soc_jack *jack, void *data)
-{
-       if (component->driver->set_jack)
-               return component->driver->set_jack(component, jack, data);
-
-       return -ENOTSUPP;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_set_jack);
-
 /**
  * snd_soc_card_jack_new - Create a new jack
  * @card:  ASoC card
index e3b9dd634c6db37506b94527411f7d1c8398ab9b..54dcece52b0ce0ddbae32fb5ecf666c81eb48f6a 100644 (file)
@@ -52,205 +52,6 @@ int snd_soc_params_to_bclk(struct snd_pcm_hw_params *params)
 }
 EXPORT_SYMBOL_GPL(snd_soc_params_to_bclk);
 
-int snd_soc_component_enable_pin(struct snd_soc_component *component,
-                                const char *pin)
-{
-       struct snd_soc_dapm_context *dapm =
-               snd_soc_component_get_dapm(component);
-       char *full_name;
-       int ret;
-
-       if (!component->name_prefix)
-               return snd_soc_dapm_enable_pin(dapm, pin);
-
-       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
-       if (!full_name)
-               return -ENOMEM;
-
-       ret = snd_soc_dapm_enable_pin(dapm, full_name);
-       kfree(full_name);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_enable_pin);
-
-int snd_soc_component_enable_pin_unlocked(struct snd_soc_component *component,
-                                         const char *pin)
-{
-       struct snd_soc_dapm_context *dapm =
-               snd_soc_component_get_dapm(component);
-       char *full_name;
-       int ret;
-
-       if (!component->name_prefix)
-               return snd_soc_dapm_enable_pin_unlocked(dapm, pin);
-
-       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
-       if (!full_name)
-               return -ENOMEM;
-
-       ret = snd_soc_dapm_enable_pin_unlocked(dapm, full_name);
-       kfree(full_name);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_enable_pin_unlocked);
-
-int snd_soc_component_disable_pin(struct snd_soc_component *component,
-                                 const char *pin)
-{
-       struct snd_soc_dapm_context *dapm =
-               snd_soc_component_get_dapm(component);
-       char *full_name;
-       int ret;
-
-       if (!component->name_prefix)
-               return snd_soc_dapm_disable_pin(dapm, pin);
-
-       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
-       if (!full_name)
-               return -ENOMEM;
-
-       ret = snd_soc_dapm_disable_pin(dapm, full_name);
-       kfree(full_name);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_disable_pin);
-
-int snd_soc_component_disable_pin_unlocked(struct snd_soc_component *component,
-                                          const char *pin)
-{
-       struct snd_soc_dapm_context *dapm =
-               snd_soc_component_get_dapm(component);
-       char *full_name;
-       int ret;
-
-       if (!component->name_prefix)
-               return snd_soc_dapm_disable_pin_unlocked(dapm, pin);
-
-       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
-       if (!full_name)
-               return -ENOMEM;
-
-       ret = snd_soc_dapm_disable_pin_unlocked(dapm, full_name);
-       kfree(full_name);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_disable_pin_unlocked);
-
-int snd_soc_component_nc_pin(struct snd_soc_component *component,
-                            const char *pin)
-{
-       struct snd_soc_dapm_context *dapm =
-               snd_soc_component_get_dapm(component);
-       char *full_name;
-       int ret;
-
-       if (!component->name_prefix)
-               return snd_soc_dapm_nc_pin(dapm, pin);
-
-       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
-       if (!full_name)
-               return -ENOMEM;
-
-       ret = snd_soc_dapm_nc_pin(dapm, full_name);
-       kfree(full_name);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_nc_pin);
-
-int snd_soc_component_nc_pin_unlocked(struct snd_soc_component *component,
-                                     const char *pin)
-{
-       struct snd_soc_dapm_context *dapm =
-               snd_soc_component_get_dapm(component);
-       char *full_name;
-       int ret;
-
-       if (!component->name_prefix)
-               return snd_soc_dapm_nc_pin_unlocked(dapm, pin);
-
-       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
-       if (!full_name)
-               return -ENOMEM;
-
-       ret = snd_soc_dapm_nc_pin_unlocked(dapm, full_name);
-       kfree(full_name);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_nc_pin_unlocked);
-
-int snd_soc_component_get_pin_status(struct snd_soc_component *component,
-                                    const char *pin)
-{
-       struct snd_soc_dapm_context *dapm =
-               snd_soc_component_get_dapm(component);
-       char *full_name;
-       int ret;
-
-       if (!component->name_prefix)
-               return snd_soc_dapm_get_pin_status(dapm, pin);
-
-       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
-       if (!full_name)
-               return -ENOMEM;
-
-       ret = snd_soc_dapm_get_pin_status(dapm, full_name);
-       kfree(full_name);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_get_pin_status);
-
-int snd_soc_component_force_enable_pin(struct snd_soc_component *component,
-                                      const char *pin)
-{
-       struct snd_soc_dapm_context *dapm =
-               snd_soc_component_get_dapm(component);
-       char *full_name;
-       int ret;
-
-       if (!component->name_prefix)
-               return snd_soc_dapm_force_enable_pin(dapm, pin);
-
-       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
-       if (!full_name)
-               return -ENOMEM;
-
-       ret = snd_soc_dapm_force_enable_pin(dapm, full_name);
-       kfree(full_name);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_force_enable_pin);
-
-int snd_soc_component_force_enable_pin_unlocked(
-                                       struct snd_soc_component *component,
-                                       const char *pin)
-{
-       struct snd_soc_dapm_context *dapm =
-               snd_soc_component_get_dapm(component);
-       char *full_name;
-       int ret;
-
-       if (!component->name_prefix)
-               return snd_soc_dapm_force_enable_pin_unlocked(dapm, pin);
-
-       full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin);
-       if (!full_name)
-               return -ENOMEM;
-
-       ret = snd_soc_dapm_force_enable_pin_unlocked(dapm, full_name);
-       kfree(full_name);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_component_force_enable_pin_unlocked);
-
 static const struct snd_pcm_hardware dummy_dma_hardware = {
        /* Random values to keep userspace happy when checking constraints */
        .info                   = SNDRV_PCM_INFO_INTERLEAVED |