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
79172746
Commit
79172746
authored
Sep 19, 2011
by
Mark Brown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ASoC: Convert WM8996 to direct regmap API usage
Signed-off-by:
Mark Brown
<
broonie@opensource.wolfsonmicro.com
>
parent
c2b164fa
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
391 additions
and
308 deletions
+391
-308
sound/soc/codecs/wm8996.c
sound/soc/codecs/wm8996.c
+391
-308
No files found.
sound/soc/codecs/wm8996.c
View file @
79172746
...
...
@@ -19,6 +19,7 @@
#include <linux/gcd.h>
#include <linux/gpio.h>
#include <linux/i2c.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h>
#include <linux/workqueue.h>
...
...
@@ -114,297 +115,365 @@ WM8996_REGULATOR_EVENT(0)
WM8996_REGULATOR_EVENT
(
1
)
WM8996_REGULATOR_EVENT
(
2
)
static
const
u16
wm8996_reg
[
WM8996_MAX_REGISTER
]
=
{
[
WM8996_SOFTWARE_RESET
]
=
0x8996
,
[
WM8996_POWER_MANAGEMENT_7
]
=
0x10
,
[
WM8996_DAC1_HPOUT1_VOLUME
]
=
0x88
,
[
WM8996_DAC2_HPOUT2_VOLUME
]
=
0x88
,
[
WM8996_DAC1_LEFT_VOLUME
]
=
0x2c0
,
[
WM8996_DAC1_RIGHT_VOLUME
]
=
0x2c0
,
[
WM8996_DAC2_LEFT_VOLUME
]
=
0x2c0
,
[
WM8996_DAC2_RIGHT_VOLUME
]
=
0x2c0
,
[
WM8996_OUTPUT1_LEFT_VOLUME
]
=
0x80
,
[
WM8996_OUTPUT1_RIGHT_VOLUME
]
=
0x80
,
[
WM8996_OUTPUT2_LEFT_VOLUME
]
=
0x80
,
[
WM8996_OUTPUT2_RIGHT_VOLUME
]
=
0x80
,
[
WM8996_MICBIAS_1
]
=
0x39
,
[
WM8996_MICBIAS_2
]
=
0x39
,
[
WM8996_LDO_1
]
=
0x3
,
[
WM8996_LDO_2
]
=
0x13
,
[
WM8996_ACCESSORY_DETECT_MODE_1
]
=
0x4
,
[
WM8996_HEADPHONE_DETECT_1
]
=
0x20
,
[
WM8996_MIC_DETECT_1
]
=
0x7600
,
[
WM8996_MIC_DETECT_2
]
=
0xbf
,
[
WM8996_CHARGE_PUMP_1
]
=
0x1f25
,
[
WM8996_CHARGE_PUMP_2
]
=
0xab19
,
[
WM8996_DC_SERVO_5
]
=
0x2a2a
,
[
WM8996_CONTROL_INTERFACE_1
]
=
0x8004
,
[
WM8996_CLOCKING_1
]
=
0x10
,
[
WM8996_AIF_RATE
]
=
0x83
,
[
WM8996_FLL_CONTROL_4
]
=
0x5dc0
,
[
WM8996_FLL_CONTROL_5
]
=
0xc84
,
[
WM8996_FLL_EFS_2
]
=
0x2
,
[
WM8996_AIF1_TX_LRCLK_1
]
=
0x80
,
[
WM8996_AIF1_TX_LRCLK_2
]
=
0x8
,
[
WM8996_AIF1_RX_LRCLK_1
]
=
0x80
,
[
WM8996_AIF1TX_DATA_CONFIGURATION_1
]
=
0x1818
,
[
WM8996_AIF1RX_DATA_CONFIGURATION
]
=
0x1818
,
[
WM8996_AIF1TX_TEST
]
=
0x7
,
[
WM8996_AIF2_TX_LRCLK_1
]
=
0x80
,
[
WM8996_AIF2_TX_LRCLK_2
]
=
0x8
,
[
WM8996_AIF2_RX_LRCLK_1
]
=
0x80
,
[
WM8996_AIF2TX_DATA_CONFIGURATION_1
]
=
0x1818
,
[
WM8996_AIF2RX_DATA_CONFIGURATION
]
=
0x1818
,
[
WM8996_AIF2TX_TEST
]
=
0x1
,
[
WM8996_DSP1_TX_LEFT_VOLUME
]
=
0xc0
,
[
WM8996_DSP1_TX_RIGHT_VOLUME
]
=
0xc0
,
[
WM8996_DSP1_RX_LEFT_VOLUME
]
=
0xc0
,
[
WM8996_DSP1_RX_RIGHT_VOLUME
]
=
0xc0
,
[
WM8996_DSP1_TX_FILTERS
]
=
0x2000
,
[
WM8996_DSP1_RX_FILTERS_1
]
=
0x200
,
[
WM8996_DSP1_RX_FILTERS_2
]
=
0x10
,
[
WM8996_DSP1_DRC_1
]
=
0x98
,
[
WM8996_DSP1_DRC_2
]
=
0x845
,
[
WM8996_DSP1_RX_EQ_GAINS_1
]
=
0x6318
,
[
WM8996_DSP1_RX_EQ_GAINS_2
]
=
0x6300
,
[
WM8996_DSP1_RX_EQ_BAND_1_A
]
=
0xfca
,
[
WM8996_DSP1_RX_EQ_BAND_1_B
]
=
0x400
,
[
WM8996_DSP1_RX_EQ_BAND_1_PG
]
=
0xd8
,
[
WM8996_DSP1_RX_EQ_BAND_2_A
]
=
0x1eb5
,
[
WM8996_DSP1_RX_EQ_BAND_2_B
]
=
0xf145
,
[
WM8996_DSP1_RX_EQ_BAND_2_C
]
=
0xb75
,
[
WM8996_DSP1_RX_EQ_BAND_2_PG
]
=
0x1c5
,
[
WM8996_DSP1_RX_EQ_BAND_3_A
]
=
0x1c58
,
[
WM8996_DSP1_RX_EQ_BAND_3_B
]
=
0xf373
,
[
WM8996_DSP1_RX_EQ_BAND_3_C
]
=
0xa54
,
[
WM8996_DSP1_RX_EQ_BAND_3_PG
]
=
0x558
,
[
WM8996_DSP1_RX_EQ_BAND_4_A
]
=
0x168e
,
[
WM8996_DSP1_RX_EQ_BAND_4_B
]
=
0xf829
,
[
WM8996_DSP1_RX_EQ_BAND_4_C
]
=
0x7ad
,
[
WM8996_DSP1_RX_EQ_BAND_4_PG
]
=
0x1103
,
[
WM8996_DSP1_RX_EQ_BAND_5_A
]
=
0x564
,
[
WM8996_DSP1_RX_EQ_BAND_5_B
]
=
0x559
,
[
WM8996_DSP1_RX_EQ_BAND_5_PG
]
=
0x4000
,
[
WM8996_DSP2_TX_LEFT_VOLUME
]
=
0xc0
,
[
WM8996_DSP2_TX_RIGHT_VOLUME
]
=
0xc0
,
[
WM8996_DSP2_RX_LEFT_VOLUME
]
=
0xc0
,
[
WM8996_DSP2_RX_RIGHT_VOLUME
]
=
0xc0
,
[
WM8996_DSP2_TX_FILTERS
]
=
0x2000
,
[
WM8996_DSP2_RX_FILTERS_1
]
=
0x200
,
[
WM8996_DSP2_RX_FILTERS_2
]
=
0x10
,
[
WM8996_DSP2_DRC_1
]
=
0x98
,
[
WM8996_DSP2_DRC_2
]
=
0x845
,
[
WM8996_DSP2_RX_EQ_GAINS_1
]
=
0x6318
,
[
WM8996_DSP2_RX_EQ_GAINS_2
]
=
0x6300
,
[
WM8996_DSP2_RX_EQ_BAND_1_A
]
=
0xfca
,
[
WM8996_DSP2_RX_EQ_BAND_1_B
]
=
0x400
,
[
WM8996_DSP2_RX_EQ_BAND_1_PG
]
=
0xd8
,
[
WM8996_DSP2_RX_EQ_BAND_2_A
]
=
0x1eb5
,
[
WM8996_DSP2_RX_EQ_BAND_2_B
]
=
0xf145
,
[
WM8996_DSP2_RX_EQ_BAND_2_C
]
=
0xb75
,
[
WM8996_DSP2_RX_EQ_BAND_2_PG
]
=
0x1c5
,
[
WM8996_DSP2_RX_EQ_BAND_3_A
]
=
0x1c58
,
[
WM8996_DSP2_RX_EQ_BAND_3_B
]
=
0xf373
,
[
WM8996_DSP2_RX_EQ_BAND_3_C
]
=
0xa54
,
[
WM8996_DSP2_RX_EQ_BAND_3_PG
]
=
0x558
,
[
WM8996_DSP2_RX_EQ_BAND_4_A
]
=
0x168e
,
[
WM8996_DSP2_RX_EQ_BAND_4_B
]
=
0xf829
,
[
WM8996_DSP2_RX_EQ_BAND_4_C
]
=
0x7ad
,
[
WM8996_DSP2_RX_EQ_BAND_4_PG
]
=
0x1103
,
[
WM8996_DSP2_RX_EQ_BAND_5_A
]
=
0x564
,
[
WM8996_DSP2_RX_EQ_BAND_5_B
]
=
0x559
,
[
WM8996_DSP2_RX_EQ_BAND_5_PG
]
=
0x4000
,
[
WM8996_OVERSAMPLING
]
=
0xd
,
[
WM8996_SIDETONE
]
=
0x1040
,
[
WM8996_GPIO_1
]
=
0xa101
,
[
WM8996_GPIO_2
]
=
0xa101
,
[
WM8996_GPIO_3
]
=
0xa101
,
[
WM8996_GPIO_4
]
=
0xa101
,
[
WM8996_GPIO_5
]
=
0xa101
,
[
WM8996_PULL_CONTROL_2
]
=
0x140
,
[
WM8996_INTERRUPT_STATUS_1_MASK
]
=
0x1f
,
[
WM8996_INTERRUPT_STATUS_2_MASK
]
=
0x1ecf
,
[
WM8996_RIGHT_PDM_SPEAKER
]
=
0x1
,
[
WM8996_PDM_SPEAKER_MUTE_SEQUENCE
]
=
0x69
,
[
WM8996_PDM_SPEAKER_VOLUME
]
=
0x66
,
[
WM8996_WRITE_SEQUENCER_0
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_1
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_3
]
=
0x6
,
[
WM8996_WRITE_SEQUENCER_4
]
=
0x40
,
[
WM8996_WRITE_SEQUENCER_5
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_6
]
=
0xf
,
[
WM8996_WRITE_SEQUENCER_7
]
=
0x6
,
[
WM8996_WRITE_SEQUENCER_8
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_9
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_10
]
=
0x104
,
[
WM8996_WRITE_SEQUENCER_12
]
=
0x60
,
[
WM8996_WRITE_SEQUENCER_13
]
=
0x11
,
[
WM8996_WRITE_SEQUENCER_14
]
=
0x401
,
[
WM8996_WRITE_SEQUENCER_16
]
=
0x50
,
[
WM8996_WRITE_SEQUENCER_17
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_18
]
=
0x100
,
[
WM8996_WRITE_SEQUENCER_20
]
=
0x51
,
[
WM8996_WRITE_SEQUENCER_21
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_22
]
=
0x104
,
[
WM8996_WRITE_SEQUENCER_23
]
=
0xa
,
[
WM8996_WRITE_SEQUENCER_24
]
=
0x60
,
[
WM8996_WRITE_SEQUENCER_25
]
=
0x3b
,
[
WM8996_WRITE_SEQUENCER_26
]
=
0x502
,
[
WM8996_WRITE_SEQUENCER_27
]
=
0x100
,
[
WM8996_WRITE_SEQUENCER_28
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_32
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_36
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_40
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_44
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_48
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_52
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_56
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_60
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_64
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_65
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_67
]
=
0x6
,
[
WM8996_WRITE_SEQUENCER_68
]
=
0x40
,
[
WM8996_WRITE_SEQUENCER_69
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_70
]
=
0xf
,
[
WM8996_WRITE_SEQUENCER_71
]
=
0x6
,
[
WM8996_WRITE_SEQUENCER_72
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_73
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_74
]
=
0x104
,
[
WM8996_WRITE_SEQUENCER_76
]
=
0x60
,
[
WM8996_WRITE_SEQUENCER_77
]
=
0x11
,
[
WM8996_WRITE_SEQUENCER_78
]
=
0x401
,
[
WM8996_WRITE_SEQUENCER_80
]
=
0x50
,
[
WM8996_WRITE_SEQUENCER_81
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_82
]
=
0x100
,
[
WM8996_WRITE_SEQUENCER_84
]
=
0x60
,
[
WM8996_WRITE_SEQUENCER_85
]
=
0x3b
,
[
WM8996_WRITE_SEQUENCER_86
]
=
0x502
,
[
WM8996_WRITE_SEQUENCER_87
]
=
0x100
,
[
WM8996_WRITE_SEQUENCER_88
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_92
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_96
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_100
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_104
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_108
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_112
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_116
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_120
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_124
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_128
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_129
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_131
]
=
0x6
,
[
WM8996_WRITE_SEQUENCER_132
]
=
0x40
,
[
WM8996_WRITE_SEQUENCER_133
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_134
]
=
0xf
,
[
WM8996_WRITE_SEQUENCER_135
]
=
0x6
,
[
WM8996_WRITE_SEQUENCER_136
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_137
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_138
]
=
0x106
,
[
WM8996_WRITE_SEQUENCER_140
]
=
0x61
,
[
WM8996_WRITE_SEQUENCER_141
]
=
0x11
,
[
WM8996_WRITE_SEQUENCER_142
]
=
0x401
,
[
WM8996_WRITE_SEQUENCER_144
]
=
0x50
,
[
WM8996_WRITE_SEQUENCER_145
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_146
]
=
0x102
,
[
WM8996_WRITE_SEQUENCER_148
]
=
0x51
,
[
WM8996_WRITE_SEQUENCER_149
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_150
]
=
0x106
,
[
WM8996_WRITE_SEQUENCER_151
]
=
0xa
,
[
WM8996_WRITE_SEQUENCER_152
]
=
0x61
,
[
WM8996_WRITE_SEQUENCER_153
]
=
0x3b
,
[
WM8996_WRITE_SEQUENCER_154
]
=
0x502
,
[
WM8996_WRITE_SEQUENCER_155
]
=
0x100
,
[
WM8996_WRITE_SEQUENCER_156
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_160
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_164
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_168
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_172
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_176
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_180
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_184
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_188
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_192
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_193
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_195
]
=
0x6
,
[
WM8996_WRITE_SEQUENCER_196
]
=
0x40
,
[
WM8996_WRITE_SEQUENCER_197
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_198
]
=
0xf
,
[
WM8996_WRITE_SEQUENCER_199
]
=
0x6
,
[
WM8996_WRITE_SEQUENCER_200
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_201
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_202
]
=
0x106
,
[
WM8996_WRITE_SEQUENCER_204
]
=
0x61
,
[
WM8996_WRITE_SEQUENCER_205
]
=
0x11
,
[
WM8996_WRITE_SEQUENCER_206
]
=
0x401
,
[
WM8996_WRITE_SEQUENCER_208
]
=
0x50
,
[
WM8996_WRITE_SEQUENCER_209
]
=
0x3
,
[
WM8996_WRITE_SEQUENCER_210
]
=
0x102
,
[
WM8996_WRITE_SEQUENCER_212
]
=
0x61
,
[
WM8996_WRITE_SEQUENCER_213
]
=
0x3b
,
[
WM8996_WRITE_SEQUENCER_214
]
=
0x502
,
[
WM8996_WRITE_SEQUENCER_215
]
=
0x100
,
[
WM8996_WRITE_SEQUENCER_216
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_220
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_224
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_228
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_232
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_236
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_240
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_244
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_248
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_252
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_256
]
=
0x60
,
[
WM8996_WRITE_SEQUENCER_258
]
=
0x601
,
[
WM8996_WRITE_SEQUENCER_260
]
=
0x50
,
[
WM8996_WRITE_SEQUENCER_262
]
=
0x100
,
[
WM8996_WRITE_SEQUENCER_264
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_266
]
=
0x104
,
[
WM8996_WRITE_SEQUENCER_267
]
=
0x100
,
[
WM8996_WRITE_SEQUENCER_268
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_272
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_276
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_280
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_284
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_288
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_292
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_296
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_300
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_304
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_308
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_312
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_316
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_320
]
=
0x61
,
[
WM8996_WRITE_SEQUENCER_322
]
=
0x601
,
[
WM8996_WRITE_SEQUENCER_324
]
=
0x50
,
[
WM8996_WRITE_SEQUENCER_326
]
=
0x102
,
[
WM8996_WRITE_SEQUENCER_328
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_330
]
=
0x106
,
[
WM8996_WRITE_SEQUENCER_331
]
=
0x100
,
[
WM8996_WRITE_SEQUENCER_332
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_336
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_340
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_344
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_348
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_352
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_356
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_360
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_364
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_368
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_372
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_376
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_380
]
=
0x2fff
,
[
WM8996_WRITE_SEQUENCER_384
]
=
0x60
,
[
WM8996_WRITE_SEQUENCER_386
]
=
0x601
,
[
WM8996_WRITE_SEQUENCER_388
]
=
0x61
,
[
WM8996_WRITE_SEQUENCER_390
]
=
0x601
,
[
WM8996_WRITE_SEQUENCER_392
]
=
0x50
,
[
WM8996_WRITE_SEQUENCER_394
]
=
0x300
,
[
WM8996_WRITE_SEQUENCER_396
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_398
]
=
0x304
,
[
WM8996_WRITE_SEQUENCER_400
]
=
0x40
,
[
WM8996_WRITE_SEQUENCER_402
]
=
0xf
,
[
WM8996_WRITE_SEQUENCER_404
]
=
0x1
,
[
WM8996_WRITE_SEQUENCER_407
]
=
0x100
,
static
struct
reg_default
wm8996_reg
[]
=
{
{
WM8996_SOFTWARE_RESET
,
0x8996
},
{
WM8996_POWER_MANAGEMENT_1
,
0x0
},
{
WM8996_POWER_MANAGEMENT_2
,
0x0
},
{
WM8996_POWER_MANAGEMENT_3
,
0x0
},
{
WM8996_POWER_MANAGEMENT_4
,
0x0
},
{
WM8996_POWER_MANAGEMENT_5
,
0x0
},
{
WM8996_POWER_MANAGEMENT_6
,
0x0
},
{
WM8996_POWER_MANAGEMENT_7
,
0x10
},
{
WM8996_POWER_MANAGEMENT_8
,
0x0
},
{
WM8996_LEFT_LINE_INPUT_VOLUME
,
0x0
},
{
WM8996_RIGHT_LINE_INPUT_VOLUME
,
0x0
},
{
WM8996_LINE_INPUT_CONTROL
,
0x0
},
{
WM8996_DAC1_HPOUT1_VOLUME
,
0x88
},
{
WM8996_DAC2_HPOUT2_VOLUME
,
0x88
},
{
WM8996_DAC1_LEFT_VOLUME
,
0x2c0
},
{
WM8996_DAC1_RIGHT_VOLUME
,
0x2c0
},
{
WM8996_DAC2_LEFT_VOLUME
,
0x2c0
},
{
WM8996_DAC2_RIGHT_VOLUME
,
0x2c0
},
{
WM8996_OUTPUT1_LEFT_VOLUME
,
0x80
},
{
WM8996_OUTPUT1_RIGHT_VOLUME
,
0x80
},
{
WM8996_OUTPUT2_LEFT_VOLUME
,
0x80
},
{
WM8996_OUTPUT2_RIGHT_VOLUME
,
0x80
},
{
WM8996_MICBIAS_1
,
0x39
},
{
WM8996_MICBIAS_2
,
0x39
},
{
WM8996_LDO_1
,
0x3
},
{
WM8996_LDO_2
,
0x13
},
{
WM8996_ACCESSORY_DETECT_MODE_1
,
0x4
},
{
WM8996_ACCESSORY_DETECT_MODE_2
,
0x0
},
{
WM8996_HEADPHONE_DETECT_1
,
0x20
},
{
WM8996_HEADPHONE_DETECT_2
,
0x0
},
{
WM8996_MIC_DETECT_1
,
0x7600
},
{
WM8996_MIC_DETECT_2
,
0xbf
},
{
WM8996_CHARGE_PUMP_1
,
0x1f25
},
{
WM8996_CHARGE_PUMP_2
,
0xab19
},
{
WM8996_DC_SERVO_1
,
0x0
},
{
WM8996_DC_SERVO_2
,
0x0
},
{
WM8996_DC_SERVO_3
,
0x0
},
{
WM8996_DC_SERVO_5
,
0x2a2a
},
{
WM8996_DC_SERVO_6
,
0x0
},
{
WM8996_DC_SERVO_7
,
0x0
},
{
WM8996_ANALOGUE_HP_1
,
0x0
},
{
WM8996_ANALOGUE_HP_2
,
0x0
},
{
WM8996_CONTROL_INTERFACE_1
,
0x8004
},
{
WM8996_WRITE_SEQUENCER_CTRL_1
,
0x0
},
{
WM8996_WRITE_SEQUENCER_CTRL_2
,
0x0
},
{
WM8996_AIF_CLOCKING_1
,
0x0
},
{
WM8996_AIF_CLOCKING_2
,
0x0
},
{
WM8996_CLOCKING_1
,
0x10
},
{
WM8996_CLOCKING_2
,
0x0
},
{
WM8996_AIF_RATE
,
0x83
},
{
WM8996_FLL_CONTROL_1
,
0x0
},
{
WM8996_FLL_CONTROL_2
,
0x0
},
{
WM8996_FLL_CONTROL_3
,
0x0
},
{
WM8996_FLL_CONTROL_4
,
0x5dc0
},
{
WM8996_FLL_CONTROL_5
,
0xc84
},
{
WM8996_FLL_EFS_1
,
0x0
},
{
WM8996_FLL_EFS_2
,
0x2
},
{
WM8996_AIF1_CONTROL
,
0x0
},
{
WM8996_AIF1_BCLK
,
0x0
},
{
WM8996_AIF1_TX_LRCLK_1
,
0x80
},
{
WM8996_AIF1_TX_LRCLK_2
,
0x8
},
{
WM8996_AIF1_RX_LRCLK_1
,
0x80
},
{
WM8996_AIF1_RX_LRCLK_2
,
0x0
},
{
WM8996_AIF1TX_DATA_CONFIGURATION_1
,
0x1818
},
{
WM8996_AIF1TX_DATA_CONFIGURATION_2
,
0
},
{
WM8996_AIF1RX_DATA_CONFIGURATION
,
0x1818
},
{
WM8996_AIF1TX_CHANNEL_0_CONFIGURATION
,
0x0
},
{
WM8996_AIF1TX_CHANNEL_1_CONFIGURATION
,
0x0
},
{
WM8996_AIF1TX_CHANNEL_2_CONFIGURATION
,
0x0
},
{
WM8996_AIF1TX_CHANNEL_3_CONFIGURATION
,
0x0
},
{
WM8996_AIF1TX_CHANNEL_4_CONFIGURATION
,
0x0
},
{
WM8996_AIF1TX_CHANNEL_5_CONFIGURATION
,
0x0
},
{
WM8996_AIF1RX_CHANNEL_0_CONFIGURATION
,
0x0
},
{
WM8996_AIF1RX_CHANNEL_1_CONFIGURATION
,
0x0
},
{
WM8996_AIF1RX_CHANNEL_2_CONFIGURATION
,
0x0
},
{
WM8996_AIF1RX_CHANNEL_3_CONFIGURATION
,
0x0
},
{
WM8996_AIF1RX_CHANNEL_4_CONFIGURATION
,
0x0
},
{
WM8996_AIF1RX_CHANNEL_5_CONFIGURATION
,
0x0
},
{
WM8996_AIF1RX_MONO_CONFIGURATION
,
0x0
},
{
WM8996_AIF1TX_TEST
,
0x7
},
{
WM8996_AIF2_CONTROL
,
0x0
},
{
WM8996_AIF2_BCLK
,
0x0
},
{
WM8996_AIF2_TX_LRCLK_1
,
0x80
},
{
WM8996_AIF2_TX_LRCLK_2
,
0x8
},
{
WM8996_AIF2_RX_LRCLK_1
,
0x80
},
{
WM8996_AIF2_RX_LRCLK_2
,
0x0
},
{
WM8996_AIF2TX_DATA_CONFIGURATION_1
,
0x1818
},
{
WM8996_AIF2RX_DATA_CONFIGURATION
,
0x1818
},
{
WM8996_AIF2RX_DATA_CONFIGURATION
,
0x0
},
{
WM8996_AIF2TX_CHANNEL_0_CONFIGURATION
,
0x0
},
{
WM8996_AIF2TX_CHANNEL_1_CONFIGURATION
,
0x0
},
{
WM8996_AIF2RX_CHANNEL_0_CONFIGURATION
,
0x0
},
{
WM8996_AIF2RX_CHANNEL_1_CONFIGURATION
,
0x0
},
{
WM8996_AIF2RX_MONO_CONFIGURATION
,
0x0
},
{
WM8996_AIF2TX_TEST
,
0x1
},
{
WM8996_DSP1_TX_LEFT_VOLUME
,
0xc0
},
{
WM8996_DSP1_TX_RIGHT_VOLUME
,
0xc0
},
{
WM8996_DSP1_RX_LEFT_VOLUME
,
0xc0
},
{
WM8996_DSP1_RX_RIGHT_VOLUME
,
0xc0
},
{
WM8996_DSP1_TX_FILTERS
,
0x2000
},
{
WM8996_DSP1_RX_FILTERS_1
,
0x200
},
{
WM8996_DSP1_RX_FILTERS_2
,
0x10
},
{
WM8996_DSP1_DRC_1
,
0x98
},
{
WM8996_DSP1_DRC_2
,
0x845
},
{
WM8996_DSP1_RX_EQ_GAINS_1
,
0x6318
},
{
WM8996_DSP1_RX_EQ_GAINS_2
,
0x6300
},
{
WM8996_DSP1_RX_EQ_BAND_1_A
,
0xfca
},
{
WM8996_DSP1_RX_EQ_BAND_1_B
,
0x400
},
{
WM8996_DSP1_RX_EQ_BAND_1_PG
,
0xd8
},
{
WM8996_DSP1_RX_EQ_BAND_2_A
,
0x1eb5
},
{
WM8996_DSP1_RX_EQ_BAND_2_B
,
0xf145
},
{
WM8996_DSP1_RX_EQ_BAND_2_C
,
0xb75
},
{
WM8996_DSP1_RX_EQ_BAND_2_PG
,
0x1c5
},
{
WM8996_DSP1_RX_EQ_BAND_3_A
,
0x1c58
},
{
WM8996_DSP1_RX_EQ_BAND_3_B
,
0xf373
},
{
WM8996_DSP1_RX_EQ_BAND_3_C
,
0xa54
},
{
WM8996_DSP1_RX_EQ_BAND_3_PG
,
0x558
},
{
WM8996_DSP1_RX_EQ_BAND_4_A
,
0x168e
},
{
WM8996_DSP1_RX_EQ_BAND_4_B
,
0xf829
},
{
WM8996_DSP1_RX_EQ_BAND_4_C
,
0x7ad
},
{
WM8996_DSP1_RX_EQ_BAND_4_PG
,
0x1103
},
{
WM8996_DSP1_RX_EQ_BAND_5_A
,
0x564
},
{
WM8996_DSP1_RX_EQ_BAND_5_B
,
0x559
},
{
WM8996_DSP1_RX_EQ_BAND_5_PG
,
0x4000
},
{
WM8996_DSP2_TX_LEFT_VOLUME
,
0xc0
},
{
WM8996_DSP2_TX_RIGHT_VOLUME
,
0xc0
},
{
WM8996_DSP2_RX_LEFT_VOLUME
,
0xc0
},
{
WM8996_DSP2_RX_RIGHT_VOLUME
,
0xc0
},
{
WM8996_DSP2_TX_FILTERS
,
0x2000
},
{
WM8996_DSP2_RX_FILTERS_1
,
0x200
},
{
WM8996_DSP2_RX_FILTERS_2
,
0x10
},
{
WM8996_DSP2_DRC_1
,
0x98
},
{
WM8996_DSP2_DRC_2
,
0x845
},
{
WM8996_DSP2_RX_EQ_GAINS_1
,
0x6318
},
{
WM8996_DSP2_RX_EQ_GAINS_2
,
0x6300
},
{
WM8996_DSP2_RX_EQ_BAND_1_A
,
0xfca
},
{
WM8996_DSP2_RX_EQ_BAND_1_B
,
0x400
},
{
WM8996_DSP2_RX_EQ_BAND_1_PG
,
0xd8
},
{
WM8996_DSP2_RX_EQ_BAND_2_A
,
0x1eb5
},
{
WM8996_DSP2_RX_EQ_BAND_2_B
,
0xf145
},
{
WM8996_DSP2_RX_EQ_BAND_2_C
,
0xb75
},
{
WM8996_DSP2_RX_EQ_BAND_2_PG
,
0x1c5
},
{
WM8996_DSP2_RX_EQ_BAND_3_A
,
0x1c58
},
{
WM8996_DSP2_RX_EQ_BAND_3_B
,
0xf373
},
{
WM8996_DSP2_RX_EQ_BAND_3_C
,
0xa54
},
{
WM8996_DSP2_RX_EQ_BAND_3_PG
,
0x558
},
{
WM8996_DSP2_RX_EQ_BAND_4_A
,
0x168e
},
{
WM8996_DSP2_RX_EQ_BAND_4_B
,
0xf829
},
{
WM8996_DSP2_RX_EQ_BAND_4_C
,
0x7ad
},
{
WM8996_DSP2_RX_EQ_BAND_4_PG
,
0x1103
},
{
WM8996_DSP2_RX_EQ_BAND_5_A
,
0x564
},
{
WM8996_DSP2_RX_EQ_BAND_5_B
,
0x559
},
{
WM8996_DSP2_RX_EQ_BAND_5_PG
,
0x4000
},
{
WM8996_DAC1_MIXER_VOLUMES
,
0x0
},
{
WM8996_DAC1_LEFT_MIXER_ROUTING
,
0x0
},
{
WM8996_DAC1_RIGHT_MIXER_ROUTING
,
0x0
},
{
WM8996_DAC2_MIXER_VOLUMES
,
0x0
},
{
WM8996_DAC2_LEFT_MIXER_ROUTING
,
0x0
},
{
WM8996_DAC2_RIGHT_MIXER_ROUTING
,
0x0
},
{
WM8996_DSP1_TX_LEFT_MIXER_ROUTING
,
0x0
},
{
WM8996_DSP1_TX_RIGHT_MIXER_ROUTING
,
0x0
},
{
WM8996_DSP2_TX_LEFT_MIXER_ROUTING
,
0x0
},
{
WM8996_DSP2_TX_RIGHT_MIXER_ROUTING
,
0x0
},
{
WM8996_DSP_TX_MIXER_SELECT
,
0x0
},
{
WM8996_DAC_SOFTMUTE
,
0x0
},
{
WM8996_OVERSAMPLING
,
0xd
},
{
WM8996_SIDETONE
,
0x1040
},
{
WM8996_GPIO_1
,
0xa101
},
{
WM8996_GPIO_2
,
0xa101
},
{
WM8996_GPIO_3
,
0xa101
},
{
WM8996_GPIO_4
,
0xa101
},
{
WM8996_GPIO_5
,
0xa101
},
{
WM8996_PULL_CONTROL_1
,
0x0
},
{
WM8996_PULL_CONTROL_2
,
0x140
},
{
WM8996_INTERRUPT_STATUS_1_MASK
,
0x1f
},
{
WM8996_INTERRUPT_STATUS_2_MASK
,
0x1ecf
},
{
WM8996_LEFT_PDM_SPEAKER
,
0x0
},
{
WM8996_RIGHT_PDM_SPEAKER
,
0x1
},
{
WM8996_PDM_SPEAKER_MUTE_SEQUENCE
,
0x69
},
{
WM8996_PDM_SPEAKER_VOLUME
,
0x66
},
{
WM8996_WRITE_SEQUENCER_0
,
0x1
},
{
WM8996_WRITE_SEQUENCER_1
,
0x1
},
{
WM8996_WRITE_SEQUENCER_3
,
0x6
},
{
WM8996_WRITE_SEQUENCER_4
,
0x40
},
{
WM8996_WRITE_SEQUENCER_5
,
0x1
},
{
WM8996_WRITE_SEQUENCER_6
,
0xf
},
{
WM8996_WRITE_SEQUENCER_7
,
0x6
},
{
WM8996_WRITE_SEQUENCER_8
,
0x1
},
{
WM8996_WRITE_SEQUENCER_9
,
0x3
},
{
WM8996_WRITE_SEQUENCER_10
,
0x104
},
{
WM8996_WRITE_SEQUENCER_12
,
0x60
},
{
WM8996_WRITE_SEQUENCER_13
,
0x11
},
{
WM8996_WRITE_SEQUENCER_14
,
0x401
},
{
WM8996_WRITE_SEQUENCER_16
,
0x50
},
{
WM8996_WRITE_SEQUENCER_17
,
0x3
},
{
WM8996_WRITE_SEQUENCER_18
,
0x100
},
{
WM8996_WRITE_SEQUENCER_20
,
0x51
},
{
WM8996_WRITE_SEQUENCER_21
,
0x3
},
{
WM8996_WRITE_SEQUENCER_22
,
0x104
},
{
WM8996_WRITE_SEQUENCER_23
,
0xa
},
{
WM8996_WRITE_SEQUENCER_24
,
0x60
},
{
WM8996_WRITE_SEQUENCER_25
,
0x3b
},
{
WM8996_WRITE_SEQUENCER_26
,
0x502
},
{
WM8996_WRITE_SEQUENCER_27
,
0x100
},
{
WM8996_WRITE_SEQUENCER_28
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_32
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_36
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_40
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_44
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_48
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_52
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_56
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_60
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_64
,
0x1
},
{
WM8996_WRITE_SEQUENCER_65
,
0x1
},
{
WM8996_WRITE_SEQUENCER_67
,
0x6
},
{
WM8996_WRITE_SEQUENCER_68
,
0x40
},
{
WM8996_WRITE_SEQUENCER_69
,
0x1
},
{
WM8996_WRITE_SEQUENCER_70
,
0xf
},
{
WM8996_WRITE_SEQUENCER_71
,
0x6
},
{
WM8996_WRITE_SEQUENCER_72
,
0x1
},
{
WM8996_WRITE_SEQUENCER_73
,
0x3
},
{
WM8996_WRITE_SEQUENCER_74
,
0x104
},
{
WM8996_WRITE_SEQUENCER_76
,
0x60
},
{
WM8996_WRITE_SEQUENCER_77
,
0x11
},
{
WM8996_WRITE_SEQUENCER_78
,
0x401
},
{
WM8996_WRITE_SEQUENCER_80
,
0x50
},
{
WM8996_WRITE_SEQUENCER_81
,
0x3
},
{
WM8996_WRITE_SEQUENCER_82
,
0x100
},
{
WM8996_WRITE_SEQUENCER_84
,
0x60
},
{
WM8996_WRITE_SEQUENCER_85
,
0x3b
},
{
WM8996_WRITE_SEQUENCER_86
,
0x502
},
{
WM8996_WRITE_SEQUENCER_87
,
0x100
},
{
WM8996_WRITE_SEQUENCER_88
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_92
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_96
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_100
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_104
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_108
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_112
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_116
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_120
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_124
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_128
,
0x1
},
{
WM8996_WRITE_SEQUENCER_129
,
0x1
},
{
WM8996_WRITE_SEQUENCER_131
,
0x6
},
{
WM8996_WRITE_SEQUENCER_132
,
0x40
},
{
WM8996_WRITE_SEQUENCER_133
,
0x1
},
{
WM8996_WRITE_SEQUENCER_134
,
0xf
},
{
WM8996_WRITE_SEQUENCER_135
,
0x6
},
{
WM8996_WRITE_SEQUENCER_136
,
0x1
},
{
WM8996_WRITE_SEQUENCER_137
,
0x3
},
{
WM8996_WRITE_SEQUENCER_138
,
0x106
},
{
WM8996_WRITE_SEQUENCER_140
,
0x61
},
{
WM8996_WRITE_SEQUENCER_141
,
0x11
},
{
WM8996_WRITE_SEQUENCER_142
,
0x401
},
{
WM8996_WRITE_SEQUENCER_144
,
0x50
},
{
WM8996_WRITE_SEQUENCER_145
,
0x3
},
{
WM8996_WRITE_SEQUENCER_146
,
0x102
},
{
WM8996_WRITE_SEQUENCER_148
,
0x51
},
{
WM8996_WRITE_SEQUENCER_149
,
0x3
},
{
WM8996_WRITE_SEQUENCER_150
,
0x106
},
{
WM8996_WRITE_SEQUENCER_151
,
0xa
},
{
WM8996_WRITE_SEQUENCER_152
,
0x61
},
{
WM8996_WRITE_SEQUENCER_153
,
0x3b
},
{
WM8996_WRITE_SEQUENCER_154
,
0x502
},
{
WM8996_WRITE_SEQUENCER_155
,
0x100
},
{
WM8996_WRITE_SEQUENCER_156
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_160
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_164
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_168
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_172
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_176
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_180
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_184
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_188
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_192
,
0x1
},
{
WM8996_WRITE_SEQUENCER_193
,
0x1
},
{
WM8996_WRITE_SEQUENCER_195
,
0x6
},
{
WM8996_WRITE_SEQUENCER_196
,
0x40
},
{
WM8996_WRITE_SEQUENCER_197
,
0x1
},
{
WM8996_WRITE_SEQUENCER_198
,
0xf
},
{
WM8996_WRITE_SEQUENCER_199
,
0x6
},
{
WM8996_WRITE_SEQUENCER_200
,
0x1
},
{
WM8996_WRITE_SEQUENCER_201
,
0x3
},
{
WM8996_WRITE_SEQUENCER_202
,
0x106
},
{
WM8996_WRITE_SEQUENCER_204
,
0x61
},
{
WM8996_WRITE_SEQUENCER_205
,
0x11
},
{
WM8996_WRITE_SEQUENCER_206
,
0x401
},
{
WM8996_WRITE_SEQUENCER_208
,
0x50
},
{
WM8996_WRITE_SEQUENCER_209
,
0x3
},
{
WM8996_WRITE_SEQUENCER_210
,
0x102
},
{
WM8996_WRITE_SEQUENCER_212
,
0x61
},
{
WM8996_WRITE_SEQUENCER_213
,
0x3b
},
{
WM8996_WRITE_SEQUENCER_214
,
0x502
},
{
WM8996_WRITE_SEQUENCER_215
,
0x100
},
{
WM8996_WRITE_SEQUENCER_216
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_220
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_224
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_228
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_232
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_236
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_240
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_244
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_248
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_252
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_256
,
0x60
},
{
WM8996_WRITE_SEQUENCER_258
,
0x601
},
{
WM8996_WRITE_SEQUENCER_260
,
0x50
},
{
WM8996_WRITE_SEQUENCER_262
,
0x100
},
{
WM8996_WRITE_SEQUENCER_264
,
0x1
},
{
WM8996_WRITE_SEQUENCER_266
,
0x104
},
{
WM8996_WRITE_SEQUENCER_267
,
0x100
},
{
WM8996_WRITE_SEQUENCER_268
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_272
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_276
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_280
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_284
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_288
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_292
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_296
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_300
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_304
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_308
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_312
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_316
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_320
,
0x61
},
{
WM8996_WRITE_SEQUENCER_322
,
0x601
},
{
WM8996_WRITE_SEQUENCER_324
,
0x50
},
{
WM8996_WRITE_SEQUENCER_326
,
0x102
},
{
WM8996_WRITE_SEQUENCER_328
,
0x1
},
{
WM8996_WRITE_SEQUENCER_330
,
0x106
},
{
WM8996_WRITE_SEQUENCER_331
,
0x100
},
{
WM8996_WRITE_SEQUENCER_332
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_336
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_340
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_344
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_348
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_352
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_356
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_360
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_364
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_368
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_372
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_376
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_380
,
0x2fff
},
{
WM8996_WRITE_SEQUENCER_384
,
0x60
},
{
WM8996_WRITE_SEQUENCER_386
,
0x601
},
{
WM8996_WRITE_SEQUENCER_388
,
0x61
},
{
WM8996_WRITE_SEQUENCER_390
,
0x601
},
{
WM8996_WRITE_SEQUENCER_392
,
0x50
},
{
WM8996_WRITE_SEQUENCER_394
,
0x300
},
{
WM8996_WRITE_SEQUENCER_396
,
0x1
},
{
WM8996_WRITE_SEQUENCER_398
,
0x304
},
{
WM8996_WRITE_SEQUENCER_400
,
0x40
},
{
WM8996_WRITE_SEQUENCER_402
,
0xf
},
{
WM8996_WRITE_SEQUENCER_404
,
0x1
},
{
WM8996_WRITE_SEQUENCER_407
,
0x100
},
};
static
const
DECLARE_TLV_DB_SCALE
(
inpga_tlv
,
0
,
100
,
0
);
...
...
@@ -1413,8 +1482,7 @@ static const struct snd_soc_dapm_route wm8996_dapm_routes[] = {
{
"SPKDAT"
,
NULL
,
"SPKR PGA"
},
};
static
int
wm8996_readable_register
(
struct
snd_soc_codec
*
codec
,
unsigned
int
reg
)
static
bool
wm8996_readable_register
(
struct
device
*
dev
,
unsigned
int
reg
)
{
/* Due to the sparseness of the register map the compiler
* output from an explicit switch statement ends up being much
...
...
@@ -1621,8 +1689,7 @@ static int wm8996_readable_register(struct snd_soc_codec *codec,
}
}
static
int
wm8996_volatile_register
(
struct
snd_soc_codec
*
codec
,
unsigned
int
reg
)
static
bool
wm8996_volatile_register
(
struct
device
*
dev
,
unsigned
int
reg
)
{
switch
(
reg
)
{
case
WM8996_SOFTWARE_RESET
:
...
...
@@ -1723,13 +1790,13 @@ static int wm8996_set_bias_level(struct snd_soc_codec *codec,
msleep
(
5
);
}
codec
->
cache_only
=
false
;
snd_soc_cache_sync
(
codec
);
regcache_cache_only
(
codec
->
control_data
,
false
)
;
regcache_sync
(
codec
->
control_data
);
}
break
;
case
SND_SOC_BIAS_OFF
:
codec
->
cache_only
=
true
;
regcache_cache_only
(
codec
->
control_data
,
true
)
;
if
(
wm8996
->
pdata
.
ldo_ena
>=
0
)
gpio_set_value_cansleep
(
wm8996
->
pdata
.
ldo_ena
,
0
);
regulator_bulk_disable
(
ARRAY_SIZE
(
wm8996
->
supplies
),
...
...
@@ -2692,6 +2759,18 @@ static void wm8996_retune_mobile_pdata(struct snd_soc_codec *codec)
"Failed to add ReTune Mobile controls: %d
\n
"
,
ret
);
}
static
const
struct
regmap_config
wm8996_regmap
=
{
.
reg_bits
=
16
,
.
val_bits
=
16
,
.
max_register
=
WM8996_MAX_REGISTER
,
.
reg_defaults
=
wm8996_reg
,
.
num_reg_defaults
=
ARRAY_SIZE
(
wm8996_reg
),
.
volatile_reg
=
wm8996_volatile_register
,
.
readable_reg
=
wm8996_readable_register
,
.
cache_type
=
REGCACHE_RBTREE
,
};
static
int
wm8996_probe
(
struct
snd_soc_codec
*
codec
)
{
int
ret
;
...
...
@@ -2707,10 +2786,17 @@ static int wm8996_probe(struct snd_soc_codec *codec)
dapm
->
idle_bias_off
=
true
;
ret
=
snd_soc_codec_set_cache_io
(
codec
,
16
,
16
,
SND_SOC_I2C
);
codec
->
control_data
=
regmap_init_i2c
(
i2c
,
&
wm8996_regmap
);
if
(
IS_ERR
(
codec
->
control_data
))
{
ret
=
PTR_ERR
(
codec
->
control_data
);
dev_err
(
codec
->
dev
,
"regmap_init() failed: %d
\n
"
,
ret
);
goto
err
;
}
ret
=
snd_soc_codec_set_cache_io
(
codec
,
16
,
16
,
SND_SOC_REGMAP
);
if
(
ret
!=
0
)
{
dev_err
(
codec
->
dev
,
"Failed to set cache I/O: %d
\n
"
,
ret
);
goto
err
;
goto
err
_regmap
;
}
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
wm8996
->
supplies
);
i
++
)
...
...
@@ -2720,7 +2806,7 @@ static int wm8996_probe(struct snd_soc_codec *codec)
wm8996
->
supplies
);
if
(
ret
!=
0
)
{
dev_err
(
codec
->
dev
,
"Failed to request supplies: %d
\n
"
,
ret
);
goto
err
;
goto
err
_regmap
;
}
wm8996
->
disable_nb
[
0
].
notifier_call
=
wm8996_regulator_event_0
;
...
...
@@ -2788,7 +2874,7 @@ static int wm8996_probe(struct snd_soc_codec *codec)
}
}
codec
->
cache_only
=
true
;
regcache_cache_only
(
codec
->
control_data
,
true
)
;
/* Apply platform data settings */
snd_soc_update_bits
(
codec
,
WM8996_LINE_INPUT_CONTROL
,
...
...
@@ -2996,6 +3082,8 @@ static int wm8996_probe(struct snd_soc_codec *codec)
regulator_put
(
wm8996
->
cpvdd
);
err_get:
regulator_bulk_free
(
ARRAY_SIZE
(
wm8996
->
supplies
),
wm8996
->
supplies
);
err_regmap:
regmap_exit
(
codec
->
control_data
);
err:
return
ret
;
}
...
...
@@ -3019,6 +3107,7 @@ static int wm8996_remove(struct snd_soc_codec *codec)
&
wm8996
->
disable_nb
[
i
]);
regulator_put
(
wm8996
->
cpvdd
);
regulator_bulk_free
(
ARRAY_SIZE
(
wm8996
->
supplies
),
wm8996
->
supplies
);
regmap_exit
(
codec
->
control_data
);
return
0
;
}
...
...
@@ -3028,12 +3117,6 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8996 = {
.
remove
=
wm8996_remove
,
.
set_bias_level
=
wm8996_set_bias_level
,
.
seq_notifier
=
wm8996_seq_notifier
,
.
reg_cache_size
=
WM8996_MAX_REGISTER
+
1
,
.
reg_word_size
=
sizeof
(
u16
),
.
reg_cache_default
=
wm8996_reg
,
.
volatile_register
=
wm8996_volatile_register
,
.
readable_register
=
wm8996_readable_register
,
.
compress_type
=
SND_SOC_RBTREE_COMPRESSION
,
.
controls
=
wm8996_snd_controls
,
.
num_controls
=
ARRAY_SIZE
(
wm8996_snd_controls
),
.
dapm_widgets
=
wm8996_dapm_widgets
,
...
...
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