Merge remote-tracking branches 'asoc/topic/tas2552', 'asoc/topic/tas5086', 'asoc/topic/tegra', 'asoc/topic/tlv' and 'asoc/topic/topology' into asoc-next
This commit is contained in:
Коммит
428157c1e8
|
@ -89,6 +89,13 @@ struct snd_soc_tplg_kcontrol_ops {
|
|||
struct snd_ctl_elem_info *uinfo);
|
||||
};
|
||||
|
||||
/* Bytes ext operations, for TLV byte controls */
|
||||
struct snd_soc_tplg_bytes_ext_ops {
|
||||
u32 id;
|
||||
int (*get)(unsigned int __user *bytes, unsigned int size);
|
||||
int (*put)(const unsigned int __user *bytes, unsigned int size);
|
||||
};
|
||||
|
||||
/*
|
||||
* DAPM widget event handlers - used to map handlers onto widgets.
|
||||
*/
|
||||
|
@ -136,9 +143,13 @@ struct snd_soc_tplg_ops {
|
|||
int (*manifest)(struct snd_soc_component *,
|
||||
struct snd_soc_tplg_manifest *);
|
||||
|
||||
/* bespoke kcontrol handlers available for binding */
|
||||
/* vendor specific kcontrol handlers available for binding */
|
||||
const struct snd_soc_tplg_kcontrol_ops *io_ops;
|
||||
int io_ops_count;
|
||||
|
||||
/* vendor specific bytes ext handlers available for binding */
|
||||
const struct snd_soc_tplg_bytes_ext_ops *bytes_ext_ops;
|
||||
int bytes_ext_ops_count;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SND_SOC_TOPOLOGY
|
||||
|
|
|
@ -156,33 +156,29 @@ static const DECLARE_TLV_DB_SCALE(dpga_tlv, -9450, 150, 1);
|
|||
static const DECLARE_TLV_DB_SCALE(adc_tlv, -900, 300, 0);
|
||||
|
||||
/* {-23, -17, -13.5, -11, -9, -6, -3, 0}dB */
|
||||
static const unsigned int mic_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(5),
|
||||
static const DECLARE_TLV_DB_RANGE(mic_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(-2300, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(-1700, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(-1350, 0, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(-1100, 0, 0),
|
||||
4, 7, TLV_DB_SCALE_ITEM(-900, 300, 0),
|
||||
};
|
||||
4, 7, TLV_DB_SCALE_ITEM(-900, 300, 0)
|
||||
);
|
||||
|
||||
/* {0, 0, 0, -6, 0, 6, 12, 18}dB */
|
||||
static const unsigned int aux_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(aux_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
3, 7, TLV_DB_SCALE_ITEM(-600, 600, 0),
|
||||
};
|
||||
3, 7, TLV_DB_SCALE_ITEM(-600, 600, 0)
|
||||
);
|
||||
|
||||
/* {-16, -13, -10, -7, -5.2, -3,3, -2.2, 0}dB, mute instead of -16dB */
|
||||
static const unsigned int out_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(4),
|
||||
static const DECLARE_TLV_DB_RANGE(out_tlv,
|
||||
0, 3, TLV_DB_SCALE_ITEM(-1600, 300, 1),
|
||||
4, 4, TLV_DB_SCALE_ITEM(-520, 0, 0),
|
||||
5, 5, TLV_DB_SCALE_ITEM(-330, 0, 0),
|
||||
6, 7, TLV_DB_SCALE_ITEM(-220, 220, 0),
|
||||
};
|
||||
6, 7, TLV_DB_SCALE_ITEM(-220, 220, 0)
|
||||
);
|
||||
|
||||
static const unsigned int st_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(8),
|
||||
static const DECLARE_TLV_DB_RANGE(st_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(-12041, 602, 0),
|
||||
2, 3, TLV_DB_SCALE_ITEM(-11087, 250, 0),
|
||||
4, 5, TLV_DB_SCALE_ITEM(-10643, 158, 0),
|
||||
|
@ -190,8 +186,8 @@ static const unsigned int st_tlv[] = {
|
|||
8, 9, TLV_DB_SCALE_ITEM(-10133, 92, 0),
|
||||
10, 13, TLV_DB_SCALE_ITEM(-9958, 70, 0),
|
||||
14, 17, TLV_DB_SCALE_ITEM(-9689, 53, 0),
|
||||
18, 271, TLV_DB_SCALE_ITEM(-9484, 37, 0),
|
||||
};
|
||||
18, 271, TLV_DB_SCALE_ITEM(-9484, 37, 0)
|
||||
);
|
||||
|
||||
/* Sidetone Gain = M * 2^(-5-N) */
|
||||
struct st_gain {
|
||||
|
|
|
@ -1335,11 +1335,10 @@ static DECLARE_TLV_DB_SCALE(dax_dig_gain_tlv, -6300, 100, 1);
|
|||
static DECLARE_TLV_DB_SCALE(hs_ear_dig_gain_tlv, -100, 100, 1);
|
||||
/* -1dB = Mute */
|
||||
|
||||
static const unsigned int hs_gain_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(hs_gain_tlv,
|
||||
0, 3, TLV_DB_SCALE_ITEM(-3200, 400, 0),
|
||||
4, 15, TLV_DB_SCALE_ITEM(-1800, 200, 0),
|
||||
};
|
||||
4, 15, TLV_DB_SCALE_ITEM(-1800, 200, 0)
|
||||
);
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(mic_gain_tlv, 0, 100, 0);
|
||||
|
||||
|
|
|
@ -320,13 +320,12 @@ static const struct reg_default adau1373_reg_defaults[] = {
|
|||
{ ADAU1373_DIGEN, 0x00 },
|
||||
};
|
||||
|
||||
static const unsigned int adau1373_out_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(4),
|
||||
static const DECLARE_TLV_DB_RANGE(adau1373_out_tlv,
|
||||
0, 7, TLV_DB_SCALE_ITEM(-7900, 400, 1),
|
||||
8, 15, TLV_DB_SCALE_ITEM(-4700, 300, 0),
|
||||
16, 23, TLV_DB_SCALE_ITEM(-2300, 200, 0),
|
||||
24, 31, TLV_DB_SCALE_ITEM(-700, 100, 0),
|
||||
};
|
||||
24, 31, TLV_DB_SCALE_ITEM(-700, 100, 0)
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_MINMAX(adau1373_digital_tlv, -9563, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(adau1373_in_pga_tlv, -1300, 100, 1);
|
||||
|
@ -381,12 +380,11 @@ static const char *adau1373_bass_hpf_cutoff_text[] = {
|
|||
"158Hz", "232Hz", "347Hz", "520Hz",
|
||||
};
|
||||
|
||||
static const unsigned int adau1373_bass_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(3),
|
||||
static const DECLARE_TLV_DB_RANGE(adau1373_bass_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(-600, 600, 1),
|
||||
3, 4, TLV_DB_SCALE_ITEM(950, 250, 0),
|
||||
5, 7, TLV_DB_SCALE_ITEM(1400, 150, 0),
|
||||
};
|
||||
5, 7, TLV_DB_SCALE_ITEM(1400, 150, 0)
|
||||
);
|
||||
|
||||
static SOC_ENUM_SINGLE_DECL(adau1373_bass_lpf_cutoff_enum,
|
||||
ADAU1373_BASS1, 5, adau1373_bass_lpf_cutoff_text);
|
||||
|
@ -414,11 +412,10 @@ static SOC_ENUM_SINGLE_DECL(adau1373_3d_level_enum,
|
|||
static SOC_ENUM_SINGLE_DECL(adau1373_3d_cutoff_enum,
|
||||
ADAU1373_3D_CTRL1, 0, adau1373_3d_cutoff_text);
|
||||
|
||||
static const unsigned int adau1373_3d_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(adau1373_3d_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 7, TLV_DB_LINEAR_ITEM(-1800, -120),
|
||||
};
|
||||
1, 7, TLV_DB_LINEAR_ITEM(-1800, -120)
|
||||
);
|
||||
|
||||
static const char *adau1373_lr_mux_text[] = {
|
||||
"Mute",
|
||||
|
|
|
@ -82,12 +82,11 @@ static int amp_mixer_event(struct snd_soc_dapm_widget *w,
|
|||
static const DECLARE_TLV_DB_SCALE(vol_tlv, -3450, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(hp_tlv, -4650, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(adc_rec_tlv, -1650, 150, 0);
|
||||
static const unsigned int boost_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(3),
|
||||
static const DECLARE_TLV_DB_RANGE(boost_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0),
|
||||
};
|
||||
2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(dig_tlv, 0, 600, 0);
|
||||
|
||||
static const struct snd_kcontrol_new alc5621_vol_snd_controls[] = {
|
||||
|
|
|
@ -146,11 +146,10 @@ static const DECLARE_TLV_DB_SCALE(vol_tlv, -3450, 150, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(hp_tlv, -4650, 150, 0);
|
||||
/* -16.5db min scale, 1.5db steps, no mute */
|
||||
static const DECLARE_TLV_DB_SCALE(adc_rec_tlv, -1650, 150, 0);
|
||||
static const unsigned int boost_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(boost_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(0, 2000, 0),
|
||||
1, 3, TLV_DB_SCALE_ITEM(2000, 1000, 0),
|
||||
};
|
||||
1, 3, TLV_DB_SCALE_ITEM(2000, 1000, 0)
|
||||
);
|
||||
/* 0db min scale, 6 db steps, no mute */
|
||||
static const DECLARE_TLV_DB_SCALE(dig_tlv, 0, 600, 0);
|
||||
/* 0db min scalem 0.75db steps, no mute */
|
||||
|
|
|
@ -145,11 +145,10 @@ static DECLARE_TLV_DB_SCALE(mix_tlv, -50, 50, 0);
|
|||
|
||||
static DECLARE_TLV_DB_SCALE(beep_tlv, -56, 200, 0);
|
||||
|
||||
static const unsigned int limiter_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(limiter_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(-3000, 600, 0),
|
||||
3, 7, TLV_DB_SCALE_ITEM(-1200, 300, 0),
|
||||
};
|
||||
3, 7, TLV_DB_SCALE_ITEM(-1200, 300, 0)
|
||||
);
|
||||
|
||||
static const char * const cs42l52_adca_text[] = {
|
||||
"Input1A", "Input2A", "Input3A", "Input4A", "PGA Input Left"};
|
||||
|
|
|
@ -140,21 +140,18 @@ static DECLARE_TLV_DB_SCALE(tone_tlv, -1050, 150, 0);
|
|||
static DECLARE_TLV_DB_SCALE(preamp_tlv, 0, 1000, 0);
|
||||
static DECLARE_TLV_DB_SCALE(pga_tlv, -600, 50, 0);
|
||||
|
||||
static const unsigned int ngnb_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(ngnb_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(-8200, 600, 0),
|
||||
2, 5, TLV_DB_SCALE_ITEM(-7600, 300, 0),
|
||||
};
|
||||
static const unsigned int ngb_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
2, 5, TLV_DB_SCALE_ITEM(-7600, 300, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_RANGE(ngb_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(-6400, 600, 0),
|
||||
3, 7, TLV_DB_SCALE_ITEM(-4600, 300, 0),
|
||||
};
|
||||
static const unsigned int alc_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
3, 7, TLV_DB_SCALE_ITEM(-4600, 300, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_RANGE(alc_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(-3000, 600, 0),
|
||||
3, 7, TLV_DB_SCALE_ITEM(-1200, 300, 0),
|
||||
};
|
||||
3, 7, TLV_DB_SCALE_ITEM(-1200, 300, 0)
|
||||
);
|
||||
|
||||
static const char * const beep_config_text[] = {
|
||||
"Off", "Single", "Multiple", "Continuous"
|
||||
|
|
|
@ -161,11 +161,10 @@ static bool cs42l73_readable_register(struct device *dev, unsigned int reg)
|
|||
}
|
||||
}
|
||||
|
||||
static const unsigned int hpaloa_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(hpaloa_tlv,
|
||||
0, 13, TLV_DB_SCALE_ITEM(-7600, 200, 0),
|
||||
14, 75, TLV_DB_SCALE_ITEM(-4900, 100, 0),
|
||||
};
|
||||
14, 75, TLV_DB_SCALE_ITEM(-4900, 100, 0)
|
||||
);
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(adc_boost_tlv, 0, 2500, 0);
|
||||
|
||||
|
@ -175,11 +174,10 @@ static DECLARE_TLV_DB_SCALE(ipd_tlv, -9600, 100, 0);
|
|||
|
||||
static DECLARE_TLV_DB_SCALE(micpga_tlv, -600, 50, 0);
|
||||
|
||||
static const unsigned int limiter_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(limiter_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(-3000, 600, 0),
|
||||
3, 7, TLV_DB_SCALE_ITEM(-1200, 300, 0),
|
||||
};
|
||||
3, 7, TLV_DB_SCALE_ITEM(-1200, 300, 0)
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(attn_tlv, -6300, 100, 1);
|
||||
|
||||
|
|
|
@ -267,33 +267,29 @@ enum clk_src {
|
|||
*
|
||||
* Reserved area are considered as "mute".
|
||||
*/
|
||||
static const unsigned int hp_out_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(hp_out_tlv,
|
||||
0x0, 0x10, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
|
||||
/* -54 dB to +15 dB */
|
||||
0x11, 0x3f, TLV_DB_SCALE_ITEM(-5400, 150, 0),
|
||||
};
|
||||
0x11, 0x3f, TLV_DB_SCALE_ITEM(-5400, 150, 0)
|
||||
);
|
||||
|
||||
static const unsigned int lineout_vol_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(lineout_vol_tlv,
|
||||
0x0, 0x10, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
|
||||
/* -54dB to 15dB */
|
||||
0x11, 0x3f, TLV_DB_SCALE_ITEM(-5400, 150, 0)
|
||||
};
|
||||
);
|
||||
|
||||
static const unsigned int mono_vol_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(mono_vol_tlv,
|
||||
0x0, 0x2, TLV_DB_SCALE_ITEM(-1800, 0, 1),
|
||||
/* -18dB to 6dB */
|
||||
0x3, 0x7, TLV_DB_SCALE_ITEM(-1800, 600, 0)
|
||||
};
|
||||
);
|
||||
|
||||
static const unsigned int aux1_vol_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(aux1_vol_tlv,
|
||||
0x0, 0x10, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
|
||||
/* -48dB to 21dB */
|
||||
0x11, 0x3f, TLV_DB_SCALE_ITEM(-4800, 150, 0)
|
||||
};
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(eq_gain_tlv, -1050, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(adc_eq_master_gain_tlv, -1800, 600, 1);
|
||||
|
|
|
@ -28,27 +28,24 @@
|
|||
|
||||
|
||||
/* Gain and Volume */
|
||||
static const unsigned int aux_vol_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(aux_vol_tlv,
|
||||
/* -54dB */
|
||||
0x0, 0x11, TLV_DB_SCALE_ITEM(-5400, 0, 0),
|
||||
/* -52.5dB to 15dB */
|
||||
0x12, 0x3f, TLV_DB_SCALE_ITEM(-5250, 150, 0)
|
||||
};
|
||||
);
|
||||
|
||||
static const unsigned int digital_gain_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(digital_gain_tlv,
|
||||
0x0, 0x07, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
|
||||
/* -78dB to 12dB */
|
||||
0x08, 0x7f, TLV_DB_SCALE_ITEM(-7800, 75, 0)
|
||||
};
|
||||
);
|
||||
|
||||
static const unsigned int alc_analog_gain_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(alc_analog_gain_tlv,
|
||||
0x0, 0x0, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
|
||||
/* 0dB to 36dB */
|
||||
0x01, 0x07, TLV_DB_SCALE_ITEM(0, 600, 0)
|
||||
};
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(mic_vol_tlv, -600, 600, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(mixin_gain_tlv, -450, 150, 0);
|
||||
|
|
|
@ -289,26 +289,23 @@ enum clk_src {
|
|||
|
||||
/* Gain and Volume */
|
||||
|
||||
static const unsigned int aux_vol_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(aux_vol_tlv,
|
||||
0x0, 0x10, TLV_DB_SCALE_ITEM(-5400, 0, 0),
|
||||
/* -54dB to 15dB */
|
||||
0x11, 0x3f, TLV_DB_SCALE_ITEM(-5400, 150, 0)
|
||||
};
|
||||
);
|
||||
|
||||
static const unsigned int digital_gain_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(digital_gain_tlv,
|
||||
0x0, 0x07, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
|
||||
/* -78dB to 12dB */
|
||||
0x08, 0x7f, TLV_DB_SCALE_ITEM(-7800, 75, 0)
|
||||
};
|
||||
);
|
||||
|
||||
static const unsigned int alc_analog_gain_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(alc_analog_gain_tlv,
|
||||
0x0, 0x0, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
|
||||
/* 0dB to 36dB */
|
||||
0x01, 0x07, TLV_DB_SCALE_ITEM(0, 600, 0)
|
||||
};
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(mic_vol_tlv, -600, 600, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(mixin_gain_tlv, -450, 150, 0);
|
||||
|
|
|
@ -78,11 +78,10 @@ struct jz4740_codec {
|
|||
struct regmap *regmap;
|
||||
};
|
||||
|
||||
static const unsigned int jz4740_mic_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(jz4740_mic_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(0, 600, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(2000, 0, 0),
|
||||
};
|
||||
3, 3, TLV_DB_SCALE_ITEM(2000, 0, 0)
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(jz4740_out_tlv, 0, 200, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(jz4740_in_tlv, -3450, 150, 0);
|
||||
|
|
|
@ -63,8 +63,7 @@ static int max9768_set_gpio(struct snd_kcontrol *kcontrol,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const unsigned int volume_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(43),
|
||||
static const DECLARE_TLV_DB_RANGE(volume_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(-16150, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(-9280, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(-9030, 0, 0),
|
||||
|
@ -107,8 +106,8 @@ static const unsigned int volume_tlv[] = {
|
|||
51, 57, TLV_DB_SCALE_ITEM(290, 50, 0),
|
||||
58, 58, TLV_DB_SCALE_ITEM(650, 0, 0),
|
||||
59, 62, TLV_DB_SCALE_ITEM(700, 60, 0),
|
||||
63, 63, TLV_DB_SCALE_ITEM(950, 0, 0),
|
||||
};
|
||||
63, 63, TLV_DB_SCALE_ITEM(950, 0, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new max9768_volume[] = {
|
||||
SOC_SINGLE_TLV("Playback Volume", MAX9768_VOL, 0, 63, 0, volume_tlv),
|
||||
|
|
|
@ -425,29 +425,26 @@ static int max98088_mic2pre_get(struct snd_kcontrol *kcontrol,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const unsigned int max98088_micboost_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
0, 1, TLV_DB_SCALE_ITEM(0, 2000, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0),
|
||||
};
|
||||
static const DECLARE_TLV_DB_RANGE(max98088_micboost_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(0, 2000, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0)
|
||||
);
|
||||
|
||||
static const unsigned int max98088_hp_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(5),
|
||||
static const DECLARE_TLV_DB_RANGE(max98088_hp_tlv,
|
||||
0, 6, TLV_DB_SCALE_ITEM(-6700, 400, 0),
|
||||
7, 14, TLV_DB_SCALE_ITEM(-4000, 300, 0),
|
||||
15, 21, TLV_DB_SCALE_ITEM(-1700, 200, 0),
|
||||
22, 27, TLV_DB_SCALE_ITEM(-400, 100, 0),
|
||||
28, 31, TLV_DB_SCALE_ITEM(150, 50, 0),
|
||||
};
|
||||
28, 31, TLV_DB_SCALE_ITEM(150, 50, 0)
|
||||
);
|
||||
|
||||
static const unsigned int max98088_spk_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(5),
|
||||
static const DECLARE_TLV_DB_RANGE(max98088_spk_tlv,
|
||||
0, 6, TLV_DB_SCALE_ITEM(-6200, 400, 0),
|
||||
7, 14, TLV_DB_SCALE_ITEM(-3500, 300, 0),
|
||||
15, 21, TLV_DB_SCALE_ITEM(-1200, 200, 0),
|
||||
22, 27, TLV_DB_SCALE_ITEM(100, 100, 0),
|
||||
28, 31, TLV_DB_SCALE_ITEM(650, 50, 0),
|
||||
};
|
||||
28, 31, TLV_DB_SCALE_ITEM(650, 50, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new max98088_snd_controls[] = {
|
||||
|
||||
|
|
|
@ -293,22 +293,20 @@ static int max98090_reset(struct max98090_priv *max98090)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static const unsigned int max98090_micboost_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(max98090_micboost_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(0, 2000, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0),
|
||||
};
|
||||
2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0)
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(max98090_mic_tlv, 0, 100, 0);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(max98090_line_single_ended_tlv,
|
||||
-600, 600, 0);
|
||||
|
||||
static const unsigned int max98090_line_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(max98090_line_tlv,
|
||||
0, 3, TLV_DB_SCALE_ITEM(-600, 300, 0),
|
||||
4, 5, TLV_DB_SCALE_ITEM(1400, 600, 0),
|
||||
};
|
||||
4, 5, TLV_DB_SCALE_ITEM(1400, 600, 0)
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(max98090_avg_tlv, 0, 600, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(max98090_av_tlv, -1200, 100, 0);
|
||||
|
@ -324,38 +322,34 @@ static const DECLARE_TLV_DB_SCALE(max98090_alccomp_tlv, -3100, 100, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(max98090_drcexp_tlv, -6600, 100, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(max98090_sdg_tlv, 50, 200, 0);
|
||||
|
||||
static const unsigned int max98090_mixout_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(max98090_mixout_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(-1200, 250, 0),
|
||||
2, 3, TLV_DB_SCALE_ITEM(-600, 600, 0),
|
||||
};
|
||||
2, 3, TLV_DB_SCALE_ITEM(-600, 600, 0)
|
||||
);
|
||||
|
||||
static const unsigned int max98090_hp_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(5),
|
||||
static const DECLARE_TLV_DB_RANGE(max98090_hp_tlv,
|
||||
0, 6, TLV_DB_SCALE_ITEM(-6700, 400, 0),
|
||||
7, 14, TLV_DB_SCALE_ITEM(-4000, 300, 0),
|
||||
15, 21, TLV_DB_SCALE_ITEM(-1700, 200, 0),
|
||||
22, 27, TLV_DB_SCALE_ITEM(-400, 100, 0),
|
||||
28, 31, TLV_DB_SCALE_ITEM(150, 50, 0),
|
||||
};
|
||||
28, 31, TLV_DB_SCALE_ITEM(150, 50, 0)
|
||||
);
|
||||
|
||||
static const unsigned int max98090_spk_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(5),
|
||||
static const DECLARE_TLV_DB_RANGE(max98090_spk_tlv,
|
||||
0, 4, TLV_DB_SCALE_ITEM(-4800, 400, 0),
|
||||
5, 10, TLV_DB_SCALE_ITEM(-2900, 300, 0),
|
||||
11, 14, TLV_DB_SCALE_ITEM(-1200, 200, 0),
|
||||
15, 29, TLV_DB_SCALE_ITEM(-500, 100, 0),
|
||||
30, 39, TLV_DB_SCALE_ITEM(950, 50, 0),
|
||||
};
|
||||
30, 39, TLV_DB_SCALE_ITEM(950, 50, 0)
|
||||
);
|
||||
|
||||
static const unsigned int max98090_rcv_lout_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(5),
|
||||
static const DECLARE_TLV_DB_RANGE(max98090_rcv_lout_tlv,
|
||||
0, 6, TLV_DB_SCALE_ITEM(-6200, 400, 0),
|
||||
7, 14, TLV_DB_SCALE_ITEM(-3500, 300, 0),
|
||||
15, 21, TLV_DB_SCALE_ITEM(-1200, 200, 0),
|
||||
22, 27, TLV_DB_SCALE_ITEM(100, 100, 0),
|
||||
28, 31, TLV_DB_SCALE_ITEM(650, 50, 0),
|
||||
};
|
||||
28, 31, TLV_DB_SCALE_ITEM(650, 50, 0)
|
||||
);
|
||||
|
||||
static int max98090_get_enab_tlv(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
|
|
|
@ -398,48 +398,43 @@ static int max98095_mic2pre_get(struct snd_kcontrol *kcontrol,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const unsigned int max98095_micboost_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(max98095_micboost_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(0, 2000, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0),
|
||||
};
|
||||
2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0)
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(max98095_mic_tlv, 0, 100, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(max98095_adc_tlv, -1200, 100, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(max98095_adcboost_tlv, 0, 600, 0);
|
||||
|
||||
static const unsigned int max98095_hp_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(5),
|
||||
static const DECLARE_TLV_DB_RANGE(max98095_hp_tlv,
|
||||
0, 6, TLV_DB_SCALE_ITEM(-6700, 400, 0),
|
||||
7, 14, TLV_DB_SCALE_ITEM(-4000, 300, 0),
|
||||
15, 21, TLV_DB_SCALE_ITEM(-1700, 200, 0),
|
||||
22, 27, TLV_DB_SCALE_ITEM(-400, 100, 0),
|
||||
28, 31, TLV_DB_SCALE_ITEM(150, 50, 0),
|
||||
};
|
||||
28, 31, TLV_DB_SCALE_ITEM(150, 50, 0)
|
||||
);
|
||||
|
||||
static const unsigned int max98095_spk_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(4),
|
||||
static const DECLARE_TLV_DB_RANGE(max98095_spk_tlv,
|
||||
0, 10, TLV_DB_SCALE_ITEM(-5900, 400, 0),
|
||||
11, 18, TLV_DB_SCALE_ITEM(-1700, 200, 0),
|
||||
19, 27, TLV_DB_SCALE_ITEM(-200, 100, 0),
|
||||
28, 39, TLV_DB_SCALE_ITEM(650, 50, 0),
|
||||
};
|
||||
28, 39, TLV_DB_SCALE_ITEM(650, 50, 0)
|
||||
);
|
||||
|
||||
static const unsigned int max98095_rcv_lout_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(5),
|
||||
static const DECLARE_TLV_DB_RANGE(max98095_rcv_lout_tlv,
|
||||
0, 6, TLV_DB_SCALE_ITEM(-6200, 400, 0),
|
||||
7, 14, TLV_DB_SCALE_ITEM(-3500, 300, 0),
|
||||
15, 21, TLV_DB_SCALE_ITEM(-1200, 200, 0),
|
||||
22, 27, TLV_DB_SCALE_ITEM(100, 100, 0),
|
||||
28, 31, TLV_DB_SCALE_ITEM(650, 50, 0),
|
||||
};
|
||||
28, 31, TLV_DB_SCALE_ITEM(650, 50, 0)
|
||||
);
|
||||
|
||||
static const unsigned int max98095_lin_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(3),
|
||||
static const DECLARE_TLV_DB_RANGE(max98095_lin_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(-600, 300, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(300, 1100, 0),
|
||||
4, 5, TLV_DB_SCALE_ITEM(1400, 600, 0),
|
||||
};
|
||||
4, 5, TLV_DB_SCALE_ITEM(1400, 600, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new max98095_snd_controls[] = {
|
||||
|
||||
|
|
|
@ -67,13 +67,12 @@ static const struct regmap_config max9850_regmap = {
|
|||
.cache_type = REGCACHE_RBTREE,
|
||||
};
|
||||
|
||||
static const unsigned int max9850_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(4),
|
||||
static const DECLARE_TLV_DB_RANGE(max9850_tlv,
|
||||
0x18, 0x1f, TLV_DB_SCALE_ITEM(-7450, 400, 0),
|
||||
0x20, 0x33, TLV_DB_SCALE_ITEM(-4150, 200, 0),
|
||||
0x34, 0x37, TLV_DB_SCALE_ITEM(-150, 100, 0),
|
||||
0x38, 0x3f, TLV_DB_SCALE_ITEM(250, 50, 0),
|
||||
};
|
||||
0x38, 0x3f, TLV_DB_SCALE_ITEM(250, 50, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new max9850_controls[] = {
|
||||
SOC_SINGLE_TLV("Headphone Volume", MAX9850_VOLUME, 0, 0x3f, 1, max9850_tlv),
|
||||
|
|
|
@ -28,19 +28,17 @@ static const struct reg_default max9877_regs[] = {
|
|||
{ 4, 0x49 },
|
||||
};
|
||||
|
||||
static const unsigned int max9877_pgain_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(max9877_pgain_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(0, 900, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(2000, 0, 0),
|
||||
};
|
||||
2, 2, TLV_DB_SCALE_ITEM(2000, 0, 0)
|
||||
);
|
||||
|
||||
static const unsigned int max9877_output_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(4),
|
||||
static const DECLARE_TLV_DB_RANGE(max9877_output_tlv,
|
||||
0, 7, TLV_DB_SCALE_ITEM(-7900, 400, 1),
|
||||
8, 15, TLV_DB_SCALE_ITEM(-4700, 300, 0),
|
||||
16, 23, TLV_DB_SCALE_ITEM(-2300, 200, 0),
|
||||
24, 31, TLV_DB_SCALE_ITEM(-700, 100, 0),
|
||||
};
|
||||
24, 31, TLV_DB_SCALE_ITEM(-700, 100, 0)
|
||||
);
|
||||
|
||||
static const char *max9877_out_mode[] = {
|
||||
"INA -> SPK",
|
||||
|
|
|
@ -174,16 +174,15 @@ static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -95625, 375, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
|
||||
/* {0, +20, +24, +30, +35, +40, +44, +50, +52}dB */
|
||||
static unsigned int mic_bst_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(7),
|
||||
static const DECLARE_TLV_DB_RANGE(mic_bst_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
|
||||
3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
|
||||
6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0),
|
||||
};
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
|
||||
);
|
||||
|
||||
static int rt5631_dmic_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
|
|
|
@ -347,16 +347,15 @@ static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
|
||||
|
||||
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
|
||||
static unsigned int bst_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(7),
|
||||
static const DECLARE_TLV_DB_RANGE(bst_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
|
||||
3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
|
||||
6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0),
|
||||
};
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
|
||||
);
|
||||
|
||||
/* Interface data select */
|
||||
static const char * const rt5640_data_select[] = {
|
||||
|
|
|
@ -459,16 +459,15 @@ static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -1725, 75, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
|
||||
|
||||
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
|
||||
static unsigned int bst_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(7),
|
||||
static const DECLARE_TLV_DB_RANGE(bst_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
|
||||
3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
|
||||
6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0),
|
||||
};
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new rt5645_snd_controls[] = {
|
||||
/* Speaker Output Volume */
|
||||
|
|
|
@ -292,16 +292,15 @@ static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
|
||||
|
||||
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
|
||||
static unsigned int bst_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(7),
|
||||
static const DECLARE_TLV_DB_RANGE(bst_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
|
||||
3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
|
||||
6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0),
|
||||
};
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
|
||||
);
|
||||
|
||||
/* Interface data select */
|
||||
static const char * const rt5651_data_select[] = {
|
||||
|
|
|
@ -592,16 +592,15 @@ static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
|
||||
|
||||
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
|
||||
static unsigned int bst_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(7),
|
||||
static const DECLARE_TLV_DB_RANGE(bst_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
|
||||
3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
|
||||
6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0),
|
||||
};
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
|
||||
);
|
||||
|
||||
/* Interface data select */
|
||||
static const char * const rt5670_data_select[] = {
|
||||
|
|
|
@ -788,16 +788,15 @@ static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(st_vol_tlv, -4650, 150, 0);
|
||||
|
||||
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
|
||||
static unsigned int bst_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(7),
|
||||
static const DECLARE_TLV_DB_RANGE(bst_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
|
||||
3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
|
||||
6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0),
|
||||
};
|
||||
8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
|
||||
);
|
||||
|
||||
static int rt5677_dsp_vad_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
|
|
|
@ -406,11 +406,10 @@ static int dac_put_volsw(struct snd_kcontrol *kcontrol,
|
|||
static const DECLARE_TLV_DB_SCALE(capture_6db_attenuate, -600, 600, 0);
|
||||
|
||||
/* tlv for mic gain, 0db 20db 30db 40db */
|
||||
static const unsigned int mic_gain_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(mic_gain_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 3, TLV_DB_SCALE_ITEM(2000, 1000, 0),
|
||||
};
|
||||
1, 3, TLV_DB_SCALE_ITEM(2000, 1000, 0)
|
||||
);
|
||||
|
||||
/* tlv for hp volume, -51.5db to 12.0db, step .5db */
|
||||
static const DECLARE_TLV_DB_SCALE(headphone_volume, -5150, 50, 0);
|
||||
|
|
|
@ -75,11 +75,10 @@ static const struct soc_enum ssm2602_enum[] = {
|
|||
ssm2602_deemph),
|
||||
};
|
||||
|
||||
static const unsigned int ssm260x_outmix_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(ssm260x_outmix_tlv,
|
||||
0, 47, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 0),
|
||||
48, 127, TLV_DB_SCALE_ITEM(-7400, 100, 0),
|
||||
};
|
||||
48, 127, TLV_DB_SCALE_ITEM(-7400, 100, 0)
|
||||
);
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(ssm260x_inpga_tlv, -3450, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(ssm260x_sidetone_tlv, -1500, 300, 0);
|
||||
|
|
|
@ -493,8 +493,7 @@ static int tas2552_runtime_suspend(struct device *dev)
|
|||
regcache_cache_only(tas2552->regmap, true);
|
||||
regcache_mark_dirty(tas2552->regmap);
|
||||
|
||||
if (tas2552->enable_gpio)
|
||||
gpiod_set_value(tas2552->enable_gpio, 0);
|
||||
gpiod_set_value(tas2552->enable_gpio, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -503,8 +502,7 @@ static int tas2552_runtime_resume(struct device *dev)
|
|||
{
|
||||
struct tas2552_data *tas2552 = dev_get_drvdata(dev);
|
||||
|
||||
if (tas2552->enable_gpio)
|
||||
gpiod_set_value(tas2552->enable_gpio, 1);
|
||||
gpiod_set_value(tas2552->enable_gpio, 1);
|
||||
|
||||
tas2552_sw_shutdown(tas2552, 0);
|
||||
|
||||
|
@ -585,8 +583,7 @@ static int tas2552_codec_probe(struct snd_soc_codec *codec)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (tas2552->enable_gpio)
|
||||
gpiod_set_value(tas2552->enable_gpio, 1);
|
||||
gpiod_set_value(tas2552->enable_gpio, 1);
|
||||
|
||||
ret = pm_runtime_get_sync(codec->dev);
|
||||
if (ret < 0) {
|
||||
|
@ -610,8 +607,7 @@ static int tas2552_codec_probe(struct snd_soc_codec *codec)
|
|||
return 0;
|
||||
|
||||
probe_fail:
|
||||
if (tas2552->enable_gpio)
|
||||
gpiod_set_value(tas2552->enable_gpio, 0);
|
||||
gpiod_set_value(tas2552->enable_gpio, 0);
|
||||
|
||||
regulator_bulk_disable(ARRAY_SIZE(tas2552->supplies),
|
||||
tas2552->supplies);
|
||||
|
@ -624,8 +620,7 @@ static int tas2552_codec_remove(struct snd_soc_codec *codec)
|
|||
|
||||
pm_runtime_put(codec->dev);
|
||||
|
||||
if (tas2552->enable_gpio)
|
||||
gpiod_set_value(tas2552->enable_gpio, 0);
|
||||
gpiod_set_value(tas2552->enable_gpio, 0);
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
#define TAS2552_BOOST_APT_CTRL 0x14
|
||||
#define TAS2552_VER_NUM 0x16
|
||||
#define TAS2552_VBAT_DATA 0x19
|
||||
#define TAS2552_MAX_REG 0x20
|
||||
#define TAS2552_MAX_REG TAS2552_VBAT_DATA
|
||||
|
||||
/* CFG1 Register Masks */
|
||||
#define TAS2552_DEV_RESET (1 << 0)
|
||||
|
|
|
@ -266,10 +266,14 @@ static int tas5086_set_deemph(struct snd_soc_codec *codec)
|
|||
struct tas5086_private *priv = snd_soc_codec_get_drvdata(codec);
|
||||
int i, val = 0;
|
||||
|
||||
if (priv->deemph)
|
||||
for (i = 0; i < ARRAY_SIZE(tas5086_deemph); i++)
|
||||
if (tas5086_deemph[i] == priv->rate)
|
||||
if (priv->deemph) {
|
||||
for (i = 0; i < ARRAY_SIZE(tas5086_deemph); i++) {
|
||||
if (tas5086_deemph[i] == priv->rate) {
|
||||
val = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return regmap_update_bits(priv->regmap, TAS5086_SYS_CONTROL_1,
|
||||
TAS5086_DEEMPH_MASK, val);
|
||||
|
|
|
@ -259,8 +259,7 @@ static int tpa6130a2_put_volsw(struct snd_kcontrol *kcontrol,
|
|||
* TPA6130 volume. From -59.5 to 4 dB with increasing step size when going
|
||||
* down in gain.
|
||||
*/
|
||||
static const unsigned int tpa6130_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(10),
|
||||
static const DECLARE_TLV_DB_RANGE(tpa6130_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(-5950, 600, 0),
|
||||
2, 3, TLV_DB_SCALE_ITEM(-5000, 250, 0),
|
||||
4, 5, TLV_DB_SCALE_ITEM(-4550, 160, 0),
|
||||
|
@ -270,8 +269,8 @@ static const unsigned int tpa6130_tlv[] = {
|
|||
12, 13, TLV_DB_SCALE_ITEM(-3040, 180, 0),
|
||||
14, 20, TLV_DB_SCALE_ITEM(-2710, 110, 0),
|
||||
21, 37, TLV_DB_SCALE_ITEM(-1960, 74, 0),
|
||||
38, 63, TLV_DB_SCALE_ITEM(-720, 45, 0),
|
||||
};
|
||||
38, 63, TLV_DB_SCALE_ITEM(-720, 45, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new tpa6130a2_controls[] = {
|
||||
SOC_SINGLE_EXT_TLV("TPA6130A2 Headphone Playback Volume",
|
||||
|
@ -280,12 +279,11 @@ static const struct snd_kcontrol_new tpa6130a2_controls[] = {
|
|||
tpa6130_tlv),
|
||||
};
|
||||
|
||||
static const unsigned int tpa6140_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(3),
|
||||
static const DECLARE_TLV_DB_RANGE(tpa6140_tlv,
|
||||
0, 8, TLV_DB_SCALE_ITEM(-5900, 400, 0),
|
||||
9, 16, TLV_DB_SCALE_ITEM(-2500, 200, 0),
|
||||
17, 31, TLV_DB_SCALE_ITEM(-1000, 100, 0),
|
||||
};
|
||||
17, 31, TLV_DB_SCALE_ITEM(-1000, 100, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new tpa6140a2_controls[] = {
|
||||
SOC_SINGLE_EXT_TLV("TPA6140A2 Headphone Playback Volume",
|
||||
|
|
|
@ -524,12 +524,11 @@ static const struct snd_kcontrol_new twl4030_dapm_abypassv_control =
|
|||
SOC_DAPM_SINGLE("Switch", TWL4030_REG_VDL_APGA_CTL, 2, 1, 0);
|
||||
|
||||
/* Digital bypass gain, mute instead of -30dB */
|
||||
static const unsigned int twl4030_dapm_dbypass_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(3),
|
||||
static const DECLARE_TLV_DB_RANGE(twl4030_dapm_dbypass_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(-3000, 600, 1),
|
||||
2, 3, TLV_DB_SCALE_ITEM(-2400, 0, 0),
|
||||
4, 7, TLV_DB_SCALE_ITEM(-1800, 600, 0),
|
||||
};
|
||||
4, 7, TLV_DB_SCALE_ITEM(-1800, 600, 0)
|
||||
);
|
||||
|
||||
/* Digital bypass left (TX1L -> RX2L) */
|
||||
static const struct snd_kcontrol_new twl4030_dapm_dbypassl_control =
|
||||
|
|
|
@ -269,12 +269,11 @@ static DECLARE_TLV_DB_SCALE(amix_tlv, -4950, 150, 1);
|
|||
* from -66 dB in 0.5 dB steps (2 dB steps, really) and
|
||||
* from -52 dB in 0.25 dB steps
|
||||
*/
|
||||
static const unsigned int mvol_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(3),
|
||||
static const DECLARE_TLV_DB_RANGE(mvol_tlv,
|
||||
0, 15, TLV_DB_SCALE_ITEM(-8200, 100, 1),
|
||||
16, 43, TLV_DB_SCALE_ITEM(-6600, 50, 0),
|
||||
44, 252, TLV_DB_SCALE_ITEM(-5200, 25, 0),
|
||||
};
|
||||
44, 252, TLV_DB_SCALE_ITEM(-5200, 25, 0)
|
||||
);
|
||||
|
||||
/*
|
||||
* from -72 dB in 1.5 dB steps (6 dB steps really),
|
||||
|
@ -282,13 +281,12 @@ static const unsigned int mvol_tlv[] = {
|
|||
* from -60 dB in 0.5 dB steps (2 dB steps really) and
|
||||
* from -46 dB in 0.25 dB steps
|
||||
*/
|
||||
static const unsigned int vc_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(4),
|
||||
static const DECLARE_TLV_DB_RANGE(vc_tlv,
|
||||
0, 7, TLV_DB_SCALE_ITEM(-7800, 150, 1),
|
||||
8, 15, TLV_DB_SCALE_ITEM(-6600, 75, 0),
|
||||
16, 43, TLV_DB_SCALE_ITEM(-6000, 50, 0),
|
||||
44, 228, TLV_DB_SCALE_ITEM(-4600, 25, 0),
|
||||
};
|
||||
44, 228, TLV_DB_SCALE_ITEM(-4600, 25, 0)
|
||||
);
|
||||
|
||||
/* from 0 to 6 dB in 2 dB steps if SPF mode != flat */
|
||||
static DECLARE_TLV_DB_SCALE(tr_tlv, 0, 200, 0);
|
||||
|
|
|
@ -394,11 +394,10 @@ static DECLARE_TLV_DB_SCALE(dac_pcm_tlv, -7163, 36, 1);
|
|||
static DECLARE_TLV_DB_SCALE(adc_pcm_tlv, -12700, 50, 1);
|
||||
static DECLARE_TLV_DB_SCALE(out_mix_tlv, -1500, 300, 1);
|
||||
|
||||
static const unsigned int capture_sd_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(capture_sd_tlv,
|
||||
0, 12, TLV_DB_SCALE_ITEM(-3600, 300, 1),
|
||||
13, 15, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
};
|
||||
13, 15, TLV_DB_SCALE_ITEM(0, 0, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new wm8350_snd_controls[] = {
|
||||
SOC_ENUM("Playback Deemphasis", wm8350_enum[0]),
|
||||
|
|
|
@ -370,10 +370,7 @@ static int outmixer_event (struct snd_soc_dapm_widget *w,
|
|||
}
|
||||
|
||||
/* INMIX dB values */
|
||||
static const unsigned int in_mix_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0,7, TLV_DB_SCALE_ITEM(-1200, 600, 0),
|
||||
};
|
||||
static const DECLARE_TLV_DB_SCALE(in_mix_tlv, -1200, 600, 0);
|
||||
|
||||
/* Left In PGA Connections */
|
||||
static const struct snd_kcontrol_new wm8400_dapm_lin12_pga_controls[] = {
|
||||
|
|
|
@ -79,13 +79,12 @@ static int wm8737_reset(struct snd_soc_codec *codec)
|
|||
return snd_soc_write(codec, WM8737_RESET, 0);
|
||||
}
|
||||
|
||||
static const unsigned int micboost_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(4),
|
||||
static const DECLARE_TLV_DB_RANGE(micboost_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(1300, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(1800, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(2800, 0, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(3300, 0, 0),
|
||||
};
|
||||
3, 3, TLV_DB_SCALE_ITEM(3300, 0, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(pga_tlv, -9750, 50, 1);
|
||||
static const DECLARE_TLV_DB_SCALE(adc_tlv, -600, 600, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(ng_tlv, -7800, 600, 0);
|
||||
|
|
|
@ -276,12 +276,11 @@ static const DECLARE_TLV_DB_SCALE(rec_mix_tlv, -1500, 300, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(mic_preamp_tlv, 1200, 600, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(adc_tlv, -9750, 50, 1);
|
||||
static const DECLARE_TLV_DB_SCALE(dac_tlv, -12750, 50, 1);
|
||||
static const unsigned int out_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(out_tlv,
|
||||
/* 0000000 - 0101111 = "Analogue mute" */
|
||||
0, 48, TLV_DB_SCALE_ITEM(-25500, 0, 0),
|
||||
48, 127, TLV_DB_SCALE_ITEM(-7300, 100, 0),
|
||||
};
|
||||
48, 127, TLV_DB_SCALE_ITEM(-7300, 100, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(mix_tlv, -1500, 300, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(voice_mix_tlv, -1200, 300, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(pga_tlv, -1725, 75, 0);
|
||||
|
|
|
@ -331,13 +331,12 @@ static const DECLARE_TLV_DB_SCALE(out_tlv, -12100, 100, 1);
|
|||
static const DECLARE_TLV_DB_SCALE(hp_sec_tlv, -700, 100, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(adc_tlv, -7200, 75, 1);
|
||||
static const DECLARE_TLV_DB_SCALE(sidetone_tlv, -3600, 300, 0);
|
||||
static unsigned int boost_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(4),
|
||||
static const DECLARE_TLV_DB_RANGE(boost_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(13, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(20, 0, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(29, 0, 0),
|
||||
};
|
||||
3, 3, TLV_DB_SCALE_ITEM(29, 0, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(pga_tlv, -2325, 75, 0);
|
||||
|
||||
static const struct snd_kcontrol_new wm8961_snd_controls[] = {
|
||||
|
|
|
@ -1456,14 +1456,13 @@ static int wm8962_reset(struct wm8962_priv *wm8962)
|
|||
|
||||
static const DECLARE_TLV_DB_SCALE(inpga_tlv, -2325, 75, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(mixin_tlv, -1500, 300, 0);
|
||||
static const unsigned int mixinpga_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(5),
|
||||
static const DECLARE_TLV_DB_RANGE(mixinpga_tlv,
|
||||
0, 1, TLV_DB_SCALE_ITEM(0, 600, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(1300, 1300, 0),
|
||||
3, 4, TLV_DB_SCALE_ITEM(1800, 200, 0),
|
||||
5, 5, TLV_DB_SCALE_ITEM(2400, 0, 0),
|
||||
6, 7, TLV_DB_SCALE_ITEM(2700, 300, 0),
|
||||
};
|
||||
6, 7, TLV_DB_SCALE_ITEM(2700, 300, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(beep_tlv, -9600, 600, 1);
|
||||
static const DECLARE_TLV_DB_SCALE(digital_tlv, -7200, 75, 1);
|
||||
static const DECLARE_TLV_DB_SCALE(st_tlv, -3600, 300, 0);
|
||||
|
@ -1471,11 +1470,10 @@ static const DECLARE_TLV_DB_SCALE(inmix_tlv, -600, 600, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(bypass_tlv, -1500, 300, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(out_tlv, -12100, 100, 1);
|
||||
static const DECLARE_TLV_DB_SCALE(hp_tlv, -700, 100, 0);
|
||||
static const unsigned int classd_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(classd_tlv,
|
||||
0, 6, TLV_DB_SCALE_ITEM(0, 150, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(1200, 0, 0),
|
||||
};
|
||||
7, 7, TLV_DB_SCALE_ITEM(1200, 0, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
|
||||
|
||||
static int wm8962_dsp2_write_config(struct snd_soc_codec *codec)
|
||||
|
|
|
@ -418,10 +418,7 @@ static int outmixer_event(struct snd_soc_dapm_widget *w,
|
|||
}
|
||||
|
||||
/* INMIX dB values */
|
||||
static const unsigned int in_mix_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 7, TLV_DB_SCALE_ITEM(-1200, 600, 0),
|
||||
};
|
||||
static const DECLARE_TLV_DB_SCALE(in_mix_tlv, -1200, 600, 0);
|
||||
|
||||
/* Left In PGA Connections */
|
||||
static const struct snd_kcontrol_new wm8990_dapm_lin12_pga_controls[] = {
|
||||
|
|
|
@ -111,45 +111,14 @@ static bool wm8991_volatile(struct device *dev, unsigned int reg)
|
|||
}
|
||||
}
|
||||
|
||||
static const unsigned int rec_mix_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 7, TLV_DB_LINEAR_ITEM(-1500, 600),
|
||||
};
|
||||
|
||||
static const unsigned int in_pga_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 0x1F, TLV_DB_LINEAR_ITEM(-1650, 3000),
|
||||
};
|
||||
|
||||
static const unsigned int out_mix_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 7, TLV_DB_LINEAR_ITEM(0, -2100),
|
||||
};
|
||||
|
||||
static const unsigned int out_pga_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 127, TLV_DB_LINEAR_ITEM(-7300, 600),
|
||||
};
|
||||
|
||||
static const unsigned int out_omix_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 7, TLV_DB_LINEAR_ITEM(-600, 0),
|
||||
};
|
||||
|
||||
static const unsigned int out_dac_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 255, TLV_DB_LINEAR_ITEM(-7163, 0),
|
||||
};
|
||||
|
||||
static const unsigned int in_adc_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 255, TLV_DB_LINEAR_ITEM(-7163, 1763),
|
||||
};
|
||||
|
||||
static const unsigned int out_sidetone_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 31, TLV_DB_LINEAR_ITEM(-3600, 0),
|
||||
};
|
||||
static const DECLARE_TLV_DB_LINEAR(rec_mix_tlv, -1500, 600);
|
||||
static const DECLARE_TLV_DB_LINEAR(in_pga_tlv, -1650, 3000);
|
||||
static const DECLARE_TLV_DB_LINEAR(out_mix_tlv, 0, -2100);
|
||||
static const DECLARE_TLV_DB_LINEAR(out_pga_tlv, -7300, 600);
|
||||
static const DECLARE_TLV_DB_LINEAR(out_omix_tlv, -600, 0);
|
||||
static const DECLARE_TLV_DB_LINEAR(out_dac_tlv, -7163, 0);
|
||||
static const DECLARE_TLV_DB_LINEAR(in_adc_tlv, -7163, 1763);
|
||||
static const DECLARE_TLV_DB_LINEAR(out_sidetone_tlv, -3600, 0);
|
||||
|
||||
static int wm899x_outpga_put_volsw_vu(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
|
@ -429,10 +398,7 @@ static int outmixer_event(struct snd_soc_dapm_widget *w,
|
|||
}
|
||||
|
||||
/* INMIX dB values */
|
||||
static const unsigned int in_mix_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(1),
|
||||
0, 7, TLV_DB_LINEAR_ITEM(-1200, 600),
|
||||
};
|
||||
static const DECLARE_TLV_DB_LINEAR(in_mix_tlv, -1200, 600);
|
||||
|
||||
/* Left In PGA Connections */
|
||||
static const struct snd_kcontrol_new wm8991_dapm_lin12_pga_controls[] = {
|
||||
|
|
|
@ -628,11 +628,10 @@ static const DECLARE_TLV_DB_SCALE(sidetone_tlv, -3600, 300, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(drc_comp_threash, -4500, 75, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(drc_comp_amp, -2250, 75, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(drc_min_tlv, -1800, 600, 0);
|
||||
static const unsigned int drc_max_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(drc_max_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(1200, 600, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(3600, 0, 0),
|
||||
};
|
||||
3, 3, TLV_DB_SCALE_ITEM(3600, 0, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(drc_qr_tlv, 1200, 600, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(drc_startup_tlv, -1800, 300, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
|
||||
|
|
|
@ -243,13 +243,12 @@ static int wm9081_reset(struct regmap *map)
|
|||
static const DECLARE_TLV_DB_SCALE(drc_in_tlv, -4500, 75, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(drc_out_tlv, -2250, 75, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(drc_min_tlv, -1800, 600, 0);
|
||||
static unsigned int drc_max_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(4),
|
||||
static const DECLARE_TLV_DB_RANGE(drc_max_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(1200, 0, 0),
|
||||
1, 1, TLV_DB_SCALE_ITEM(1800, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(3600, 0, 0),
|
||||
};
|
||||
3, 3, TLV_DB_SCALE_ITEM(3600, 0, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(drc_qr_tlv, 1200, 600, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(drc_startup_tlv, -300, 50, 0);
|
||||
|
||||
|
|
|
@ -162,23 +162,20 @@ static void wait_for_dc_servo(struct snd_soc_codec *codec)
|
|||
dev_err(codec->dev, "Timed out waiting for DC Servo\n");
|
||||
}
|
||||
|
||||
static const unsigned int in_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(3),
|
||||
static const DECLARE_TLV_DB_RANGE(in_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(-600, 0, 0),
|
||||
1, 3, TLV_DB_SCALE_ITEM(-350, 350, 0),
|
||||
4, 6, TLV_DB_SCALE_ITEM(600, 600, 0),
|
||||
};
|
||||
static const unsigned int mix_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
4, 6, TLV_DB_SCALE_ITEM(600, 600, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_RANGE(mix_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(-1200, 300, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
};
|
||||
3, 3, TLV_DB_SCALE_ITEM(0, 0, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(out_tlv, -5700, 100, 0);
|
||||
static const unsigned int spkboost_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(spkboost_tlv,
|
||||
0, 6, TLV_DB_SCALE_ITEM(0, 150, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(1200, 0, 0),
|
||||
};
|
||||
7, 7, TLV_DB_SCALE_ITEM(1200, 0, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new wm9090_controls[] = {
|
||||
SOC_SINGLE_TLV("IN1A Volume", WM9090_IN1_LINE_INPUT_A_VOLUME, 0, 6, 0,
|
||||
|
|
|
@ -119,11 +119,10 @@ SOC_ENUM_SINGLE_VIRT(2, wm9713_micb_select), /* mic selection 19 */
|
|||
static const DECLARE_TLV_DB_SCALE(out_tlv, -4650, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(main_tlv, -3450, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(misc_tlv, -1500, 300, 0);
|
||||
static unsigned int mic_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(mic_tlv,
|
||||
0, 2, TLV_DB_SCALE_ITEM(1200, 600, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(3000, 0, 0),
|
||||
};
|
||||
3, 3, TLV_DB_SCALE_ITEM(3000, 0, 0)
|
||||
);
|
||||
|
||||
static const struct snd_kcontrol_new wm9713_snd_ac97_controls[] = {
|
||||
SOC_DOUBLE_TLV("Speaker Playback Volume", AC97_MASTER, 8, 0, 31, 1, out_tlv),
|
||||
|
|
|
@ -38,11 +38,10 @@ static const DECLARE_TLV_DB_SCALE(earpiece_tlv, -600, 600, 0);
|
|||
static const DECLARE_TLV_DB_SCALE(outmix_tlv, -2100, 300, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(spkmixout_tlv, -1800, 600, 1);
|
||||
static const DECLARE_TLV_DB_SCALE(outpga_tlv, -5700, 100, 0);
|
||||
static const unsigned int spkboost_tlv[] = {
|
||||
TLV_DB_RANGE_HEAD(2),
|
||||
static const DECLARE_TLV_DB_RANGE(spkboost_tlv,
|
||||
0, 6, TLV_DB_SCALE_ITEM(0, 150, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(1200, 0, 0),
|
||||
};
|
||||
7, 7, TLV_DB_SCALE_ITEM(1200, 0, 0)
|
||||
);
|
||||
static const DECLARE_TLV_DB_SCALE(line_tlv, -600, 600, 0);
|
||||
|
||||
static const char *speaker_ref_text[] = {
|
||||
|
|
|
@ -45,12 +45,12 @@
|
|||
#define SOC_TPLG_PASS_VENDOR 1
|
||||
#define SOC_TPLG_PASS_MIXER 2
|
||||
#define SOC_TPLG_PASS_WIDGET 3
|
||||
#define SOC_TPLG_PASS_GRAPH 4
|
||||
#define SOC_TPLG_PASS_PINS 5
|
||||
#define SOC_TPLG_PASS_PCM_DAI 6
|
||||
#define SOC_TPLG_PASS_PCM_DAI 4
|
||||
#define SOC_TPLG_PASS_GRAPH 5
|
||||
#define SOC_TPLG_PASS_PINS 6
|
||||
|
||||
#define SOC_TPLG_PASS_START SOC_TPLG_PASS_MANIFEST
|
||||
#define SOC_TPLG_PASS_END SOC_TPLG_PASS_PCM_DAI
|
||||
#define SOC_TPLG_PASS_END SOC_TPLG_PASS_PINS
|
||||
|
||||
struct soc_tplg {
|
||||
const struct firmware *fw;
|
||||
|
@ -66,10 +66,14 @@ struct soc_tplg {
|
|||
u32 index; /* current block index */
|
||||
u32 req_index; /* required index, only loaded/free matching blocks */
|
||||
|
||||
/* kcontrol operations */
|
||||
/* vendor specific kcontrol operations */
|
||||
const struct snd_soc_tplg_kcontrol_ops *io_ops;
|
||||
int io_ops_count;
|
||||
|
||||
/* vendor specific bytes ext handlers, for TLV bytes controls */
|
||||
const struct snd_soc_tplg_bytes_ext_ops *bytes_ext_ops;
|
||||
int bytes_ext_ops_count;
|
||||
|
||||
/* optional fw loading callbacks to component drivers */
|
||||
struct snd_soc_tplg_ops *ops;
|
||||
};
|
||||
|
@ -508,19 +512,70 @@ static void remove_pcm_dai(struct snd_soc_component *comp,
|
|||
/* bind a kcontrol to it's IO handlers */
|
||||
static int soc_tplg_kcontrol_bind_io(struct snd_soc_tplg_ctl_hdr *hdr,
|
||||
struct snd_kcontrol_new *k,
|
||||
const struct snd_soc_tplg_kcontrol_ops *ops, int num_ops,
|
||||
const struct snd_soc_tplg_kcontrol_ops *bops, int num_bops)
|
||||
const struct soc_tplg *tplg)
|
||||
{
|
||||
int i;
|
||||
const struct snd_soc_tplg_kcontrol_ops *ops;
|
||||
const struct snd_soc_tplg_bytes_ext_ops *ext_ops;
|
||||
int num_ops, i;
|
||||
|
||||
/* try and map standard kcontrols handler first */
|
||||
if (hdr->ops.info == SND_SOC_TPLG_CTL_BYTES
|
||||
&& k->iface & SNDRV_CTL_ELEM_IFACE_MIXER
|
||||
&& k->access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE
|
||||
&& k->access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) {
|
||||
struct soc_bytes_ext *sbe;
|
||||
struct snd_soc_tplg_bytes_control *be;
|
||||
|
||||
sbe = (struct soc_bytes_ext *)k->private_value;
|
||||
be = container_of(hdr, struct snd_soc_tplg_bytes_control, hdr);
|
||||
|
||||
/* TLV bytes controls need standard kcontrol info handler,
|
||||
* TLV callback and extended put/get handlers.
|
||||
*/
|
||||
k->info = snd_soc_bytes_info;
|
||||
k->tlv.c = snd_soc_bytes_tlv_callback;
|
||||
|
||||
ext_ops = tplg->bytes_ext_ops;
|
||||
num_ops = tplg->bytes_ext_ops_count;
|
||||
for (i = 0; i < num_ops; i++) {
|
||||
if (!sbe->put && ext_ops[i].id == be->ext_ops.put)
|
||||
sbe->put = ext_ops[i].put;
|
||||
if (!sbe->get && ext_ops[i].id == be->ext_ops.get)
|
||||
sbe->get = ext_ops[i].get;
|
||||
}
|
||||
|
||||
if (sbe->put && sbe->get)
|
||||
return 0;
|
||||
else
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* try and map vendor specific kcontrol handlers first */
|
||||
ops = tplg->io_ops;
|
||||
num_ops = tplg->io_ops_count;
|
||||
for (i = 0; i < num_ops; i++) {
|
||||
|
||||
if (ops[i].id == hdr->ops.put)
|
||||
if (k->put == NULL && ops[i].id == hdr->ops.put)
|
||||
k->put = ops[i].put;
|
||||
if (ops[i].id == hdr->ops.get)
|
||||
if (k->get == NULL && ops[i].id == hdr->ops.get)
|
||||
k->get = ops[i].get;
|
||||
if (ops[i].id == hdr->ops.info)
|
||||
if (k->info == NULL && ops[i].id == hdr->ops.info)
|
||||
k->info = ops[i].info;
|
||||
}
|
||||
|
||||
/* vendor specific handlers found ? */
|
||||
if (k->put && k->get && k->info)
|
||||
return 0;
|
||||
|
||||
/* none found so try standard kcontrol handlers */
|
||||
ops = io_ops;
|
||||
num_ops = ARRAY_SIZE(io_ops);
|
||||
for (i = 0; i < num_ops; i++) {
|
||||
|
||||
if (k->put == NULL && ops[i].id == hdr->ops.put)
|
||||
k->put = ops[i].put;
|
||||
if (k->get == NULL && ops[i].id == hdr->ops.get)
|
||||
k->get = ops[i].get;
|
||||
if (k->info == NULL && ops[i].id == hdr->ops.info)
|
||||
k->info = ops[i].info;
|
||||
}
|
||||
|
||||
|
@ -528,21 +583,6 @@ static int soc_tplg_kcontrol_bind_io(struct snd_soc_tplg_ctl_hdr *hdr,
|
|||
if (k->put && k->get && k->info)
|
||||
return 0;
|
||||
|
||||
/* none found so try bespoke handlers */
|
||||
for (i = 0; i < num_bops; i++) {
|
||||
|
||||
if (k->put == NULL && bops[i].id == hdr->ops.put)
|
||||
k->put = bops[i].put;
|
||||
if (k->get == NULL && bops[i].id == hdr->ops.get)
|
||||
k->get = bops[i].get;
|
||||
if (k->info == NULL && bops[i].id == hdr->ops.info)
|
||||
k->info = bops[i].info;
|
||||
}
|
||||
|
||||
/* bespoke handlers found ? */
|
||||
if (k->put && k->get && k->info)
|
||||
return 0;
|
||||
|
||||
/* nothing to bind */
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -609,9 +649,7 @@ static int soc_tplg_create_tlv(struct soc_tplg *tplg,
|
|||
if (!(tc->access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE))
|
||||
return 0;
|
||||
|
||||
if (tc->access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) {
|
||||
kc->tlv.c = snd_soc_bytes_tlv_callback;
|
||||
} else {
|
||||
if (!(tc->access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK)) {
|
||||
tplg_tlv = &tc->tlv;
|
||||
switch (tplg_tlv->type) {
|
||||
case SNDRV_CTL_TLVT_DB_SCALE:
|
||||
|
@ -682,8 +720,7 @@ static int soc_tplg_dbytes_create(struct soc_tplg *tplg, unsigned int count,
|
|||
INIT_LIST_HEAD(&sbe->dobj.list);
|
||||
|
||||
/* map io handlers */
|
||||
err = soc_tplg_kcontrol_bind_io(&be->hdr, &kc, io_ops,
|
||||
ARRAY_SIZE(io_ops), tplg->io_ops, tplg->io_ops_count);
|
||||
err = soc_tplg_kcontrol_bind_io(&be->hdr, &kc, tplg);
|
||||
if (err) {
|
||||
soc_control_err(tplg, &be->hdr, be->hdr.name);
|
||||
kfree(sbe);
|
||||
|
@ -777,8 +814,7 @@ static int soc_tplg_dmixer_create(struct soc_tplg *tplg, unsigned int count,
|
|||
INIT_LIST_HEAD(&sm->dobj.list);
|
||||
|
||||
/* map io handlers */
|
||||
err = soc_tplg_kcontrol_bind_io(&mc->hdr, &kc, io_ops,
|
||||
ARRAY_SIZE(io_ops), tplg->io_ops, tplg->io_ops_count);
|
||||
err = soc_tplg_kcontrol_bind_io(&mc->hdr, &kc, tplg);
|
||||
if (err) {
|
||||
soc_control_err(tplg, &mc->hdr, mc->hdr.name);
|
||||
kfree(sm);
|
||||
|
@ -855,12 +891,12 @@ static int soc_tplg_denum_create_values(struct soc_enum *se,
|
|||
if (ec->items > sizeof(*ec->values))
|
||||
return -EINVAL;
|
||||
|
||||
se->dobj.control.dvalues =
|
||||
kmalloc(ec->items * sizeof(u32), GFP_KERNEL);
|
||||
se->dobj.control.dvalues = kmemdup(ec->values,
|
||||
ec->items * sizeof(u32),
|
||||
GFP_KERNEL);
|
||||
if (!se->dobj.control.dvalues)
|
||||
return -ENOMEM;
|
||||
|
||||
memcpy(se->dobj.control.dvalues, ec->values, ec->items * sizeof(u32));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -950,8 +986,7 @@ static int soc_tplg_denum_create(struct soc_tplg *tplg, unsigned int count,
|
|||
}
|
||||
|
||||
/* map io handlers */
|
||||
err = soc_tplg_kcontrol_bind_io(&ec->hdr, &kc, io_ops,
|
||||
ARRAY_SIZE(io_ops), tplg->io_ops, tplg->io_ops_count);
|
||||
err = soc_tplg_kcontrol_bind_io(&ec->hdr, &kc, tplg);
|
||||
if (err) {
|
||||
soc_control_err(tplg, &ec->hdr, ec->hdr.name);
|
||||
kfree(se);
|
||||
|
@ -1093,7 +1128,7 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_dmixer_create(
|
|||
struct snd_soc_tplg_mixer_control *mc;
|
||||
int i, err;
|
||||
|
||||
kc = kzalloc(sizeof(*kc) * num_kcontrols, GFP_KERNEL);
|
||||
kc = kcalloc(num_kcontrols, sizeof(*kc), GFP_KERNEL);
|
||||
if (kc == NULL)
|
||||
return NULL;
|
||||
|
||||
|
@ -1137,8 +1172,7 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_dmixer_create(
|
|||
INIT_LIST_HEAD(&sm->dobj.list);
|
||||
|
||||
/* map io handlers */
|
||||
err = soc_tplg_kcontrol_bind_io(&mc->hdr, &kc[i], io_ops,
|
||||
ARRAY_SIZE(io_ops), tplg->io_ops, tplg->io_ops_count);
|
||||
err = soc_tplg_kcontrol_bind_io(&mc->hdr, &kc[i], tplg);
|
||||
if (err) {
|
||||
soc_control_err(tplg, &mc->hdr, mc->hdr.name);
|
||||
kfree(sm);
|
||||
|
@ -1235,8 +1269,7 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_denum_create(
|
|||
}
|
||||
|
||||
/* map io handlers */
|
||||
err = soc_tplg_kcontrol_bind_io(&ec->hdr, kc, io_ops,
|
||||
ARRAY_SIZE(io_ops), tplg->io_ops, tplg->io_ops_count);
|
||||
err = soc_tplg_kcontrol_bind_io(&ec->hdr, kc, tplg);
|
||||
if (err) {
|
||||
soc_control_err(tplg, &ec->hdr, ec->hdr.name);
|
||||
goto err_se;
|
||||
|
@ -1274,7 +1307,7 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_dbytes_create(
|
|||
struct snd_kcontrol_new *kc;
|
||||
int i, err;
|
||||
|
||||
kc = kzalloc(sizeof(*kc) * count, GFP_KERNEL);
|
||||
kc = kcalloc(count, sizeof(*kc), GFP_KERNEL);
|
||||
if (!kc)
|
||||
return NULL;
|
||||
|
||||
|
@ -1297,7 +1330,6 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_dbytes_create(
|
|||
"ASoC: adding bytes kcontrol %s with access 0x%x\n",
|
||||
be->hdr.name, be->hdr.access);
|
||||
|
||||
memset(kc, 0, sizeof(*kc));
|
||||
kc[i].name = be->hdr.name;
|
||||
kc[i].private_value = (long)sbe;
|
||||
kc[i].iface = SNDRV_CTL_ELEM_IFACE_MIXER;
|
||||
|
@ -1307,9 +1339,7 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_dbytes_create(
|
|||
INIT_LIST_HEAD(&sbe->dobj.list);
|
||||
|
||||
/* map standard io handlers and check for external handlers */
|
||||
err = soc_tplg_kcontrol_bind_io(&be->hdr, &kc[i], io_ops,
|
||||
ARRAY_SIZE(io_ops), tplg->io_ops,
|
||||
tplg->io_ops_count);
|
||||
err = soc_tplg_kcontrol_bind_io(&be->hdr, &kc[i], tplg);
|
||||
if (err) {
|
||||
soc_control_err(tplg, &be->hdr, be->hdr.name);
|
||||
kfree(sbe);
|
||||
|
@ -1737,6 +1767,8 @@ int snd_soc_tplg_component_load(struct snd_soc_component *comp,
|
|||
tplg.req_index = id;
|
||||
tplg.io_ops = ops->io_ops;
|
||||
tplg.io_ops_count = ops->io_ops_count;
|
||||
tplg.bytes_ext_ops = ops->bytes_ext_ops;
|
||||
tplg.bytes_ext_ops_count = ops->bytes_ext_ops_count;
|
||||
|
||||
return soc_tplg_load(&tplg);
|
||||
}
|
||||
|
|
|
@ -133,7 +133,7 @@ static const struct regmap_config tegra20_das_regmap_config = {
|
|||
|
||||
static int tegra20_das_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res, *region;
|
||||
struct resource *res;
|
||||
void __iomem *regs;
|
||||
int ret = 0;
|
||||
|
||||
|
@ -149,24 +149,9 @@ static int tegra20_das_probe(struct platform_device *pdev)
|
|||
das->dev = &pdev->dev;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
dev_err(&pdev->dev, "No memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err;
|
||||
}
|
||||
|
||||
region = devm_request_mem_region(&pdev->dev, res->start,
|
||||
resource_size(res), pdev->name);
|
||||
if (!region) {
|
||||
dev_err(&pdev->dev, "Memory region already claimed\n");
|
||||
ret = -EBUSY;
|
||||
goto err;
|
||||
}
|
||||
|
||||
regs = devm_ioremap(&pdev->dev, res->start, resource_size(res));
|
||||
if (!regs) {
|
||||
dev_err(&pdev->dev, "ioremap failed\n");
|
||||
ret = -ENOMEM;
|
||||
regs = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(regs)) {
|
||||
ret = PTR_ERR(regs);
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
|
|
@ -339,7 +339,7 @@ static const struct regmap_config tegra20_i2s_regmap_config = {
|
|||
static int tegra20_i2s_platform_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct tegra20_i2s *i2s;
|
||||
struct resource *mem, *memregion;
|
||||
struct resource *mem;
|
||||
void __iomem *regs;
|
||||
int ret;
|
||||
|
||||
|
@ -362,24 +362,9 @@ static int tegra20_i2s_platform_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!mem) {
|
||||
dev_err(&pdev->dev, "No memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_clk_put;
|
||||
}
|
||||
|
||||
memregion = devm_request_mem_region(&pdev->dev, mem->start,
|
||||
resource_size(mem), DRV_NAME);
|
||||
if (!memregion) {
|
||||
dev_err(&pdev->dev, "Memory region already claimed\n");
|
||||
ret = -EBUSY;
|
||||
goto err_clk_put;
|
||||
}
|
||||
|
||||
regs = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
|
||||
if (!regs) {
|
||||
dev_err(&pdev->dev, "ioremap failed\n");
|
||||
ret = -ENOMEM;
|
||||
regs = devm_ioremap_resource(&pdev->dev, mem);
|
||||
if (IS_ERR(regs)) {
|
||||
ret = PTR_ERR(regs);
|
||||
goto err_clk_put;
|
||||
}
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@ static const struct regmap_config tegra20_spdif_regmap_config = {
|
|||
static int tegra20_spdif_platform_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct tegra20_spdif *spdif;
|
||||
struct resource *mem, *memregion, *dmareq;
|
||||
struct resource *mem, *dmareq;
|
||||
void __iomem *regs;
|
||||
int ret;
|
||||
|
||||
|
@ -273,45 +273,26 @@ static int tegra20_spdif_platform_probe(struct platform_device *pdev)
|
|||
GFP_KERNEL);
|
||||
if (!spdif) {
|
||||
dev_err(&pdev->dev, "Can't allocate tegra20_spdif\n");
|
||||
ret = -ENOMEM;
|
||||
goto err;
|
||||
return -ENOMEM;
|
||||
}
|
||||
dev_set_drvdata(&pdev->dev, spdif);
|
||||
|
||||
spdif->clk_spdif_out = clk_get(&pdev->dev, "spdif_out");
|
||||
spdif->clk_spdif_out = devm_clk_get(&pdev->dev, "spdif_out");
|
||||
if (IS_ERR(spdif->clk_spdif_out)) {
|
||||
pr_err("Can't retrieve spdif clock\n");
|
||||
ret = PTR_ERR(spdif->clk_spdif_out);
|
||||
goto err;
|
||||
return ret;
|
||||
}
|
||||
|
||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!mem) {
|
||||
dev_err(&pdev->dev, "No memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_clk_put;
|
||||
}
|
||||
regs = devm_ioremap_resource(&pdev->dev, mem);
|
||||
if (IS_ERR(regs))
|
||||
return PTR_ERR(regs);
|
||||
|
||||
dmareq = platform_get_resource(pdev, IORESOURCE_DMA, 0);
|
||||
if (!dmareq) {
|
||||
dev_err(&pdev->dev, "No DMA resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_clk_put;
|
||||
}
|
||||
|
||||
memregion = devm_request_mem_region(&pdev->dev, mem->start,
|
||||
resource_size(mem), DRV_NAME);
|
||||
if (!memregion) {
|
||||
dev_err(&pdev->dev, "Memory region already claimed\n");
|
||||
ret = -EBUSY;
|
||||
goto err_clk_put;
|
||||
}
|
||||
|
||||
regs = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
|
||||
if (!regs) {
|
||||
dev_err(&pdev->dev, "ioremap failed\n");
|
||||
ret = -ENOMEM;
|
||||
goto err_clk_put;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
spdif->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
|
||||
|
@ -319,7 +300,7 @@ static int tegra20_spdif_platform_probe(struct platform_device *pdev)
|
|||
if (IS_ERR(spdif->regmap)) {
|
||||
dev_err(&pdev->dev, "regmap init failed\n");
|
||||
ret = PTR_ERR(spdif->regmap);
|
||||
goto err_clk_put;
|
||||
return ret;
|
||||
}
|
||||
|
||||
spdif->playback_dma_data.addr = mem->start + TEGRA20_SPDIF_DATA_OUT;
|
||||
|
@ -335,7 +316,7 @@ static int tegra20_spdif_platform_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
ret = snd_soc_register_component(&pdev->dev, &tegra20_spdif_component,
|
||||
&tegra20_spdif_dai, 1);
|
||||
&tegra20_spdif_dai, 1);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Could not register DAI: %d\n", ret);
|
||||
ret = -ENOMEM;
|
||||
|
@ -357,16 +338,12 @@ err_suspend:
|
|||
tegra20_spdif_runtime_suspend(&pdev->dev);
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err_clk_put:
|
||||
clk_put(spdif->clk_spdif_out);
|
||||
err:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tegra20_spdif_platform_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct tegra20_spdif *spdif = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
tegra20_spdif_runtime_suspend(&pdev->dev);
|
||||
|
@ -374,8 +351,6 @@ static int tegra20_spdif_platform_remove(struct platform_device *pdev)
|
|||
tegra_pcm_platform_unregister(&pdev->dev);
|
||||
snd_soc_unregister_component(&pdev->dev);
|
||||
|
||||
clk_put(spdif->clk_spdif_out);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -521,7 +521,7 @@ static int tegra30_ahub_probe(struct platform_device *pdev)
|
|||
const struct tegra30_ahub_soc_data *soc_data;
|
||||
struct reset_control *rst;
|
||||
int i;
|
||||
struct resource *res0, *res1, *region;
|
||||
struct resource *res0, *res1;
|
||||
void __iomem *regs_apbif, *regs_ahub;
|
||||
int ret = 0;
|
||||
|
||||
|
@ -549,103 +549,67 @@ static int tegra30_ahub_probe(struct platform_device *pdev)
|
|||
dev_err(&pdev->dev, "Can't get reset %s\n",
|
||||
configlink_mods[i].rst_name);
|
||||
ret = PTR_ERR(rst);
|
||||
goto err;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = reset_control_deassert(rst);
|
||||
reset_control_put(rst);
|
||||
if (ret)
|
||||
goto err;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ahub = devm_kzalloc(&pdev->dev, sizeof(struct tegra30_ahub),
|
||||
GFP_KERNEL);
|
||||
if (!ahub) {
|
||||
dev_err(&pdev->dev, "Can't allocate tegra30_ahub\n");
|
||||
ret = -ENOMEM;
|
||||
goto err;
|
||||
return -ENOMEM;
|
||||
}
|
||||
dev_set_drvdata(&pdev->dev, ahub);
|
||||
|
||||
ahub->soc_data = soc_data;
|
||||
ahub->dev = &pdev->dev;
|
||||
|
||||
ahub->clk_d_audio = clk_get(&pdev->dev, "d_audio");
|
||||
ahub->clk_d_audio = devm_clk_get(&pdev->dev, "d_audio");
|
||||
if (IS_ERR(ahub->clk_d_audio)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve ahub d_audio clock\n");
|
||||
ret = PTR_ERR(ahub->clk_d_audio);
|
||||
goto err;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ahub->clk_apbif = clk_get(&pdev->dev, "apbif");
|
||||
ahub->clk_apbif = devm_clk_get(&pdev->dev, "apbif");
|
||||
if (IS_ERR(ahub->clk_apbif)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve ahub apbif clock\n");
|
||||
ret = PTR_ERR(ahub->clk_apbif);
|
||||
goto err_clk_put_d_audio;
|
||||
return ret;
|
||||
}
|
||||
|
||||
res0 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res0) {
|
||||
dev_err(&pdev->dev, "No apbif memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_clk_put_apbif;
|
||||
}
|
||||
regs_apbif = devm_ioremap_resource(&pdev->dev, res0);
|
||||
if (IS_ERR(regs_apbif))
|
||||
return PTR_ERR(regs_apbif);
|
||||
|
||||
region = devm_request_mem_region(&pdev->dev, res0->start,
|
||||
resource_size(res0), DRV_NAME);
|
||||
if (!region) {
|
||||
dev_err(&pdev->dev, "request region apbif failed\n");
|
||||
ret = -EBUSY;
|
||||
goto err_clk_put_apbif;
|
||||
}
|
||||
ahub->apbif_addr = res0->start;
|
||||
|
||||
regs_apbif = devm_ioremap(&pdev->dev, res0->start,
|
||||
resource_size(res0));
|
||||
if (!regs_apbif) {
|
||||
dev_err(&pdev->dev, "ioremap apbif failed\n");
|
||||
ret = -ENOMEM;
|
||||
goto err_clk_put_apbif;
|
||||
}
|
||||
|
||||
ahub->regmap_apbif = devm_regmap_init_mmio(&pdev->dev, regs_apbif,
|
||||
&tegra30_ahub_apbif_regmap_config);
|
||||
if (IS_ERR(ahub->regmap_apbif)) {
|
||||
dev_err(&pdev->dev, "apbif regmap init failed\n");
|
||||
ret = PTR_ERR(ahub->regmap_apbif);
|
||||
goto err_clk_put_apbif;
|
||||
return ret;
|
||||
}
|
||||
regcache_cache_only(ahub->regmap_apbif, true);
|
||||
|
||||
res1 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
if (!res1) {
|
||||
dev_err(&pdev->dev, "No ahub memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_clk_put_apbif;
|
||||
}
|
||||
|
||||
region = devm_request_mem_region(&pdev->dev, res1->start,
|
||||
resource_size(res1), DRV_NAME);
|
||||
if (!region) {
|
||||
dev_err(&pdev->dev, "request region ahub failed\n");
|
||||
ret = -EBUSY;
|
||||
goto err_clk_put_apbif;
|
||||
}
|
||||
|
||||
regs_ahub = devm_ioremap(&pdev->dev, res1->start,
|
||||
resource_size(res1));
|
||||
if (!regs_ahub) {
|
||||
dev_err(&pdev->dev, "ioremap ahub failed\n");
|
||||
ret = -ENOMEM;
|
||||
goto err_clk_put_apbif;
|
||||
}
|
||||
regs_ahub = devm_ioremap_resource(&pdev->dev, res1);
|
||||
if (IS_ERR(regs_ahub))
|
||||
return PTR_ERR(regs_ahub);
|
||||
|
||||
ahub->regmap_ahub = devm_regmap_init_mmio(&pdev->dev, regs_ahub,
|
||||
&tegra30_ahub_ahub_regmap_config);
|
||||
if (IS_ERR(ahub->regmap_ahub)) {
|
||||
dev_err(&pdev->dev, "ahub regmap init failed\n");
|
||||
ret = PTR_ERR(ahub->regmap_ahub);
|
||||
goto err_clk_put_apbif;
|
||||
return ret;
|
||||
}
|
||||
regcache_cache_only(ahub->regmap_ahub, true);
|
||||
|
||||
|
@ -662,12 +626,7 @@ static int tegra30_ahub_probe(struct platform_device *pdev)
|
|||
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err_clk_put_apbif:
|
||||
clk_put(ahub->clk_apbif);
|
||||
err_clk_put_d_audio:
|
||||
clk_put(ahub->clk_d_audio);
|
||||
ahub = NULL;
|
||||
err:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -680,11 +639,6 @@ static int tegra30_ahub_remove(struct platform_device *pdev)
|
|||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
tegra30_ahub_runtime_suspend(&pdev->dev);
|
||||
|
||||
clk_put(ahub->clk_apbif);
|
||||
clk_put(ahub->clk_d_audio);
|
||||
|
||||
ahub = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -379,7 +379,7 @@ static int tegra30_i2s_platform_probe(struct platform_device *pdev)
|
|||
struct tegra30_i2s *i2s;
|
||||
const struct of_device_id *match;
|
||||
u32 cif_ids[2];
|
||||
struct resource *mem, *memregion;
|
||||
struct resource *mem;
|
||||
void __iomem *regs;
|
||||
int ret;
|
||||
|
||||
|
@ -419,24 +419,9 @@ static int tegra30_i2s_platform_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!mem) {
|
||||
dev_err(&pdev->dev, "No memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_clk_put;
|
||||
}
|
||||
|
||||
memregion = devm_request_mem_region(&pdev->dev, mem->start,
|
||||
resource_size(mem), DRV_NAME);
|
||||
if (!memregion) {
|
||||
dev_err(&pdev->dev, "Memory region already claimed\n");
|
||||
ret = -EBUSY;
|
||||
goto err_clk_put;
|
||||
}
|
||||
|
||||
regs = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
|
||||
if (!regs) {
|
||||
dev_err(&pdev->dev, "ioremap failed\n");
|
||||
ret = -ENOMEM;
|
||||
regs = devm_ioremap_resource(&pdev->dev, mem);
|
||||
if (IS_ERR(regs)) {
|
||||
ret = PTR_ERR(regs);
|
||||
goto err_clk_put;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче