Merge remote-tracking branch 'asoc/topic/w-codec' into asoc-next
This commit is contained in:
Коммит
e1e62305af
|
@ -37,6 +37,9 @@ struct rt5677_platform_data {
|
||||||
OFF, GPIO4, GPIO5 and GPIO6 respectively */
|
OFF, GPIO4, GPIO5 and GPIO6 respectively */
|
||||||
unsigned int jd2_gpio;
|
unsigned int jd2_gpio;
|
||||||
unsigned int jd3_gpio;
|
unsigned int jd3_gpio;
|
||||||
|
|
||||||
|
/* Set MICBIAS1 VDD 1v8 or 3v3 */
|
||||||
|
bool micbias1_vdd_3v3;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -525,7 +525,6 @@ struct snd_soc_dapm_widget {
|
||||||
enum snd_soc_dapm_type id;
|
enum snd_soc_dapm_type id;
|
||||||
const char *name; /* widget name */
|
const char *name; /* widget name */
|
||||||
const char *sname; /* stream name */
|
const char *sname; /* stream name */
|
||||||
struct snd_soc_codec *codec;
|
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
struct snd_soc_dapm_context *dapm;
|
struct snd_soc_dapm_context *dapm;
|
||||||
|
|
||||||
|
|
|
@ -386,7 +386,7 @@ static int snd_soc_put_volsw_2r_out(struct snd_kcontrol *kcontrol,
|
||||||
static int pm860x_rsync_event(struct snd_soc_dapm_widget *w,
|
static int pm860x_rsync_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In order to avoid current on the load, mute power-on and power-off
|
* In order to avoid current on the load, mute power-on and power-off
|
||||||
|
@ -403,7 +403,7 @@ static int pm860x_rsync_event(struct snd_soc_dapm_widget *w,
|
||||||
static int pm860x_dac_event(struct snd_soc_dapm_widget *w,
|
static int pm860x_dac_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
unsigned int dac = 0;
|
unsigned int dac = 0;
|
||||||
int data;
|
int data;
|
||||||
|
|
||||||
|
|
|
@ -163,7 +163,7 @@ static const struct snd_kcontrol_new ak4671_snd_controls[] = {
|
||||||
static int ak4671_out2_event(struct snd_soc_dapm_widget *w,
|
static int ak4671_out2_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
|
|
@ -55,18 +55,20 @@ static inline int alc5623_reset(struct snd_soc_codec *codec)
|
||||||
static int amp_mixer_event(struct snd_soc_dapm_widget *w,
|
static int amp_mixer_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
/* to power-on/off class-d amp generators/speaker */
|
/* to power-on/off class-d amp generators/speaker */
|
||||||
/* need to write to 'index-46h' register : */
|
/* need to write to 'index-46h' register : */
|
||||||
/* so write index num (here 0x46) to reg 0x6a */
|
/* so write index num (here 0x46) to reg 0x6a */
|
||||||
/* and then 0xffff/0 to reg 0x6c */
|
/* and then 0xffff/0 to reg 0x6c */
|
||||||
snd_soc_write(w->codec, ALC5623_HID_CTRL_INDEX, 0x46);
|
snd_soc_write(codec, ALC5623_HID_CTRL_INDEX, 0x46);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
snd_soc_write(w->codec, ALC5623_HID_CTRL_DATA, 0xFFFF);
|
snd_soc_write(codec, ALC5623_HID_CTRL_DATA, 0xFFFF);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
snd_soc_write(w->codec, ALC5623_HID_CTRL_DATA, 0);
|
snd_soc_write(codec, ALC5623_HID_CTRL_DATA, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,18 +116,20 @@ static inline int alc5632_reset(struct regmap *map)
|
||||||
static int amp_mixer_event(struct snd_soc_dapm_widget *w,
|
static int amp_mixer_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
/* to power-on/off class-d amp generators/speaker */
|
/* to power-on/off class-d amp generators/speaker */
|
||||||
/* need to write to 'index-46h' register : */
|
/* need to write to 'index-46h' register : */
|
||||||
/* so write index num (here 0x46) to reg 0x6a */
|
/* so write index num (here 0x46) to reg 0x6a */
|
||||||
/* and then 0xffff/0 to reg 0x6c */
|
/* and then 0xffff/0 to reg 0x6c */
|
||||||
snd_soc_write(w->codec, ALC5632_HID_CTRL_INDEX, 0x46);
|
snd_soc_write(codec, ALC5632_HID_CTRL_INDEX, 0x46);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
snd_soc_write(w->codec, ALC5632_HID_CTRL_DATA, 0xFFFF);
|
snd_soc_write(codec, ALC5632_HID_CTRL_DATA, 0xFFFF);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
snd_soc_write(w->codec, ALC5632_HID_CTRL_DATA, 0);
|
snd_soc_write(codec, ALC5632_HID_CTRL_DATA, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ static int arizona_spk_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol,
|
struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||||
struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
|
struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
|
||||||
bool manual_ena = false;
|
bool manual_ena = false;
|
||||||
|
@ -692,7 +692,8 @@ static void arizona_in_set_vu(struct snd_soc_codec *codec, int ena)
|
||||||
int arizona_in_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol,
|
int arizona_in_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
struct arizona_priv *priv = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
||||||
if (w->shift % 2)
|
if (w->shift % 2)
|
||||||
|
@ -705,25 +706,25 @@ int arizona_in_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol,
|
||||||
priv->in_pending++;
|
priv->in_pending++;
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
snd_soc_update_bits(w->codec, reg, ARIZONA_IN1L_MUTE, 0);
|
snd_soc_update_bits(codec, reg, ARIZONA_IN1L_MUTE, 0);
|
||||||
|
|
||||||
/* If this is the last input pending then allow VU */
|
/* If this is the last input pending then allow VU */
|
||||||
priv->in_pending--;
|
priv->in_pending--;
|
||||||
if (priv->in_pending == 0) {
|
if (priv->in_pending == 0) {
|
||||||
msleep(1);
|
msleep(1);
|
||||||
arizona_in_set_vu(w->codec, 1);
|
arizona_in_set_vu(codec, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_PRE_PMD:
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
snd_soc_update_bits(w->codec, reg,
|
snd_soc_update_bits(codec, reg,
|
||||||
ARIZONA_IN1L_MUTE | ARIZONA_IN_VU,
|
ARIZONA_IN1L_MUTE | ARIZONA_IN_VU,
|
||||||
ARIZONA_IN1L_MUTE | ARIZONA_IN_VU);
|
ARIZONA_IN1L_MUTE | ARIZONA_IN_VU);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
/* Disable volume updates if no inputs are enabled */
|
/* Disable volume updates if no inputs are enabled */
|
||||||
reg = snd_soc_read(w->codec, ARIZONA_INPUT_ENABLES);
|
reg = snd_soc_read(codec, ARIZONA_INPUT_ENABLES);
|
||||||
if (reg == 0)
|
if (reg == 0)
|
||||||
arizona_in_set_vu(w->codec, 0);
|
arizona_in_set_vu(codec, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -734,7 +735,25 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol,
|
struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
switch (w->shift) {
|
||||||
|
case ARIZONA_OUT1L_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT1R_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT2L_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT2R_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT3L_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT3R_ENA_SHIFT:
|
||||||
|
priv->out_up_pending++;
|
||||||
|
priv->out_up_delay += 17;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
switch (w->shift) {
|
switch (w->shift) {
|
||||||
case ARIZONA_OUT1L_ENA_SHIFT:
|
case ARIZONA_OUT1L_ENA_SHIFT:
|
||||||
|
@ -743,13 +762,50 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
|
||||||
case ARIZONA_OUT2R_ENA_SHIFT:
|
case ARIZONA_OUT2R_ENA_SHIFT:
|
||||||
case ARIZONA_OUT3L_ENA_SHIFT:
|
case ARIZONA_OUT3L_ENA_SHIFT:
|
||||||
case ARIZONA_OUT3R_ENA_SHIFT:
|
case ARIZONA_OUT3R_ENA_SHIFT:
|
||||||
msleep(17);
|
priv->out_up_pending--;
|
||||||
|
if (!priv->out_up_pending) {
|
||||||
|
msleep(priv->out_up_delay);
|
||||||
|
priv->out_up_delay = 0;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
|
switch (w->shift) {
|
||||||
|
case ARIZONA_OUT1L_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT1R_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT2L_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT2R_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT3L_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT3R_ENA_SHIFT:
|
||||||
|
priv->out_down_pending++;
|
||||||
|
priv->out_down_delay++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
|
switch (w->shift) {
|
||||||
|
case ARIZONA_OUT1L_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT1R_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT2L_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT2R_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT3L_ENA_SHIFT:
|
||||||
|
case ARIZONA_OUT3R_ENA_SHIFT:
|
||||||
|
priv->out_down_pending--;
|
||||||
|
if (!priv->out_down_pending) {
|
||||||
|
msleep(priv->out_down_delay);
|
||||||
|
priv->out_down_delay = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -760,7 +816,8 @@ int arizona_hp_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol,
|
struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
struct arizona_priv *priv = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
|
||||||
struct arizona *arizona = priv->arizona;
|
struct arizona *arizona = priv->arizona;
|
||||||
unsigned int mask = 1 << w->shift;
|
unsigned int mask = 1 << w->shift;
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
@ -772,6 +829,9 @@ int arizona_hp_ev(struct snd_soc_dapm_widget *w,
|
||||||
case SND_SOC_DAPM_PRE_PMD:
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
val = 0;
|
val = 0;
|
||||||
break;
|
break;
|
||||||
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
|
return arizona_out_ev(w, kcontrol, event);
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,6 +77,11 @@ struct arizona_priv {
|
||||||
int num_inputs;
|
int num_inputs;
|
||||||
unsigned int in_pending;
|
unsigned int in_pending;
|
||||||
|
|
||||||
|
unsigned int out_up_pending;
|
||||||
|
unsigned int out_up_delay;
|
||||||
|
unsigned int out_down_pending;
|
||||||
|
unsigned int out_down_delay;
|
||||||
|
|
||||||
unsigned int spk_ena:2;
|
unsigned int spk_ena:2;
|
||||||
unsigned int spk_ena_pending:1;
|
unsigned int spk_ena_pending:1;
|
||||||
};
|
};
|
||||||
|
|
|
@ -609,7 +609,7 @@ static const struct snd_kcontrol_new da732x_snd_controls[] = {
|
||||||
static int da732x_adc_event(struct snd_soc_dapm_widget *w,
|
static int da732x_adc_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -663,7 +663,7 @@ static int da732x_adc_event(struct snd_soc_dapm_widget *w,
|
||||||
static int da732x_out_pga_event(struct snd_soc_dapm_widget *w,
|
static int da732x_out_pga_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
|
|
@ -32,7 +32,7 @@ static int pcm3008_dac_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol,
|
struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct pcm3008_setup_data *setup = codec->dev->platform_data;
|
struct pcm3008_setup_data *setup = codec->dev->platform_data;
|
||||||
|
|
||||||
gpio_set_value_cansleep(setup->pdda_pin,
|
gpio_set_value_cansleep(setup->pdda_pin,
|
||||||
|
@ -45,7 +45,7 @@ static int pcm3008_adc_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol,
|
struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct pcm3008_setup_data *setup = codec->dev->platform_data;
|
struct pcm3008_setup_data *setup = codec->dev->platform_data;
|
||||||
|
|
||||||
gpio_set_value_cansleep(setup->pdad_pin,
|
gpio_set_value_cansleep(setup->pdad_pin,
|
||||||
|
|
|
@ -405,7 +405,8 @@ EXPORT_SYMBOL_GPL(rt286_mic_detect);
|
||||||
static int is_mclk_mode(struct snd_soc_dapm_widget *source,
|
static int is_mclk_mode(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
struct rt286_priv *rt286 = snd_soc_codec_get_drvdata(source->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
|
struct rt286_priv *rt286 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
if (rt286->clk_id == RT286_SCLK_S_MCLK)
|
if (rt286->clk_id == RT286_SCLK_S_MCLK)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -504,7 +505,7 @@ SOC_DAPM_ENUM("SPO source", rt286_spo_enum);
|
||||||
static int rt286_spk_event(struct snd_soc_dapm_widget *w,
|
static int rt286_spk_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -526,7 +527,7 @@ static int rt286_spk_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt286_set_dmic1_event(struct snd_soc_dapm_widget *w,
|
static int rt286_set_dmic1_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -545,7 +546,7 @@ static int rt286_set_dmic1_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt286_vref_event(struct snd_soc_dapm_widget *w,
|
static int rt286_vref_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
@ -563,7 +564,7 @@ static int rt286_vref_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt286_ldo2_event(struct snd_soc_dapm_widget *w,
|
static int rt286_ldo2_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -582,7 +583,7 @@ static int rt286_ldo2_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt286_mic1_event(struct snd_soc_dapm_widget *w,
|
static int rt286_mic1_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
|
|
@ -287,70 +287,78 @@ static const struct snd_kcontrol_new rt5631_snd_controls[] = {
|
||||||
static int check_sysclk1_source(struct snd_soc_dapm_widget *source,
|
static int check_sysclk1_source(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
||||||
reg = snd_soc_read(source->codec, RT5631_GLOBAL_CLK_CTRL);
|
reg = snd_soc_read(codec, RT5631_GLOBAL_CLK_CTRL);
|
||||||
return reg & RT5631_SYSCLK_SOUR_SEL_PLL;
|
return reg & RT5631_SYSCLK_SOUR_SEL_PLL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_dmic_used(struct snd_soc_dapm_widget *source,
|
static int check_dmic_used(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(source->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
|
struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
|
||||||
return rt5631->dmic_used_flag;
|
return rt5631->dmic_used_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_dacl_to_outmixl(struct snd_soc_dapm_widget *source,
|
static int check_dacl_to_outmixl(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
||||||
reg = snd_soc_read(source->codec, RT5631_OUTMIXER_L_CTRL);
|
reg = snd_soc_read(codec, RT5631_OUTMIXER_L_CTRL);
|
||||||
return !(reg & RT5631_M_DAC_L_TO_OUTMIXER_L);
|
return !(reg & RT5631_M_DAC_L_TO_OUTMIXER_L);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_dacr_to_outmixr(struct snd_soc_dapm_widget *source,
|
static int check_dacr_to_outmixr(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
||||||
reg = snd_soc_read(source->codec, RT5631_OUTMIXER_R_CTRL);
|
reg = snd_soc_read(codec, RT5631_OUTMIXER_R_CTRL);
|
||||||
return !(reg & RT5631_M_DAC_R_TO_OUTMIXER_R);
|
return !(reg & RT5631_M_DAC_R_TO_OUTMIXER_R);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_dacl_to_spkmixl(struct snd_soc_dapm_widget *source,
|
static int check_dacl_to_spkmixl(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
||||||
reg = snd_soc_read(source->codec, RT5631_SPK_MIXER_CTRL);
|
reg = snd_soc_read(codec, RT5631_SPK_MIXER_CTRL);
|
||||||
return !(reg & RT5631_M_DAC_L_TO_SPKMIXER_L);
|
return !(reg & RT5631_M_DAC_L_TO_SPKMIXER_L);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_dacr_to_spkmixr(struct snd_soc_dapm_widget *source,
|
static int check_dacr_to_spkmixr(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
||||||
reg = snd_soc_read(source->codec, RT5631_SPK_MIXER_CTRL);
|
reg = snd_soc_read(codec, RT5631_SPK_MIXER_CTRL);
|
||||||
return !(reg & RT5631_M_DAC_R_TO_SPKMIXER_R);
|
return !(reg & RT5631_M_DAC_R_TO_SPKMIXER_R);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_adcl_select(struct snd_soc_dapm_widget *source,
|
static int check_adcl_select(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
||||||
reg = snd_soc_read(source->codec, RT5631_ADC_REC_MIXER);
|
reg = snd_soc_read(codec, RT5631_ADC_REC_MIXER);
|
||||||
return !(reg & RT5631_M_MIC1_TO_RECMIXER_L);
|
return !(reg & RT5631_M_MIC1_TO_RECMIXER_L);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_adcr_select(struct snd_soc_dapm_widget *source,
|
static int check_adcr_select(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
||||||
reg = snd_soc_read(source->codec, RT5631_ADC_REC_MIXER);
|
reg = snd_soc_read(codec, RT5631_ADC_REC_MIXER);
|
||||||
return !(reg & RT5631_M_MIC2_TO_RECMIXER_R);
|
return !(reg & RT5631_M_MIC2_TO_RECMIXER_R);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,7 +564,7 @@ static void depop_seq_mute_stage(struct snd_soc_codec *codec, int enable)
|
||||||
static int hp_event(struct snd_soc_dapm_widget *w,
|
static int hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
|
struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -590,7 +598,7 @@ static int hp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int set_dmic_params(struct snd_soc_dapm_widget *w,
|
static int set_dmic_params(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
|
struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (rt5631->rx_rate) {
|
switch (rt5631->rx_rate) {
|
||||||
|
|
|
@ -458,7 +458,7 @@ static const struct snd_kcontrol_new rt5640_specific_snd_controls[] = {
|
||||||
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
|
struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
|
||||||
int idx = -EINVAL;
|
int idx = -EINVAL;
|
||||||
|
|
||||||
|
@ -475,9 +475,10 @@ static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
val = snd_soc_read(source->codec, RT5640_GLB_CLK);
|
val = snd_soc_read(codec, RT5640_GLB_CLK);
|
||||||
val &= RT5640_SCLK_SRC_MASK;
|
val &= RT5640_SCLK_SRC_MASK;
|
||||||
if (val == RT5640_SCLK_SRC_PLL1)
|
if (val == RT5640_SCLK_SRC_PLL1)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -963,7 +964,7 @@ static void rt5640_pmu_depop(struct snd_soc_codec *codec)
|
||||||
static int rt5640_hp_event(struct snd_soc_dapm_widget *w,
|
static int rt5640_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
|
struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -987,7 +988,7 @@ static int rt5640_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5640_hp_power_event(struct snd_soc_dapm_widget *w,
|
static int rt5640_hp_power_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -1003,7 +1004,7 @@ static int rt5640_hp_power_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5640_hp_post_event(struct snd_soc_dapm_widget *w,
|
static int rt5640_hp_post_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
|
struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
|
|
@ -527,7 +527,7 @@ static const struct snd_kcontrol_new rt5645_snd_controls[] = {
|
||||||
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5645_priv *rt5645 = snd_soc_codec_get_drvdata(codec);
|
struct rt5645_priv *rt5645 = snd_soc_codec_get_drvdata(codec);
|
||||||
int idx = -EINVAL;
|
int idx = -EINVAL;
|
||||||
|
|
||||||
|
@ -544,9 +544,10 @@ static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
val = snd_soc_read(source->codec, RT5645_GLB_CLK);
|
val = snd_soc_read(codec, RT5645_GLB_CLK);
|
||||||
val &= RT5645_SCLK_SRC_MASK;
|
val &= RT5645_SCLK_SRC_MASK;
|
||||||
if (val == RT5645_SCLK_SRC_PLL1)
|
if (val == RT5645_SCLK_SRC_PLL1)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -557,6 +558,7 @@ static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
||||||
static int is_using_asrc(struct snd_soc_dapm_widget *source,
|
static int is_using_asrc(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg, shift, val;
|
unsigned int reg, shift, val;
|
||||||
|
|
||||||
switch (source->shift) {
|
switch (source->shift) {
|
||||||
|
@ -588,7 +590,7 @@ static int is_using_asrc(struct snd_soc_dapm_widget *source,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
val = (snd_soc_read(source->codec, reg) >> shift) & 0xf;
|
val = (snd_soc_read(codec, reg) >> shift) & 0xf;
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 1:
|
case 1:
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -1144,7 +1146,7 @@ static void hp_amp_power(struct snd_soc_codec *codec, int on)
|
||||||
static int rt5645_hp_event(struct snd_soc_dapm_widget *w,
|
static int rt5645_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5645_priv *rt5645 = snd_soc_codec_get_drvdata(codec);
|
struct rt5645_priv *rt5645 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -1205,7 +1207,7 @@ static int rt5645_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5645_spk_event(struct snd_soc_dapm_widget *w,
|
static int rt5645_spk_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -1232,7 +1234,7 @@ static int rt5645_spk_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5645_lout_event(struct snd_soc_dapm_widget *w,
|
static int rt5645_lout_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -1262,7 +1264,7 @@ static int rt5645_lout_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5645_bst2_event(struct snd_soc_dapm_widget *w,
|
static int rt5645_bst2_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
|
|
@ -376,7 +376,7 @@ static const struct snd_kcontrol_new rt5651_snd_controls[] = {
|
||||||
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5651_priv *rt5651 = snd_soc_codec_get_drvdata(codec);
|
struct rt5651_priv *rt5651 = snd_soc_codec_get_drvdata(codec);
|
||||||
int idx = -EINVAL;
|
int idx = -EINVAL;
|
||||||
|
|
||||||
|
@ -394,9 +394,10 @@ static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
static int is_sysclk_from_pll(struct snd_soc_dapm_widget *source,
|
static int is_sysclk_from_pll(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
val = snd_soc_read(source->codec, RT5651_GLB_CLK);
|
val = snd_soc_read(codec, RT5651_GLB_CLK);
|
||||||
val &= RT5651_SCLK_SRC_MASK;
|
val &= RT5651_SCLK_SRC_MASK;
|
||||||
if (val == RT5651_SCLK_SRC_PLL1)
|
if (val == RT5651_SCLK_SRC_PLL1)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -731,7 +732,7 @@ static const struct snd_kcontrol_new rt5651_pdm_r_mux =
|
||||||
static int rt5651_amp_power_event(struct snd_soc_dapm_widget *w,
|
static int rt5651_amp_power_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5651_priv *rt5651 = snd_soc_codec_get_drvdata(codec);
|
struct rt5651_priv *rt5651 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -769,7 +770,7 @@ static int rt5651_amp_power_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5651_hp_event(struct snd_soc_dapm_widget *w,
|
static int rt5651_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5651_priv *rt5651 = snd_soc_codec_get_drvdata(codec);
|
struct rt5651_priv *rt5651 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -813,7 +814,8 @@ static int rt5651_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5651_hp_post_event(struct snd_soc_dapm_widget *w,
|
static int rt5651_hp_post_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5651_priv *rt5651 = snd_soc_codec_get_drvdata(codec);
|
struct rt5651_priv *rt5651 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -833,7 +835,7 @@ static int rt5651_hp_post_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5651_bst1_event(struct snd_soc_dapm_widget *w,
|
static int rt5651_bst1_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -856,7 +858,7 @@ static int rt5651_bst1_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5651_bst2_event(struct snd_soc_dapm_widget *w,
|
static int rt5651_bst2_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -879,7 +881,7 @@ static int rt5651_bst2_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5651_bst3_event(struct snd_soc_dapm_widget *w,
|
static int rt5651_bst3_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
|
|
@ -500,7 +500,7 @@ static const struct snd_kcontrol_new rt5670_snd_controls[] = {
|
||||||
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec);
|
struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec);
|
||||||
int idx = -EINVAL;
|
int idx = -EINVAL;
|
||||||
|
|
||||||
|
@ -517,9 +517,10 @@ static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
val = snd_soc_read(source->codec, RT5670_GLB_CLK);
|
val = snd_soc_read(codec, RT5670_GLB_CLK);
|
||||||
val &= RT5670_SCLK_SRC_MASK;
|
val &= RT5670_SCLK_SRC_MASK;
|
||||||
if (val == RT5670_SCLK_SRC_PLL1)
|
if (val == RT5670_SCLK_SRC_PLL1)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -530,6 +531,7 @@ static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
||||||
static int is_using_asrc(struct snd_soc_dapm_widget *source,
|
static int is_using_asrc(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg, shift, val;
|
unsigned int reg, shift, val;
|
||||||
|
|
||||||
switch (source->shift) {
|
switch (source->shift) {
|
||||||
|
@ -565,7 +567,7 @@ static int is_using_asrc(struct snd_soc_dapm_widget *source,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
val = (snd_soc_read(source->codec, reg) >> shift) & 0xf;
|
val = (snd_soc_read(codec, reg) >> shift) & 0xf;
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 1:
|
case 1:
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -1148,7 +1150,7 @@ static const struct snd_kcontrol_new rt5670_vad_adc_mux =
|
||||||
static int rt5670_hp_power_event(struct snd_soc_dapm_widget *w,
|
static int rt5670_hp_power_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec);
|
struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -1184,7 +1186,7 @@ static int rt5670_hp_power_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5670_hp_event(struct snd_soc_dapm_widget *w,
|
static int rt5670_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec);
|
struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -1234,7 +1236,7 @@ static int rt5670_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5670_bst1_event(struct snd_soc_dapm_widget *w,
|
static int rt5670_bst1_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
@ -1257,7 +1259,7 @@ static int rt5670_bst1_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5670_bst2_event(struct snd_soc_dapm_widget *w,
|
static int rt5670_bst2_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
|
|
@ -896,7 +896,7 @@ static const struct snd_kcontrol_new rt5677_snd_controls[] = {
|
||||||
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
int idx = rl6231_calc_dmic_clk(rt5677->sysclk);
|
int idx = rl6231_calc_dmic_clk(rt5677->sysclk);
|
||||||
|
|
||||||
|
@ -911,7 +911,8 @@ static int set_dmic_clk(struct snd_soc_dapm_widget *w,
|
||||||
static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(source->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
regmap_read(rt5677->regmap, RT5677_GLB_CLK1, &val);
|
regmap_read(rt5677->regmap, RT5677_GLB_CLK1, &val);
|
||||||
|
@ -925,6 +926,8 @@ static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
|
||||||
static int is_using_asrc(struct snd_soc_dapm_widget *source,
|
static int is_using_asrc(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
unsigned int reg, shift, val;
|
unsigned int reg, shift, val;
|
||||||
|
|
||||||
if (source->reg == RT5677_ASRC_1) {
|
if (source->reg == RT5677_ASRC_1) {
|
||||||
|
@ -991,7 +994,9 @@ static int is_using_asrc(struct snd_soc_dapm_widget *source,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val = (snd_soc_read(source->codec, reg) >> shift) & 0xf;
|
regmap_read(rt5677->regmap, reg, &val);
|
||||||
|
val = (val >> shift) & 0xf;
|
||||||
|
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 1 ... 6:
|
case 1 ... 6:
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -2122,7 +2127,7 @@ static const struct snd_kcontrol_new rt5677_if2_dac7_tdm_sel_mux =
|
||||||
static int rt5677_bst1_event(struct snd_soc_dapm_widget *w,
|
static int rt5677_bst1_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -2146,7 +2151,7 @@ static int rt5677_bst1_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5677_bst2_event(struct snd_soc_dapm_widget *w,
|
static int rt5677_bst2_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -2170,7 +2175,7 @@ static int rt5677_bst2_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5677_set_pll1_event(struct snd_soc_dapm_widget *w,
|
static int rt5677_set_pll1_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -2192,7 +2197,7 @@ static int rt5677_set_pll1_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5677_set_pll2_event(struct snd_soc_dapm_widget *w,
|
static int rt5677_set_pll2_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -2214,7 +2219,7 @@ static int rt5677_set_pll2_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5677_set_micbias1_event(struct snd_soc_dapm_widget *w,
|
static int rt5677_set_micbias1_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -2241,7 +2246,7 @@ static int rt5677_set_micbias1_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5677_if1_adc_tdm_event(struct snd_soc_dapm_widget *w,
|
static int rt5677_if1_adc_tdm_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
unsigned int value;
|
unsigned int value;
|
||||||
|
|
||||||
|
@ -2264,7 +2269,7 @@ static int rt5677_if1_adc_tdm_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5677_if2_adc_tdm_event(struct snd_soc_dapm_widget *w,
|
static int rt5677_if2_adc_tdm_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
unsigned int value;
|
unsigned int value;
|
||||||
|
|
||||||
|
@ -2287,7 +2292,7 @@ static int rt5677_if2_adc_tdm_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rt5677_vref_event(struct snd_soc_dapm_widget *w,
|
static int rt5677_vref_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -4098,7 +4103,8 @@ static int rt5677_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
|
||||||
unsigned int rx_mask, int slots, int slot_width)
|
unsigned int rx_mask, int slots, int slot_width)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = dai->codec;
|
struct snd_soc_codec *codec = dai->codec;
|
||||||
unsigned int val = 0;
|
struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
unsigned int val = 0, slot_width_25 = 0;
|
||||||
|
|
||||||
if (rx_mask || tx_mask)
|
if (rx_mask || tx_mask)
|
||||||
val |= (1 << 12);
|
val |= (1 << 12);
|
||||||
|
@ -4122,6 +4128,8 @@ static int rt5677_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
|
||||||
case 20:
|
case 20:
|
||||||
val |= (1 << 8);
|
val |= (1 << 8);
|
||||||
break;
|
break;
|
||||||
|
case 25:
|
||||||
|
slot_width_25 = 0x8080;
|
||||||
case 24:
|
case 24:
|
||||||
val |= (2 << 8);
|
val |= (2 << 8);
|
||||||
break;
|
break;
|
||||||
|
@ -4135,10 +4143,16 @@ static int rt5677_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
|
||||||
|
|
||||||
switch (dai->id) {
|
switch (dai->id) {
|
||||||
case RT5677_AIF1:
|
case RT5677_AIF1:
|
||||||
snd_soc_update_bits(codec, RT5677_TDM1_CTRL1, 0x1f00, val);
|
regmap_update_bits(rt5677->regmap, RT5677_TDM1_CTRL1, 0x1f00,
|
||||||
|
val);
|
||||||
|
regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x8000,
|
||||||
|
slot_width_25);
|
||||||
break;
|
break;
|
||||||
case RT5677_AIF2:
|
case RT5677_AIF2:
|
||||||
snd_soc_update_bits(codec, RT5677_TDM2_CTRL1, 0x1f00, val);
|
regmap_update_bits(rt5677->regmap, RT5677_TDM2_CTRL1, 0x1f00,
|
||||||
|
val);
|
||||||
|
regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x80,
|
||||||
|
slot_width_25);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -4923,6 +4937,11 @@ static int rt5677_i2c_probe(struct i2c_client *i2c,
|
||||||
RT5677_GPIO5_DIR_OUT);
|
RT5677_GPIO5_DIR_OUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rt5677->pdata.micbias1_vdd_3v3)
|
||||||
|
regmap_update_bits(rt5677->regmap, RT5677_MICBIAS,
|
||||||
|
RT5677_MICBIAS1_CTRL_VDD_MASK,
|
||||||
|
RT5677_MICBIAS1_CTRL_VDD_3_3V);
|
||||||
|
|
||||||
rt5677_init_gpio(i2c);
|
rt5677_init_gpio(i2c);
|
||||||
rt5677_init_irq(i2c);
|
rt5677_init_irq(i2c);
|
||||||
|
|
||||||
|
|
|
@ -155,18 +155,19 @@ struct sgtl5000_priv {
|
||||||
static int mic_bias_event(struct snd_soc_dapm_widget *w,
|
static int mic_bias_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
/* change mic bias resistor */
|
/* change mic bias resistor */
|
||||||
snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL,
|
snd_soc_update_bits(codec, SGTL5000_CHIP_MIC_CTRL,
|
||||||
SGTL5000_BIAS_R_MASK,
|
SGTL5000_BIAS_R_MASK,
|
||||||
sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT);
|
sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SND_SOC_DAPM_PRE_PMD:
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL,
|
snd_soc_update_bits(codec, SGTL5000_CHIP_MIC_CTRL,
|
||||||
SGTL5000_BIAS_R_MASK, 0);
|
SGTL5000_BIAS_R_MASK, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -181,11 +182,12 @@ static int mic_bias_event(struct snd_soc_dapm_widget *w,
|
||||||
static int power_vag_event(struct snd_soc_dapm_widget *w,
|
static int power_vag_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
const u32 mask = SGTL5000_DAC_POWERUP | SGTL5000_ADC_POWERUP;
|
const u32 mask = SGTL5000_DAC_POWERUP | SGTL5000_ADC_POWERUP;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
|
snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
|
||||||
SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP);
|
SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -195,9 +197,9 @@ static int power_vag_event(struct snd_soc_dapm_widget *w,
|
||||||
* operational to prevent inadvertently starving the
|
* operational to prevent inadvertently starving the
|
||||||
* other one of them.
|
* other one of them.
|
||||||
*/
|
*/
|
||||||
if ((snd_soc_read(w->codec, SGTL5000_CHIP_ANA_POWER) &
|
if ((snd_soc_read(codec, SGTL5000_CHIP_ANA_POWER) &
|
||||||
mask) != mask) {
|
mask) != mask) {
|
||||||
snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
|
snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
|
||||||
SGTL5000_VAG_POWERUP, 0);
|
SGTL5000_VAG_POWERUP, 0);
|
||||||
msleep(400);
|
msleep(400);
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,16 +233,18 @@ static int sn95031_set_vaud_bias(struct snd_soc_codec *codec,
|
||||||
static int sn95031_vhs_event(struct snd_soc_dapm_widget *w,
|
static int sn95031_vhs_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
||||||
pr_debug("VHS SND_SOC_DAPM_EVENT_ON doing rail startup now\n");
|
pr_debug("VHS SND_SOC_DAPM_EVENT_ON doing rail startup now\n");
|
||||||
/* power up the rail */
|
/* power up the rail */
|
||||||
snd_soc_write(w->codec, SN95031_VHSP, 0x3D);
|
snd_soc_write(codec, SN95031_VHSP, 0x3D);
|
||||||
snd_soc_write(w->codec, SN95031_VHSN, 0x3F);
|
snd_soc_write(codec, SN95031_VHSN, 0x3F);
|
||||||
msleep(1);
|
msleep(1);
|
||||||
} else if (SND_SOC_DAPM_EVENT_OFF(event)) {
|
} else if (SND_SOC_DAPM_EVENT_OFF(event)) {
|
||||||
pr_debug("VHS SND_SOC_DAPM_EVENT_OFF doing rail shutdown\n");
|
pr_debug("VHS SND_SOC_DAPM_EVENT_OFF doing rail shutdown\n");
|
||||||
snd_soc_write(w->codec, SN95031_VHSP, 0xC4);
|
snd_soc_write(codec, SN95031_VHSP, 0xC4);
|
||||||
snd_soc_write(w->codec, SN95031_VHSN, 0x04);
|
snd_soc_write(codec, SN95031_VHSN, 0x04);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -250,14 +252,16 @@ static int sn95031_vhs_event(struct snd_soc_dapm_widget *w,
|
||||||
static int sn95031_vihf_event(struct snd_soc_dapm_widget *w,
|
static int sn95031_vihf_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
||||||
pr_debug("VIHF SND_SOC_DAPM_EVENT_ON doing rail startup now\n");
|
pr_debug("VIHF SND_SOC_DAPM_EVENT_ON doing rail startup now\n");
|
||||||
/* power up the rail */
|
/* power up the rail */
|
||||||
snd_soc_write(w->codec, SN95031_VIHF, 0x27);
|
snd_soc_write(codec, SN95031_VIHF, 0x27);
|
||||||
msleep(1);
|
msleep(1);
|
||||||
} else if (SND_SOC_DAPM_EVENT_OFF(event)) {
|
} else if (SND_SOC_DAPM_EVENT_OFF(event)) {
|
||||||
pr_debug("VIHF SND_SOC_DAPM_EVENT_OFF doing rail shutdown\n");
|
pr_debug("VIHF SND_SOC_DAPM_EVENT_OFF doing rail shutdown\n");
|
||||||
snd_soc_write(w->codec, SN95031_VIHF, 0x24);
|
snd_soc_write(codec, SN95031_VIHF, 0x24);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -265,6 +269,7 @@ static int sn95031_vihf_event(struct snd_soc_dapm_widget *w,
|
||||||
static int sn95031_dmic12_event(struct snd_soc_dapm_widget *w,
|
static int sn95031_dmic12_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *k, int event)
|
struct snd_kcontrol *k, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
unsigned int ldo = 0, clk_dir = 0, data_dir = 0;
|
unsigned int ldo = 0, clk_dir = 0, data_dir = 0;
|
||||||
|
|
||||||
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
||||||
|
@ -273,15 +278,16 @@ static int sn95031_dmic12_event(struct snd_soc_dapm_widget *w,
|
||||||
data_dir = BIT(7);
|
data_dir = BIT(7);
|
||||||
}
|
}
|
||||||
/* program DMIC LDO, clock and set clock */
|
/* program DMIC LDO, clock and set clock */
|
||||||
snd_soc_update_bits(w->codec, SN95031_MICBIAS, BIT(5)|BIT(4), ldo);
|
snd_soc_update_bits(codec, SN95031_MICBIAS, BIT(5)|BIT(4), ldo);
|
||||||
snd_soc_update_bits(w->codec, SN95031_DMICBUF0123, BIT(0), clk_dir);
|
snd_soc_update_bits(codec, SN95031_DMICBUF0123, BIT(0), clk_dir);
|
||||||
snd_soc_update_bits(w->codec, SN95031_DMICBUF0123, BIT(7), data_dir);
|
snd_soc_update_bits(codec, SN95031_DMICBUF0123, BIT(7), data_dir);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sn95031_dmic34_event(struct snd_soc_dapm_widget *w,
|
static int sn95031_dmic34_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *k, int event)
|
struct snd_kcontrol *k, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
unsigned int ldo = 0, clk_dir = 0, data_dir = 0;
|
unsigned int ldo = 0, clk_dir = 0, data_dir = 0;
|
||||||
|
|
||||||
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
||||||
|
@ -290,22 +296,23 @@ static int sn95031_dmic34_event(struct snd_soc_dapm_widget *w,
|
||||||
data_dir = BIT(1);
|
data_dir = BIT(1);
|
||||||
}
|
}
|
||||||
/* program DMIC LDO, clock and set clock */
|
/* program DMIC LDO, clock and set clock */
|
||||||
snd_soc_update_bits(w->codec, SN95031_MICBIAS, BIT(5)|BIT(4), ldo);
|
snd_soc_update_bits(codec, SN95031_MICBIAS, BIT(5)|BIT(4), ldo);
|
||||||
snd_soc_update_bits(w->codec, SN95031_DMICBUF0123, BIT(2), clk_dir);
|
snd_soc_update_bits(codec, SN95031_DMICBUF0123, BIT(2), clk_dir);
|
||||||
snd_soc_update_bits(w->codec, SN95031_DMICBUF45, BIT(1), data_dir);
|
snd_soc_update_bits(codec, SN95031_DMICBUF45, BIT(1), data_dir);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sn95031_dmic56_event(struct snd_soc_dapm_widget *w,
|
static int sn95031_dmic56_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *k, int event)
|
struct snd_kcontrol *k, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
unsigned int ldo = 0;
|
unsigned int ldo = 0;
|
||||||
|
|
||||||
if (SND_SOC_DAPM_EVENT_ON(event))
|
if (SND_SOC_DAPM_EVENT_ON(event))
|
||||||
ldo = BIT(7)|BIT(6);
|
ldo = BIT(7)|BIT(6);
|
||||||
|
|
||||||
/* program DMIC LDO */
|
/* program DMIC LDO */
|
||||||
snd_soc_update_bits(w->codec, SN95031_MICBIAS, BIT(7)|BIT(6), ldo);
|
snd_soc_update_bits(codec, SN95031_MICBIAS, BIT(7)|BIT(6), ldo);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -349,7 +349,8 @@ static int aic31xx_wait_bits(struct aic31xx_priv *aic31xx, unsigned int reg,
|
||||||
static int aic31xx_dapm_power_event(struct snd_soc_dapm_widget *w,
|
static int aic31xx_dapm_power_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(codec);
|
||||||
unsigned int reg = AIC31XX_DACFLAG1;
|
unsigned int reg = AIC31XX_DACFLAG1;
|
||||||
unsigned int mask;
|
unsigned int mask;
|
||||||
|
|
||||||
|
@ -377,7 +378,7 @@ static int aic31xx_dapm_power_event(struct snd_soc_dapm_widget *w,
|
||||||
reg = AIC31XX_ADCFLAG;
|
reg = AIC31XX_ADCFLAG;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(w->codec->dev, "Unknown widget '%s' calling %s\n",
|
dev_err(codec->dev, "Unknown widget '%s' calling %s\n",
|
||||||
w->name, __func__);
|
w->name, __func__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -388,7 +389,7 @@ static int aic31xx_dapm_power_event(struct snd_soc_dapm_widget *w,
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
return aic31xx_wait_bits(aic31xx, reg, mask, 0, 5000, 100);
|
return aic31xx_wait_bits(aic31xx, reg, mask, 0, 5000, 100);
|
||||||
default:
|
default:
|
||||||
dev_dbg(w->codec->dev,
|
dev_dbg(codec->dev,
|
||||||
"Unhandled dapm widget event %d from %s\n",
|
"Unhandled dapm widget event %d from %s\n",
|
||||||
event, w->name);
|
event, w->name);
|
||||||
}
|
}
|
||||||
|
@ -433,7 +434,7 @@ static const struct snd_kcontrol_new aic31xx_dapm_spr_switch =
|
||||||
static int mic_bias_event(struct snd_soc_dapm_widget *w,
|
static int mic_bias_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(codec);
|
struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
|
|
@ -197,7 +197,7 @@ static int snd_soc_dapm_put_volsw_aic3x(struct snd_kcontrol *kcontrol,
|
||||||
static int mic_bias_event(struct snd_soc_dapm_widget *w,
|
static int mic_bias_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec);
|
struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
|
|
@ -423,17 +423,18 @@ exit:
|
||||||
static int dac33_playback_event(struct snd_soc_dapm_widget *w,
|
static int dac33_playback_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
if (likely(dac33->substream)) {
|
if (likely(dac33->substream)) {
|
||||||
dac33_calculate_times(dac33->substream, w->codec);
|
dac33_calculate_times(dac33->substream, codec);
|
||||||
dac33_prepare_chip(dac33->substream, w->codec);
|
dac33_prepare_chip(dac33->substream, codec);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
dac33_disable_digital(w->codec);
|
dac33_disable_digital(codec);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -567,12 +567,13 @@ static const struct snd_kcontrol_new twl4030_dapm_dbypassv_control =
|
||||||
static int pin_name##pga_event(struct snd_soc_dapm_widget *w, \
|
static int pin_name##pga_event(struct snd_soc_dapm_widget *w, \
|
||||||
struct snd_kcontrol *kcontrol, int event) \
|
struct snd_kcontrol *kcontrol, int event) \
|
||||||
{ \
|
{ \
|
||||||
struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(w->codec); \
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); \
|
||||||
|
struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec); \
|
||||||
\
|
\
|
||||||
switch (event) { \
|
switch (event) { \
|
||||||
case SND_SOC_DAPM_POST_PMU: \
|
case SND_SOC_DAPM_POST_PMU: \
|
||||||
twl4030->pin_name##_enabled = 1; \
|
twl4030->pin_name##_enabled = 1; \
|
||||||
twl4030_write(w->codec, reg, twl4030_read(w->codec, reg)); \
|
twl4030_write(codec, reg, twl4030_read(codec, reg)); \
|
||||||
break; \
|
break; \
|
||||||
case SND_SOC_DAPM_POST_PMD: \
|
case SND_SOC_DAPM_POST_PMD: \
|
||||||
twl4030->pin_name##_enabled = 0; \
|
twl4030->pin_name##_enabled = 0; \
|
||||||
|
@ -621,12 +622,14 @@ static void handsfree_ramp(struct snd_soc_codec *codec, int reg, int ramp)
|
||||||
static int handsfreelpga_event(struct snd_soc_dapm_widget *w,
|
static int handsfreelpga_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
handsfree_ramp(w->codec, TWL4030_REG_HFL_CTL, 1);
|
handsfree_ramp(codec, TWL4030_REG_HFL_CTL, 1);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
handsfree_ramp(w->codec, TWL4030_REG_HFL_CTL, 0);
|
handsfree_ramp(codec, TWL4030_REG_HFL_CTL, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -635,12 +638,14 @@ static int handsfreelpga_event(struct snd_soc_dapm_widget *w,
|
||||||
static int handsfreerpga_event(struct snd_soc_dapm_widget *w,
|
static int handsfreerpga_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
handsfree_ramp(w->codec, TWL4030_REG_HFR_CTL, 1);
|
handsfree_ramp(codec, TWL4030_REG_HFR_CTL, 1);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
handsfree_ramp(w->codec, TWL4030_REG_HFR_CTL, 0);
|
handsfree_ramp(codec, TWL4030_REG_HFR_CTL, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -649,19 +654,23 @@ static int handsfreerpga_event(struct snd_soc_dapm_widget *w,
|
||||||
static int vibramux_event(struct snd_soc_dapm_widget *w,
|
static int vibramux_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
twl4030_write(w->codec, TWL4030_REG_VIBRA_SET, 0xff);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
|
twl4030_write(codec, TWL4030_REG_VIBRA_SET, 0xff);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int apll_event(struct snd_soc_dapm_widget *w,
|
static int apll_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
twl4030_apll_enable(w->codec, 1);
|
twl4030_apll_enable(codec, 1);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
twl4030_apll_enable(w->codec, 0);
|
twl4030_apll_enable(codec, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -670,23 +679,24 @@ static int apll_event(struct snd_soc_dapm_widget *w,
|
||||||
static int aif_event(struct snd_soc_dapm_widget *w,
|
static int aif_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u8 audio_if;
|
u8 audio_if;
|
||||||
|
|
||||||
audio_if = twl4030_read(w->codec, TWL4030_REG_AUDIO_IF);
|
audio_if = twl4030_read(codec, TWL4030_REG_AUDIO_IF);
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
/* Enable AIF */
|
/* Enable AIF */
|
||||||
/* enable the PLL before we use it to clock the DAI */
|
/* enable the PLL before we use it to clock the DAI */
|
||||||
twl4030_apll_enable(w->codec, 1);
|
twl4030_apll_enable(codec, 1);
|
||||||
|
|
||||||
twl4030_write(w->codec, TWL4030_REG_AUDIO_IF,
|
twl4030_write(codec, TWL4030_REG_AUDIO_IF,
|
||||||
audio_if | TWL4030_AIF_EN);
|
audio_if | TWL4030_AIF_EN);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
/* disable the DAI before we stop it's source PLL */
|
/* disable the DAI before we stop it's source PLL */
|
||||||
twl4030_write(w->codec, TWL4030_REG_AUDIO_IF,
|
twl4030_write(codec, TWL4030_REG_AUDIO_IF,
|
||||||
audio_if & ~TWL4030_AIF_EN);
|
audio_if & ~TWL4030_AIF_EN);
|
||||||
twl4030_apll_enable(w->codec, 0);
|
twl4030_apll_enable(codec, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -758,20 +768,21 @@ static void headset_ramp(struct snd_soc_codec *codec, int ramp)
|
||||||
static int headsetlpga_event(struct snd_soc_dapm_widget *w,
|
static int headsetlpga_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
/* Do the ramp-up only once */
|
/* Do the ramp-up only once */
|
||||||
if (!twl4030->hsr_enabled)
|
if (!twl4030->hsr_enabled)
|
||||||
headset_ramp(w->codec, 1);
|
headset_ramp(codec, 1);
|
||||||
|
|
||||||
twl4030->hsl_enabled = 1;
|
twl4030->hsl_enabled = 1;
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
/* Do the ramp-down only if both headsetL/R is disabled */
|
/* Do the ramp-down only if both headsetL/R is disabled */
|
||||||
if (!twl4030->hsr_enabled)
|
if (!twl4030->hsr_enabled)
|
||||||
headset_ramp(w->codec, 0);
|
headset_ramp(codec, 0);
|
||||||
|
|
||||||
twl4030->hsl_enabled = 0;
|
twl4030->hsl_enabled = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -782,20 +793,21 @@ static int headsetlpga_event(struct snd_soc_dapm_widget *w,
|
||||||
static int headsetrpga_event(struct snd_soc_dapm_widget *w,
|
static int headsetrpga_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
/* Do the ramp-up only once */
|
/* Do the ramp-up only once */
|
||||||
if (!twl4030->hsl_enabled)
|
if (!twl4030->hsl_enabled)
|
||||||
headset_ramp(w->codec, 1);
|
headset_ramp(codec, 1);
|
||||||
|
|
||||||
twl4030->hsr_enabled = 1;
|
twl4030->hsr_enabled = 1;
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
/* Do the ramp-down only if both headsetL/R is disabled */
|
/* Do the ramp-down only if both headsetL/R is disabled */
|
||||||
if (!twl4030->hsl_enabled)
|
if (!twl4030->hsl_enabled)
|
||||||
headset_ramp(w->codec, 0);
|
headset_ramp(codec, 0);
|
||||||
|
|
||||||
twl4030->hsr_enabled = 0;
|
twl4030->hsr_enabled = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -806,7 +818,8 @@ static int headsetrpga_event(struct snd_soc_dapm_widget *w,
|
||||||
static int digimic_event(struct snd_soc_dapm_widget *w,
|
static int digimic_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
|
||||||
struct twl4030_codec_data *pdata = twl4030->pdata;
|
struct twl4030_codec_data *pdata = twl4030->pdata;
|
||||||
|
|
||||||
if (pdata && pdata->digimic_delay)
|
if (pdata && pdata->digimic_delay)
|
||||||
|
|
|
@ -234,7 +234,7 @@ static int headset_power_mode(struct snd_soc_codec *codec, int high_perf)
|
||||||
static int twl6040_hs_dac_event(struct snd_soc_dapm_widget *w,
|
static int twl6040_hs_dac_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u8 hslctl, hsrctl;
|
u8 hslctl, hsrctl;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -261,7 +261,7 @@ static int twl6040_hs_dac_event(struct snd_soc_dapm_widget *w,
|
||||||
static int twl6040_ep_drv_event(struct snd_soc_dapm_widget *w,
|
static int twl6040_ep_drv_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);
|
struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
|
|
@ -683,7 +683,7 @@ static const struct snd_kcontrol_new wm2000_controls[] = {
|
||||||
static int wm2000_anc_power_event(struct snd_soc_dapm_widget *w,
|
static int wm2000_anc_power_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
|
struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|
|
@ -775,7 +775,8 @@ static int wm5100_out_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol,
|
struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
struct wm5100_priv *wm5100 = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct wm5100_priv *wm5100 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (w->reg) {
|
switch (w->reg) {
|
||||||
case WM5100_CHANNEL_ENABLES_1:
|
case WM5100_CHANNEL_ENABLES_1:
|
||||||
|
@ -839,7 +840,7 @@ static int wm5100_post_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol,
|
struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm5100_priv *wm5100 = snd_soc_codec_get_drvdata(codec);
|
struct wm5100_priv *wm5100 = snd_soc_codec_get_drvdata(codec);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
#include <linux/mfd/arizona/core.h>
|
#include <linux/mfd/arizona/core.h>
|
||||||
#include <linux/mfd/arizona/registers.h>
|
#include <linux/mfd/arizona/registers.h>
|
||||||
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#include "arizona.h"
|
#include "arizona.h"
|
||||||
#include "wm5102.h"
|
#include "wm5102.h"
|
||||||
|
@ -580,7 +581,7 @@ static const struct reg_default wm5102_sysclk_revb_patch[] = {
|
||||||
static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
|
static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||||
struct regmap *regmap = arizona->regmap;
|
struct regmap *regmap = arizona->regmap;
|
||||||
const struct reg_default *patch = NULL;
|
const struct reg_default *patch = NULL;
|
||||||
|
@ -617,11 +618,10 @@ static int wm5102_out_comp_coeff_get(struct snd_kcontrol *kcontrol,
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||||
uint16_t data;
|
|
||||||
|
|
||||||
mutex_lock(&arizona->dac_comp_lock);
|
mutex_lock(&arizona->dac_comp_lock);
|
||||||
data = cpu_to_be16(arizona->dac_comp_coeff);
|
put_unaligned_be16(arizona->dac_comp_coeff,
|
||||||
memcpy(ucontrol->value.bytes.data, &data, sizeof(data));
|
ucontrol->value.bytes.data);
|
||||||
mutex_unlock(&arizona->dac_comp_lock);
|
mutex_unlock(&arizona->dac_comp_lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1272,19 +1272,24 @@ SND_SOC_DAPM_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1,
|
||||||
|
|
||||||
SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
|
SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
|
||||||
ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,
|
SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,
|
||||||
ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT2L", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT2L", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT2L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT2L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT2R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT2R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
||||||
|
|
|
@ -134,7 +134,7 @@ static const struct reg_default wm5110_sysclk_revd_patch[] = {
|
||||||
static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w,
|
static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||||
struct regmap *regmap = arizona->regmap;
|
struct regmap *regmap = arizona->regmap;
|
||||||
const struct reg_default *patch = NULL;
|
const struct reg_default *patch = NULL;
|
||||||
|
@ -905,22 +905,28 @@ SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0,
|
||||||
|
|
||||||
SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
|
SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
|
||||||
ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,
|
SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,
|
||||||
ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT2L", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT2L", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT2L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT2L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT2R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT2R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT3R", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT3R", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT3R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT3R_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
||||||
|
|
|
@ -259,7 +259,7 @@ static void wm8350_pga_work(struct work_struct *work)
|
||||||
static int pga_event(struct snd_soc_dapm_widget *w,
|
static int pga_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec);
|
struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec);
|
||||||
struct wm8350_output *out;
|
struct wm8350_output *out;
|
||||||
|
|
||||||
|
|
|
@ -324,6 +324,7 @@ SOC_SINGLE("RIN34 Mute Switch", WM8400_RIGHT_LINE_INPUT_3_4_VOLUME,
|
||||||
static int outmixer_event (struct snd_soc_dapm_widget *w,
|
static int outmixer_event (struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol * kcontrol, int event)
|
struct snd_kcontrol * kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct soc_mixer_control *mc =
|
struct soc_mixer_control *mc =
|
||||||
(struct soc_mixer_control *)kcontrol->private_value;
|
(struct soc_mixer_control *)kcontrol->private_value;
|
||||||
u32 reg_shift = mc->shift;
|
u32 reg_shift = mc->shift;
|
||||||
|
@ -332,7 +333,7 @@ static int outmixer_event (struct snd_soc_dapm_widget *w,
|
||||||
|
|
||||||
switch (reg_shift) {
|
switch (reg_shift) {
|
||||||
case WM8400_SPEAKER_MIXER | (WM8400_LDSPK << 8) :
|
case WM8400_SPEAKER_MIXER | (WM8400_LDSPK << 8) :
|
||||||
reg = snd_soc_read(w->codec, WM8400_OUTPUT_MIXER1);
|
reg = snd_soc_read(codec, WM8400_OUTPUT_MIXER1);
|
||||||
if (reg & WM8400_LDLO) {
|
if (reg & WM8400_LDLO) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Output Mixer 1 LDLO Set\n");
|
"Cannot set as Output Mixer 1 LDLO Set\n");
|
||||||
|
@ -340,7 +341,7 @@ static int outmixer_event (struct snd_soc_dapm_widget *w,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM8400_SPEAKER_MIXER | (WM8400_RDSPK << 8):
|
case WM8400_SPEAKER_MIXER | (WM8400_RDSPK << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8400_OUTPUT_MIXER2);
|
reg = snd_soc_read(codec, WM8400_OUTPUT_MIXER2);
|
||||||
if (reg & WM8400_RDRO) {
|
if (reg & WM8400_RDRO) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Output Mixer 2 RDRO Set\n");
|
"Cannot set as Output Mixer 2 RDRO Set\n");
|
||||||
|
@ -348,7 +349,7 @@ static int outmixer_event (struct snd_soc_dapm_widget *w,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM8400_OUTPUT_MIXER1 | (WM8400_LDLO << 8):
|
case WM8400_OUTPUT_MIXER1 | (WM8400_LDLO << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8400_SPEAKER_MIXER);
|
reg = snd_soc_read(codec, WM8400_SPEAKER_MIXER);
|
||||||
if (reg & WM8400_LDSPK) {
|
if (reg & WM8400_LDSPK) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Speaker Mixer LDSPK Set\n");
|
"Cannot set as Speaker Mixer LDSPK Set\n");
|
||||||
|
@ -356,7 +357,7 @@ static int outmixer_event (struct snd_soc_dapm_widget *w,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM8400_OUTPUT_MIXER2 | (WM8400_RDRO << 8):
|
case WM8400_OUTPUT_MIXER2 | (WM8400_RDRO << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8400_SPEAKER_MIXER);
|
reg = snd_soc_read(codec, WM8400_SPEAKER_MIXER);
|
||||||
if (reg & WM8400_RDSPK) {
|
if (reg & WM8400_RDSPK) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Speaker Mixer RDSPK Set\n");
|
"Cannot set as Speaker Mixer RDSPK Set\n");
|
||||||
|
|
|
@ -217,7 +217,8 @@ SND_SOC_DAPM_INPUT("LLINEIN"),
|
||||||
static int wm8731_check_osc(struct snd_soc_dapm_widget *source,
|
static int wm8731_check_osc(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(source->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
|
struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
return wm8731->sysclk_type == WM8731_SYSCLK_XTAL;
|
return wm8731->sysclk_type == WM8731_SYSCLK_XTAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -308,9 +308,7 @@ static const struct snd_soc_dapm_route wm8770_intercon[] = {
|
||||||
static int vout12supply_event(struct snd_soc_dapm_widget *w,
|
static int vout12supply_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
codec = w->codec;
|
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
@ -327,9 +325,7 @@ static int vout12supply_event(struct snd_soc_dapm_widget *w,
|
||||||
static int vout34supply_event(struct snd_soc_dapm_widget *w,
|
static int vout34supply_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
codec = w->codec;
|
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
|
|
@ -224,7 +224,7 @@ static void wm8900_reset(struct snd_soc_codec *codec)
|
||||||
static int wm8900_hp_event(struct snd_soc_dapm_widget *w,
|
static int wm8900_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u16 hpctl1 = snd_soc_read(codec, WM8900_REG_HPCTL1);
|
u16 hpctl1 = snd_soc_read(codec, WM8900_REG_HPCTL1);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
|
|
@ -260,7 +260,7 @@ static int wm8903_cp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int wm8903_dcs_event(struct snd_soc_dapm_widget *w,
|
static int wm8903_dcs_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
|
struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
|
|
@ -673,7 +673,7 @@ static int cp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int sysclk_event(struct snd_soc_dapm_widget *w,
|
static int sysclk_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
|
struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -711,7 +711,7 @@ static int sysclk_event(struct snd_soc_dapm_widget *w,
|
||||||
static int out_pga_event(struct snd_soc_dapm_widget *w,
|
static int out_pga_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
|
struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
|
||||||
int reg, val;
|
int reg, val;
|
||||||
int dcs_mask;
|
int dcs_mask;
|
||||||
|
|
|
@ -333,7 +333,7 @@ static int wm8955_configure_clocking(struct snd_soc_codec *codec)
|
||||||
static int wm8955_sysclk(struct snd_soc_dapm_widget *w,
|
static int wm8955_sysclk(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
/* Always disable the clocks - if we're doing reconfiguration this
|
/* Always disable the clocks - if we're doing reconfiguration this
|
||||||
|
|
|
@ -418,7 +418,7 @@ static void wm8958_dsp_apply(struct snd_soc_codec *codec, int path, int start)
|
||||||
int wm8958_aif_ev(struct snd_soc_dapm_widget *w,
|
int wm8958_aif_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
|
|
@ -194,7 +194,7 @@ static bool wm8961_readable(struct device *dev, unsigned int reg)
|
||||||
static int wm8961_hp_event(struct snd_soc_dapm_widget *w,
|
static int wm8961_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u16 hp_reg = snd_soc_read(codec, WM8961_ANALOGUE_HP_0);
|
u16 hp_reg = snd_soc_read(codec, WM8961_ANALOGUE_HP_0);
|
||||||
u16 cp_reg = snd_soc_read(codec, WM8961_CHARGE_PUMP_1);
|
u16 cp_reg = snd_soc_read(codec, WM8961_CHARGE_PUMP_1);
|
||||||
u16 pwr_reg = snd_soc_read(codec, WM8961_PWR_MGMT_2);
|
u16 pwr_reg = snd_soc_read(codec, WM8961_PWR_MGMT_2);
|
||||||
|
@ -286,7 +286,7 @@ static int wm8961_hp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int wm8961_spk_event(struct snd_soc_dapm_widget *w,
|
static int wm8961_spk_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u16 pwr_reg = snd_soc_read(codec, WM8961_PWR_MGMT_2);
|
u16 pwr_reg = snd_soc_read(codec, WM8961_PWR_MGMT_2);
|
||||||
u16 spk_reg = snd_soc_read(codec, WM8961_CLASS_D_CONTROL_1);
|
u16 spk_reg = snd_soc_read(codec, WM8961_CLASS_D_CONTROL_1);
|
||||||
|
|
||||||
|
|
|
@ -1866,7 +1866,7 @@ static int cp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int hp_event(struct snd_soc_dapm_widget *w,
|
static int hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
int timeout;
|
int timeout;
|
||||||
int reg;
|
int reg;
|
||||||
int expected = (WM8962_DCS_STARTUP_DONE_HP1L |
|
int expected = (WM8962_DCS_STARTUP_DONE_HP1L |
|
||||||
|
@ -1960,7 +1960,7 @@ static int hp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int out_pga_event(struct snd_soc_dapm_widget *w,
|
static int out_pga_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
int reg;
|
int reg;
|
||||||
|
|
||||||
switch (w->shift) {
|
switch (w->shift) {
|
||||||
|
@ -1993,7 +1993,7 @@ static int out_pga_event(struct snd_soc_dapm_widget *w,
|
||||||
static int dsp2_event(struct snd_soc_dapm_widget *w,
|
static int dsp2_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
|
struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
|
|
@ -244,7 +244,7 @@ SOC_DOUBLE_R_TLV("Output 2 Playback Volume", WM8988_LOUT2V, WM8988_ROUT2V,
|
||||||
static int wm8988_lrc_control(struct snd_soc_dapm_widget *w,
|
static int wm8988_lrc_control(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u16 adctl2 = snd_soc_read(codec, WM8988_ADCTL2);
|
u16 adctl2 = snd_soc_read(codec, WM8988_ADCTL2);
|
||||||
|
|
||||||
/* Use the DAC to gate LRC if active, otherwise use ADC */
|
/* Use the DAC to gate LRC if active, otherwise use ADC */
|
||||||
|
|
|
@ -374,13 +374,14 @@ SOC_SINGLE("RIN34 Mute Switch", WM8990_RIGHT_LINE_INPUT_3_4_VOLUME,
|
||||||
static int outmixer_event(struct snd_soc_dapm_widget *w,
|
static int outmixer_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u32 reg_shift = kcontrol->private_value & 0xfff;
|
u32 reg_shift = kcontrol->private_value & 0xfff;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
u16 reg;
|
u16 reg;
|
||||||
|
|
||||||
switch (reg_shift) {
|
switch (reg_shift) {
|
||||||
case WM8990_SPEAKER_MIXER | (WM8990_LDSPK_BIT << 8) :
|
case WM8990_SPEAKER_MIXER | (WM8990_LDSPK_BIT << 8) :
|
||||||
reg = snd_soc_read(w->codec, WM8990_OUTPUT_MIXER1);
|
reg = snd_soc_read(codec, WM8990_OUTPUT_MIXER1);
|
||||||
if (reg & WM8990_LDLO) {
|
if (reg & WM8990_LDLO) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Output Mixer 1 LDLO Set\n");
|
"Cannot set as Output Mixer 1 LDLO Set\n");
|
||||||
|
@ -388,7 +389,7 @@ static int outmixer_event(struct snd_soc_dapm_widget *w,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM8990_SPEAKER_MIXER | (WM8990_RDSPK_BIT << 8):
|
case WM8990_SPEAKER_MIXER | (WM8990_RDSPK_BIT << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8990_OUTPUT_MIXER2);
|
reg = snd_soc_read(codec, WM8990_OUTPUT_MIXER2);
|
||||||
if (reg & WM8990_RDRO) {
|
if (reg & WM8990_RDRO) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Output Mixer 2 RDRO Set\n");
|
"Cannot set as Output Mixer 2 RDRO Set\n");
|
||||||
|
@ -396,7 +397,7 @@ static int outmixer_event(struct snd_soc_dapm_widget *w,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM8990_OUTPUT_MIXER1 | (WM8990_LDLO_BIT << 8):
|
case WM8990_OUTPUT_MIXER1 | (WM8990_LDLO_BIT << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8990_SPEAKER_MIXER);
|
reg = snd_soc_read(codec, WM8990_SPEAKER_MIXER);
|
||||||
if (reg & WM8990_LDSPK) {
|
if (reg & WM8990_LDSPK) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Speaker Mixer LDSPK Set\n");
|
"Cannot set as Speaker Mixer LDSPK Set\n");
|
||||||
|
@ -404,7 +405,7 @@ static int outmixer_event(struct snd_soc_dapm_widget *w,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM8990_OUTPUT_MIXER2 | (WM8990_RDRO_BIT << 8):
|
case WM8990_OUTPUT_MIXER2 | (WM8990_RDRO_BIT << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8990_SPEAKER_MIXER);
|
reg = snd_soc_read(codec, WM8990_SPEAKER_MIXER);
|
||||||
if (reg & WM8990_RDSPK) {
|
if (reg & WM8990_RDSPK) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Speaker Mixer RDSPK Set\n");
|
"Cannot set as Speaker Mixer RDSPK Set\n");
|
||||||
|
|
|
@ -382,13 +382,14 @@ static const struct snd_kcontrol_new wm8991_snd_controls[] = {
|
||||||
static int outmixer_event(struct snd_soc_dapm_widget *w,
|
static int outmixer_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u32 reg_shift = kcontrol->private_value & 0xfff;
|
u32 reg_shift = kcontrol->private_value & 0xfff;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
u16 reg;
|
u16 reg;
|
||||||
|
|
||||||
switch (reg_shift) {
|
switch (reg_shift) {
|
||||||
case WM8991_SPEAKER_MIXER | (WM8991_LDSPK_BIT << 8):
|
case WM8991_SPEAKER_MIXER | (WM8991_LDSPK_BIT << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8991_OUTPUT_MIXER1);
|
reg = snd_soc_read(codec, WM8991_OUTPUT_MIXER1);
|
||||||
if (reg & WM8991_LDLO) {
|
if (reg & WM8991_LDLO) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Output Mixer 1 LDLO Set\n");
|
"Cannot set as Output Mixer 1 LDLO Set\n");
|
||||||
|
@ -397,7 +398,7 @@ static int outmixer_event(struct snd_soc_dapm_widget *w,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM8991_SPEAKER_MIXER | (WM8991_RDSPK_BIT << 8):
|
case WM8991_SPEAKER_MIXER | (WM8991_RDSPK_BIT << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8991_OUTPUT_MIXER2);
|
reg = snd_soc_read(codec, WM8991_OUTPUT_MIXER2);
|
||||||
if (reg & WM8991_RDRO) {
|
if (reg & WM8991_RDRO) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Output Mixer 2 RDRO Set\n");
|
"Cannot set as Output Mixer 2 RDRO Set\n");
|
||||||
|
@ -406,7 +407,7 @@ static int outmixer_event(struct snd_soc_dapm_widget *w,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM8991_OUTPUT_MIXER1 | (WM8991_LDLO_BIT << 8):
|
case WM8991_OUTPUT_MIXER1 | (WM8991_LDLO_BIT << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8991_SPEAKER_MIXER);
|
reg = snd_soc_read(codec, WM8991_SPEAKER_MIXER);
|
||||||
if (reg & WM8991_LDSPK) {
|
if (reg & WM8991_LDSPK) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Speaker Mixer LDSPK Set\n");
|
"Cannot set as Speaker Mixer LDSPK Set\n");
|
||||||
|
@ -415,7 +416,7 @@ static int outmixer_event(struct snd_soc_dapm_widget *w,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM8991_OUTPUT_MIXER2 | (WM8991_RDRO_BIT << 8):
|
case WM8991_OUTPUT_MIXER2 | (WM8991_RDRO_BIT << 8):
|
||||||
reg = snd_soc_read(w->codec, WM8991_SPEAKER_MIXER);
|
reg = snd_soc_read(codec, WM8991_SPEAKER_MIXER);
|
||||||
if (reg & WM8991_RDSPK) {
|
if (reg & WM8991_RDSPK) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Cannot set as Speaker Mixer RDSPK Set\n");
|
"Cannot set as Speaker Mixer RDSPK Set\n");
|
||||||
|
|
|
@ -810,7 +810,7 @@ SOC_SINGLE_TLV("EQ5 Volume", WM8993_EQ6, 0, 24, 0, eq_tlv),
|
||||||
static int clk_sys_event(struct snd_soc_dapm_widget *w,
|
static int clk_sys_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
|
|
@ -249,7 +249,8 @@ static int configure_clock(struct snd_soc_codec *codec)
|
||||||
static int check_clk_sys(struct snd_soc_dapm_widget *source,
|
static int check_clk_sys(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
int reg = snd_soc_read(source->codec, WM8994_CLOCKING_1);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
|
int reg = snd_soc_read(codec, WM8994_CLOCKING_1);
|
||||||
const char *clk;
|
const char *clk;
|
||||||
|
|
||||||
/* Check what we're currently using for CLK_SYS */
|
/* Check what we're currently using for CLK_SYS */
|
||||||
|
@ -806,7 +807,7 @@ static void active_dereference(struct snd_soc_codec *codec)
|
||||||
static int clk_sys_event(struct snd_soc_dapm_widget *w,
|
static int clk_sys_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -981,7 +982,7 @@ static void vmid_dereference(struct snd_soc_codec *codec)
|
||||||
static int vmid_event(struct snd_soc_dapm_widget *w,
|
static int vmid_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
@ -1037,7 +1038,7 @@ static bool wm8994_check_class_w_digital(struct snd_soc_codec *codec)
|
||||||
static int aif1clk_ev(struct snd_soc_dapm_widget *w,
|
static int aif1clk_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
struct wm8994 *control = wm8994->wm8994;
|
struct wm8994 *control = wm8994->wm8994;
|
||||||
int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA;
|
int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA;
|
||||||
|
@ -1135,7 +1136,7 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w,
|
||||||
static int aif2clk_ev(struct snd_soc_dapm_widget *w,
|
static int aif2clk_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
int i;
|
int i;
|
||||||
int dac;
|
int dac;
|
||||||
int adc;
|
int adc;
|
||||||
|
@ -1220,7 +1221,7 @@ static int aif2clk_ev(struct snd_soc_dapm_widget *w,
|
||||||
static int aif1clk_late_ev(struct snd_soc_dapm_widget *w,
|
static int aif1clk_late_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -1238,7 +1239,7 @@ static int aif1clk_late_ev(struct snd_soc_dapm_widget *w,
|
||||||
static int aif2clk_late_ev(struct snd_soc_dapm_widget *w,
|
static int aif2clk_late_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -1256,7 +1257,7 @@ static int aif2clk_late_ev(struct snd_soc_dapm_widget *w,
|
||||||
static int late_enable_ev(struct snd_soc_dapm_widget *w,
|
static int late_enable_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -1289,7 +1290,7 @@ static int late_enable_ev(struct snd_soc_dapm_widget *w,
|
||||||
static int late_disable_ev(struct snd_soc_dapm_widget *w,
|
static int late_disable_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -1331,7 +1332,7 @@ static int micbias_ev(struct snd_soc_dapm_widget *w,
|
||||||
static int dac_ev(struct snd_soc_dapm_widget *w,
|
static int dac_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
unsigned int mask = 1 << w->shift;
|
unsigned int mask = 1 << w->shift;
|
||||||
|
|
||||||
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
|
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
|
||||||
|
@ -1372,7 +1373,7 @@ SOC_DAPM_SINGLE("DAC1 Switch", WM8994_SPEAKER_MIXER, 0, 1, 0),
|
||||||
static int post_ev(struct snd_soc_dapm_widget *w,
|
static int post_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
dev_dbg(codec->dev, "SRC status: %x\n",
|
dev_dbg(codec->dev, "SRC status: %x\n",
|
||||||
snd_soc_read(codec,
|
snd_soc_read(codec,
|
||||||
WM8994_RATE_STATUS));
|
WM8994_RATE_STATUS));
|
||||||
|
|
|
@ -534,10 +534,11 @@ static void wm8995_update_class_w(struct snd_soc_codec *codec)
|
||||||
static int check_clk_sys(struct snd_soc_dapm_widget *source,
|
static int check_clk_sys(struct snd_soc_dapm_widget *source,
|
||||||
struct snd_soc_dapm_widget *sink)
|
struct snd_soc_dapm_widget *sink)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
const char *clk;
|
const char *clk;
|
||||||
|
|
||||||
reg = snd_soc_read(source->codec, WM8995_CLOCKING_1);
|
reg = snd_soc_read(codec, WM8995_CLOCKING_1);
|
||||||
/* Check what we're currently using for CLK_SYS */
|
/* Check what we're currently using for CLK_SYS */
|
||||||
if (reg & WM8995_SYSCLK_SRC)
|
if (reg & WM8995_SYSCLK_SRC)
|
||||||
clk = "AIF2CLK";
|
clk = "AIF2CLK";
|
||||||
|
@ -560,9 +561,7 @@ static int wm8995_put_class_w(struct snd_kcontrol *kcontrol,
|
||||||
static int hp_supply_event(struct snd_soc_dapm_widget *w,
|
static int hp_supply_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
codec = w->codec;
|
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
@ -611,10 +610,9 @@ static void dc_servo_cmd(struct snd_soc_codec *codec,
|
||||||
static int hp_event(struct snd_soc_dapm_widget *w,
|
static int hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
||||||
codec = w->codec;
|
|
||||||
reg = snd_soc_read(codec, WM8995_ANALOGUE_HP_1);
|
reg = snd_soc_read(codec, WM8995_ANALOGUE_HP_1);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -761,9 +759,7 @@ static int configure_clock(struct snd_soc_codec *codec)
|
||||||
static int clk_sys_event(struct snd_soc_dapm_widget *w,
|
static int clk_sys_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
|
||||||
codec = w->codec;
|
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
|
|
|
@ -599,7 +599,7 @@ static void wm8996_bg_disable(struct snd_soc_codec *codec)
|
||||||
static int bg_event(struct snd_soc_dapm_widget *w,
|
static int bg_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -634,7 +634,8 @@ static int cp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int rmv_short_event(struct snd_soc_dapm_widget *w,
|
static int rmv_short_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct wm8996_priv *wm8996 = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct wm8996_priv *wm8996 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
/* Record which outputs we enabled */
|
/* Record which outputs we enabled */
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -758,7 +759,8 @@ static void wm8996_seq_notifier(struct snd_soc_dapm_context *dapm,
|
||||||
static int dcs_start(struct snd_soc_dapm_widget *w,
|
static int dcs_start(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct wm8996_priv *wm8996 = snd_soc_codec_get_drvdata(w->codec);
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
|
struct wm8996_priv *wm8996 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
|
|
@ -84,7 +84,7 @@ static const struct reg_default wm8997_sysclk_reva_patch[] = {
|
||||||
static int wm8997_sysclk_ev(struct snd_soc_dapm_widget *w,
|
static int wm8997_sysclk_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
|
||||||
struct regmap *regmap = arizona->regmap;
|
struct regmap *regmap = arizona->regmap;
|
||||||
const struct reg_default *patch = NULL;
|
const struct reg_default *patch = NULL;
|
||||||
|
@ -610,13 +610,16 @@ SND_SOC_DAPM_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1,
|
||||||
|
|
||||||
SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
|
SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
|
||||||
ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,
|
SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,
|
||||||
ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
ARIZONA_OUT1R_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT3L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
|
||||||
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1,
|
SND_SOC_DAPM_PGA_E("OUT5L", ARIZONA_OUTPUT_ENABLES_1,
|
||||||
ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
ARIZONA_OUT5L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev,
|
||||||
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
|
||||||
|
|
|
@ -734,7 +734,7 @@ static int configure_clock(struct snd_soc_codec *codec)
|
||||||
static int clk_sys_event(struct snd_soc_dapm_widget *w,
|
static int clk_sys_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm9081_priv *wm9081 = snd_soc_codec_get_drvdata(codec);
|
struct wm9081_priv *wm9081 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
/* This should be done on init() for bypass paths */
|
/* This should be done on init() for bypass paths */
|
||||||
|
|
|
@ -254,7 +254,7 @@ SOC_SINGLE_TLV("MIXOUTR IN2B Volume", WM9090_OUTPUT_MIXER4, 0, 3, 1,
|
||||||
static int hp_ev(struct snd_soc_dapm_widget *w,
|
static int hp_ev(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
unsigned int reg = snd_soc_read(codec, WM9090_ANALOGUE_HP_0);
|
unsigned int reg = snd_soc_read(codec, WM9090_ANALOGUE_HP_0);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
|
|
@ -217,7 +217,7 @@ SOC_SINGLE("3D Depth", AC97_REC_GAIN_MIC, 0, 15, 1),
|
||||||
static int wm9713_voice_shutdown(struct snd_soc_dapm_widget *w,
|
static int wm9713_voice_shutdown(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u16 status, rate;
|
u16 status, rate;
|
||||||
|
|
||||||
if (WARN_ON(event != SND_SOC_DAPM_PRE_PMD))
|
if (WARN_ON(event != SND_SOC_DAPM_PRE_PMD))
|
||||||
|
|
|
@ -1373,7 +1373,7 @@ int wm_adsp1_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol,
|
struct snd_kcontrol *kcontrol,
|
||||||
int event)
|
int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
|
struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
|
||||||
struct wm_adsp *dsp = &dsps[w->shift];
|
struct wm_adsp *dsp = &dsps[w->shift];
|
||||||
struct wm_adsp_alg_region *alg_region;
|
struct wm_adsp_alg_region *alg_region;
|
||||||
|
@ -1605,7 +1605,7 @@ err:
|
||||||
int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,
|
int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
|
struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
|
||||||
struct wm_adsp *dsp = &dsps[w->shift];
|
struct wm_adsp *dsp = &dsps[w->shift];
|
||||||
|
|
||||||
|
@ -1626,7 +1626,7 @@ EXPORT_SYMBOL_GPL(wm_adsp2_early_event);
|
||||||
int wm_adsp2_event(struct snd_soc_dapm_widget *w,
|
int wm_adsp2_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
|
struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
|
||||||
struct wm_adsp *dsp = &dsps[w->shift];
|
struct wm_adsp *dsp = &dsps[w->shift];
|
||||||
struct wm_adsp_alg_region *alg_region;
|
struct wm_adsp_alg_region *alg_region;
|
||||||
|
|
|
@ -500,7 +500,7 @@ SOC_SINGLE_TLV("LINEOUT2 Volume", WM8993_LINE_OUTPUTS_VOLUME, 0, 1, 1,
|
||||||
static int hp_supply_event(struct snd_soc_dapm_widget *w,
|
static int hp_supply_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec);
|
struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -542,7 +542,7 @@ static int hp_supply_event(struct snd_soc_dapm_widget *w,
|
||||||
static int hp_event(struct snd_soc_dapm_widget *w,
|
static int hp_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
unsigned int reg = snd_soc_read(codec, WM8993_ANALOGUE_HP_0);
|
unsigned int reg = snd_soc_read(codec, WM8993_ANALOGUE_HP_0);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -594,7 +594,7 @@ static int hp_event(struct snd_soc_dapm_widget *w,
|
||||||
static int earpiece_event(struct snd_soc_dapm_widget *w,
|
static int earpiece_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *control, int event)
|
struct snd_kcontrol *control, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
u16 reg = snd_soc_read(codec, WM8993_ANTIPOP1) & ~WM8993_HPOUT2_IN_ENA;
|
u16 reg = snd_soc_read(codec, WM8993_ANTIPOP1) & ~WM8993_HPOUT2_IN_ENA;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -619,7 +619,7 @@ static int earpiece_event(struct snd_soc_dapm_widget *w,
|
||||||
static int lineout_event(struct snd_soc_dapm_widget *w,
|
static int lineout_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *control, int event)
|
struct snd_kcontrol *control, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec);
|
struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec);
|
||||||
bool *flag;
|
bool *flag;
|
||||||
|
|
||||||
|
@ -649,7 +649,7 @@ static int lineout_event(struct snd_soc_dapm_widget *w,
|
||||||
static int micbias_event(struct snd_soc_dapm_widget *w,
|
static int micbias_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = w->codec;
|
struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
|
||||||
struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec);
|
struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
switch (w->shift) {
|
switch (w->shift) {
|
||||||
|
|
|
@ -81,7 +81,7 @@ static int rear_amp_power(struct snd_soc_codec *codec, int power)
|
||||||
static int rear_amp_event(struct snd_soc_dapm_widget *widget,
|
static int rear_amp_event(struct snd_soc_dapm_widget *widget,
|
||||||
struct snd_kcontrol *kctl, int event)
|
struct snd_kcontrol *kctl, int event)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = widget->codec;
|
struct snd_soc_codec *codec = widget->dapm->card->rtd[0].codec;
|
||||||
|
|
||||||
return rear_amp_power(codec, SND_SOC_DAPM_EVENT_ON(event));
|
return rear_amp_power(codec, SND_SOC_DAPM_EVENT_ON(event));
|
||||||
}
|
}
|
||||||
|
|
|
@ -3139,8 +3139,6 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
|
||||||
}
|
}
|
||||||
|
|
||||||
w->dapm = dapm;
|
w->dapm = dapm;
|
||||||
if (dapm->component)
|
|
||||||
w->codec = dapm->component->codec;
|
|
||||||
INIT_LIST_HEAD(&w->sources);
|
INIT_LIST_HEAD(&w->sources);
|
||||||
INIT_LIST_HEAD(&w->sinks);
|
INIT_LIST_HEAD(&w->sinks);
|
||||||
INIT_LIST_HEAD(&w->list);
|
INIT_LIST_HEAD(&w->list);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче