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
0680fa6c
Commit
0680fa6c
authored
Apr 12, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/ak5386' into asoc-next
parents
f1cc981b
cc289be8
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
177 additions
and
0 deletions
+177
-0
Documentation/devicetree/bindings/sound/ak5386.txt
Documentation/devicetree/bindings/sound/ak5386.txt
+19
-0
sound/soc/codecs/Kconfig
sound/soc/codecs/Kconfig
+4
-0
sound/soc/codecs/Makefile
sound/soc/codecs/Makefile
+2
-0
sound/soc/codecs/ak5386.c
sound/soc/codecs/ak5386.c
+152
-0
No files found.
Documentation/devicetree/bindings/sound/ak5386.txt
0 → 100644
View file @
0680fa6c
AK5386 Single-ended 24-Bit 192kHz delta-sigma ADC
This device has no control interface.
Required properties:
- compatible : "asahi-kasei,ak5386"
Optional properties:
- reset-gpio : a GPIO spec for the reset/power down pin.
If specified, it will be deasserted at probe time.
Example:
spdif: ak5386@0 {
compatible = "asahi-kasei,ak5386";
reset-gpio = <&gpio0 23>;
};
sound/soc/codecs/Kconfig
View file @
0680fa6c
...
...
@@ -26,6 +26,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_AK4641 if I2C
select SND_SOC_AK4642 if I2C
select SND_SOC_AK4671 if I2C
select SND_SOC_AK5386
select SND_SOC_ALC5623 if I2C
select SND_SOC_ALC5632 if I2C
select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC
...
...
@@ -203,6 +204,9 @@ config SND_SOC_AK4642
config SND_SOC_AK4671
tristate
config SND_SOC_AK5386
tristate
config SND_SOC_ALC5623
tristate
config SND_SOC_ALC5632
...
...
sound/soc/codecs/Makefile
View file @
0680fa6c
...
...
@@ -14,6 +14,7 @@ snd-soc-ak4535-objs := ak4535.o
snd-soc-ak4641-objs
:=
ak4641.o
snd-soc-ak4642-objs
:=
ak4642.o
snd-soc-ak4671-objs
:=
ak4671.o
snd-soc-ak5386-objs
:=
ak5386.o
snd-soc-arizona-objs
:=
arizona.o
snd-soc-cq93vc-objs
:=
cq93vc.o
snd-soc-cs42l51-objs
:=
cs42l51.o
...
...
@@ -137,6 +138,7 @@ obj-$(CONFIG_SND_SOC_AK4535) += snd-soc-ak4535.o
obj-$(CONFIG_SND_SOC_AK4641)
+=
snd-soc-ak4641.o
obj-$(CONFIG_SND_SOC_AK4642)
+=
snd-soc-ak4642.o
obj-$(CONFIG_SND_SOC_AK4671)
+=
snd-soc-ak4671.o
obj-$(CONFIG_SND_SOC_AK5386)
+=
snd-soc-ak5386.o
obj-$(CONFIG_SND_SOC_ALC5623)
+=
snd-soc-alc5623.o
obj-$(CONFIG_SND_SOC_ALC5632)
+=
snd-soc-alc5632.o
obj-$(CONFIG_SND_SOC_ARIZONA)
+=
snd-soc-arizona.o
...
...
sound/soc/codecs/ak5386.c
0 → 100644
View file @
0680fa6c
/*
* ALSA SoC driver for
* Asahi Kasei AK5386 Single-ended 24-Bit 192kHz delta-sigma ADC
*
* (c) 2013 Daniel Mack <zonque@gmail.com>
*
* 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/module.h>
#include <linux/slab.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/of_device.h>
#include <sound/soc.h>
#include <sound/pcm.h>
#include <sound/initval.h>
struct
ak5386_priv
{
int
reset_gpio
;
};
static
struct
snd_soc_codec_driver
soc_codec_ak5386
;
static
int
ak5386_set_dai_fmt
(
struct
snd_soc_dai
*
codec_dai
,
unsigned
int
format
)
{
struct
snd_soc_codec
*
codec
=
codec_dai
->
codec
;
format
&=
SND_SOC_DAIFMT_FORMAT_MASK
;
if
(
format
!=
SND_SOC_DAIFMT_LEFT_J
&&
format
!=
SND_SOC_DAIFMT_I2S
)
{
dev_err
(
codec
->
dev
,
"Invalid DAI format
\n
"
);
return
-
EINVAL
;
}
return
0
;
}
static
int
ak5386_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
ak5386_priv
*
priv
=
snd_soc_codec_get_drvdata
(
codec
);
/*
* From the datasheet:
*
* All external clocks (MCLK, SCLK and LRCK) must be present unless
* PDN pin = “L”. If these clocks are not provided, the AK5386 may
* draw excess current due to its use of internal dynamically
* refreshed logic. If the external clocks are not present, place
* the AK5386 in power-down mode (PDN pin = “L”).
*/
if
(
gpio_is_valid
(
priv
->
reset_gpio
))
gpio_set_value
(
priv
->
reset_gpio
,
1
);
return
0
;
}
static
int
ak5386_hw_free
(
struct
snd_pcm_substream
*
substream
,
struct
snd_soc_dai
*
dai
)
{
struct
snd_soc_codec
*
codec
=
dai
->
codec
;
struct
ak5386_priv
*
priv
=
snd_soc_codec_get_drvdata
(
codec
);
if
(
gpio_is_valid
(
priv
->
reset_gpio
))
gpio_set_value
(
priv
->
reset_gpio
,
0
);
return
0
;
}
static
const
struct
snd_soc_dai_ops
ak5386_dai_ops
=
{
.
set_fmt
=
ak5386_set_dai_fmt
,
.
hw_params
=
ak5386_hw_params
,
.
hw_free
=
ak5386_hw_free
,
};
static
struct
snd_soc_dai_driver
ak5386_dai
=
{
.
name
=
"ak5386-hifi"
,
.
capture
=
{
.
stream_name
=
"Capture"
,
.
channels_min
=
1
,
.
channels_max
=
2
,
.
rates
=
SNDRV_PCM_RATE_8000_192000
,
.
formats
=
SNDRV_PCM_FMTBIT_S8
|
SNDRV_PCM_FMTBIT_S16_LE
|
SNDRV_PCM_FMTBIT_S24_LE
|
SNDRV_PCM_FMTBIT_S24_3LE
,
},
.
ops
=
&
ak5386_dai_ops
,
};
#ifdef CONFIG_OF
static
const
struct
of_device_id
ak5386_dt_ids
[]
=
{
{
.
compatible
=
"asahi-kasei,ak5386"
,
},
{
}
};
MODULE_DEVICE_TABLE
(
of
,
ak5386_dt_ids
);
#endif
static
int
ak5386_probe
(
struct
platform_device
*
pdev
)
{
struct
device
*
dev
=
&
pdev
->
dev
;
struct
ak5386_priv
*
priv
;
priv
=
devm_kzalloc
(
dev
,
sizeof
(
*
priv
),
GFP_KERNEL
);
if
(
!
priv
)
return
-
ENOMEM
;
priv
->
reset_gpio
=
-
EINVAL
;
dev_set_drvdata
(
dev
,
priv
);
if
(
of_match_device
(
of_match_ptr
(
ak5386_dt_ids
),
dev
))
priv
->
reset_gpio
=
of_get_named_gpio
(
dev
->
of_node
,
"reset-gpio"
,
0
);
if
(
gpio_is_valid
(
priv
->
reset_gpio
))
if
(
devm_gpio_request_one
(
dev
,
priv
->
reset_gpio
,
GPIOF_OUT_INIT_LOW
,
"AK5386 Reset"
))
priv
->
reset_gpio
=
-
EINVAL
;
return
snd_soc_register_codec
(
dev
,
&
soc_codec_ak5386
,
&
ak5386_dai
,
1
);
}
static
int
ak5386_remove
(
struct
platform_device
*
pdev
)
{
snd_soc_unregister_codec
(
&
pdev
->
dev
);
return
0
;
}
static
struct
platform_driver
ak5386_driver
=
{
.
probe
=
ak5386_probe
,
.
remove
=
ak5386_remove
,
.
driver
=
{
.
name
=
"ak5386"
,
.
owner
=
THIS_MODULE
,
.
of_match_table
=
of_match_ptr
(
ak5386_dt_ids
),
},
};
module_platform_driver
(
ak5386_driver
);
MODULE_DESCRIPTION
(
"ASoC driver for AK5386 ADC"
);
MODULE_AUTHOR
(
"Daniel Mack <zonque@gmail.com>"
);
MODULE_LICENSE
(
"GPL"
);
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