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
0b05a05d
Commit
0b05a05d
authored
Aug 22, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/wm8731' into asoc-next
parents
ab4f0935
0890c2b7
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
3 deletions
+57
-3
sound/soc/codecs/wm8731.c
sound/soc/codecs/wm8731.c
+57
-3
No files found.
sound/soc/codecs/wm8731.c
View file @
0b05a05d
...
@@ -45,6 +45,7 @@ static const char *wm8731_supply_names[WM8731_NUM_SUPPLIES] = {
...
@@ -45,6 +45,7 @@ static const char *wm8731_supply_names[WM8731_NUM_SUPPLIES] = {
struct
wm8731_priv
{
struct
wm8731_priv
{
struct
regmap
*
regmap
;
struct
regmap
*
regmap
;
struct
regulator_bulk_data
supplies
[
WM8731_NUM_SUPPLIES
];
struct
regulator_bulk_data
supplies
[
WM8731_NUM_SUPPLIES
];
const
struct
snd_pcm_hw_constraint_list
*
constraints
;
unsigned
int
sysclk
;
unsigned
int
sysclk
;
int
sysclk_type
;
int
sysclk_type
;
int
playback_fs
;
int
playback_fs
;
...
@@ -290,6 +291,36 @@ static const struct _coeff_div coeff_div[] = {
...
@@ -290,6 +291,36 @@ static const struct _coeff_div coeff_div[] = {
{
12000000
,
88200
,
136
,
0xf
,
0x1
,
0x1
},
{
12000000
,
88200
,
136
,
0xf
,
0x1
,
0x1
},
};
};
/* rates constraints */
static
const
unsigned
int
wm8731_rates_12000000
[]
=
{
8000
,
32000
,
44100
,
48000
,
96000
,
88200
,
};
static
const
unsigned
int
wm8731_rates_12288000_18432000
[]
=
{
8000
,
32000
,
48000
,
96000
,
};
static
const
unsigned
int
wm8731_rates_11289600_16934400
[]
=
{
8000
,
44100
,
88200
,
};
static
const
struct
snd_pcm_hw_constraint_list
wm8731_constraints_12000000
=
{
.
list
=
wm8731_rates_12000000
,
.
count
=
ARRAY_SIZE
(
wm8731_rates_12000000
),
};
static
const
struct
snd_pcm_hw_constraint_list
wm8731_constraints_12288000_18432000
=
{
.
list
=
wm8731_rates_12288000_18432000
,
.
count
=
ARRAY_SIZE
(
wm8731_rates_12288000_18432000
),
};
static
const
struct
snd_pcm_hw_constraint_list
wm8731_constraints_11289600_16934400
=
{
.
list
=
wm8731_rates_11289600_16934400
,
.
count
=
ARRAY_SIZE
(
wm8731_rates_11289600_16934400
),
};
static
inline
int
get_coeff
(
int
mclk
,
int
rate
)
static
inline
int
get_coeff
(
int
mclk
,
int
rate
)
{
{
int
i
;
int
i
;
...
@@ -362,17 +393,26 @@ static int wm8731_set_dai_sysclk(struct snd_soc_dai *codec_dai,
...
@@ -362,17 +393,26 @@ static int wm8731_set_dai_sysclk(struct snd_soc_dai *codec_dai,
}
}
switch
(
freq
)
{
switch
(
freq
)
{
case
11289600
:
case
0
:
wm8731
->
constraints
=
NULL
;
break
;
case
12000000
:
case
12000000
:
wm8731
->
constraints
=
&
wm8731_constraints_12000000
;
break
;
case
12288000
:
case
12288000
:
case
16934400
:
case
18432000
:
case
18432000
:
wm8731
->
sysclk
=
freq
;
wm8731
->
constraints
=
&
wm8731_constraints_12288000_18432000
;
break
;
case
16934400
:
case
11289600
:
wm8731
->
constraints
=
&
wm8731_constraints_11289600_16934400
;
break
;
break
;
default:
default:
return
-
EINVAL
;
return
-
EINVAL
;
}
}
wm8731
->
sysclk
=
freq
;
snd_soc_dapm_sync
(
&
codec
->
dapm
);
snd_soc_dapm_sync
(
&
codec
->
dapm
);
return
0
;
return
0
;
...
@@ -475,12 +515,26 @@ static int wm8731_set_bias_level(struct snd_soc_codec *codec,
...
@@ -475,12 +515,26 @@ static int wm8731_set_bias_level(struct snd_soc_codec *codec,
return
0
;
return
0
;
}
}
static
int
wm8731_startup
(
struct
snd_pcm_substream
*
substream
,
struct
snd_soc_dai
*
dai
)
{
struct
wm8731_priv
*
wm8731
=
snd_soc_codec_get_drvdata
(
dai
->
codec
);
if
(
wm8731
->
constraints
)
snd_pcm_hw_constraint_list
(
substream
->
runtime
,
0
,
SNDRV_PCM_HW_PARAM_RATE
,
wm8731
->
constraints
);
return
0
;
}
#define WM8731_RATES SNDRV_PCM_RATE_8000_96000
#define WM8731_RATES SNDRV_PCM_RATE_8000_96000
#define WM8731_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
#define WM8731_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
SNDRV_PCM_FMTBIT_S24_LE)
static
const
struct
snd_soc_dai_ops
wm8731_dai_ops
=
{
static
const
struct
snd_soc_dai_ops
wm8731_dai_ops
=
{
.
startup
=
wm8731_startup
,
.
hw_params
=
wm8731_hw_params
,
.
hw_params
=
wm8731_hw_params
,
.
digital_mute
=
wm8731_mute
,
.
digital_mute
=
wm8731_mute
,
.
set_sysclk
=
wm8731_set_dai_sysclk
,
.
set_sysclk
=
wm8731_set_dai_sysclk
,
...
...
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