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
nexedi
linux
Commits
1a4ca437
Commit
1a4ca437
authored
Oct 24, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/max98088' into asoc-next
parents
2e71ff5e
19ab2a7a
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
273 additions
and
351 deletions
+273
-351
sound/soc/codecs/max98088.c
sound/soc/codecs/max98088.c
+273
-351
No files found.
sound/soc/codecs/max98088.c
View file @
1a4ca437
...
...
@@ -15,6 +15,7 @@
#include <linux/delay.h>
#include <linux/pm.h>
#include <linux/i2c.h>
#include <linux/regmap.h>
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
...
...
@@ -38,6 +39,7 @@ struct max98088_cdata {
};
struct
max98088_priv
{
struct
regmap
*
regmap
;
enum
max98088_type
devtype
;
struct
max98088_pdata
*
pdata
;
unsigned
int
sysclk
;
...
...
@@ -54,278 +56,206 @@ struct max98088_priv {
unsigned
int
extmic_mode
;
};
static
const
u8
max98088_reg
[
M98088_REG_CNT
]
=
{
0x00
,
/* 00 IRQ status */
0x00
,
/* 01 MIC status */
0x00
,
/* 02 jack status */
0x00
,
/* 03 battery voltage */
0x00
,
/* 04 */
0x00
,
/* 05 */
0x00
,
/* 06 */
0x00
,
/* 07 */
0x00
,
/* 08 */
0x00
,
/* 09 */
0x00
,
/* 0A */
0x00
,
/* 0B */
0x00
,
/* 0C */
0x00
,
/* 0D */
0x00
,
/* 0E */
0x00
,
/* 0F interrupt enable */
0x00
,
/* 10 master clock */
0x00
,
/* 11 DAI1 clock mode */
0x00
,
/* 12 DAI1 clock control */
0x00
,
/* 13 DAI1 clock control */
0x00
,
/* 14 DAI1 format */
0x00
,
/* 15 DAI1 clock */
0x00
,
/* 16 DAI1 config */
0x00
,
/* 17 DAI1 TDM */
0x00
,
/* 18 DAI1 filters */
0x00
,
/* 19 DAI2 clock mode */
0x00
,
/* 1A DAI2 clock control */
0x00
,
/* 1B DAI2 clock control */
0x00
,
/* 1C DAI2 format */
0x00
,
/* 1D DAI2 clock */
0x00
,
/* 1E DAI2 config */
0x00
,
/* 1F DAI2 TDM */
0x00
,
/* 20 DAI2 filters */
0x00
,
/* 21 data config */
0x00
,
/* 22 DAC mixer */
0x00
,
/* 23 left ADC mixer */
0x00
,
/* 24 right ADC mixer */
0x00
,
/* 25 left HP mixer */
0x00
,
/* 26 right HP mixer */
0x00
,
/* 27 HP control */
0x00
,
/* 28 left REC mixer */
0x00
,
/* 29 right REC mixer */
0x00
,
/* 2A REC control */
0x00
,
/* 2B left SPK mixer */
0x00
,
/* 2C right SPK mixer */
0x00
,
/* 2D SPK control */
0x00
,
/* 2E sidetone */
0x00
,
/* 2F DAI1 playback level */
0x00
,
/* 30 DAI1 playback level */
0x00
,
/* 31 DAI2 playback level */
0x00
,
/* 32 DAI2 playbakc level */
0x00
,
/* 33 left ADC level */
0x00
,
/* 34 right ADC level */
0x00
,
/* 35 MIC1 level */
0x00
,
/* 36 MIC2 level */
0x00
,
/* 37 INA level */
0x00
,
/* 38 INB level */
0x00
,
/* 39 left HP volume */
0x00
,
/* 3A right HP volume */
0x00
,
/* 3B left REC volume */
0x00
,
/* 3C right REC volume */
0x00
,
/* 3D left SPK volume */
0x00
,
/* 3E right SPK volume */
0x00
,
/* 3F MIC config */
0x00
,
/* 40 MIC threshold */
0x00
,
/* 41 excursion limiter filter */
0x00
,
/* 42 excursion limiter threshold */
0x00
,
/* 43 ALC */
0x00
,
/* 44 power limiter threshold */
0x00
,
/* 45 power limiter config */
0x00
,
/* 46 distortion limiter config */
0x00
,
/* 47 audio input */
0x00
,
/* 48 microphone */
0x00
,
/* 49 level control */
0x00
,
/* 4A bypass switches */
0x00
,
/* 4B jack detect */
0x00
,
/* 4C input enable */
0x00
,
/* 4D output enable */
0xF0
,
/* 4E bias control */
0x00
,
/* 4F DAC power */
0x0F
,
/* 50 DAC power */
0x00
,
/* 51 system */
0x00
,
/* 52 DAI1 EQ1 */
0x00
,
/* 53 DAI1 EQ1 */
0x00
,
/* 54 DAI1 EQ1 */
0x00
,
/* 55 DAI1 EQ1 */
0x00
,
/* 56 DAI1 EQ1 */
0x00
,
/* 57 DAI1 EQ1 */
0x00
,
/* 58 DAI1 EQ1 */
0x00
,
/* 59 DAI1 EQ1 */
0x00
,
/* 5A DAI1 EQ1 */
0x00
,
/* 5B DAI1 EQ1 */
0x00
,
/* 5C DAI1 EQ2 */
0x00
,
/* 5D DAI1 EQ2 */
0x00
,
/* 5E DAI1 EQ2 */
0x00
,
/* 5F DAI1 EQ2 */
0x00
,
/* 60 DAI1 EQ2 */
0x00
,
/* 61 DAI1 EQ2 */
0x00
,
/* 62 DAI1 EQ2 */
0x00
,
/* 63 DAI1 EQ2 */
0x00
,
/* 64 DAI1 EQ2 */
0x00
,
/* 65 DAI1 EQ2 */
0x00
,
/* 66 DAI1 EQ3 */
0x00
,
/* 67 DAI1 EQ3 */
0x00
,
/* 68 DAI1 EQ3 */
0x00
,
/* 69 DAI1 EQ3 */
0x00
,
/* 6A DAI1 EQ3 */
0x00
,
/* 6B DAI1 EQ3 */
0x00
,
/* 6C DAI1 EQ3 */
0x00
,
/* 6D DAI1 EQ3 */
0x00
,
/* 6E DAI1 EQ3 */
0x00
,
/* 6F DAI1 EQ3 */
0x00
,
/* 70 DAI1 EQ4 */
0x00
,
/* 71 DAI1 EQ4 */
0x00
,
/* 72 DAI1 EQ4 */
0x00
,
/* 73 DAI1 EQ4 */
0x00
,
/* 74 DAI1 EQ4 */
0x00
,
/* 75 DAI1 EQ4 */
0x00
,
/* 76 DAI1 EQ4 */
0x00
,
/* 77 DAI1 EQ4 */
0x00
,
/* 78 DAI1 EQ4 */
0x00
,
/* 79 DAI1 EQ4 */
0x00
,
/* 7A DAI1 EQ5 */
0x00
,
/* 7B DAI1 EQ5 */
0x00
,
/* 7C DAI1 EQ5 */
0x00
,
/* 7D DAI1 EQ5 */
0x00
,
/* 7E DAI1 EQ5 */
0x00
,
/* 7F DAI1 EQ5 */
0x00
,
/* 80 DAI1 EQ5 */
0x00
,
/* 81 DAI1 EQ5 */
0x00
,
/* 82 DAI1 EQ5 */
0x00
,
/* 83 DAI1 EQ5 */
0x00
,
/* 84 DAI2 EQ1 */
0x00
,
/* 85 DAI2 EQ1 */
0x00
,
/* 86 DAI2 EQ1 */
0x00
,
/* 87 DAI2 EQ1 */
0x00
,
/* 88 DAI2 EQ1 */
0x00
,
/* 89 DAI2 EQ1 */
0x00
,
/* 8A DAI2 EQ1 */
0x00
,
/* 8B DAI2 EQ1 */
0x00
,
/* 8C DAI2 EQ1 */
0x00
,
/* 8D DAI2 EQ1 */
0x00
,
/* 8E DAI2 EQ2 */
0x00
,
/* 8F DAI2 EQ2 */
0x00
,
/* 90 DAI2 EQ2 */
0x00
,
/* 91 DAI2 EQ2 */
0x00
,
/* 92 DAI2 EQ2 */
0x00
,
/* 93 DAI2 EQ2 */
0x00
,
/* 94 DAI2 EQ2 */
0x00
,
/* 95 DAI2 EQ2 */
0x00
,
/* 96 DAI2 EQ2 */
0x00
,
/* 97 DAI2 EQ2 */
0x00
,
/* 98 DAI2 EQ3 */
0x00
,
/* 99 DAI2 EQ3 */
0x00
,
/* 9A DAI2 EQ3 */
0x00
,
/* 9B DAI2 EQ3 */
0x00
,
/* 9C DAI2 EQ3 */
0x00
,
/* 9D DAI2 EQ3 */
0x00
,
/* 9E DAI2 EQ3 */
0x00
,
/* 9F DAI2 EQ3 */
0x00
,
/* A0 DAI2 EQ3 */
0x00
,
/* A1 DAI2 EQ3 */
0x00
,
/* A2 DAI2 EQ4 */
0x00
,
/* A3 DAI2 EQ4 */
0x00
,
/* A4 DAI2 EQ4 */
0x00
,
/* A5 DAI2 EQ4 */
0x00
,
/* A6 DAI2 EQ4 */
0x00
,
/* A7 DAI2 EQ4 */
0x00
,
/* A8 DAI2 EQ4 */
0x00
,
/* A9 DAI2 EQ4 */
0x00
,
/* AA DAI2 EQ4 */
0x00
,
/* AB DAI2 EQ4 */
0x00
,
/* AC DAI2 EQ5 */
0x00
,
/* AD DAI2 EQ5 */
0x00
,
/* AE DAI2 EQ5 */
0x00
,
/* AF DAI2 EQ5 */
0x00
,
/* B0 DAI2 EQ5 */
0x00
,
/* B1 DAI2 EQ5 */
0x00
,
/* B2 DAI2 EQ5 */
0x00
,
/* B3 DAI2 EQ5 */
0x00
,
/* B4 DAI2 EQ5 */
0x00
,
/* B5 DAI2 EQ5 */
0x00
,
/* B6 DAI1 biquad */
0x00
,
/* B7 DAI1 biquad */
0x00
,
/* B8 DAI1 biquad */
0x00
,
/* B9 DAI1 biquad */
0x00
,
/* BA DAI1 biquad */
0x00
,
/* BB DAI1 biquad */
0x00
,
/* BC DAI1 biquad */
0x00
,
/* BD DAI1 biquad */
0x00
,
/* BE DAI1 biquad */
0x00
,
/* BF DAI1 biquad */
0x00
,
/* C0 DAI2 biquad */
0x00
,
/* C1 DAI2 biquad */
0x00
,
/* C2 DAI2 biquad */
0x00
,
/* C3 DAI2 biquad */
0x00
,
/* C4 DAI2 biquad */
0x00
,
/* C5 DAI2 biquad */
0x00
,
/* C6 DAI2 biquad */
0x00
,
/* C7 DAI2 biquad */
0x00
,
/* C8 DAI2 biquad */
0x00
,
/* C9 DAI2 biquad */
0x00
,
/* CA */
0x00
,
/* CB */
0x00
,
/* CC */
0x00
,
/* CD */
0x00
,
/* CE */
0x00
,
/* CF */
0x00
,
/* D0 */
0x00
,
/* D1 */
0x00
,
/* D2 */
0x00
,
/* D3 */
0x00
,
/* D4 */
0x00
,
/* D5 */
0x00
,
/* D6 */
0x00
,
/* D7 */
0x00
,
/* D8 */
0x00
,
/* D9 */
0x00
,
/* DA */
0x70
,
/* DB */
0x00
,
/* DC */
0x00
,
/* DD */
0x00
,
/* DE */
0x00
,
/* DF */
0x00
,
/* E0 */
0x00
,
/* E1 */
0x00
,
/* E2 */
0x00
,
/* E3 */
0x00
,
/* E4 */
0x00
,
/* E5 */
0x00
,
/* E6 */
0x00
,
/* E7 */
0x00
,
/* E8 */
0x00
,
/* E9 */
0x00
,
/* EA */
0x00
,
/* EB */
0x00
,
/* EC */
0x00
,
/* ED */
0x00
,
/* EE */
0x00
,
/* EF */
0x00
,
/* F0 */
0x00
,
/* F1 */
0x00
,
/* F2 */
0x00
,
/* F3 */
0x00
,
/* F4 */
0x00
,
/* F5 */
0x00
,
/* F6 */
0x00
,
/* F7 */
0x00
,
/* F8 */
0x00
,
/* F9 */
0x00
,
/* FA */
0x00
,
/* FB */
0x00
,
/* FC */
0x00
,
/* FD */
0x00
,
/* FE */
0x00
,
/* FF */
static
const
struct
reg_default
max98088_reg
[]
=
{
{
0xf
,
0x00
},
/* 0F interrupt enable */
{
0x10
,
0x00
},
/* 10 master clock */
{
0x11
,
0x00
},
/* 11 DAI1 clock mode */
{
0x12
,
0x00
},
/* 12 DAI1 clock control */
{
0x13
,
0x00
},
/* 13 DAI1 clock control */
{
0x14
,
0x00
},
/* 14 DAI1 format */
{
0x15
,
0x00
},
/* 15 DAI1 clock */
{
0x16
,
0x00
},
/* 16 DAI1 config */
{
0x17
,
0x00
},
/* 17 DAI1 TDM */
{
0x18
,
0x00
},
/* 18 DAI1 filters */
{
0x19
,
0x00
},
/* 19 DAI2 clock mode */
{
0x1a
,
0x00
},
/* 1A DAI2 clock control */
{
0x1b
,
0x00
},
/* 1B DAI2 clock control */
{
0x1c
,
0x00
},
/* 1C DAI2 format */
{
0x1d
,
0x00
},
/* 1D DAI2 clock */
{
0x1e
,
0x00
},
/* 1E DAI2 config */
{
0x1f
,
0x00
},
/* 1F DAI2 TDM */
{
0x20
,
0x00
},
/* 20 DAI2 filters */
{
0x21
,
0x00
},
/* 21 data config */
{
0x22
,
0x00
},
/* 22 DAC mixer */
{
0x23
,
0x00
},
/* 23 left ADC mixer */
{
0x24
,
0x00
},
/* 24 right ADC mixer */
{
0x25
,
0x00
},
/* 25 left HP mixer */
{
0x26
,
0x00
},
/* 26 right HP mixer */
{
0x27
,
0x00
},
/* 27 HP control */
{
0x28
,
0x00
},
/* 28 left REC mixer */
{
0x29
,
0x00
},
/* 29 right REC mixer */
{
0x2a
,
0x00
},
/* 2A REC control */
{
0x2b
,
0x00
},
/* 2B left SPK mixer */
{
0x2c
,
0x00
},
/* 2C right SPK mixer */
{
0x2d
,
0x00
},
/* 2D SPK control */
{
0x2e
,
0x00
},
/* 2E sidetone */
{
0x2f
,
0x00
},
/* 2F DAI1 playback level */
{
0x30
,
0x00
},
/* 30 DAI1 playback level */
{
0x31
,
0x00
},
/* 31 DAI2 playback level */
{
0x32
,
0x00
},
/* 32 DAI2 playbakc level */
{
0x33
,
0x00
},
/* 33 left ADC level */
{
0x34
,
0x00
},
/* 34 right ADC level */
{
0x35
,
0x00
},
/* 35 MIC1 level */
{
0x36
,
0x00
},
/* 36 MIC2 level */
{
0x37
,
0x00
},
/* 37 INA level */
{
0x38
,
0x00
},
/* 38 INB level */
{
0x39
,
0x00
},
/* 39 left HP volume */
{
0x3a
,
0x00
},
/* 3A right HP volume */
{
0x3b
,
0x00
},
/* 3B left REC volume */
{
0x3c
,
0x00
},
/* 3C right REC volume */
{
0x3d
,
0x00
},
/* 3D left SPK volume */
{
0x3e
,
0x00
},
/* 3E right SPK volume */
{
0x3f
,
0x00
},
/* 3F MIC config */
{
0x40
,
0x00
},
/* 40 MIC threshold */
{
0x41
,
0x00
},
/* 41 excursion limiter filter */
{
0x42
,
0x00
},
/* 42 excursion limiter threshold */
{
0x43
,
0x00
},
/* 43 ALC */
{
0x44
,
0x00
},
/* 44 power limiter threshold */
{
0x45
,
0x00
},
/* 45 power limiter config */
{
0x46
,
0x00
},
/* 46 distortion limiter config */
{
0x47
,
0x00
},
/* 47 audio input */
{
0x48
,
0x00
},
/* 48 microphone */
{
0x49
,
0x00
},
/* 49 level control */
{
0x4a
,
0x00
},
/* 4A bypass switches */
{
0x4b
,
0x00
},
/* 4B jack detect */
{
0x4c
,
0x00
},
/* 4C input enable */
{
0x4d
,
0x00
},
/* 4D output enable */
{
0x4e
,
0xF0
},
/* 4E bias control */
{
0x4f
,
0x00
},
/* 4F DAC power */
{
0x50
,
0x0F
},
/* 50 DAC power */
{
0x51
,
0x00
},
/* 51 system */
{
0x52
,
0x00
},
/* 52 DAI1 EQ1 */
{
0x53
,
0x00
},
/* 53 DAI1 EQ1 */
{
0x54
,
0x00
},
/* 54 DAI1 EQ1 */
{
0x55
,
0x00
},
/* 55 DAI1 EQ1 */
{
0x56
,
0x00
},
/* 56 DAI1 EQ1 */
{
0x57
,
0x00
},
/* 57 DAI1 EQ1 */
{
0x58
,
0x00
},
/* 58 DAI1 EQ1 */
{
0x59
,
0x00
},
/* 59 DAI1 EQ1 */
{
0x5a
,
0x00
},
/* 5A DAI1 EQ1 */
{
0x5b
,
0x00
},
/* 5B DAI1 EQ1 */
{
0x5c
,
0x00
},
/* 5C DAI1 EQ2 */
{
0x5d
,
0x00
},
/* 5D DAI1 EQ2 */
{
0x5e
,
0x00
},
/* 5E DAI1 EQ2 */
{
0x5f
,
0x00
},
/* 5F DAI1 EQ2 */
{
0x60
,
0x00
},
/* 60 DAI1 EQ2 */
{
0x61
,
0x00
},
/* 61 DAI1 EQ2 */
{
0x62
,
0x00
},
/* 62 DAI1 EQ2 */
{
0x63
,
0x00
},
/* 63 DAI1 EQ2 */
{
0x64
,
0x00
},
/* 64 DAI1 EQ2 */
{
0x65
,
0x00
},
/* 65 DAI1 EQ2 */
{
0x66
,
0x00
},
/* 66 DAI1 EQ3 */
{
0x67
,
0x00
},
/* 67 DAI1 EQ3 */
{
0x68
,
0x00
},
/* 68 DAI1 EQ3 */
{
0x69
,
0x00
},
/* 69 DAI1 EQ3 */
{
0x6a
,
0x00
},
/* 6A DAI1 EQ3 */
{
0x6b
,
0x00
},
/* 6B DAI1 EQ3 */
{
0x6c
,
0x00
},
/* 6C DAI1 EQ3 */
{
0x6d
,
0x00
},
/* 6D DAI1 EQ3 */
{
0x6e
,
0x00
},
/* 6E DAI1 EQ3 */
{
0x6f
,
0x00
},
/* 6F DAI1 EQ3 */
{
0x70
,
0x00
},
/* 70 DAI1 EQ4 */
{
0x71
,
0x00
},
/* 71 DAI1 EQ4 */
{
0x72
,
0x00
},
/* 72 DAI1 EQ4 */
{
0x73
,
0x00
},
/* 73 DAI1 EQ4 */
{
0x74
,
0x00
},
/* 74 DAI1 EQ4 */
{
0x75
,
0x00
},
/* 75 DAI1 EQ4 */
{
0x76
,
0x00
},
/* 76 DAI1 EQ4 */
{
0x77
,
0x00
},
/* 77 DAI1 EQ4 */
{
0x78
,
0x00
},
/* 78 DAI1 EQ4 */
{
0x79
,
0x00
},
/* 79 DAI1 EQ4 */
{
0x7a
,
0x00
},
/* 7A DAI1 EQ5 */
{
0x7b
,
0x00
},
/* 7B DAI1 EQ5 */
{
0x7c
,
0x00
},
/* 7C DAI1 EQ5 */
{
0x7d
,
0x00
},
/* 7D DAI1 EQ5 */
{
0x7e
,
0x00
},
/* 7E DAI1 EQ5 */
{
0x7f
,
0x00
},
/* 7F DAI1 EQ5 */
{
0x80
,
0x00
},
/* 80 DAI1 EQ5 */
{
0x81
,
0x00
},
/* 81 DAI1 EQ5 */
{
0x82
,
0x00
},
/* 82 DAI1 EQ5 */
{
0x83
,
0x00
},
/* 83 DAI1 EQ5 */
{
0x84
,
0x00
},
/* 84 DAI2 EQ1 */
{
0x85
,
0x00
},
/* 85 DAI2 EQ1 */
{
0x86
,
0x00
},
/* 86 DAI2 EQ1 */
{
0x87
,
0x00
},
/* 87 DAI2 EQ1 */
{
0x88
,
0x00
},
/* 88 DAI2 EQ1 */
{
0x89
,
0x00
},
/* 89 DAI2 EQ1 */
{
0x8a
,
0x00
},
/* 8A DAI2 EQ1 */
{
0x8b
,
0x00
},
/* 8B DAI2 EQ1 */
{
0x8c
,
0x00
},
/* 8C DAI2 EQ1 */
{
0x8d
,
0x00
},
/* 8D DAI2 EQ1 */
{
0x8e
,
0x00
},
/* 8E DAI2 EQ2 */
{
0x8f
,
0x00
},
/* 8F DAI2 EQ2 */
{
0x90
,
0x00
},
/* 90 DAI2 EQ2 */
{
0x91
,
0x00
},
/* 91 DAI2 EQ2 */
{
0x92
,
0x00
},
/* 92 DAI2 EQ2 */
{
0x93
,
0x00
},
/* 93 DAI2 EQ2 */
{
0x94
,
0x00
},
/* 94 DAI2 EQ2 */
{
0x95
,
0x00
},
/* 95 DAI2 EQ2 */
{
0x96
,
0x00
},
/* 96 DAI2 EQ2 */
{
0x97
,
0x00
},
/* 97 DAI2 EQ2 */
{
0x98
,
0x00
},
/* 98 DAI2 EQ3 */
{
0x99
,
0x00
},
/* 99 DAI2 EQ3 */
{
0x9a
,
0x00
},
/* 9A DAI2 EQ3 */
{
0x9b
,
0x00
},
/* 9B DAI2 EQ3 */
{
0x9c
,
0x00
},
/* 9C DAI2 EQ3 */
{
0x9d
,
0x00
},
/* 9D DAI2 EQ3 */
{
0x9e
,
0x00
},
/* 9E DAI2 EQ3 */
{
0x9f
,
0x00
},
/* 9F DAI2 EQ3 */
{
0xa0
,
0x00
},
/* A0 DAI2 EQ3 */
{
0xa1
,
0x00
},
/* A1 DAI2 EQ3 */
{
0xa2
,
0x00
},
/* A2 DAI2 EQ4 */
{
0xa3
,
0x00
},
/* A3 DAI2 EQ4 */
{
0xa4
,
0x00
},
/* A4 DAI2 EQ4 */
{
0xa5
,
0x00
},
/* A5 DAI2 EQ4 */
{
0xa6
,
0x00
},
/* A6 DAI2 EQ4 */
{
0xa7
,
0x00
},
/* A7 DAI2 EQ4 */
{
0xa8
,
0x00
},
/* A8 DAI2 EQ4 */
{
0xa9
,
0x00
},
/* A9 DAI2 EQ4 */
{
0xaa
,
0x00
},
/* AA DAI2 EQ4 */
{
0xab
,
0x00
},
/* AB DAI2 EQ4 */
{
0xac
,
0x00
},
/* AC DAI2 EQ5 */
{
0xad
,
0x00
},
/* AD DAI2 EQ5 */
{
0xae
,
0x00
},
/* AE DAI2 EQ5 */
{
0xaf
,
0x00
},
/* AF DAI2 EQ5 */
{
0xb0
,
0x00
},
/* B0 DAI2 EQ5 */
{
0xb1
,
0x00
},
/* B1 DAI2 EQ5 */
{
0xb2
,
0x00
},
/* B2 DAI2 EQ5 */
{
0xb3
,
0x00
},
/* B3 DAI2 EQ5 */
{
0xb4
,
0x00
},
/* B4 DAI2 EQ5 */
{
0xb5
,
0x00
},
/* B5 DAI2 EQ5 */
{
0xb6
,
0x00
},
/* B6 DAI1 biquad */
{
0xb7
,
0x00
},
/* B7 DAI1 biquad */
{
0xb8
,
0x00
},
/* B8 DAI1 biquad */
{
0xb9
,
0x00
},
/* B9 DAI1 biquad */
{
0xba
,
0x00
},
/* BA DAI1 biquad */
{
0xbb
,
0x00
},
/* BB DAI1 biquad */
{
0xbc
,
0x00
},
/* BC DAI1 biquad */
{
0xbd
,
0x00
},
/* BD DAI1 biquad */
{
0xbe
,
0x00
},
/* BE DAI1 biquad */
{
0xbf
,
0x00
},
/* BF DAI1 biquad */
{
0xc0
,
0x00
},
/* C0 DAI2 biquad */
{
0xc1
,
0x00
},
/* C1 DAI2 biquad */
{
0xc2
,
0x00
},
/* C2 DAI2 biquad */
{
0xc3
,
0x00
},
/* C3 DAI2 biquad */
{
0xc4
,
0x00
},
/* C4 DAI2 biquad */
{
0xc5
,
0x00
},
/* C5 DAI2 biquad */
{
0xc6
,
0x00
},
/* C6 DAI2 biquad */
{
0xc7
,
0x00
},
/* C7 DAI2 biquad */
{
0xc8
,
0x00
},
/* C8 DAI2 biquad */
{
0xc9
,
0x00
},
/* C9 DAI2 biquad */
};
static
struct
{
...
...
@@ -606,11 +536,28 @@ static struct {
{
0xFF
,
0x00
,
1
},
/* FF */
};
static
int
max98088_volatile_register
(
struct
snd_soc_codec
*
codec
,
unsigned
int
reg
)
static
bool
max98088_readable_register
(
struct
device
*
dev
,
unsigned
int
reg
)
{
return
max98088_access
[
reg
].
readable
;
}
static
bool
max98088_volatile_register
(
struct
device
*
dev
,
unsigned
int
reg
)
{
return
max98088_access
[
reg
].
vol
;
}
static
const
struct
regmap_config
max98088_regmap
=
{
.
reg_bits
=
8
,
.
val_bits
=
8
,
.
readable_reg
=
max98088_readable_register
,
.
volatile_reg
=
max98088_volatile_register
,
.
max_register
=
0xff
,
.
reg_defaults
=
max98088_reg
,
.
num_reg_defaults
=
ARRAY_SIZE
(
max98088_reg
),
.
cache_type
=
REGCACHE_RBTREE
,
};
/*
* Load equalizer DSP coefficient configurations registers
...
...
@@ -1610,35 +1557,11 @@ static int max98088_dai2_digital_mute(struct snd_soc_dai *codec_dai, int mute)
return
0
;
}
static
void
max98088_sync_cache
(
struct
snd_soc_codec
*
codec
)
{
u8
*
reg_cache
=
codec
->
reg_cache
;
int
i
;
if
(
!
codec
->
cache_sync
)
return
;
codec
->
cache_only
=
0
;
/* write back cached values if they're writeable and
* different from the hardware default.
*/
for
(
i
=
1
;
i
<
codec
->
driver
->
reg_cache_size
;
i
++
)
{
if
(
!
max98088_access
[
i
].
writable
)
continue
;
if
(
reg_cache
[
i
]
==
max98088_reg
[
i
])
continue
;
snd_soc_write
(
codec
,
i
,
reg_cache
[
i
]);
}
codec
->
cache_sync
=
0
;
}
static
int
max98088_set_bias_level
(
struct
snd_soc_codec
*
codec
,
enum
snd_soc_bias_level
level
)
{
struct
max98088_priv
*
max98088
=
snd_soc_codec_get_drvdata
(
codec
);
switch
(
level
)
{
case
SND_SOC_BIAS_ON
:
break
;
...
...
@@ -1648,7 +1571,7 @@ static int max98088_set_bias_level(struct snd_soc_codec *codec,
case
SND_SOC_BIAS_STANDBY
:
if
(
codec
->
dapm
.
bias_level
==
SND_SOC_BIAS_OFF
)
max98088_sync_cache
(
codec
);
regcache_sync
(
max98088
->
regmap
);
snd_soc_update_bits
(
codec
,
M98088_REG_4C_PWR_EN_IN
,
M98088_MBEN
,
M98088_MBEN
);
...
...
@@ -1657,7 +1580,7 @@ static int max98088_set_bias_level(struct snd_soc_codec *codec,
case
SND_SOC_BIAS_OFF
:
snd_soc_update_bits
(
codec
,
M98088_REG_4C_PWR_EN_IN
,
M98088_MBEN
,
0
);
codec
->
cache_sync
=
1
;
regcache_mark_dirty
(
max98088
->
regmap
)
;
break
;
}
codec
->
dapm
.
bias_level
=
level
;
...
...
@@ -1988,9 +1911,9 @@ static int max98088_probe(struct snd_soc_codec *codec)
struct
max98088_cdata
*
cdata
;
int
ret
=
0
;
codec
->
cache_sync
=
1
;
regcache_mark_dirty
(
max98088
->
regmap
)
;
ret
=
snd_soc_codec_set_cache_io
(
codec
,
8
,
8
,
SND_SOC_
I2C
);
ret
=
snd_soc_codec_set_cache_io
(
codec
,
8
,
8
,
SND_SOC_
REGMAP
);
if
(
ret
!=
0
)
{
dev_err
(
codec
->
dev
,
"Failed to set cache I/O: %d
\n
"
,
ret
);
return
ret
;
...
...
@@ -2048,9 +1971,6 @@ static int max98088_probe(struct snd_soc_codec *codec)
max98088_handle_pdata
(
codec
);
snd_soc_add_codec_controls
(
codec
,
max98088_snd_controls
,
ARRAY_SIZE
(
max98088_snd_controls
));
err_access:
return
ret
;
}
...
...
@@ -2071,10 +1991,8 @@ static struct snd_soc_codec_driver soc_codec_dev_max98088 = {
.
suspend
=
max98088_suspend
,
.
resume
=
max98088_resume
,
.
set_bias_level
=
max98088_set_bias_level
,
.
reg_cache_size
=
ARRAY_SIZE
(
max98088_reg
),
.
reg_word_size
=
sizeof
(
u8
),
.
reg_cache_default
=
max98088_reg
,
.
volatile_register
=
max98088_volatile_register
,
.
controls
=
max98088_snd_controls
,
.
num_controls
=
ARRAY_SIZE
(
max98088_snd_controls
),
.
dapm_widgets
=
max98088_dapm_widgets
,
.
num_dapm_widgets
=
ARRAY_SIZE
(
max98088_dapm_widgets
),
.
dapm_routes
=
max98088_audio_map
,
...
...
@@ -2092,6 +2010,10 @@ static int max98088_i2c_probe(struct i2c_client *i2c,
if
(
max98088
==
NULL
)
return
-
ENOMEM
;
max98088
->
regmap
=
devm_regmap_init_i2c
(
i2c
,
&
max98088_regmap
);
if
(
IS_ERR
(
max98088
->
regmap
))
return
PTR_ERR
(
max98088
->
regmap
);
max98088
->
devtype
=
id
->
driver_data
;
i2c_set_clientdata
(
i2c
,
max98088
);
...
...
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