ASoC: soc-dapm.c random cleanups
Merge series from Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>: These are v2 of random cleanup for soc-dpam.c/h. Basically, these are just cleanup, nothing changed.
This commit is contained in:
commit
625d275372
@ -341,31 +341,27 @@ struct soc_enum;
|
||||
#define SND_SOC_DAPM_STREAM_STOP 0x2
|
||||
#define SND_SOC_DAPM_STREAM_SUSPEND 0x4
|
||||
#define SND_SOC_DAPM_STREAM_RESUME 0x8
|
||||
#define SND_SOC_DAPM_STREAM_PAUSE_PUSH 0x10
|
||||
#define SND_SOC_DAPM_STREAM_PAUSE_PUSH 0x10
|
||||
#define SND_SOC_DAPM_STREAM_PAUSE_RELEASE 0x20
|
||||
|
||||
/* dapm event types */
|
||||
#define SND_SOC_DAPM_PRE_PMU 0x1 /* before widget power up */
|
||||
#define SND_SOC_DAPM_POST_PMU 0x2 /* after widget power up */
|
||||
#define SND_SOC_DAPM_PRE_PMD 0x4 /* before widget power down */
|
||||
#define SND_SOC_DAPM_POST_PMD 0x8 /* after widget power down */
|
||||
#define SND_SOC_DAPM_PRE_REG 0x10 /* before audio path setup */
|
||||
#define SND_SOC_DAPM_POST_REG 0x20 /* after audio path setup */
|
||||
#define SND_SOC_DAPM_WILL_PMU 0x40 /* called at start of sequence */
|
||||
#define SND_SOC_DAPM_WILL_PMD 0x80 /* called at start of sequence */
|
||||
#define SND_SOC_DAPM_PRE_POST_PMD \
|
||||
(SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD)
|
||||
#define SND_SOC_DAPM_PRE_POST_PMU \
|
||||
(SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU)
|
||||
#define SND_SOC_DAPM_PRE_PMU 0x1 /* before widget power up */
|
||||
#define SND_SOC_DAPM_POST_PMU 0x2 /* after widget power up */
|
||||
#define SND_SOC_DAPM_PRE_PMD 0x4 /* before widget power down */
|
||||
#define SND_SOC_DAPM_POST_PMD 0x8 /* after widget power down */
|
||||
#define SND_SOC_DAPM_PRE_REG 0x10 /* before audio path setup */
|
||||
#define SND_SOC_DAPM_POST_REG 0x20 /* after audio path setup */
|
||||
#define SND_SOC_DAPM_WILL_PMU 0x40 /* called at start of sequence */
|
||||
#define SND_SOC_DAPM_WILL_PMD 0x80 /* called at start of sequence */
|
||||
#define SND_SOC_DAPM_PRE_POST_PMD (SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD)
|
||||
#define SND_SOC_DAPM_PRE_POST_PMU (SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU)
|
||||
|
||||
/* convenience event type detection */
|
||||
#define SND_SOC_DAPM_EVENT_ON(e) \
|
||||
(e & (SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU))
|
||||
#define SND_SOC_DAPM_EVENT_OFF(e) \
|
||||
(e & (SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD))
|
||||
#define SND_SOC_DAPM_EVENT_ON(e) (e & (SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU))
|
||||
#define SND_SOC_DAPM_EVENT_OFF(e) (e & (SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD))
|
||||
|
||||
/* regulator widget flags */
|
||||
#define SND_SOC_DAPM_REGULATOR_BYPASS 0x1 /* bypass when disabled */
|
||||
#define SND_SOC_DAPM_REGULATOR_BYPASS 0x1 /* bypass when disabled */
|
||||
|
||||
struct snd_soc_dapm_widget;
|
||||
enum snd_soc_dapm_type;
|
||||
@ -396,18 +392,13 @@ enum snd_soc_bias_level {
|
||||
SND_SOC_BIAS_ON = 3,
|
||||
};
|
||||
|
||||
int dapm_regulator_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_clock_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_pinctrl_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_regulator_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_clock_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_pinctrl_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event);
|
||||
|
||||
/* dapm controls */
|
||||
int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
|
||||
@ -419,30 +410,24 @@ int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol,
|
||||
int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *uncontrol);
|
||||
int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_widget *widget,
|
||||
int num);
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_new_control(
|
||||
struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_widget *widget, int num);
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_widget *widget);
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_new_control_unlocked(
|
||||
struct snd_soc_dapm_context *dapm,
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_widget *widget);
|
||||
int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
|
||||
struct snd_soc_dai *dai);
|
||||
int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, struct snd_soc_dai *dai);
|
||||
void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w);
|
||||
int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card);
|
||||
void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card);
|
||||
|
||||
int snd_soc_dapm_update_dai(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params,
|
||||
struct snd_soc_dai *dai);
|
||||
struct snd_pcm_hw_params *params, struct snd_soc_dai *dai);
|
||||
|
||||
/* dapm path setup */
|
||||
int snd_soc_dapm_new_widgets(struct snd_soc_card *card);
|
||||
void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm);
|
||||
void snd_soc_dapm_init(struct snd_soc_dapm_context *dapm,
|
||||
struct snd_soc_card *card,
|
||||
struct snd_soc_component *component);
|
||||
struct snd_soc_card *card, struct snd_soc_component *component);
|
||||
int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_route *route, int num);
|
||||
int snd_soc_dapm_del_routes(struct snd_soc_dapm_context *dapm,
|
||||
@ -452,46 +437,34 @@ int snd_soc_dapm_weak_routes(struct snd_soc_dapm_context *dapm,
|
||||
void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w);
|
||||
|
||||
/* dapm events */
|
||||
void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
|
||||
int event);
|
||||
void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream, int event);
|
||||
void snd_soc_dapm_stream_stop(struct snd_soc_pcm_runtime *rtd, int stream);
|
||||
void snd_soc_dapm_shutdown(struct snd_soc_card *card);
|
||||
|
||||
/* external DAPM widget events */
|
||||
int snd_soc_dapm_mixer_update_power(struct snd_soc_dapm_context *dapm,
|
||||
struct snd_kcontrol *kcontrol, int connect,
|
||||
struct snd_soc_dapm_update *update);
|
||||
struct snd_kcontrol *kcontrol, int connect, struct snd_soc_dapm_update *update);
|
||||
int snd_soc_dapm_mux_update_power(struct snd_soc_dapm_context *dapm,
|
||||
struct snd_kcontrol *kcontrol, int mux, struct soc_enum *e,
|
||||
struct snd_soc_dapm_update *update);
|
||||
|
||||
/* dapm sys fs - used by the core */
|
||||
extern struct attribute *soc_dapm_dev_attrs[];
|
||||
void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
|
||||
struct dentry *parent);
|
||||
void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm, struct dentry *parent);
|
||||
|
||||
/* dapm audio pin control and status */
|
||||
int snd_soc_dapm_enable_pin(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_disable_pin(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_disable_pin_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_enable_pin(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_enable_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_disable_pin(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_disable_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_nc_pin(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_nc_pin_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_nc_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_sync(struct snd_soc_dapm_context *dapm);
|
||||
int snd_soc_dapm_sync_unlocked(struct snd_soc_dapm_context *dapm);
|
||||
int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
unsigned int dapm_kcontrol_get_value(const struct snd_kcontrol *kcontrol);
|
||||
|
||||
/* Mostly internal - should not normally be used */
|
||||
@ -500,40 +473,35 @@ void dapm_mark_endpoints_dirty(struct snd_soc_card *card);
|
||||
/* dapm path query */
|
||||
int snd_soc_dapm_dai_get_connected_widgets(struct snd_soc_dai *dai, int stream,
|
||||
struct snd_soc_dapm_widget_list **list,
|
||||
bool (*custom_stop_condition)(struct snd_soc_dapm_widget *,
|
||||
enum snd_soc_dapm_direction));
|
||||
bool (*custom_stop_condition)(struct snd_soc_dapm_widget *, enum snd_soc_dapm_direction));
|
||||
void snd_soc_dapm_dai_free_widgets(struct snd_soc_dapm_widget_list **list);
|
||||
|
||||
struct snd_soc_dapm_context *snd_soc_dapm_kcontrol_dapm(
|
||||
struct snd_kcontrol *kcontrol);
|
||||
struct snd_soc_dapm_context *snd_soc_dapm_kcontrol_dapm(struct snd_kcontrol *kcontrol);
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_kcontrol_widget(struct snd_kcontrol *kcontrol);
|
||||
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_kcontrol_widget(
|
||||
struct snd_kcontrol *kcontrol);
|
||||
|
||||
int snd_soc_dapm_force_bias_level(struct snd_soc_dapm_context *dapm,
|
||||
enum snd_soc_bias_level level);
|
||||
int snd_soc_dapm_force_bias_level(struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level);
|
||||
|
||||
/* dapm widget types */
|
||||
enum snd_soc_dapm_type {
|
||||
snd_soc_dapm_input = 0, /* input pin */
|
||||
snd_soc_dapm_output, /* output pin */
|
||||
snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */
|
||||
snd_soc_dapm_demux, /* connects the input to one of multiple outputs */
|
||||
snd_soc_dapm_mixer, /* mixes several analog signals together */
|
||||
snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */
|
||||
snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */
|
||||
snd_soc_dapm_out_drv, /* output driver */
|
||||
snd_soc_dapm_adc, /* analog to digital converter */
|
||||
snd_soc_dapm_dac, /* digital to analog converter */
|
||||
snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */
|
||||
snd_soc_dapm_demux, /* connects the input to one of multiple outputs */
|
||||
snd_soc_dapm_mixer, /* mixes several analog signals together */
|
||||
snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */
|
||||
snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */
|
||||
snd_soc_dapm_out_drv, /* output driver */
|
||||
snd_soc_dapm_adc, /* analog to digital converter */
|
||||
snd_soc_dapm_dac, /* digital to analog converter */
|
||||
snd_soc_dapm_micbias, /* microphone bias (power) - DEPRECATED: use snd_soc_dapm_supply */
|
||||
snd_soc_dapm_mic, /* microphone */
|
||||
snd_soc_dapm_hp, /* headphones */
|
||||
snd_soc_dapm_spk, /* speaker */
|
||||
snd_soc_dapm_line, /* line input/output */
|
||||
snd_soc_dapm_mic, /* microphone */
|
||||
snd_soc_dapm_hp, /* headphones */
|
||||
snd_soc_dapm_spk, /* speaker */
|
||||
snd_soc_dapm_line, /* line input/output */
|
||||
snd_soc_dapm_switch, /* analog switch */
|
||||
snd_soc_dapm_vmid, /* codec bias/vmid - to minimise pops */
|
||||
snd_soc_dapm_pre, /* machine specific pre widget - exec first */
|
||||
snd_soc_dapm_post, /* machine specific post widget - exec last */
|
||||
snd_soc_dapm_vmid, /* codec bias/vmid - to minimise pops */
|
||||
snd_soc_dapm_pre, /* machine specific pre widget - exec first */
|
||||
snd_soc_dapm_post, /* machine specific post widget - exec last */
|
||||
snd_soc_dapm_supply, /* power/clock supply */
|
||||
snd_soc_dapm_pinctrl, /* pinctrl */
|
||||
snd_soc_dapm_regulator_supply, /* external regulator */
|
||||
@ -599,9 +567,9 @@ struct snd_soc_dapm_path {
|
||||
};
|
||||
|
||||
/* status */
|
||||
u32 connect:1; /* source and sink widgets are connected */
|
||||
u32 walking:1; /* path is in the process of being walked */
|
||||
u32 weak:1; /* path ignored for power management */
|
||||
u32 connect:1; /* source and sink widgets are connected */
|
||||
u32 walking:1; /* path is in the process of being walked */
|
||||
u32 weak:1; /* path ignored for power management */
|
||||
u32 is_supply:1; /* At least one of the connected widgets is a supply */
|
||||
|
||||
int (*connected)(struct snd_soc_dapm_widget *source,
|
||||
@ -615,8 +583,8 @@ struct snd_soc_dapm_path {
|
||||
/* dapm widget */
|
||||
struct snd_soc_dapm_widget {
|
||||
enum snd_soc_dapm_type id;
|
||||
const char *name; /* widget name */
|
||||
const char *sname; /* stream name */
|
||||
const char *name; /* widget name */
|
||||
const char *sname; /* stream name */
|
||||
struct list_head list;
|
||||
struct snd_soc_dapm_context *dapm;
|
||||
|
||||
@ -635,7 +603,7 @@ struct snd_soc_dapm_widget {
|
||||
unsigned char connected:1; /* connected codec pin */
|
||||
unsigned char new:1; /* cnew complete */
|
||||
unsigned char force:1; /* force state */
|
||||
unsigned char ignore_suspend:1; /* kept enabled over suspend */
|
||||
unsigned char ignore_suspend:1; /* kept enabled over suspend */
|
||||
unsigned char new_power:1; /* power from this run */
|
||||
unsigned char power_checked:1; /* power checked this run */
|
||||
unsigned char is_supply:1; /* Widget is a supply type widget */
|
||||
@ -682,13 +650,14 @@ struct snd_soc_dapm_update {
|
||||
/* DAPM context */
|
||||
struct snd_soc_dapm_context {
|
||||
enum snd_soc_bias_level bias_level;
|
||||
unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */
|
||||
/* Go to BIAS_OFF in suspend if the DAPM context is idle */
|
||||
unsigned int suspend_bias_off:1;
|
||||
|
||||
struct device *dev; /* from parent - for debug */
|
||||
struct snd_soc_component *component; /* parent component */
|
||||
struct snd_soc_card *card; /* parent card */
|
||||
/* bit field */
|
||||
unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */
|
||||
unsigned int suspend_bias_off:1; /* Use BIAS_OFF in suspend if the DAPM is idle */
|
||||
|
||||
struct device *dev; /* from parent - for debug */
|
||||
struct snd_soc_component *component; /* parent component */
|
||||
struct snd_soc_card *card; /* parent card */
|
||||
|
||||
/* used during DAPM updates */
|
||||
enum snd_soc_bias_level target_bias_level;
|
||||
@ -762,11 +731,11 @@ enum snd_soc_dapm_direction {
|
||||
|
||||
#define SND_SOC_DAPM_DIR_TO_EP(x) BIT(x)
|
||||
|
||||
#define SND_SOC_DAPM_EP_SOURCE SND_SOC_DAPM_DIR_TO_EP(SND_SOC_DAPM_DIR_IN)
|
||||
#define SND_SOC_DAPM_EP_SINK SND_SOC_DAPM_DIR_TO_EP(SND_SOC_DAPM_DIR_OUT)
|
||||
#define SND_SOC_DAPM_EP_SOURCE SND_SOC_DAPM_DIR_TO_EP(SND_SOC_DAPM_DIR_IN)
|
||||
#define SND_SOC_DAPM_EP_SINK SND_SOC_DAPM_DIR_TO_EP(SND_SOC_DAPM_DIR_OUT)
|
||||
|
||||
/**
|
||||
* snd_soc_dapm_widget_for_each_sink_path - Iterates over all paths in the
|
||||
* snd_soc_dapm_widget_for_each_path - Iterates over all paths in the
|
||||
* specified direction of a widget
|
||||
* @w: The widget
|
||||
* @dir: Whether to iterate over the paths where the specified widget is the
|
||||
@ -777,7 +746,7 @@ enum snd_soc_dapm_direction {
|
||||
list_for_each_entry(p, &w->edges[dir], list_node[dir])
|
||||
|
||||
/**
|
||||
* snd_soc_dapm_widget_for_each_sink_path_safe - Iterates over all paths in the
|
||||
* snd_soc_dapm_widget_for_each_path_safe - Iterates over all paths in the
|
||||
* specified direction of a widget
|
||||
* @w: The widget
|
||||
* @dir: Whether to iterate over the paths where the specified widget is the
|
||||
@ -785,7 +754,7 @@ enum snd_soc_dapm_direction {
|
||||
* @p: The path iterator variable
|
||||
* @next_p: Temporary storage for the next path
|
||||
*
|
||||
* This function works like snd_soc_dapm_widget_for_each_sink_path, expect that
|
||||
* This function works like snd_soc_dapm_widget_for_each_path, expect that
|
||||
* it is safe to remove the current path from the list while iterating
|
||||
*/
|
||||
#define snd_soc_dapm_widget_for_each_path_safe(w, dir, p, next_p) \
|
||||
|
@ -78,8 +78,6 @@ struct snd_soc_dpcm {
|
||||
struct list_head list_be;
|
||||
struct list_head list_fe;
|
||||
|
||||
/* hw params for this link - may be different for each link */
|
||||
struct snd_pcm_hw_params hw_params;
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_state;
|
||||
#endif
|
||||
|
@ -1518,7 +1518,8 @@ static int rsnd_hw_params(struct snd_soc_component *component,
|
||||
int stream = substream->stream;
|
||||
|
||||
for_each_dpcm_be(fe, stream, dpcm) {
|
||||
struct snd_pcm_hw_params *be_params = &dpcm->hw_params;
|
||||
struct snd_soc_pcm_runtime *be = dpcm->be;
|
||||
struct snd_pcm_hw_params *be_params = &be->dpcm[stream].hw_params;
|
||||
|
||||
if (params_channels(hw_params) != params_channels(be_params))
|
||||
io->converted_chan = params_channels(be_params);
|
||||
|
@ -71,9 +71,9 @@ static int dapm_up_seq[] = {
|
||||
[snd_soc_dapm_pinctrl] = 2,
|
||||
[snd_soc_dapm_clock_supply] = 2,
|
||||
[snd_soc_dapm_supply] = 3,
|
||||
[snd_soc_dapm_dai_link] = 3,
|
||||
[snd_soc_dapm_micbias] = 4,
|
||||
[snd_soc_dapm_vmid] = 4,
|
||||
[snd_soc_dapm_dai_link] = 3,
|
||||
[snd_soc_dapm_dai_in] = 5,
|
||||
[snd_soc_dapm_dai_out] = 5,
|
||||
[snd_soc_dapm_aif_in] = 5,
|
||||
@ -1873,11 +1873,25 @@ static void dapm_widget_set_peer_power(struct snd_soc_dapm_widget *peer,
|
||||
dapm_mark_dirty(peer, "peer state change");
|
||||
}
|
||||
|
||||
static void dapm_widget_set_power(struct snd_soc_dapm_widget *w, bool power,
|
||||
static void dapm_power_one_widget(struct snd_soc_dapm_widget *w,
|
||||
struct list_head *up_list,
|
||||
struct list_head *down_list)
|
||||
{
|
||||
struct snd_soc_dapm_path *path;
|
||||
int power;
|
||||
|
||||
switch (w->id) {
|
||||
case snd_soc_dapm_pre:
|
||||
power = 0;
|
||||
goto end;
|
||||
case snd_soc_dapm_post:
|
||||
power = 1;
|
||||
goto end;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
power = dapm_widget_power_check(w);
|
||||
|
||||
if (w->power == power)
|
||||
return;
|
||||
@ -1898,34 +1912,13 @@ static void dapm_widget_set_power(struct snd_soc_dapm_widget *w, bool power,
|
||||
snd_soc_dapm_widget_for_each_sink_path(w, path)
|
||||
dapm_widget_set_peer_power(path->sink, power, path->connect);
|
||||
|
||||
end:
|
||||
if (power)
|
||||
dapm_seq_insert(w, up_list, true);
|
||||
else
|
||||
dapm_seq_insert(w, down_list, false);
|
||||
}
|
||||
|
||||
static void dapm_power_one_widget(struct snd_soc_dapm_widget *w,
|
||||
struct list_head *up_list,
|
||||
struct list_head *down_list)
|
||||
{
|
||||
int power;
|
||||
|
||||
switch (w->id) {
|
||||
case snd_soc_dapm_pre:
|
||||
dapm_seq_insert(w, down_list, false);
|
||||
break;
|
||||
case snd_soc_dapm_post:
|
||||
dapm_seq_insert(w, up_list, true);
|
||||
break;
|
||||
|
||||
default:
|
||||
power = dapm_widget_power_check(w);
|
||||
|
||||
dapm_widget_set_power(w, power, up_list, down_list);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static bool dapm_idle_bias_off(struct snd_soc_dapm_context *dapm)
|
||||
{
|
||||
if (dapm->idle_bias_off)
|
||||
@ -4139,56 +4132,53 @@ snd_soc_dapm_new_dai(struct snd_soc_card *card,
|
||||
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
|
||||
struct snd_soc_dapm_widget template;
|
||||
struct snd_soc_dapm_widget *w;
|
||||
const struct snd_kcontrol_new *kcontrol_news;
|
||||
int num_kcontrols;
|
||||
const char **w_param_text;
|
||||
unsigned long private_value = 0;
|
||||
char *link_name;
|
||||
int ret;
|
||||
int ret = -ENOMEM;
|
||||
|
||||
link_name = devm_kasprintf(card->dev, GFP_KERNEL, "%s-%s",
|
||||
rtd->dai_link->name, id);
|
||||
if (!link_name)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
memset(&template, 0, sizeof(template));
|
||||
template.reg = SND_SOC_NOPM;
|
||||
template.id = snd_soc_dapm_dai_link;
|
||||
template.name = link_name;
|
||||
template.event = snd_soc_dai_link_event;
|
||||
template.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD;
|
||||
template.kcontrol_news = NULL;
|
||||
goto name_fail;
|
||||
|
||||
/* allocate memory for control, only in case of multiple configs */
|
||||
w_param_text = NULL;
|
||||
kcontrol_news = NULL;
|
||||
num_kcontrols = 0;
|
||||
if (rtd->dai_link->num_params > 1) {
|
||||
w_param_text = devm_kcalloc(card->dev,
|
||||
rtd->dai_link->num_params,
|
||||
sizeof(char *), GFP_KERNEL);
|
||||
if (!w_param_text) {
|
||||
ret = -ENOMEM;
|
||||
if (!w_param_text)
|
||||
goto param_fail;
|
||||
}
|
||||
|
||||
template.num_kcontrols = 1;
|
||||
template.kcontrol_news =
|
||||
snd_soc_dapm_alloc_kcontrol(card,
|
||||
link_name,
|
||||
rtd->dai_link->params,
|
||||
rtd->dai_link->num_params,
|
||||
w_param_text, &private_value);
|
||||
if (!template.kcontrol_news) {
|
||||
ret = -ENOMEM;
|
||||
num_kcontrols = 1;
|
||||
kcontrol_news = snd_soc_dapm_alloc_kcontrol(card, link_name,
|
||||
rtd->dai_link->params,
|
||||
rtd->dai_link->num_params,
|
||||
w_param_text, &private_value);
|
||||
if (!kcontrol_news)
|
||||
goto param_fail;
|
||||
}
|
||||
} else {
|
||||
w_param_text = NULL;
|
||||
}
|
||||
|
||||
memset(&template, 0, sizeof(template));
|
||||
template.reg = SND_SOC_NOPM;
|
||||
template.id = snd_soc_dapm_dai_link;
|
||||
template.name = link_name;
|
||||
template.event = snd_soc_dai_link_event;
|
||||
template.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
|
||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD;
|
||||
template.kcontrol_news = kcontrol_news;
|
||||
template.num_kcontrols = num_kcontrols;
|
||||
|
||||
dev_dbg(card->dev, "ASoC: adding %s widget\n", link_name);
|
||||
|
||||
w = snd_soc_dapm_new_control_unlocked(&card->dapm, &template);
|
||||
if (IS_ERR(w)) {
|
||||
ret = PTR_ERR(w);
|
||||
dev_err(rtd->dev, "ASoC: Failed to create %s widget: %d\n",
|
||||
link_name, ret);
|
||||
goto outfree_kcontrol_news;
|
||||
}
|
||||
|
||||
@ -4202,6 +4192,9 @@ outfree_kcontrol_news:
|
||||
rtd->dai_link->num_params, w_param_text);
|
||||
param_fail:
|
||||
devm_kfree(card->dev, link_name);
|
||||
name_fail:
|
||||
dev_err(rtd->dev, "ASoC: Failed to create %s-%s widget: %d\n",
|
||||
rtd->dai_link->name, id, ret);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
|
@ -155,7 +155,7 @@ static ssize_t dpcm_show_state(struct snd_soc_pcm_runtime *fe,
|
||||
|
||||
for_each_dpcm_be(fe, stream, dpcm) {
|
||||
struct snd_soc_pcm_runtime *be = dpcm->be;
|
||||
params = &dpcm->hw_params;
|
||||
params = &be->dpcm[stream].hw_params;
|
||||
|
||||
offset += scnprintf(buf + offset, size - offset,
|
||||
"- %s\n", be->dai_link->name);
|
||||
@ -1980,6 +1980,8 @@ int dpcm_be_dai_hw_params(struct snd_soc_pcm_runtime *fe, int stream)
|
||||
int ret;
|
||||
|
||||
for_each_dpcm_be(fe, stream, dpcm) {
|
||||
struct snd_pcm_hw_params hw_params;
|
||||
|
||||
be = dpcm->be;
|
||||
be_substream = snd_soc_dpcm_get_substream(be, stream);
|
||||
|
||||
@ -1988,16 +1990,16 @@ int dpcm_be_dai_hw_params(struct snd_soc_pcm_runtime *fe, int stream)
|
||||
continue;
|
||||
|
||||
/* copy params for each dpcm */
|
||||
memcpy(&dpcm->hw_params, &fe->dpcm[stream].hw_params,
|
||||
memcpy(&hw_params, &fe->dpcm[stream].hw_params,
|
||||
sizeof(struct snd_pcm_hw_params));
|
||||
|
||||
/* perform any hw_params fixups */
|
||||
ret = snd_soc_link_be_hw_params_fixup(be, &dpcm->hw_params);
|
||||
ret = snd_soc_link_be_hw_params_fixup(be, &hw_params);
|
||||
if (ret < 0)
|
||||
goto unwind;
|
||||
|
||||
/* copy the fixed-up hw params for BE dai */
|
||||
memcpy(&be->dpcm[stream].hw_params, &dpcm->hw_params,
|
||||
memcpy(&be->dpcm[stream].hw_params, &hw_params,
|
||||
sizeof(struct snd_pcm_hw_params));
|
||||
|
||||
/* only allow hw_params() if no connected FEs are running */
|
||||
@ -2012,7 +2014,7 @@ int dpcm_be_dai_hw_params(struct snd_soc_pcm_runtime *fe, int stream)
|
||||
dev_dbg(be->dev, "ASoC: hw_params BE %s\n",
|
||||
be->dai_link->name);
|
||||
|
||||
ret = __soc_pcm_hw_params(be, be_substream, &dpcm->hw_params);
|
||||
ret = __soc_pcm_hw_params(be, be_substream, &hw_params);
|
||||
if (ret < 0)
|
||||
goto unwind;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user