Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
3bb26706
Commit
3bb26706
authored
Feb 11, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/wm2200' into asoc-next
parents
3dc4b7af
1a786243
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
79 additions
and
1 deletion
+79
-1
include/sound/wm2200.h
include/sound/wm2200.h
+21
-1
sound/soc/codecs/wm2200.c
sound/soc/codecs/wm2200.c
+58
-0
No files found.
include/sound/wm2200.h
View file @
3bb26706
...
...
@@ -12,6 +12,7 @@
#define __LINUX_SND_WM2200_H
#define WM2200_GPIO_SET 0x10000
#define WM2200_MAX_MICBIAS 2
enum
wm2200_in_mode
{
WM2200_IN_SE
=
0
,
...
...
@@ -25,6 +26,24 @@ enum wm2200_dmic_sup {
WM2200_DMIC_SUP_MICBIAS2
=
2
,
};
enum
wm2200_mbias_lvl
{
WM2200_MBIAS_LVL_1V5
=
1
,
WM2200_MBIAS_LVL_1V8
=
2
,
WM2200_MBIAS_LVL_1V9
=
3
,
WM2200_MBIAS_LVL_2V0
=
4
,
WM2200_MBIAS_LVL_2V2
=
5
,
WM2200_MBIAS_LVL_2V4
=
6
,
WM2200_MBIAS_LVL_2V5
=
7
,
WM2200_MBIAS_LVL_2V6
=
8
,
};
struct
wm2200_micbias
{
enum
wm2200_mbias_lvl
mb_lvl
;
/** Regulated voltage */
unsigned
int
discharge
:
1
;
/** Actively discharge */
unsigned
int
fast_start
:
1
;
/** Enable aggressive startup ramp rate */
unsigned
int
bypass
:
1
;
/** Use bypass mode */
};
struct
wm2200_pdata
{
int
reset
;
/** GPIO controlling /RESET, if any */
int
ldo_ena
;
/** GPIO controlling LODENA, if any */
...
...
@@ -35,7 +54,8 @@ struct wm2200_pdata {
enum
wm2200_in_mode
in_mode
[
3
];
enum
wm2200_dmic_sup
dmic_sup
[
3
];
int
micbias_cfg
[
2
];
/** Register value to configure MICBIAS */
/** MICBIAS configurations */
struct
wm2200_micbias
micbias
[
WM2200_MAX_MICBIAS
];
};
#endif
sound/soc/codecs/wm2200.c
View file @
3bb26706
...
...
@@ -1109,6 +1109,16 @@ static int wm2200_mixer_values[] = {
static WM2200_MUX_CTL_DECL(name##_aux5); \
static WM2200_MUX_CTL_DECL(name##_aux6);
static
const
char
*
wm2200_rxanc_input_sel_texts
[]
=
{
"None"
,
"IN1"
,
"IN2"
,
"IN3"
,
};
static
const
struct
soc_enum
wm2200_rxanc_input_sel
=
SOC_ENUM_SINGLE
(
WM2200_RXANC_SRC
,
WM2200_IN_RXANC_SEL_SHIFT
,
ARRAY_SIZE
(
wm2200_rxanc_input_sel_texts
),
wm2200_rxanc_input_sel_texts
);
static
const
struct
snd_kcontrol_new
wm2200_snd_controls
[]
=
{
SOC_SINGLE
(
"IN1 High Performance Switch"
,
WM2200_IN1L_CONTROL
,
WM2200_IN1_OSR_SHIFT
,
1
,
0
),
...
...
@@ -1141,6 +1151,12 @@ SOC_DOUBLE_R_TLV("IN3 Digital Volume", WM2200_ADC_DIGITAL_VOLUME_3L,
WM2200_ADC_DIGITAL_VOLUME_3R
,
WM2200_IN3L_DIG_VOL_SHIFT
,
0xbf
,
0
,
digital_tlv
),
SND_SOC_BYTES_MASK
(
"EQL Coefficients"
,
WM2200_EQL_1
,
20
,
WM2200_EQL_ENA
),
SND_SOC_BYTES_MASK
(
"EQR Coefficients"
,
WM2200_EQR_1
,
20
,
WM2200_EQR_ENA
),
SND_SOC_BYTES
(
"LHPF1 Coefficeints"
,
WM2200_HPLPF1_2
,
1
),
SND_SOC_BYTES
(
"LHPF2 Coefficeints"
,
WM2200_HPLPF2_2
,
1
),
SOC_SINGLE
(
"OUT1 High Performance Switch"
,
WM2200_DAC_DIGITAL_VOLUME_1L
,
WM2200_OUT1_OSR_SHIFT
,
1
,
0
),
SOC_SINGLE
(
"OUT2 High Performance Switch"
,
WM2200_DAC_DIGITAL_VOLUME_2L
,
...
...
@@ -1162,6 +1178,7 @@ SOC_DOUBLE_R_TLV("OUT2 Digital Volume", WM2200_DAC_DIGITAL_VOLUME_2L,
digital_tlv
),
SOC_DOUBLE
(
"OUT2 Switch"
,
WM2200_PDM_1
,
WM2200_SPK1L_MUTE_SHIFT
,
WM2200_SPK1R_MUTE_SHIFT
,
1
,
1
),
SOC_ENUM
(
"RxANC Src"
,
wm2200_rxanc_input_sel
),
};
WM2200_MIXER_ENUMS
(
OUT1L
,
WM2200_OUT1LMIX_INPUT_1_SOURCE
);
...
...
@@ -1548,6 +1565,10 @@ static int wm2200_probe(struct snd_soc_codec *codec)
return
ret
;
}
ret
=
snd_soc_add_codec_controls
(
codec
,
wm_adsp_fw_controls
,
2
);
if
(
ret
!=
0
)
return
ret
;
return
ret
;
}
...
...
@@ -2182,6 +2203,7 @@ static int wm2200_i2c_probe(struct i2c_client *i2c,
struct
wm2200_priv
*
wm2200
;
unsigned
int
reg
;
int
ret
,
i
;
int
val
;
wm2200
=
devm_kzalloc
(
&
i2c
->
dev
,
sizeof
(
struct
wm2200_priv
),
GFP_KERNEL
);
...
...
@@ -2205,6 +2227,9 @@ static int wm2200_i2c_probe(struct i2c_client *i2c,
wm2200
->
dsp
[
i
].
num
=
i
+
1
;
wm2200
->
dsp
[
i
].
dev
=
&
i2c
->
dev
;
wm2200
->
dsp
[
i
].
regmap
=
wm2200
->
regmap
;
wm2200
->
dsp
[
i
].
sysclk_reg
=
WM2200_CLOCKING_3
;
wm2200
->
dsp
[
i
].
sysclk_mask
=
WM2200_SYSCLK_FREQ_MASK
;
wm2200
->
dsp
[
i
].
sysclk_shift
=
WM2200_SYSCLK_FREQ_SHIFT
;
}
wm2200
->
dsp
[
0
].
base
=
WM2200_DSP1_CONTROL_1
;
...
...
@@ -2215,6 +2240,9 @@ static int wm2200_i2c_probe(struct i2c_client *i2c,
wm2200
->
dsp
[
1
].
mem
=
wm2200_dsp2_regions
;
wm2200
->
dsp
[
1
].
num_mems
=
ARRAY_SIZE
(
wm2200_dsp2_regions
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
wm2200
->
dsp
);
i
++
)
wm_adsp1_init
(
&
wm2200
->
dsp
[
i
]);
if
(
pdata
)
wm2200
->
pdata
=
*
pdata
;
...
...
@@ -2326,6 +2354,36 @@ static int wm2200_i2c_probe(struct i2c_client *i2c,
regmap_write
(
wm2200
->
regmap
,
WM2200_AUDIO_IF_1_16
+
i
,
i
);
}
for
(
i
=
0
;
i
<
WM2200_MAX_MICBIAS
;
i
++
)
{
if
(
!
wm2200
->
pdata
.
micbias
[
i
].
mb_lvl
&&
!
wm2200
->
pdata
.
micbias
[
i
].
bypass
)
continue
;
/* Apply default for bypass mode */
if
(
!
wm2200
->
pdata
.
micbias
[
i
].
mb_lvl
)
wm2200
->
pdata
.
micbias
[
i
].
mb_lvl
=
WM2200_MBIAS_LVL_1V5
;
val
=
(
wm2200
->
pdata
.
micbias
[
i
].
mb_lvl
-
1
)
<<
WM2200_MICB1_LVL_SHIFT
;
if
(
wm2200
->
pdata
.
micbias
[
i
].
discharge
)
val
|=
WM2200_MICB1_DISCH
;
if
(
wm2200
->
pdata
.
micbias
[
i
].
fast_start
)
val
|=
WM2200_MICB1_RATE
;
if
(
wm2200
->
pdata
.
micbias
[
i
].
bypass
)
val
|=
WM2200_MICB1_MODE
;
regmap_update_bits
(
wm2200
->
regmap
,
WM2200_MIC_BIAS_CTRL_1
+
i
,
WM2200_MICB1_LVL_MASK
|
WM2200_MICB1_DISCH
|
WM2200_MICB1_MODE
|
WM2200_MICB1_RATE
,
val
);
}
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
wm2200
->
pdata
.
in_mode
);
i
++
)
{
regmap_update_bits
(
wm2200
->
regmap
,
wm2200_mic_ctrl_reg
[
i
],
WM2200_IN1_MODE_MASK
|
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment