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
a18d5151
Commit
a18d5151
authored
Apr 12, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/arizona' into asoc-next
parents
0680fa6c
b6ed61cf
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
738 additions
and
228 deletions
+738
-228
drivers/extcon/extcon-arizona.c
drivers/extcon/extcon-arizona.c
+52
-55
drivers/mfd/wm5102-tables.c
drivers/mfd/wm5102-tables.c
+10
-0
include/linux/mfd/arizona/core.h
include/linux/mfd/arizona/core.h
+3
-0
include/linux/mfd/arizona/registers.h
include/linux/mfd/arizona/registers.h
+42
-0
sound/soc/codecs/arizona.c
sound/soc/codecs/arizona.c
+461
-69
sound/soc/codecs/arizona.h
sound/soc/codecs/arizona.h
+33
-1
sound/soc/codecs/wm2200.c
sound/soc/codecs/wm2200.c
+1
-1
sound/soc/codecs/wm5102.c
sound/soc/codecs/wm5102.c
+61
-68
sound/soc/codecs/wm5102.h
sound/soc/codecs/wm5102.h
+4
-2
sound/soc/codecs/wm5110.c
sound/soc/codecs/wm5110.c
+27
-27
sound/soc/codecs/wm5110.h
sound/soc/codecs/wm5110.h
+4
-2
sound/soc/codecs/wm_adsp.c
sound/soc/codecs/wm_adsp.c
+38
-2
sound/soc/codecs/wm_adsp.h
sound/soc/codecs/wm_adsp.h
+2
-1
No files found.
drivers/extcon/extcon-arizona.c
View file @
a18d5151
...
...
@@ -100,6 +100,55 @@ static const char *arizona_cable[] = {
NULL
,
};
static
void
arizona_extcon_do_magic
(
struct
arizona_extcon_info
*
info
,
unsigned
int
magic
)
{
struct
arizona
*
arizona
=
info
->
arizona
;
int
ret
;
mutex_lock
(
&
arizona
->
dapm
->
card
->
dapm_mutex
);
arizona
->
hpdet_magic
=
magic
;
/* Keep the HP output stages disabled while doing the magic */
if
(
magic
)
{
ret
=
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT1L_ENA
|
ARIZONA_OUT1R_ENA
,
0
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to disable headphone outputs: %d
\n
"
,
ret
);
}
ret
=
regmap_update_bits
(
arizona
->
regmap
,
0x225
,
0x4000
,
magic
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to do magic: %d
\n
"
,
ret
);
ret
=
regmap_update_bits
(
arizona
->
regmap
,
0x226
,
0x4000
,
magic
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to do magic: %d
\n
"
,
ret
);
/* Restore the desired state while not doing the magic */
if
(
!
magic
)
{
ret
=
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT1L_ENA
|
ARIZONA_OUT1R_ENA
,
arizona
->
hp_ena
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to restore headphone outputs: %d
\n
"
,
ret
);
}
mutex_unlock
(
&
arizona
->
dapm
->
card
->
dapm_mutex
);
}
static
void
arizona_extcon_set_mode
(
struct
arizona_extcon_info
*
info
,
int
mode
)
{
struct
arizona
*
arizona
=
info
->
arizona
;
...
...
@@ -484,7 +533,6 @@ static irqreturn_t arizona_hpdet_irq(int irq, void *data)
struct
arizona
*
arizona
=
info
->
arizona
;
int
id_gpio
=
arizona
->
pdata
.
hpdet_id_gpio
;
int
report
=
ARIZONA_CABLE_HEADPHONE
;
unsigned
int
val
;
int
ret
,
reading
;
mutex_lock
(
&
info
->
lock
);
...
...
@@ -539,28 +587,7 @@ static irqreturn_t arizona_hpdet_irq(int irq, void *data)
dev_err
(
arizona
->
dev
,
"Failed to report HP/line: %d
\n
"
,
ret
);
mutex_lock
(
&
arizona
->
dapm
->
card
->
dapm_mutex
);
ret
=
regmap_read
(
arizona
->
regmap
,
ARIZONA_OUTPUT_ENABLES_1
,
&
val
);
if
(
ret
!=
0
)
{
dev_err
(
arizona
->
dev
,
"Failed to read output enables: %d
\n
"
,
ret
);
val
=
0
;
}
if
(
!
(
val
&
(
ARIZONA_OUT1L_ENA
|
ARIZONA_OUT1R_ENA
)))
{
ret
=
regmap_update_bits
(
arizona
->
regmap
,
0x225
,
0x4000
,
0
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to undo magic: %d
\n
"
,
ret
);
ret
=
regmap_update_bits
(
arizona
->
regmap
,
0x226
,
0x4000
,
0
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to undo magic: %d
\n
"
,
ret
);
}
mutex_unlock
(
&
arizona
->
dapm
->
card
->
dapm_mutex
);
arizona_extcon_do_magic
(
info
,
0
);
done:
if
(
id_gpio
)
...
...
@@ -606,13 +633,7 @@ static void arizona_identify_headphone(struct arizona_extcon_info *info)
if
(
info
->
mic
)
arizona_stop_mic
(
info
);
ret
=
regmap_update_bits
(
arizona
->
regmap
,
0x225
,
0x4000
,
0x4000
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to do magic: %d
\n
"
,
ret
);
ret
=
regmap_update_bits
(
arizona
->
regmap
,
0x226
,
0x4000
,
0x4000
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to do magic: %d
\n
"
,
ret
);
arizona_extcon_do_magic
(
info
,
0x4000
);
ret
=
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_ACCESSORY_DETECT_MODE_1
,
...
...
@@ -653,7 +674,6 @@ static void arizona_identify_headphone(struct arizona_extcon_info *info)
static
void
arizona_start_hpdet_acc_id
(
struct
arizona_extcon_info
*
info
)
{
struct
arizona
*
arizona
=
info
->
arizona
;
unsigned
int
val
;
int
ret
;
dev_dbg
(
arizona
->
dev
,
"Starting identification via HPDET
\n
"
);
...
...
@@ -665,30 +685,7 @@ static void arizona_start_hpdet_acc_id(struct arizona_extcon_info *info)
arizona_extcon_pulse_micbias
(
info
);
mutex_lock
(
&
arizona
->
dapm
->
card
->
dapm_mutex
);
ret
=
regmap_read
(
arizona
->
regmap
,
ARIZONA_OUTPUT_ENABLES_1
,
&
val
);
if
(
ret
!=
0
)
{
dev_err
(
arizona
->
dev
,
"Failed to read output enables: %d
\n
"
,
ret
);
val
=
0
;
}
if
(
!
(
val
&
(
ARIZONA_OUT1L_ENA
|
ARIZONA_OUT1R_ENA
)))
{
ret
=
regmap_update_bits
(
arizona
->
regmap
,
0x225
,
0x4000
,
0x4000
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to do magic: %d
\n
"
,
ret
);
ret
=
regmap_update_bits
(
arizona
->
regmap
,
0x226
,
0x4000
,
0x4000
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to do magic: %d
\n
"
,
ret
);
}
mutex_unlock
(
&
arizona
->
dapm
->
card
->
dapm_mutex
);
arizona_extcon_do_magic
(
info
,
0x4000
);
ret
=
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_ACCESSORY_DETECT_MODE_1
,
...
...
drivers/mfd/wm5102-tables.c
View file @
a18d5151
...
...
@@ -290,12 +290,14 @@ static const struct reg_default wm5102_reg_default[] = {
{
0x00000176
,
0x0000
},
/* R374 - FLL1 Control 6 */
{
0x00000177
,
0x0181
},
/* R375 - FLL1 Loop Filter Test 1 */
{
0x00000178
,
0x0000
},
/* R376 - FLL1 NCO Test 0 */
{
0x00000179
,
0x0000
},
/* R377 - FLL1 Control 7 */
{
0x00000181
,
0x0000
},
/* R385 - FLL1 Synchroniser 1 */
{
0x00000182
,
0x0000
},
/* R386 - FLL1 Synchroniser 2 */
{
0x00000183
,
0x0000
},
/* R387 - FLL1 Synchroniser 3 */
{
0x00000184
,
0x0000
},
/* R388 - FLL1 Synchroniser 4 */
{
0x00000185
,
0x0000
},
/* R389 - FLL1 Synchroniser 5 */
{
0x00000186
,
0x0000
},
/* R390 - FLL1 Synchroniser 6 */
{
0x00000187
,
0x0001
},
/* R391 - FLL1 Synchroniser 7 */
{
0x00000189
,
0x0000
},
/* R393 - FLL1 Spread Spectrum */
{
0x0000018A
,
0x0004
},
/* R394 - FLL1 GPIO Clock */
{
0x00000191
,
0x0000
},
/* R401 - FLL2 Control 1 */
...
...
@@ -306,12 +308,14 @@ static const struct reg_default wm5102_reg_default[] = {
{
0x00000196
,
0x0000
},
/* R406 - FLL2 Control 6 */
{
0x00000197
,
0x0000
},
/* R407 - FLL2 Loop Filter Test 1 */
{
0x00000198
,
0x0000
},
/* R408 - FLL2 NCO Test 0 */
{
0x00000199
,
0x0000
},
/* R409 - FLL2 Control 7 */
{
0x000001A1
,
0x0000
},
/* R417 - FLL2 Synchroniser 1 */
{
0x000001A2
,
0x0000
},
/* R418 - FLL2 Synchroniser 2 */
{
0x000001A3
,
0x0000
},
/* R419 - FLL2 Synchroniser 3 */
{
0x000001A4
,
0x0000
},
/* R420 - FLL2 Synchroniser 4 */
{
0x000001A5
,
0x0000
},
/* R421 - FLL2 Synchroniser 5 */
{
0x000001A6
,
0x0000
},
/* R422 - FLL2 Synchroniser 6 */
{
0x000001A7
,
0x0001
},
/* R423 - FLL2 Synchroniser 7 */
{
0x000001A9
,
0x0000
},
/* R425 - FLL2 Spread Spectrum */
{
0x000001AA
,
0x0004
},
/* R426 - FLL2 GPIO Clock */
{
0x00000200
,
0x0006
},
/* R512 - Mic Charge Pump 1 */
...
...
@@ -1051,12 +1055,14 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
case
ARIZONA_FLL1_CONTROL_6
:
case
ARIZONA_FLL1_LOOP_FILTER_TEST_1
:
case
ARIZONA_FLL1_NCO_TEST_0
:
case
ARIZONA_FLL1_CONTROL_7
:
case
ARIZONA_FLL1_SYNCHRONISER_1
:
case
ARIZONA_FLL1_SYNCHRONISER_2
:
case
ARIZONA_FLL1_SYNCHRONISER_3
:
case
ARIZONA_FLL1_SYNCHRONISER_4
:
case
ARIZONA_FLL1_SYNCHRONISER_5
:
case
ARIZONA_FLL1_SYNCHRONISER_6
:
case
ARIZONA_FLL1_SYNCHRONISER_7
:
case
ARIZONA_FLL1_SPREAD_SPECTRUM
:
case
ARIZONA_FLL1_GPIO_CLOCK
:
case
ARIZONA_FLL2_CONTROL_1
:
...
...
@@ -1067,12 +1073,14 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
case
ARIZONA_FLL2_CONTROL_6
:
case
ARIZONA_FLL2_LOOP_FILTER_TEST_1
:
case
ARIZONA_FLL2_NCO_TEST_0
:
case
ARIZONA_FLL2_CONTROL_7
:
case
ARIZONA_FLL2_SYNCHRONISER_1
:
case
ARIZONA_FLL2_SYNCHRONISER_2
:
case
ARIZONA_FLL2_SYNCHRONISER_3
:
case
ARIZONA_FLL2_SYNCHRONISER_4
:
case
ARIZONA_FLL2_SYNCHRONISER_5
:
case
ARIZONA_FLL2_SYNCHRONISER_6
:
case
ARIZONA_FLL2_SYNCHRONISER_7
:
case
ARIZONA_FLL2_SPREAD_SPECTRUM
:
case
ARIZONA_FLL2_GPIO_CLOCK
:
case
ARIZONA_MIC_CHARGE_PUMP_1
:
...
...
@@ -1161,6 +1169,8 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
case
ARIZONA_NOISE_GATE_CONTROL
:
case
ARIZONA_PDM_SPK1_CTRL_1
:
case
ARIZONA_PDM_SPK1_CTRL_2
:
case
ARIZONA_SPK_CTRL_2
:
case
ARIZONA_SPK_CTRL_3
:
case
ARIZONA_DAC_COMP_1
:
case
ARIZONA_DAC_COMP_2
:
case
ARIZONA_DAC_COMP_3
:
...
...
include/linux/mfd/arizona/core.h
View file @
a18d5151
...
...
@@ -100,6 +100,9 @@ struct arizona {
struct
regmap_irq_chip_data
*
aod_irq_chip
;
struct
regmap_irq_chip_data
*
irq_chip
;
bool
hpdet_magic
;
unsigned
int
hp_ena
;
struct
mutex
clk_lock
;
int
clk32k_ref
;
...
...
include/linux/mfd/arizona/registers.h
View file @
a18d5151
...
...
@@ -85,12 +85,14 @@
#define ARIZONA_FLL1_CONTROL_6 0x176
#define ARIZONA_FLL1_LOOP_FILTER_TEST_1 0x177
#define ARIZONA_FLL1_NCO_TEST_0 0x178
#define ARIZONA_FLL1_CONTROL_7 0x179
#define ARIZONA_FLL1_SYNCHRONISER_1 0x181
#define ARIZONA_FLL1_SYNCHRONISER_2 0x182
#define ARIZONA_FLL1_SYNCHRONISER_3 0x183
#define ARIZONA_FLL1_SYNCHRONISER_4 0x184
#define ARIZONA_FLL1_SYNCHRONISER_5 0x185
#define ARIZONA_FLL1_SYNCHRONISER_6 0x186
#define ARIZONA_FLL1_SYNCHRONISER_7 0x187
#define ARIZONA_FLL1_SPREAD_SPECTRUM 0x189
#define ARIZONA_FLL1_GPIO_CLOCK 0x18A
#define ARIZONA_FLL2_CONTROL_1 0x191
...
...
@@ -101,12 +103,14 @@
#define ARIZONA_FLL2_CONTROL_6 0x196
#define ARIZONA_FLL2_LOOP_FILTER_TEST_1 0x197
#define ARIZONA_FLL2_NCO_TEST_0 0x198
#define ARIZONA_FLL2_CONTROL_7 0x199
#define ARIZONA_FLL2_SYNCHRONISER_1 0x1A1
#define ARIZONA_FLL2_SYNCHRONISER_2 0x1A2
#define ARIZONA_FLL2_SYNCHRONISER_3 0x1A3
#define ARIZONA_FLL2_SYNCHRONISER_4 0x1A4
#define ARIZONA_FLL2_SYNCHRONISER_5 0x1A5
#define ARIZONA_FLL2_SYNCHRONISER_6 0x1A6
#define ARIZONA_FLL2_SYNCHRONISER_7 0x1A7
#define ARIZONA_FLL2_SPREAD_SPECTRUM 0x1A9
#define ARIZONA_FLL2_GPIO_CLOCK 0x1AA
#define ARIZONA_MIC_CHARGE_PUMP_1 0x200
...
...
@@ -213,6 +217,8 @@
#define ARIZONA_PDM_SPK1_CTRL_2 0x491
#define ARIZONA_PDM_SPK2_CTRL_1 0x492
#define ARIZONA_PDM_SPK2_CTRL_2 0x493
#define ARIZONA_SPK_CTRL_2 0x4B5
#define ARIZONA_SPK_CTRL_3 0x4B6
#define ARIZONA_DAC_COMP_1 0x4DC
#define ARIZONA_DAC_COMP_2 0x4DD
#define ARIZONA_DAC_COMP_3 0x4DE
...
...
@@ -1677,6 +1683,13 @@
#define ARIZONA_FLL1_FRC_INTEG_VAL_SHIFT 0
/* FLL1_FRC_INTEG_VAL - [11:0] */
#define ARIZONA_FLL1_FRC_INTEG_VAL_WIDTH 12
/* FLL1_FRC_INTEG_VAL - [11:0] */
/*
* R377 (0x179) - FLL1 Control 7
*/
#define ARIZONA_FLL1_GAIN_MASK 0x003c
/* FLL1_GAIN */
#define ARIZONA_FLL1_GAIN_SHIFT 2
/* FLL1_GAIN */
#define ARIZONA_FLL1_GAIN_WIDTH 4
/* FLL1_GAIN */
/*
* R385 (0x181) - FLL1 Synchroniser 1
*/
...
...
@@ -1723,6 +1736,17 @@
#define ARIZONA_FLL1_CLK_SYNC_SRC_SHIFT 0
/* FLL1_CLK_SYNC_SRC - [3:0] */
#define ARIZONA_FLL1_CLK_SYNC_SRC_WIDTH 4
/* FLL1_CLK_SYNC_SRC - [3:0] */
/*
* R391 (0x187) - FLL1 Synchroniser 7
*/
#define ARIZONA_FLL1_SYNC_GAIN_MASK 0x003c
/* FLL1_SYNC_GAIN */
#define ARIZONA_FLL1_SYNC_GAIN_SHIFT 2
/* FLL1_SYNC_GAIN */
#define ARIZONA_FLL1_SYNC_GAIN_WIDTH 4
/* FLL1_SYNC_GAIN */
#define ARIZONA_FLL1_SYNC_BW 0x0001
/* FLL1_SYNC_BW */
#define ARIZONA_FLL1_SYNC_BW_MASK 0x0001
/* FLL1_SYNC_BW */
#define ARIZONA_FLL1_SYNC_BW_SHIFT 0
/* FLL1_SYNC_BW */
#define ARIZONA_FLL1_SYNC_BW_WIDTH 1
/* FLL1_SYNC_BW */
/*
* R393 (0x189) - FLL1 Spread Spectrum
*/
...
...
@@ -1815,6 +1839,13 @@
#define ARIZONA_FLL2_FRC_INTEG_VAL_SHIFT 0
/* FLL2_FRC_INTEG_VAL - [11:0] */
#define ARIZONA_FLL2_FRC_INTEG_VAL_WIDTH 12
/* FLL2_FRC_INTEG_VAL - [11:0] */
/*
* R409 (0x199) - FLL2 Control 7
*/
#define ARIZONA_FLL2_GAIN_MASK 0x003c
/* FLL2_GAIN */
#define ARIZONA_FLL2_GAIN_SHIFT 2
/* FLL2_GAIN */
#define ARIZONA_FLL2_GAIN_WIDTH 4
/* FLL2_GAIN */
/*
* R417 (0x1A1) - FLL2 Synchroniser 1
*/
...
...
@@ -1861,6 +1892,17 @@
#define ARIZONA_FLL2_CLK_SYNC_SRC_SHIFT 0
/* FLL2_CLK_SYNC_SRC - [3:0] */
#define ARIZONA_FLL2_CLK_SYNC_SRC_WIDTH 4
/* FLL2_CLK_SYNC_SRC - [3:0] */
/*
* R423 (0x1A7) - FLL2 Synchroniser 7
*/
#define ARIZONA_FLL2_SYNC_GAIN_MASK 0x003c
/* FLL2_SYNC_GAIN */
#define ARIZONA_FLL2_SYNC_GAIN_SHIFT 2
/* FLL2_SYNC_GAIN */
#define ARIZONA_FLL2_SYNC_GAIN_WIDTH 4
/* FLL2_SYNC_GAIN */
#define ARIZONA_FLL2_SYNC_BW_MASK 0x0001
/* FLL2_SYNC_BW */
#define ARIZONA_FLL2_SYNC_BW_MASK 0x0001
/* FLL2_SYNC_BW */
#define ARIZONA_FLL2_SYNC_BW_SHIFT 0
/* FLL2_SYNC_BW */
#define ARIZONA_FLL2_SYNC_BW_WIDTH 1
/* FLL2_SYNC_BW */
/*
* R425 (0x1A9) - FLL2 Spread Spectrum
*/
...
...
sound/soc/codecs/arizona.c
View file @
a18d5151
This diff is collapsed.
Click to expand it.
sound/soc/codecs/arizona.h
View file @
a18d5151
...
...
@@ -32,6 +32,7 @@
#define ARIZONA_CLK_SRC_AIF2BCLK 0x9
#define ARIZONA_CLK_SRC_AIF3BCLK 0xa
#define ARIZONA_FLL_SRC_NONE -1
#define ARIZONA_FLL_SRC_MCLK1 0
#define ARIZONA_FLL_SRC_MCLK2 1
#define ARIZONA_FLL_SRC_SLIMCLK 3
...
...
@@ -48,6 +49,14 @@
#define ARIZONA_MIXER_VOL_SHIFT 1
#define ARIZONA_MIXER_VOL_WIDTH 7
#define ARIZONA_CLK_6MHZ 0
#define ARIZONA_CLK_12MHZ 1
#define ARIZONA_CLK_24MHZ 2
#define ARIZONA_CLK_49MHZ 3
#define ARIZONA_CLK_73MHZ 4
#define ARIZONA_CLK_98MHZ 5
#define ARIZONA_CLK_147MHZ 6
#define ARIZONA_MAX_DAI 4
#define ARIZONA_MAX_ADSP 4
...
...
@@ -64,6 +73,12 @@ struct arizona_priv {
int
sysclk
;
int
asyncclk
;
struct
arizona_dai_priv
dai
[
ARIZONA_MAX_DAI
];
int
num_inputs
;
unsigned
int
in_pending
;
unsigned
int
spk_ena
:
2
;
unsigned
int
spk_ena_pending
:
1
;
};
#define ARIZONA_NUM_MIXER_INPUTS 99
...
...
@@ -165,6 +180,12 @@ extern int arizona_mixer_values[ARIZONA_NUM_MIXER_INPUTS];
ARIZONA_MIXER_ROUTES(name, name "L"), \
ARIZONA_MIXER_ROUTES(name, name "R")
#define ARIZONA_RATE_ENUM_SIZE 4
extern
const
char
*
arizona_rate_text
[
ARIZONA_RATE_ENUM_SIZE
];
extern
const
int
arizona_rate_val
[
ARIZONA_RATE_ENUM_SIZE
];
extern
const
struct
soc_enum
arizona_isrc_fsl
[];
extern
const
struct
soc_enum
arizona_in_vi_ramp
;
extern
const
struct
soc_enum
arizona_in_vd_ramp
;
...
...
@@ -184,6 +205,9 @@ extern int arizona_in_ev(struct snd_soc_dapm_widget *w,
extern
int
arizona_out_ev
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
kcontrol
,
int
event
);
extern
int
arizona_hp_ev
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
kcontrol
,
int
event
);
extern
int
arizona_set_sysclk
(
struct
snd_soc_codec
*
codec
,
int
clk_id
,
int
source
,
unsigned
int
freq
,
int
dir
);
...
...
@@ -198,8 +222,12 @@ struct arizona_fll {
unsigned
int
base
;
unsigned
int
vco_mult
;
struct
completion
ok
;
unsigned
int
fref
;
unsigned
int
fout
;
int
sync_src
;
unsigned
int
sync_freq
;
int
ref_src
;
unsigned
int
ref_freq
;
char
lock_name
[
ARIZONA_FLL_NAME_LEN
];
char
clock_ok_name
[
ARIZONA_FLL_NAME_LEN
];
...
...
@@ -207,9 +235,13 @@ struct arizona_fll {
extern
int
arizona_init_fll
(
struct
arizona
*
arizona
,
int
id
,
int
base
,
int
lock_irq
,
int
ok_irq
,
struct
arizona_fll
*
fll
);
extern
int
arizona_set_fll_refclk
(
struct
arizona_fll
*
fll
,
int
source
,
unsigned
int
Fref
,
unsigned
int
Fout
);
extern
int
arizona_set_fll
(
struct
arizona_fll
*
fll
,
int
source
,
unsigned
int
Fref
,
unsigned
int
Fout
);
extern
int
arizona_init_spk
(
struct
snd_soc_codec
*
codec
);
extern
int
arizona_init_dai
(
struct
arizona_priv
*
priv
,
int
dai
);
int
arizona_set_output_mode
(
struct
snd_soc_codec
*
codec
,
int
output
,
...
...
sound/soc/codecs/wm2200.c
View file @
a18d5151
...
...
@@ -1565,7 +1565,7 @@ static int wm2200_probe(struct snd_soc_codec *codec)
return
ret
;
}
ret
=
snd_soc_add_codec_controls
(
codec
,
wm_adsp_fw_controls
,
2
);
ret
=
snd_soc_add_codec_controls
(
codec
,
wm_adsp
1
_fw_controls
,
2
);
if
(
ret
!=
0
)
return
ret
;
...
...
sound/soc/codecs/wm5102.c
View file @
a18d5151
...
...
@@ -36,9 +36,6 @@
struct
wm5102_priv
{
struct
arizona_priv
core
;
struct
arizona_fll
fll
[
2
];
unsigned
int
spk_ena
:
2
;
unsigned
int
spk_ena_pending
:
1
;
};
static
DECLARE_TLV_DB_SCALE
(
ana_tlv
,
0
,
100
,
0
);
...
...
@@ -615,6 +612,26 @@ static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
return
0
;
}
static
const
char
*
wm5102_osr_text
[]
=
{
"Low power"
,
"Normal"
,
"High performance"
,
};
static
const
unsigned
int
wm5102_osr_val
[]
=
{
0x0
,
0x3
,
0x5
,
};
static
const
struct
soc_enum
wm5102_hpout_osr
[]
=
{
SOC_VALUE_ENUM_SINGLE
(
ARIZONA_OUTPUT_PATH_CONFIG_1L
,
ARIZONA_OUT1_OSR_SHIFT
,
0x7
,
3
,
wm5102_osr_text
,
wm5102_osr_val
),
SOC_VALUE_ENUM_SINGLE
(
ARIZONA_OUTPUT_PATH_CONFIG_2L
,
ARIZONA_OUT2_OSR_SHIFT
,
0x7
,
3
,
wm5102_osr_text
,
wm5102_osr_val
),
SOC_VALUE_ENUM_SINGLE
(
ARIZONA_OUTPUT_PATH_CONFIG_3L
,
ARIZONA_OUT3_OSR_SHIFT
,
0x7
,
3
,
wm5102_osr_text
,
wm5102_osr_val
),
};
#define WM5102_NG_SRC(name, base) \
SOC_SINGLE(name " NG HPOUT1L Switch", base, 0, 1, 0), \
SOC_SINGLE(name " NG HPOUT1R Switch", base, 1, 1, 0), \
...
...
@@ -745,6 +762,9 @@ SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode),
SOC_ENUM
(
"LHPF3 Mode"
,
arizona_lhpf3_mode
),
SOC_ENUM
(
"LHPF4 Mode"
,
arizona_lhpf4_mode
),
SOC_VALUE_ENUM
(
"ISRC1 FSL"
,
arizona_isrc_fsl
[
0
]),
SOC_VALUE_ENUM
(
"ISRC2 FSL"
,
arizona_isrc_fsl
[
1
]),
ARIZONA_MIXER_CONTROLS
(
"Mic"
,
ARIZONA_MICMIX_INPUT_1_SOURCE
),
ARIZONA_MIXER_CONTROLS
(
"Noise"
,
ARIZONA_NOISEMIX_INPUT_1_SOURCE
),
...
...
@@ -761,6 +781,8 @@ ARIZONA_MIXER_CONTROLS("SPKOUTR", ARIZONA_OUT4RMIX_INPUT_1_SOURCE),
ARIZONA_MIXER_CONTROLS
(
"SPKDAT1L"
,
ARIZONA_OUT5LMIX_INPUT_1_SOURCE
),
ARIZONA_MIXER_CONTROLS
(
"SPKDAT1R"
,
ARIZONA_OUT5RMIX_INPUT_1_SOURCE
),
SOC_SINGLE
(
"Speaker High Performance Switch"
,
ARIZONA_OUTPUT_PATH_CONFIG_4L
,
ARIZONA_OUT4_OSR_SHIFT
,
1
,
0
),
SOC_SINGLE
(
"SPKDAT1 High Performance Switch"
,
ARIZONA_OUTPUT_PATH_CONFIG_5L
,
ARIZONA_OUT5_OSR_SHIFT
,
1
,
0
),
...
...
@@ -790,6 +812,10 @@ SOC_DOUBLE_R_TLV("SPKDAT1 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_5L,
ARIZONA_DAC_DIGITAL_VOLUME_5R
,
ARIZONA_OUT5L_VOL_SHIFT
,
0xbf
,
0
,
digital_tlv
),
SOC_VALUE_ENUM
(
"HPOUT1 OSR"
,
wm5102_hpout_osr
[
0
]),
SOC_VALUE_ENUM
(
"HPOUT2 OSR"
,
wm5102_hpout_osr
[
1
]),
SOC_VALUE_ENUM
(
"HPOUT3 OSR"
,
wm5102_hpout_osr
[
2
]),
SOC_ENUM
(
"Output Ramp Up"
,
arizona_out_vi_ramp
),
SOC_ENUM
(
"Output Ramp Down"
,
arizona_out_vd_ramp
),
...
...
@@ -828,47 +854,6 @@ ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE),
ARIZONA_MIXER_CONTROLS
(
"AIF3TX2"
,
ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE
),
};
static
int
wm5102_spk_ev
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
kcontrol
,
int
event
)
{
struct
snd_soc_codec
*
codec
=
w
->
codec
;
struct
arizona
*
arizona
=
dev_get_drvdata
(
codec
->
dev
->
parent
);
struct
wm5102_priv
*
wm5102
=
snd_soc_codec_get_drvdata
(
codec
);
if
(
arizona
->
rev
<
1
)
return
0
;
switch
(
event
)
{
case
SND_SOC_DAPM_PRE_PMU
:
if
(
!
wm5102
->
spk_ena
)
{
snd_soc_write
(
codec
,
0x4f5
,
0x25a
);
wm5102
->
spk_ena_pending
=
true
;
}
break
;
case
SND_SOC_DAPM_POST_PMU
:
if
(
wm5102
->
spk_ena_pending
)
{
msleep
(
75
);
snd_soc_write
(
codec
,
0x4f5
,
0xda
);
wm5102
->
spk_ena_pending
=
false
;
wm5102
->
spk_ena
++
;
}
break
;
case
SND_SOC_DAPM_PRE_PMD
:
wm5102
->
spk_ena
--
;
if
(
!
wm5102
->
spk_ena
)
snd_soc_write
(
codec
,
0x4f5
,
0x25a
);
break
;
case
SND_SOC_DAPM_POST_PMD
:
if
(
!
wm5102
->
spk_ena
)
snd_soc_write
(
codec
,
0x4f5
,
0x0da
);
break
;
}
return
0
;
}
ARIZONA_MIXER_ENUMS
(
EQ1
,
ARIZONA_EQ1MIX_INPUT_1_SOURCE
);
ARIZONA_MIXER_ENUMS
(
EQ2
,
ARIZONA_EQ2MIX_INPUT_1_SOURCE
);
ARIZONA_MIXER_ENUMS
(
EQ3
,
ARIZONA_EQ3MIX_INPUT_1_SOURCE
);
...
...
@@ -984,22 +969,28 @@ SND_SOC_DAPM_INPUT("IN3R"),
SND_SOC_DAPM_PGA_E
(
"IN1L PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN1L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN1R PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN1R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN2L PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN2L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN2R PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN2R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN3L PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN3L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN3R PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN3R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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_SUPPLY
(
"MICBIAS1"
,
ARIZONA_MIC_BIAS_CTRL_1
,
ARIZONA_MICB1_ENA_SHIFT
,
0
,
NULL
,
0
),
...
...
@@ -1131,11 +1122,11 @@ ARIZONA_DSP_WIDGETS(DSP1, "DSP1"),
SND_SOC_DAPM_VALUE_MUX
(
"AEC Loopback"
,
ARIZONA_DAC_AEC_CONTROL_1
,
ARIZONA_AEC_LOOPBACK_ENA
,
0
,
&
wm5102_aec_loopback_mux
),
SND_SOC_DAPM_PGA_E
(
"OUT1L"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT1L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_
out
_ev
,
SND_SOC_DAPM_PGA_E
(
"OUT1L"
,
SND_SOC_NOPM
,
ARIZONA_OUT1L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_
hp
_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT1R"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT1R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_
out
_ev
,
SND_SOC_DAPM_PGA_E
(
"OUT1R"
,
SND_SOC_NOPM
,
ARIZONA_OUT1R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_
hp
_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT2L"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT2L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_out_ev
,
...
...
@@ -1146,12 +1137,6 @@ SND_SOC_DAPM_PGA_E("OUT2R", ARIZONA_OUTPUT_ENABLES_1,
SND_SOC_DAPM_PGA_E
(
"OUT3L"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT3L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_out_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT4L"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT4L_ENA_SHIFT
,
0
,
NULL
,
0
,
wm5102_spk_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT4R"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT4R_ENA_SHIFT
,
0
,
NULL
,
0
,
wm5102_spk_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT5L"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT5L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_out_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
...
...
@@ -1494,6 +1479,12 @@ static int wm5102_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
return
arizona_set_fll
(
&
wm5102
->
fll
[
0
],
source
,
Fref
,
Fout
);
case
WM5102_FLL2
:
return
arizona_set_fll
(
&
wm5102
->
fll
[
1
],
source
,
Fref
,
Fout
);
case
WM5102_FLL1_REFCLK
:
return
arizona_set_fll_refclk
(
&
wm5102
->
fll
[
0
],
source
,
Fref
,
Fout
);
case
WM5102_FLL2_REFCLK
:
return
arizona_set_fll_refclk
(
&
wm5102
->
fll
[
1
],
source
,
Fref
,
Fout
);
default:
return
-
EINVAL
;
}
...
...
@@ -1581,10 +1572,12 @@ static int wm5102_codec_probe(struct snd_soc_codec *codec)
if
(
ret
!=
0
)
return
ret
;
ret
=
snd_soc_add_codec_controls
(
codec
,
wm_adsp
_fw_controls
,
1
);
ret
=
snd_soc_add_codec_controls
(
codec
,
wm_adsp
2_fw_controls
,
2
);
if
(
ret
!=
0
)
return
ret
;
arizona_init_spk
(
codec
);
snd_soc_dapm_disable_pin
(
&
codec
->
dapm
,
"HAPTICS"
);
priv
->
core
.
arizona
->
dapm
=
&
codec
->
dapm
;
...
...
@@ -1604,13 +1597,6 @@ static int wm5102_codec_remove(struct snd_soc_codec *codec)
#define WM5102_DIG_VU 0x0200
static
unsigned
int
wm5102_digital_vu
[]
=
{
ARIZONA_ADC_DIGITAL_VOLUME_1L
,
ARIZONA_ADC_DIGITAL_VOLUME_1R
,
ARIZONA_ADC_DIGITAL_VOLUME_2L
,
ARIZONA_ADC_DIGITAL_VOLUME_2R
,
ARIZONA_ADC_DIGITAL_VOLUME_3L
,
ARIZONA_ADC_DIGITAL_VOLUME_3R
,
ARIZONA_DAC_DIGITAL_VOLUME_1L
,
ARIZONA_DAC_DIGITAL_VOLUME_1R
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
...
...
@@ -1653,6 +1639,7 @@ static int wm5102_probe(struct platform_device *pdev)
platform_set_drvdata
(
pdev
,
wm5102
);
wm5102
->
core
.
arizona
=
arizona
;
wm5102
->
core
.
num_inputs
=
6
;
wm5102
->
core
.
adsp
[
0
].
part
=
"wm5102"
;
wm5102
->
core
.
adsp
[
0
].
num
=
1
;
...
...
@@ -1677,6 +1664,12 @@ static int wm5102_probe(struct platform_device *pdev)
ARIZONA_IRQ_FLL2_LOCK
,
ARIZONA_IRQ_FLL2_CLOCK_OK
,
&
wm5102
->
fll
[
1
]);
/* SR2 fixed at 8kHz, SR3 fixed at 16kHz */
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_SAMPLE_RATE_2
,
ARIZONA_SAMPLE_RATE_2_MASK
,
0x11
);
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_SAMPLE_RATE_3
,
ARIZONA_SAMPLE_RATE_3_MASK
,
0x12
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
wm5102_dai
);
i
++
)
arizona_init_dai
(
&
wm5102
->
core
,
i
);
...
...
sound/soc/codecs/wm5102.h
View file @
a18d5151
...
...
@@ -15,7 +15,9 @@
#include "arizona.h"
#define WM5102_FLL1 1
#define WM5102_FLL2 2
#define WM5102_FLL1 1
#define WM5102_FLL2 2
#define WM5102_FLL1_REFCLK 3
#define WM5102_FLL2_REFCLK 4
#endif
sound/soc/codecs/wm5110.c
View file @
a18d5151
...
...
@@ -416,28 +416,36 @@ SND_SOC_DAPM_INPUT("IN4R"),
SND_SOC_DAPM_PGA_E
(
"IN1L PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN1L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN1R PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN1R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN2L PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN2L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN2R PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN2R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN3L PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN3L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN3R PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN3R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN4L PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN4L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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
(
"IN4R PGA"
,
ARIZONA_INPUT_ENABLES
,
ARIZONA_IN4R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_in_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_SUPPLY
(
"MICBIAS1"
,
ARIZONA_MIC_BIAS_CTRL_1
,
ARIZONA_MICB1_ENA_SHIFT
,
0
,
NULL
,
0
),
...
...
@@ -551,11 +559,11 @@ SND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0,
SND_SOC_DAPM_AIF_IN
(
"AIF3RX2"
,
NULL
,
0
,
ARIZONA_AIF3_RX_ENABLES
,
ARIZONA_AIF3RX2_ENA_SHIFT
,
0
),
SND_SOC_DAPM_PGA_E
(
"OUT1L"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT1L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_
out
_ev
,
SND_SOC_DAPM_PGA_E
(
"OUT1L"
,
SND_SOC_NOPM
,
ARIZONA_OUT1L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_
hp
_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT1R"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT1R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_
out
_ev
,
SND_SOC_DAPM_PGA_E
(
"OUT1R"
,
SND_SOC_NOPM
,
ARIZONA_OUT1R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_
hp
_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT2L"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT2L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_out_ev
,
...
...
@@ -569,12 +577,6 @@ SND_SOC_DAPM_PGA_E("OUT3L", ARIZONA_OUTPUT_ENABLES_1,
SND_SOC_DAPM_PGA_E
(
"OUT3R"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT3R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_out_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT4L"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT4L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_out_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT4R"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT4R_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_out_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_PGA_E
(
"OUT5L"
,
ARIZONA_OUTPUT_ENABLES_1
,
ARIZONA_OUT5L_ENA_SHIFT
,
0
,
NULL
,
0
,
arizona_out_ev
,
SND_SOC_DAPM_PRE_PMD
|
SND_SOC_DAPM_POST_PMU
),
...
...
@@ -880,6 +882,12 @@ static int wm5110_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
return
arizona_set_fll
(
&
wm5110
->
fll
[
0
],
source
,
Fref
,
Fout
);
case
WM5110_FLL2
:
return
arizona_set_fll
(
&
wm5110
->
fll
[
1
],
source
,
Fref
,
Fout
);
case
WM5110_FLL1_REFCLK
:
return
arizona_set_fll_refclk
(
&
wm5110
->
fll
[
0
],
source
,
Fref
,
Fout
);
case
WM5110_FLL2_REFCLK
:
return
arizona_set_fll_refclk
(
&
wm5110
->
fll
[
1
],
source
,
Fref
,
Fout
);
default:
return
-
EINVAL
;
}
...
...
@@ -987,15 +995,6 @@ static int wm5110_codec_remove(struct snd_soc_codec *codec)
#define WM5110_DIG_VU 0x0200
static
unsigned
int
wm5110_digital_vu
[]
=
{
ARIZONA_ADC_DIGITAL_VOLUME_1L
,
ARIZONA_ADC_DIGITAL_VOLUME_1R
,
ARIZONA_ADC_DIGITAL_VOLUME_2L
,
ARIZONA_ADC_DIGITAL_VOLUME_2R
,
ARIZONA_ADC_DIGITAL_VOLUME_3L
,
ARIZONA_ADC_DIGITAL_VOLUME_3R
,
ARIZONA_ADC_DIGITAL_VOLUME_4L
,
ARIZONA_ADC_DIGITAL_VOLUME_4R
,
ARIZONA_DAC_DIGITAL_VOLUME_1L
,
ARIZONA_DAC_DIGITAL_VOLUME_1R
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
...
...
@@ -1040,6 +1039,7 @@ static int wm5110_probe(struct platform_device *pdev)
platform_set_drvdata
(
pdev
,
wm5110
);
wm5110
->
core
.
arizona
=
arizona
;
wm5110
->
core
.
num_inputs
=
8
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
wm5110
->
fll
);
i
++
)
wm5110
->
fll
[
i
].
vco_mult
=
3
;
...
...
sound/soc/codecs/wm5110.h
View file @
a18d5151
...
...
@@ -15,7 +15,9 @@
#include "arizona.h"
#define WM5110_FLL1 1
#define WM5110_FLL2 2
#define WM5110_FLL1 1
#define WM5110_FLL2 2
#define WM5110_FLL1_REFCLK 3
#define WM5110_FLL2_REFCLK 4
#endif
sound/soc/codecs/wm_adsp.c
View file @
a18d5151
...
...
@@ -31,6 +31,7 @@
#include <linux/mfd/arizona/registers.h>
#include "arizona.h"
#include "wm_adsp.h"
#define adsp_crit(_dsp, fmt, ...) \
...
...
@@ -254,17 +255,52 @@ static const struct soc_enum wm_adsp_fw_enum[] = {
SOC_ENUM_SINGLE
(
0
,
3
,
ARRAY_SIZE
(
wm_adsp_fw_text
),
wm_adsp_fw_text
),
};
const
struct
snd_kcontrol_new
wm_adsp_fw_controls
[]
=
{
const
struct
snd_kcontrol_new
wm_adsp
1
_fw_controls
[]
=
{
SOC_ENUM_EXT
(
"DSP1 Firmware"
,
wm_adsp_fw_enum
[
0
],
wm_adsp_fw_get
,
wm_adsp_fw_put
),
SOC_ENUM_EXT
(
"DSP2 Firmware"
,
wm_adsp_fw_enum
[
1
],
wm_adsp_fw_get
,
wm_adsp_fw_put
),
SOC_ENUM_EXT
(
"DSP3 Firmware"
,
wm_adsp_fw_enum
[
2
],
wm_adsp_fw_get
,
wm_adsp_fw_put
),
};
EXPORT_SYMBOL_GPL
(
wm_adsp1_fw_controls
);
#if IS_ENABLED(CONFIG_SND_SOC_ARIZONA)
static
const
struct
soc_enum
wm_adsp2_rate_enum
[]
=
{
SOC_VALUE_ENUM_SINGLE
(
ARIZONA_DSP1_CONTROL_1
,
ARIZONA_DSP1_RATE_SHIFT
,
0xf
,
ARIZONA_RATE_ENUM_SIZE
,
arizona_rate_text
,
arizona_rate_val
),
SOC_VALUE_ENUM_SINGLE
(
ARIZONA_DSP2_CONTROL_1
,
ARIZONA_DSP1_RATE_SHIFT
,
0xf
,
ARIZONA_RATE_ENUM_SIZE
,
arizona_rate_text
,
arizona_rate_val
),
SOC_VALUE_ENUM_SINGLE
(
ARIZONA_DSP3_CONTROL_1
,
ARIZONA_DSP1_RATE_SHIFT
,
0xf
,
ARIZONA_RATE_ENUM_SIZE
,
arizona_rate_text
,
arizona_rate_val
),
SOC_VALUE_ENUM_SINGLE
(
ARIZONA_DSP3_CONTROL_1
,
ARIZONA_DSP1_RATE_SHIFT
,
0xf
,
ARIZONA_RATE_ENUM_SIZE
,
arizona_rate_text
,
arizona_rate_val
),
};
const
struct
snd_kcontrol_new
wm_adsp2_fw_controls
[]
=
{
SOC_ENUM_EXT
(
"DSP1 Firmware"
,
wm_adsp_fw_enum
[
0
],
wm_adsp_fw_get
,
wm_adsp_fw_put
),
SOC_ENUM
(
"DSP1 Rate"
,
wm_adsp2_rate_enum
[
0
]),
SOC_ENUM_EXT
(
"DSP2 Firmware"
,
wm_adsp_fw_enum
[
1
],
wm_adsp_fw_get
,
wm_adsp_fw_put
),
SOC_ENUM
(
"DSP2 Rate"
,
wm_adsp2_rate_enum
[
1
]),
SOC_ENUM_EXT
(
"DSP3 Firmware"
,
wm_adsp_fw_enum
[
2
],
wm_adsp_fw_get
,
wm_adsp_fw_put
),
SOC_ENUM
(
"DSP3 Rate"
,
wm_adsp2_rate_enum
[
2
]),
SOC_ENUM_EXT
(
"DSP4 Firmware"
,
wm_adsp_fw_enum
[
3
],
wm_adsp_fw_get
,
wm_adsp_fw_put
),
SOC_ENUM
(
"DSP4 Rate"
,
wm_adsp2_rate_enum
[
3
]),
};
EXPORT_SYMBOL_GPL
(
wm_adsp_fw_controls
);
EXPORT_SYMBOL_GPL
(
wm_adsp2_fw_controls
);
#endif
static
struct
wm_adsp_region
const
*
wm_adsp_find_region
(
struct
wm_adsp
*
dsp
,
int
type
)
...
...
sound/soc/codecs/wm_adsp.h
View file @
a18d5151
...
...
@@ -67,7 +67,8 @@ struct wm_adsp {
.shift = num, .event = wm_adsp2_event, \
.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD }
extern
const
struct
snd_kcontrol_new
wm_adsp_fw_controls
[];
extern
const
struct
snd_kcontrol_new
wm_adsp1_fw_controls
[];
extern
const
struct
snd_kcontrol_new
wm_adsp2_fw_controls
[];
int
wm_adsp1_init
(
struct
wm_adsp
*
adsp
);
int
wm_adsp2_init
(
struct
wm_adsp
*
adsp
,
bool
dvfs
);
...
...
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