mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
Merge branch 'topic/suspend' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-es8328
This commit is contained in:
commit
bade5f09ca
@ -587,7 +587,8 @@ struct snd_soc_dapm_context {
|
||||
enum snd_soc_bias_level suspend_bias_level;
|
||||
struct delayed_work delayed_work;
|
||||
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;
|
||||
void (*seq_notifier)(struct snd_soc_dapm_context *,
|
||||
enum snd_soc_dapm_type, int);
|
||||
|
||||
|
@ -690,6 +690,17 @@ struct snd_soc_compr_ops {
|
||||
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 *);
|
||||
|
||||
/* DT */
|
||||
int (*of_xlate_dai_name)(struct snd_soc_component *component,
|
||||
struct of_phandle_args *args,
|
||||
@ -697,6 +708,10 @@ struct snd_soc_component_driver {
|
||||
void (*seq_notifier)(struct snd_soc_component *, enum snd_soc_dapm_type,
|
||||
int subseq);
|
||||
int (*stream_event)(struct snd_soc_component *, int event);
|
||||
|
||||
/* probe ordering - for components with runtime dependencies */
|
||||
int probe_order;
|
||||
int remove_order;
|
||||
};
|
||||
|
||||
struct snd_soc_component {
|
||||
@ -710,6 +725,7 @@ struct snd_soc_component {
|
||||
|
||||
unsigned int ignore_pmdown_time:1; /* pmdown_time is ignored at stop */
|
||||
unsigned int registered_as_component:1;
|
||||
unsigned int probed:1;
|
||||
|
||||
struct list_head list;
|
||||
|
||||
@ -728,9 +744,36 @@ struct snd_soc_component {
|
||||
|
||||
struct mutex io_mutex;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_root;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 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;
|
||||
struct snd_soc_dapm_context *dapm_ptr;
|
||||
|
||||
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;
|
||||
bool steal_sibling_dai_widgets;
|
||||
struct snd_soc_codec *codec;
|
||||
|
||||
int (*probe)(struct snd_soc_component *);
|
||||
void (*remove)(struct snd_soc_component *);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
void (*init_debugfs)(struct snd_soc_component *component);
|
||||
const char *debugfs_prefix;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* SoC Audio Codec device */
|
||||
@ -746,11 +789,9 @@ struct snd_soc_codec {
|
||||
struct snd_ac97 *ac97; /* for ad-hoc ac97 devices */
|
||||
unsigned int cache_bypass:1; /* Suppress access to the cache */
|
||||
unsigned int suspended:1; /* Codec is in suspend PM state */
|
||||
unsigned int probed:1; /* Codec has been probed */
|
||||
unsigned int ac97_registered:1; /* Codec has been AC97 registered */
|
||||
unsigned int ac97_created:1; /* Codec has been created by SoC */
|
||||
unsigned int cache_init:1; /* codec cache has been initialized */
|
||||
u32 cache_only; /* Suppress writes to hardware */
|
||||
u32 cache_sync; /* Cache needs to be synced to hardware */
|
||||
|
||||
/* codec IO */
|
||||
@ -766,7 +807,6 @@ struct snd_soc_codec {
|
||||
struct snd_soc_dapm_context dapm;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_codec_root;
|
||||
struct dentry *debugfs_reg;
|
||||
#endif
|
||||
};
|
||||
@ -808,15 +848,12 @@ struct snd_soc_codec_driver {
|
||||
int (*set_bias_level)(struct snd_soc_codec *,
|
||||
enum snd_soc_bias_level level);
|
||||
bool idle_bias_off;
|
||||
bool suspend_bias_off;
|
||||
|
||||
void (*seq_notifier)(struct snd_soc_dapm_context *,
|
||||
enum snd_soc_dapm_type, int);
|
||||
|
||||
bool ignore_pmdown_time; /* Doesn't benefit from pmdown delay */
|
||||
|
||||
/* probe ordering - for components with runtime dependencies */
|
||||
int probe_order;
|
||||
int remove_order;
|
||||
};
|
||||
|
||||
/* SoC platform interface */
|
||||
@ -853,13 +890,6 @@ struct snd_soc_platform_driver {
|
||||
/* platform stream compress ops */
|
||||
const struct snd_compr_ops *compr_ops;
|
||||
|
||||
/* probe ordering - for components with runtime dependencies */
|
||||
int probe_order;
|
||||
int remove_order;
|
||||
|
||||
/* platform IO - used for platform DAPM */
|
||||
unsigned int (*read)(struct snd_soc_platform *, unsigned int);
|
||||
int (*write)(struct snd_soc_platform *, unsigned int, unsigned int);
|
||||
int (*bespoke_trigger)(struct snd_pcm_substream *, int);
|
||||
};
|
||||
|
||||
@ -874,15 +904,10 @@ struct snd_soc_platform {
|
||||
const struct snd_soc_platform_driver *driver;
|
||||
|
||||
unsigned int suspended:1; /* platform is suspended */
|
||||
unsigned int probed:1;
|
||||
|
||||
struct list_head list;
|
||||
|
||||
struct snd_soc_component component;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_platform_root;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct snd_soc_dai_link {
|
||||
@ -994,7 +1019,7 @@ struct snd_soc_aux_dev {
|
||||
const struct device_node *codec_of_node;
|
||||
|
||||
/* codec/machine specific init - e.g. add machine controls */
|
||||
int (*init)(struct snd_soc_dapm_context *dapm);
|
||||
int (*init)(struct snd_soc_component *component);
|
||||
};
|
||||
|
||||
/* SoC card */
|
||||
@ -1112,6 +1137,7 @@ struct snd_soc_pcm_runtime {
|
||||
struct snd_soc_platform *platform;
|
||||
struct snd_soc_dai *codec_dai;
|
||||
struct snd_soc_dai *cpu_dai;
|
||||
struct snd_soc_component *component; /* Only valid for AUX dev rtds */
|
||||
|
||||
struct snd_soc_dai **codec_dais;
|
||||
unsigned int num_codecs;
|
||||
@ -1260,9 +1286,6 @@ 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);
|
||||
|
||||
int snd_soc_component_init_io(struct snd_soc_component *component,
|
||||
struct regmap *regmap);
|
||||
|
||||
/* device driver data */
|
||||
|
||||
static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card,
|
||||
|
@ -1448,29 +1448,10 @@ static int adau1373_set_bias_level(struct snd_soc_codec *codec,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adau1373_remove(struct snd_soc_codec *codec)
|
||||
{
|
||||
adau1373_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adau1373_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct adau1373 *adau1373 = snd_soc_codec_get_drvdata(codec);
|
||||
int ret;
|
||||
|
||||
ret = adau1373_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
regcache_cache_only(adau1373->regmap, true);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int adau1373_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct adau1373 *adau1373 = snd_soc_codec_get_drvdata(codec);
|
||||
|
||||
regcache_cache_only(adau1373->regmap, false);
|
||||
adau1373_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
regcache_sync(adau1373->regmap);
|
||||
|
||||
return 0;
|
||||
@ -1501,8 +1482,6 @@ static const struct regmap_config adau1373_regmap_config = {
|
||||
|
||||
static struct snd_soc_codec_driver adau1373_codec_driver = {
|
||||
.probe = adau1373_probe,
|
||||
.remove = adau1373_remove,
|
||||
.suspend = adau1373_suspend,
|
||||
.resume = adau1373_resume,
|
||||
.set_bias_level = adau1373_set_bias_level,
|
||||
.idle_bias_off = true,
|
||||
|
@ -714,9 +714,9 @@ static int adau1761_codec_probe(struct snd_soc_codec *codec)
|
||||
|
||||
static const struct snd_soc_codec_driver adau1761_codec_driver = {
|
||||
.probe = adau1761_codec_probe,
|
||||
.suspend = adau17x1_suspend,
|
||||
.resume = adau17x1_resume,
|
||||
.set_bias_level = adau1761_set_bias_level,
|
||||
.suspend_bias_off = true,
|
||||
|
||||
.controls = adau1761_controls,
|
||||
.num_controls = ARRAY_SIZE(adau1761_controls),
|
||||
|
@ -446,9 +446,9 @@ static int adau1781_codec_probe(struct snd_soc_codec *codec)
|
||||
|
||||
static const struct snd_soc_codec_driver adau1781_codec_driver = {
|
||||
.probe = adau1781_codec_probe,
|
||||
.suspend = adau17x1_suspend,
|
||||
.resume = adau17x1_resume,
|
||||
.set_bias_level = adau1781_set_bias_level,
|
||||
.suspend_bias_off = true,
|
||||
|
||||
.controls = adau1781_controls,
|
||||
.num_controls = ARRAY_SIZE(adau1781_controls),
|
||||
|
@ -815,13 +815,6 @@ int adau17x1_add_routes(struct snd_soc_codec *codec)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(adau17x1_add_routes);
|
||||
|
||||
int adau17x1_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
codec->driver->set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(adau17x1_suspend);
|
||||
|
||||
int adau17x1_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
||||
@ -829,7 +822,6 @@ int adau17x1_resume(struct snd_soc_codec *codec)
|
||||
if (adau->switch_mode)
|
||||
adau->switch_mode(codec->dev);
|
||||
|
||||
codec->driver->set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
regcache_sync(adau->regmap);
|
||||
|
||||
return 0;
|
||||
|
@ -52,7 +52,6 @@ int adau17x1_set_micbias_voltage(struct snd_soc_codec *codec,
|
||||
enum adau17x1_micbias_voltage micbias);
|
||||
bool adau17x1_readable_register(struct device *dev, unsigned int reg);
|
||||
bool adau17x1_volatile_register(struct device *dev, unsigned int reg);
|
||||
int adau17x1_suspend(struct snd_soc_codec *codec);
|
||||
int adau17x1_resume(struct snd_soc_codec *codec);
|
||||
|
||||
extern const struct snd_soc_dai_ops adau17x1_dai_ops;
|
||||
|
@ -812,42 +812,23 @@ static int adav80x_probe(struct snd_soc_codec *codec)
|
||||
/* Disable DAC zero flag */
|
||||
regmap_write(adav80x->regmap, ADAV80X_DAC_CTRL3, 0x6);
|
||||
|
||||
return adav80x_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
}
|
||||
|
||||
static int adav80x_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct adav80x *adav80x = snd_soc_codec_get_drvdata(codec);
|
||||
int ret;
|
||||
|
||||
ret = adav80x_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
regcache_cache_only(adav80x->regmap, true);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adav80x_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct adav80x *adav80x = snd_soc_codec_get_drvdata(codec);
|
||||
|
||||
regcache_cache_only(adav80x->regmap, false);
|
||||
adav80x_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
regcache_sync(adav80x->regmap);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adav80x_remove(struct snd_soc_codec *codec)
|
||||
{
|
||||
return adav80x_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
}
|
||||
|
||||
static struct snd_soc_codec_driver adav80x_codec_driver = {
|
||||
.probe = adav80x_probe,
|
||||
.remove = adav80x_remove,
|
||||
.suspend = adav80x_suspend,
|
||||
.resume = adav80x_resume,
|
||||
.set_bias_level = adav80x_set_bias_level,
|
||||
.suspend_bias_off = true,
|
||||
|
||||
.set_pll = adav80x_set_pll,
|
||||
.set_sysclk = adav80x_set_sysclk,
|
||||
|
@ -1395,18 +1395,6 @@ static struct snd_soc_dai_driver lm49453_dai[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static int lm49453_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
lm49453_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lm49453_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
lm49453_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* power down chip */
|
||||
static int lm49453_remove(struct snd_soc_codec *codec)
|
||||
{
|
||||
@ -1416,8 +1404,6 @@ static int lm49453_remove(struct snd_soc_codec *codec)
|
||||
|
||||
static struct snd_soc_codec_driver soc_codec_dev_lm49453 = {
|
||||
.remove = lm49453_remove,
|
||||
.suspend = lm49453_suspend,
|
||||
.resume = lm49453_resume,
|
||||
.set_bias_level = lm49453_set_bias_level,
|
||||
.controls = lm49453_snd_controls,
|
||||
.num_controls = ARRAY_SIZE(lm49453_snd_controls),
|
||||
|
@ -646,17 +646,6 @@ static struct snd_soc_dai_driver ssm2518_dai = {
|
||||
.ops = &ssm2518_dai_ops,
|
||||
};
|
||||
|
||||
static int ssm2518_probe(struct snd_soc_codec *codec)
|
||||
{
|
||||
return ssm2518_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
}
|
||||
|
||||
static int ssm2518_remove(struct snd_soc_codec *codec)
|
||||
{
|
||||
ssm2518_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ssm2518_set_sysclk(struct snd_soc_codec *codec, int clk_id,
|
||||
int source, unsigned int freq, int dir)
|
||||
{
|
||||
@ -727,8 +716,6 @@ static int ssm2518_set_sysclk(struct snd_soc_codec *codec, int clk_id,
|
||||
}
|
||||
|
||||
static struct snd_soc_codec_driver ssm2518_codec_driver = {
|
||||
.probe = ssm2518_probe,
|
||||
.remove = ssm2518_remove,
|
||||
.set_bias_level = ssm2518_set_bias_level,
|
||||
.set_sysclk = ssm2518_set_sysclk,
|
||||
.idle_bias_off = true,
|
||||
|
@ -502,18 +502,11 @@ static struct snd_soc_dai_driver ssm2602_dai = {
|
||||
.symmetric_samplebits = 1,
|
||||
};
|
||||
|
||||
static int ssm2602_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
ssm2602_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ssm2602_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec);
|
||||
|
||||
regcache_sync(ssm2602->regmap);
|
||||
ssm2602_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -586,27 +579,14 @@ static int ssm260x_codec_probe(struct snd_soc_codec *codec)
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ssm2602_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* remove everything here */
|
||||
static int ssm2602_remove(struct snd_soc_codec *codec)
|
||||
{
|
||||
ssm2602_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct snd_soc_codec_driver soc_codec_dev_ssm2602 = {
|
||||
.probe = ssm260x_codec_probe,
|
||||
.remove = ssm2602_remove,
|
||||
.suspend = ssm2602_suspend,
|
||||
.resume = ssm2602_resume,
|
||||
.set_bias_level = ssm2602_set_bias_level,
|
||||
.suspend_bias_off = true,
|
||||
|
||||
.controls = ssm260x_snd_controls,
|
||||
.num_controls = ARRAY_SIZE(ssm260x_snd_controls),
|
||||
|
@ -1222,20 +1222,6 @@ static struct snd_soc_dai_driver aic3x_dai = {
|
||||
.symmetric_rates = 1,
|
||||
};
|
||||
|
||||
static int aic3x_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
aic3x_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int aic3x_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
aic3x_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void aic3x_mono_init(struct snd_soc_codec *codec)
|
||||
{
|
||||
/* DAC to Mono Line Out default volume and route to Output mixer */
|
||||
@ -1429,8 +1415,6 @@ static struct snd_soc_codec_driver soc_codec_dev_aic3x = {
|
||||
.idle_bias_off = true,
|
||||
.probe = aic3x_probe,
|
||||
.remove = aic3x_remove,
|
||||
.suspend = aic3x_suspend,
|
||||
.resume = aic3x_resume,
|
||||
.controls = aic3x_snd_controls,
|
||||
.num_controls = ARRAY_SIZE(aic3x_snd_controls),
|
||||
.dapm_widgets = aic3x_dapm_widgets,
|
||||
|
@ -518,23 +518,6 @@ static int wm8804_set_bias_level(struct snd_soc_codec *codec,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int wm8804_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
wm8804_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wm8804_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
wm8804_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define wm8804_suspend NULL
|
||||
#define wm8804_resume NULL
|
||||
#endif
|
||||
|
||||
static int wm8804_remove(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct wm8804_priv *wm8804;
|
||||
@ -671,8 +654,6 @@ static struct snd_soc_dai_driver wm8804_dai = {
|
||||
static struct snd_soc_codec_driver soc_codec_dev_wm8804 = {
|
||||
.probe = wm8804_probe,
|
||||
.remove = wm8804_remove,
|
||||
.suspend = wm8804_suspend,
|
||||
.resume = wm8804_resume,
|
||||
.set_bias_level = wm8804_set_bias_level,
|
||||
.idle_bias_off = true,
|
||||
|
||||
|
@ -1998,23 +1998,6 @@ static int wm8995_set_bias_level(struct snd_soc_codec *codec,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int wm8995_suspend(struct snd_soc_codec *codec)
|
||||
{
|
||||
wm8995_set_bias_level(codec, SND_SOC_BIAS_OFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wm8995_resume(struct snd_soc_codec *codec)
|
||||
{
|
||||
wm8995_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define wm8995_suspend NULL
|
||||
#define wm8995_resume NULL
|
||||
#endif
|
||||
|
||||
static int wm8995_remove(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct wm8995_priv *wm8995;
|
||||
@ -2220,8 +2203,6 @@ static struct snd_soc_dai_driver wm8995_dai[] = {
|
||||
static struct snd_soc_codec_driver soc_codec_dev_wm8995 = {
|
||||
.probe = wm8995_probe,
|
||||
.remove = wm8995_remove,
|
||||
.suspend = wm8995_suspend,
|
||||
.resume = wm8995_resume,
|
||||
.set_bias_level = wm8995_set_bias_level,
|
||||
.idle_bias_off = true,
|
||||
};
|
||||
|
@ -228,10 +228,12 @@ static struct snd_soc_dai_link speyside_dai[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static int speyside_wm9081_init(struct snd_soc_dapm_context *dapm)
|
||||
static int speyside_wm9081_init(struct snd_soc_component *component)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_soc_component_to_codec(component);
|
||||
|
||||
/* At any time the WM9081 is active it will have this clock */
|
||||
return snd_soc_codec_set_sysclk(dapm->codec, WM9081_SYSCLK_MCLK, 0,
|
||||
return snd_soc_codec_set_sysclk(codec, WM9081_SYSCLK_MCLK, 0,
|
||||
MCLK_AUDIO_RATE, 0);
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1683,6 +1683,22 @@ static void dapm_power_one_widget(struct snd_soc_dapm_widget *w,
|
||||
}
|
||||
}
|
||||
|
||||
static bool dapm_idle_bias_off(struct snd_soc_dapm_context *dapm)
|
||||
{
|
||||
if (dapm->idle_bias_off)
|
||||
return true;
|
||||
|
||||
switch (snd_power_get_state(dapm->card->snd_card)) {
|
||||
case SNDRV_CTL_POWER_D3hot:
|
||||
case SNDRV_CTL_POWER_D3cold:
|
||||
return dapm->suspend_bias_off;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scan each dapm widget for complete audio path.
|
||||
* A complete path is a route that has valid endpoints i.e.:-
|
||||
@ -1706,7 +1722,7 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event)
|
||||
trace_snd_soc_dapm_start(card);
|
||||
|
||||
list_for_each_entry(d, &card->dapm_list, list) {
|
||||
if (d->idle_bias_off)
|
||||
if (dapm_idle_bias_off(d))
|
||||
d->target_bias_level = SND_SOC_BIAS_OFF;
|
||||
else
|
||||
d->target_bias_level = SND_SOC_BIAS_STANDBY;
|
||||
@ -1772,7 +1788,7 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event)
|
||||
if (d->target_bias_level > bias)
|
||||
bias = d->target_bias_level;
|
||||
list_for_each_entry(d, &card->dapm_list, list)
|
||||
if (!d->idle_bias_off)
|
||||
if (!dapm_idle_bias_off(d))
|
||||
d->target_bias_level = bias;
|
||||
|
||||
trace_snd_soc_dapm_walk_done(card);
|
||||
|
@ -336,10 +336,12 @@ static const struct snd_pcm_ops dmaengine_pcm_ops = {
|
||||
};
|
||||
|
||||
static const struct snd_soc_platform_driver dmaengine_pcm_platform = {
|
||||
.component_driver = {
|
||||
.probe_order = SND_SOC_COMP_ORDER_LATE,
|
||||
},
|
||||
.ops = &dmaengine_pcm_ops,
|
||||
.pcm_new = dmaengine_pcm_new,
|
||||
.pcm_free = dmaengine_pcm_free,
|
||||
.probe_order = SND_SOC_COMP_ORDER_LATE,
|
||||
};
|
||||
|
||||
static const char * const dmaengine_pcm_dma_channel_names[] = {
|
||||
|
@ -271,31 +271,3 @@ int snd_soc_platform_write(struct snd_soc_platform *platform,
|
||||
return snd_soc_component_write(&platform->component, reg, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_platform_write);
|
||||
|
||||
/**
|
||||
* snd_soc_component_init_io() - Initialize regmap IO
|
||||
*
|
||||
* @component: component to initialize
|
||||
* @regmap: regmap instance to use for IO operations
|
||||
*
|
||||
* Return: 0 on success, a negative error code otherwise
|
||||
*/
|
||||
int snd_soc_component_init_io(struct snd_soc_component *component,
|
||||
struct regmap *regmap)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!regmap)
|
||||
return -EINVAL;
|
||||
|
||||
ret = regmap_get_val_bytes(regmap);
|
||||
/* Errors are legitimate for non-integer byte
|
||||
* multiples */
|
||||
if (ret > 0)
|
||||
component->val_bytes = ret;
|
||||
|
||||
component->regmap = regmap;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_component_init_io);
|
||||
|
Loading…
Reference in New Issue
Block a user