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
94eaec45
Commit
94eaec45
authored
May 27, 2016
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/max98371' into asoc-next
parents
db1f3283
af37d21a
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
530 additions
and
0 deletions
+530
-0
Documentation/devicetree/bindings/sound/max98371.txt
Documentation/devicetree/bindings/sound/max98371.txt
+17
-0
sound/soc/codecs/Kconfig
sound/soc/codecs/Kconfig
+4
-0
sound/soc/codecs/Makefile
sound/soc/codecs/Makefile
+1
-0
sound/soc/codecs/max98371.c
sound/soc/codecs/max98371.c
+441
-0
sound/soc/codecs/max98371.h
sound/soc/codecs/max98371.h
+67
-0
No files found.
Documentation/devicetree/bindings/sound/max98371.txt
0 → 100644
View file @
94eaec45
max98371 codec
This device supports I2C mode only.
Required properties:
- compatible : "maxim,max98371"
- reg : The chip select number on the I2C bus
Example:
&i2c {
max98371: max98371@0x31 {
compatible = "maxim,max98371";
reg = <0x31>;
};
};
sound/soc/codecs/Kconfig
View file @
94eaec45
...
@@ -79,6 +79,7 @@ config SND_SOC_ALL_CODECS
...
@@ -79,6 +79,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_MAX98090 if I2C
select SND_SOC_MAX98090 if I2C
select SND_SOC_MAX98095 if I2C
select SND_SOC_MAX98095 if I2C
select SND_SOC_MAX98357A if GPIOLIB
select SND_SOC_MAX98357A if GPIOLIB
select SND_SOC_MAX98371 if I2C
select SND_SOC_MAX9867 if I2C
select SND_SOC_MAX9867 if I2C
select SND_SOC_MAX98925 if I2C
select SND_SOC_MAX98925 if I2C
select SND_SOC_MAX98926 if I2C
select SND_SOC_MAX98926 if I2C
...
@@ -530,6 +531,9 @@ config SND_SOC_MAX98095
...
@@ -530,6 +531,9 @@ config SND_SOC_MAX98095
config SND_SOC_MAX98357A
config SND_SOC_MAX98357A
tristate
tristate
config SND_SOC_MAX98371
tristate
config SND_SOC_MAX9867
config SND_SOC_MAX9867
tristate
tristate
...
...
sound/soc/codecs/Makefile
View file @
94eaec45
...
@@ -74,6 +74,7 @@ snd-soc-max98088-objs := max98088.o
...
@@ -74,6 +74,7 @@ snd-soc-max98088-objs := max98088.o
snd-soc-max98090-objs
:=
max98090.o
snd-soc-max98090-objs
:=
max98090.o
snd-soc-max98095-objs
:=
max98095.o
snd-soc-max98095-objs
:=
max98095.o
snd-soc-max98357a-objs
:=
max98357a.o
snd-soc-max98357a-objs
:=
max98357a.o
snd-soc-max98371-objs
:=
max98371.o
snd-soc-max9867-objs
:=
max9867.o
snd-soc-max9867-objs
:=
max9867.o
snd-soc-max98925-objs
:=
max98925.o
snd-soc-max98925-objs
:=
max98925.o
snd-soc-max98926-objs
:=
max98926.o
snd-soc-max98926-objs
:=
max98926.o
...
...
sound/soc/codecs/max98371.c
0 → 100644
View file @
94eaec45
/*
* max98371.c -- ALSA SoC Stereo MAX98371 driver
*
* Copyright 2015-16 Maxim Integrated Products
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/soc.h>
#include <sound/tlv.h>
#include "max98371.h"
static
const
char
*
const
monomix_text
[]
=
{
"Left"
,
"Right"
,
"LeftRightDiv2"
,
};
static
const
char
*
const
hpf_cutoff_txt
[]
=
{
"Disable"
,
"DC Block"
,
"50Hz"
,
"100Hz"
,
"200Hz"
,
"400Hz"
,
"800Hz"
,
};
static
SOC_ENUM_SINGLE_DECL
(
max98371_monomix
,
MAX98371_MONOMIX_CFG
,
0
,
monomix_text
);
static
SOC_ENUM_SINGLE_DECL
(
max98371_hpf_cutoff
,
MAX98371_HPF
,
0
,
hpf_cutoff_txt
);
static
const
DECLARE_TLV_DB_RANGE
(
max98371_dht_min_gain
,
0
,
1
,
TLV_DB_SCALE_ITEM
(
537
,
66
,
0
),
2
,
3
,
TLV_DB_SCALE_ITEM
(
677
,
82
,
0
),
4
,
5
,
TLV_DB_SCALE_ITEM
(
852
,
104
,
0
),
6
,
7
,
TLV_DB_SCALE_ITEM
(
1072
,
131
,
0
),
8
,
9
,
TLV_DB_SCALE_ITEM
(
1350
,
165
,
0
),
10
,
11
,
TLV_DB_SCALE_ITEM
(
1699
,
101
,
0
),
);
static
const
DECLARE_TLV_DB_RANGE
(
max98371_dht_max_gain
,
0
,
1
,
TLV_DB_SCALE_ITEM
(
537
,
66
,
0
),
2
,
3
,
TLV_DB_SCALE_ITEM
(
677
,
82
,
0
),
4
,
5
,
TLV_DB_SCALE_ITEM
(
852
,
104
,
0
),
6
,
7
,
TLV_DB_SCALE_ITEM
(
1072
,
131
,
0
),
8
,
9
,
TLV_DB_SCALE_ITEM
(
1350
,
165
,
0
),
10
,
11
,
TLV_DB_SCALE_ITEM
(
1699
,
208
,
0
),
);
static
const
DECLARE_TLV_DB_RANGE
(
max98371_dht_rot_gain
,
0
,
1
,
TLV_DB_SCALE_ITEM
(
-
50
,
-
50
,
0
),
2
,
6
,
TLV_DB_SCALE_ITEM
(
-
100
,
-
100
,
0
),
7
,
8
,
TLV_DB_SCALE_ITEM
(
-
800
,
-
200
,
0
),
9
,
11
,
TLV_DB_SCALE_ITEM
(
-
1200
,
-
300
,
0
),
12
,
13
,
TLV_DB_SCALE_ITEM
(
-
2000
,
-
200
,
0
),
14
,
15
,
TLV_DB_SCALE_ITEM
(
-
2500
,
-
500
,
0
),
);
static
const
struct
reg_default
max98371_reg
[]
=
{
{
0x01
,
0x00
},
{
0x02
,
0x00
},
{
0x03
,
0x00
},
{
0x04
,
0x00
},
{
0x05
,
0x00
},
{
0x06
,
0x00
},
{
0x07
,
0x00
},
{
0x08
,
0x00
},
{
0x09
,
0x00
},
{
0x0A
,
0x00
},
{
0x10
,
0x06
},
{
0x11
,
0x08
},
{
0x14
,
0x80
},
{
0x15
,
0x00
},
{
0x16
,
0x00
},
{
0x18
,
0x00
},
{
0x19
,
0x00
},
{
0x1C
,
0x00
},
{
0x1D
,
0x00
},
{
0x1E
,
0x00
},
{
0x1F
,
0x00
},
{
0x20
,
0x00
},
{
0x21
,
0x00
},
{
0x22
,
0x00
},
{
0x23
,
0x00
},
{
0x24
,
0x00
},
{
0x25
,
0x00
},
{
0x26
,
0x00
},
{
0x27
,
0x00
},
{
0x28
,
0x00
},
{
0x29
,
0x00
},
{
0x2A
,
0x00
},
{
0x2B
,
0x00
},
{
0x2C
,
0x00
},
{
0x2D
,
0x00
},
{
0x2E
,
0x0B
},
{
0x31
,
0x00
},
{
0x32
,
0x18
},
{
0x33
,
0x00
},
{
0x34
,
0x00
},
{
0x36
,
0x00
},
{
0x37
,
0x00
},
{
0x38
,
0x00
},
{
0x39
,
0x00
},
{
0x3A
,
0x00
},
{
0x3B
,
0x00
},
{
0x3C
,
0x00
},
{
0x3D
,
0x00
},
{
0x3E
,
0x00
},
{
0x3F
,
0x00
},
{
0x40
,
0x00
},
{
0x41
,
0x00
},
{
0x42
,
0x00
},
{
0x43
,
0x00
},
{
0x4A
,
0x00
},
{
0x4B
,
0x00
},
{
0x4C
,
0x00
},
{
0x4D
,
0x00
},
{
0x4E
,
0x00
},
{
0x50
,
0x00
},
{
0x51
,
0x00
},
{
0x55
,
0x00
},
{
0x58
,
0x00
},
{
0x59
,
0x00
},
{
0x5C
,
0x00
},
{
0xFF
,
0x43
},
};
static
bool
max98371_volatile_register
(
struct
device
*
dev
,
unsigned
int
reg
)
{
switch
(
reg
)
{
case
MAX98371_IRQ_CLEAR1
:
case
MAX98371_IRQ_CLEAR2
:
case
MAX98371_IRQ_CLEAR3
:
case
MAX98371_VERSION
:
return
true
;
default:
return
false
;
}
}
static
bool
max98371_readable_register
(
struct
device
*
dev
,
unsigned
int
reg
)
{
switch
(
reg
)
{
case
MAX98371_SOFT_RESET
:
return
false
;
default:
return
true
;
}
};
static
const
DECLARE_TLV_DB_RANGE
(
max98371_gain_tlv
,
0
,
7
,
TLV_DB_SCALE_ITEM
(
0
,
50
,
0
),
8
,
10
,
TLV_DB_SCALE_ITEM
(
400
,
100
,
0
)
);
static
const
DECLARE_TLV_DB_RANGE
(
max98371_noload_gain_tlv
,
0
,
11
,
TLV_DB_SCALE_ITEM
(
950
,
100
,
0
),
);
static
const
DECLARE_TLV_DB_SCALE
(
digital_tlv
,
-
6300
,
50
,
1
);
static
const
struct
snd_kcontrol_new
max98371_snd_controls
[]
=
{
SOC_SINGLE_TLV
(
"Speaker Volume"
,
MAX98371_GAIN
,
MAX98371_GAIN_SHIFT
,
(
1
<<
MAX98371_GAIN_WIDTH
)
-
1
,
0
,
max98371_gain_tlv
),
SOC_SINGLE_TLV
(
"Digital Volume"
,
MAX98371_DIGITAL_GAIN
,
0
,
(
1
<<
MAX98371_DIGITAL_GAIN_WIDTH
)
-
1
,
1
,
digital_tlv
),
SOC_SINGLE_TLV
(
"Speaker DHT Max Volume"
,
MAX98371_GAIN
,
0
,
(
1
<<
MAX98371_DHT_MAX_WIDTH
)
-
1
,
0
,
max98371_dht_max_gain
),
SOC_SINGLE_TLV
(
"Speaker DHT Min Volume"
,
MAX98371_DHT_GAIN
,
0
,
(
1
<<
MAX98371_DHT_GAIN_WIDTH
)
-
1
,
0
,
max98371_dht_min_gain
),
SOC_SINGLE_TLV
(
"Speaker DHT Rotation Volume"
,
MAX98371_DHT_GAIN
,
0
,
(
1
<<
MAX98371_DHT_ROT_WIDTH
)
-
1
,
0
,
max98371_dht_rot_gain
),
SOC_SINGLE
(
"DHT Attack Step"
,
MAX98371_DHT
,
MAX98371_DHT_STEP
,
3
,
0
),
SOC_SINGLE
(
"DHT Attack Rate"
,
MAX98371_DHT
,
0
,
7
,
0
),
SOC_ENUM
(
"Monomix Select"
,
max98371_monomix
),
SOC_ENUM
(
"HPF Cutoff"
,
max98371_hpf_cutoff
),
};
static
int
max98371_dai_set_fmt
(
struct
snd_soc_dai
*
codec_dai
,
unsigned
int
fmt
)
{
struct
snd_soc_codec
*
codec
=
codec_dai
->
codec
;
struct
max98371_priv
*
max98371
=
snd_soc_codec_get_drvdata
(
codec
);
unsigned
int
val
=
0
;
switch
(
fmt
&
SND_SOC_DAIFMT_MASTER_MASK
)
{
case
SND_SOC_DAIFMT_CBS_CFS
:
break
;
default:
dev_err
(
codec
->
dev
,
"DAI clock mode unsupported"
);
return
-
EINVAL
;
}
switch
(
fmt
&
SND_SOC_DAIFMT_FORMAT_MASK
)
{
case
SND_SOC_DAIFMT_I2S
:
val
|=
0
;
break
;
case
SND_SOC_DAIFMT_RIGHT_J
:
val
|=
MAX98371_DAI_RIGHT
;
break
;
case
SND_SOC_DAIFMT_LEFT_J
:
val
|=
MAX98371_DAI_LEFT
;
break
;
default:
dev_err
(
codec
->
dev
,
"DAI wrong mode unsupported"
);
return
-
EINVAL
;
}
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_FMT
,
MAX98371_FMT_MODE_MASK
,
val
);
return
0
;
}
static
int
max98371_dai_hw_params
(
struct
snd_pcm_substream
*
substream
,
struct
snd_pcm_hw_params
*
params
,
struct
snd_soc_dai
*
dai
)
{
struct
snd_soc_codec
*
codec
=
dai
->
codec
;
struct
max98371_priv
*
max98371
=
snd_soc_codec_get_drvdata
(
codec
);
int
blr_clk_ratio
,
ch_size
,
channels
=
params_channels
(
params
);
int
rate
=
params_rate
(
params
);
switch
(
params_format
(
params
))
{
case
SNDRV_PCM_FORMAT_S8
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_FMT
,
MAX98371_FMT_MASK
,
MAX98371_DAI_CHANSZ_16
);
ch_size
=
8
;
break
;
case
SNDRV_PCM_FORMAT_S16_LE
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_FMT
,
MAX98371_FMT_MASK
,
MAX98371_DAI_CHANSZ_16
);
ch_size
=
16
;
break
;
case
SNDRV_PCM_FORMAT_S24_LE
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_FMT
,
MAX98371_FMT_MASK
,
MAX98371_DAI_CHANSZ_32
);
ch_size
=
24
;
break
;
case
SNDRV_PCM_FORMAT_S32_LE
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_FMT
,
MAX98371_FMT_MASK
,
MAX98371_DAI_CHANSZ_32
);
ch_size
=
32
;
break
;
default:
return
-
EINVAL
;
}
/* BCLK/LRCLK ratio calculation */
blr_clk_ratio
=
channels
*
ch_size
;
switch
(
blr_clk_ratio
)
{
case
32
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_DAI_CLK
,
MAX98371_DAI_BSEL_MASK
,
MAX98371_DAI_BSEL_32
);
break
;
case
48
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_DAI_CLK
,
MAX98371_DAI_BSEL_MASK
,
MAX98371_DAI_BSEL_48
);
break
;
case
64
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_DAI_CLK
,
MAX98371_DAI_BSEL_MASK
,
MAX98371_DAI_BSEL_64
);
break
;
default:
return
-
EINVAL
;
}
switch
(
rate
)
{
case
32000
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_SPK_SR
,
MAX98371_SPK_SR_MASK
,
MAX98371_SPK_SR_32
);
break
;
case
44100
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_SPK_SR
,
MAX98371_SPK_SR_MASK
,
MAX98371_SPK_SR_44
);
break
;
case
48000
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_SPK_SR
,
MAX98371_SPK_SR_MASK
,
MAX98371_SPK_SR_48
);
break
;
case
88200
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_SPK_SR
,
MAX98371_SPK_SR_MASK
,
MAX98371_SPK_SR_88
);
break
;
case
96000
:
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_SPK_SR
,
MAX98371_SPK_SR_MASK
,
MAX98371_SPK_SR_96
);
break
;
default:
return
-
EINVAL
;
}
/* enabling both the RX channels*/
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_MONOMIX_SRC
,
MAX98371_MONOMIX_SRC_MASK
,
MONOMIX_RX_0_1
);
regmap_update_bits
(
max98371
->
regmap
,
MAX98371_DAI_CHANNEL
,
MAX98371_CHANNEL_MASK
,
MAX98371_CHANNEL_MASK
);
return
0
;
}
static
const
struct
snd_soc_dapm_widget
max98371_dapm_widgets
[]
=
{
SND_SOC_DAPM_DAC
(
"DAC"
,
NULL
,
MAX98371_SPK_ENABLE
,
0
,
0
),
SND_SOC_DAPM_SUPPLY
(
"Global Enable"
,
MAX98371_GLOBAL_ENABLE
,
0
,
0
,
NULL
,
0
),
SND_SOC_DAPM_OUTPUT
(
"SPK_OUT"
),
};
static
const
struct
snd_soc_dapm_route
max98371_audio_map
[]
=
{
{
"DAC"
,
NULL
,
"HiFi Playback"
},
{
"SPK_OUT"
,
NULL
,
"DAC"
},
{
"SPK_OUT"
,
NULL
,
"Global Enable"
},
};
#define MAX98371_RATES SNDRV_PCM_RATE_8000_48000
#define MAX98371_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_BE | \
SNDRV_PCM_FMTBIT_S24_BE | SNDRV_PCM_FMTBIT_S32_BE)
static
const
struct
snd_soc_dai_ops
max98371_dai_ops
=
{
.
set_fmt
=
max98371_dai_set_fmt
,
.
hw_params
=
max98371_dai_hw_params
,
};
static
struct
snd_soc_dai_driver
max98371_dai
[]
=
{
{
.
name
=
"max98371-aif1"
,
.
playback
=
{
.
stream_name
=
"HiFi Playback"
,
.
channels_min
=
1
,
.
channels_max
=
2
,
.
rates
=
SNDRV_PCM_RATE_8000_48000
,
.
formats
=
MAX98371_FORMATS
,
},
.
ops
=
&
max98371_dai_ops
,
}
};
static
const
struct
snd_soc_codec_driver
max98371_codec
=
{
.
controls
=
max98371_snd_controls
,
.
num_controls
=
ARRAY_SIZE
(
max98371_snd_controls
),
.
dapm_routes
=
max98371_audio_map
,
.
num_dapm_routes
=
ARRAY_SIZE
(
max98371_audio_map
),
.
dapm_widgets
=
max98371_dapm_widgets
,
.
num_dapm_widgets
=
ARRAY_SIZE
(
max98371_dapm_widgets
),
};
static
const
struct
regmap_config
max98371_regmap
=
{
.
reg_bits
=
8
,
.
val_bits
=
8
,
.
max_register
=
MAX98371_VERSION
,
.
reg_defaults
=
max98371_reg
,
.
num_reg_defaults
=
ARRAY_SIZE
(
max98371_reg
),
.
volatile_reg
=
max98371_volatile_register
,
.
readable_reg
=
max98371_readable_register
,
.
cache_type
=
REGCACHE_RBTREE
,
};
static
int
max98371_i2c_probe
(
struct
i2c_client
*
i2c
,
const
struct
i2c_device_id
*
id
)
{
struct
max98371_priv
*
max98371
;
int
ret
,
reg
;
max98371
=
devm_kzalloc
(
&
i2c
->
dev
,
sizeof
(
*
max98371
),
GFP_KERNEL
);
if
(
!
max98371
)
return
-
ENOMEM
;
i2c_set_clientdata
(
i2c
,
max98371
);
max98371
->
regmap
=
devm_regmap_init_i2c
(
i2c
,
&
max98371_regmap
);
if
(
IS_ERR
(
max98371
->
regmap
))
{
ret
=
PTR_ERR
(
max98371
->
regmap
);
dev_err
(
&
i2c
->
dev
,
"Failed to allocate regmap: %d
\n
"
,
ret
);
return
ret
;
}
ret
=
regmap_read
(
max98371
->
regmap
,
MAX98371_VERSION
,
&
reg
);
if
(
ret
<
0
)
{
dev_info
(
&
i2c
->
dev
,
"device error %d
\n
"
,
ret
);
return
ret
;
}
dev_info
(
&
i2c
->
dev
,
"device version %x
\n
"
,
reg
);
ret
=
snd_soc_register_codec
(
&
i2c
->
dev
,
&
max98371_codec
,
max98371_dai
,
ARRAY_SIZE
(
max98371_dai
));
if
(
ret
<
0
)
{
dev_err
(
&
i2c
->
dev
,
"Failed to register codec: %d
\n
"
,
ret
);
return
ret
;
}
return
ret
;
}
static
int
max98371_i2c_remove
(
struct
i2c_client
*
client
)
{
snd_soc_unregister_codec
(
&
client
->
dev
);
return
0
;
}
static
const
struct
i2c_device_id
max98371_i2c_id
[]
=
{
{
"max98371"
,
0
},
};
MODULE_DEVICE_TABLE
(
i2c
,
max98371_i2c_id
);
static
const
struct
of_device_id
max98371_of_match
[]
=
{
{
.
compatible
=
"maxim,max98371"
,
},
{
}
};
MODULE_DEVICE_TABLE
(
of
,
max98371_of_match
);
static
struct
i2c_driver
max98371_i2c_driver
=
{
.
driver
=
{
.
name
=
"max98371"
,
.
owner
=
THIS_MODULE
,
.
pm
=
NULL
,
.
of_match_table
=
of_match_ptr
(
max98371_of_match
),
},
.
probe
=
max98371_i2c_probe
,
.
remove
=
max98371_i2c_remove
,
.
id_table
=
max98371_i2c_id
,
};
module_i2c_driver
(
max98371_i2c_driver
);
MODULE_AUTHOR
(
"anish kumar <yesanishhere@gmail.com>"
);
MODULE_DESCRIPTION
(
"ALSA SoC MAX98371 driver"
);
MODULE_LICENSE
(
"GPL"
);
sound/soc/codecs/max98371.h
0 → 100644
View file @
94eaec45
/*
* max98371.h -- MAX98371 ALSA SoC Audio driver
*
* Copyright 2011-2012 Maxim Integrated Products
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef _MAX98371_H
#define _MAX98371_H
#define MAX98371_IRQ_CLEAR1 0x01
#define MAX98371_IRQ_CLEAR2 0x02
#define MAX98371_IRQ_CLEAR3 0x03
#define MAX98371_DAI_CLK 0x10
#define MAX98371_DAI_BSEL_MASK 0xF
#define MAX98371_DAI_BSEL_32 2
#define MAX98371_DAI_BSEL_48 3
#define MAX98371_DAI_BSEL_64 4
#define MAX98371_SPK_SR 0x11
#define MAX98371_SPK_SR_MASK 0xF
#define MAX98371_SPK_SR_32 6
#define MAX98371_SPK_SR_44 7
#define MAX98371_SPK_SR_48 8
#define MAX98371_SPK_SR_88 10
#define MAX98371_SPK_SR_96 11
#define MAX98371_DAI_CHANNEL 0x15
#define MAX98371_CHANNEL_MASK 0x3
#define MAX98371_MONOMIX_SRC 0x18
#define MAX98371_MONOMIX_CFG 0x19
#define MAX98371_HPF 0x1C
#define MAX98371_MONOMIX_SRC_MASK 0xFF
#define MONOMIX_RX_0_1 ((0x1)<<(4))
#define M98371_DAI_CHANNEL_I2S 0x3
#define MAX98371_DIGITAL_GAIN 0x2D
#define MAX98371_DIGITAL_GAIN_WIDTH 0x7
#define MAX98371_GAIN 0x2E
#define MAX98371_GAIN_SHIFT 0x4
#define MAX98371_GAIN_WIDTH 0x4
#define MAX98371_DHT_MAX_WIDTH 4
#define MAX98371_FMT 0x14
#define MAX98371_CHANSZ_WIDTH 6
#define MAX98371_FMT_MASK ((0x3)<<(MAX98371_CHANSZ_WIDTH))
#define MAX98371_FMT_MODE_MASK ((0x7)<<(3))
#define MAX98371_DAI_LEFT ((0x1)<<(3))
#define MAX98371_DAI_RIGHT ((0x2)<<(3))
#define MAX98371_DAI_CHANSZ_16 ((1)<<(MAX98371_CHANSZ_WIDTH))
#define MAX98371_DAI_CHANSZ_24 ((2)<<(MAX98371_CHANSZ_WIDTH))
#define MAX98371_DAI_CHANSZ_32 ((3)<<(MAX98371_CHANSZ_WIDTH))
#define MAX98371_DHT 0x32
#define MAX98371_DHT_STEP 0x3
#define MAX98371_DHT_GAIN 0x31
#define MAX98371_DHT_GAIN_WIDTH 0x4
#define MAX98371_DHT_ROT_WIDTH 0x4
#define MAX98371_SPK_ENABLE 0x4A
#define MAX98371_GLOBAL_ENABLE 0x50
#define MAX98371_SOFT_RESET 0x51
#define MAX98371_VERSION 0xFF
struct
max98371_priv
{
struct
regmap
*
regmap
;
struct
snd_soc_codec
*
codec
;
};
#endif
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