Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
8a8b0e87
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8a8b0e87
编写于
8月 22, 2013
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/topic/pcm3008' into asoc-next
上级
9e4fbee9
4fc932c6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
72 addition
and
78 deletion
+72
-78
sound/soc/codecs/pcm3008.c
sound/soc/codecs/pcm3008.c
+72
-78
未找到文件。
sound/soc/codecs/pcm3008.c
浏览文件 @
8a8b0e87
...
...
@@ -28,7 +28,54 @@
#include "pcm3008.h"
#define PCM3008_VERSION "0.2"
static
int
pcm3008_dac_ev
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
kcontrol
,
int
event
)
{
struct
snd_soc_codec
*
codec
=
w
->
codec
;
struct
pcm3008_setup_data
*
setup
=
codec
->
dev
->
platform_data
;
gpio_set_value_cansleep
(
setup
->
pdda_pin
,
SND_SOC_DAPM_EVENT_ON
(
event
));
return
0
;
}
static
int
pcm3008_adc_ev
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
kcontrol
,
int
event
)
{
struct
snd_soc_codec
*
codec
=
w
->
codec
;
struct
pcm3008_setup_data
*
setup
=
codec
->
dev
->
platform_data
;
gpio_set_value_cansleep
(
setup
->
pdad_pin
,
SND_SOC_DAPM_EVENT_ON
(
event
));
return
0
;
}
static
const
struct
snd_soc_dapm_widget
pcm3008_dapm_widgets
[]
=
{
SND_SOC_DAPM_INPUT
(
"VINL"
),
SND_SOC_DAPM_INPUT
(
"VINR"
),
SND_SOC_DAPM_DAC_E
(
"DAC"
,
NULL
,
SND_SOC_NOPM
,
0
,
0
,
pcm3008_dac_ev
,
SND_SOC_DAPM_PRE_PMU
|
SND_SOC_DAPM_POST_PMD
),
SND_SOC_DAPM_ADC_E
(
"ADC"
,
NULL
,
SND_SOC_NOPM
,
0
,
0
,
pcm3008_adc_ev
,
SND_SOC_DAPM_PRE_PMU
|
SND_SOC_DAPM_POST_PMD
),
SND_SOC_DAPM_OUTPUT
(
"VOUTL"
),
SND_SOC_DAPM_OUTPUT
(
"VOUTR"
),
};
static
const
struct
snd_soc_dapm_route
pcm3008_dapm_routes
[]
=
{
{
"PCM3008 Capture"
,
NULL
,
"ADC"
},
{
"ADC"
,
NULL
,
"VINL"
},
{
"ADC"
,
NULL
,
"VINR"
},
{
"DAC"
,
NULL
,
"PCM3008 Playback"
},
{
"VOUTL"
,
NULL
,
"DAC"
},
{
"VOUTR"
,
NULL
,
"DAC"
},
};
#define PCM3008_RATES (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
SNDRV_PCM_RATE_48000)
...
...
@@ -51,20 +98,20 @@ static struct snd_soc_dai_driver pcm3008_dai = {
},
};
static
void
pcm3008_gpio_free
(
struct
pcm3008_setup_data
*
setup
)
{
gpio_free
(
setup
->
dem0_pin
);
gpio_free
(
setup
->
dem1_pin
);
gpio_free
(
setup
->
pdad_pin
);
gpio_free
(
setup
->
pdda_pin
);
}
static
struct
snd_soc_codec_driver
soc_codec_dev_pcm3008
=
{
.
dapm_widgets
=
pcm3008_dapm_widgets
,
.
num_dapm_widgets
=
ARRAY_SIZE
(
pcm3008_dapm_widgets
),
.
dapm_routes
=
pcm3008_dapm_routes
,
.
num_dapm_routes
=
ARRAY_SIZE
(
pcm3008_dapm_routes
),
};
static
int
pcm3008_
soc_probe
(
struct
snd_soc_codec
*
codec
)
static
int
pcm3008_
codec_probe
(
struct
platform_device
*
pdev
)
{
struct
pcm3008_setup_data
*
setup
=
codec
->
dev
->
platform_data
;
int
ret
=
0
;
struct
pcm3008_setup_data
*
setup
=
pdev
->
dev
.
platform_data
;
int
ret
;
printk
(
KERN_INFO
"PCM3008 SoC Audio Codec %s
\n
"
,
PCM3008_VERSION
);
if
(
!
setup
)
return
-
EINVAL
;
/* DEM1 DEM0 DE-EMPHASIS_MODE
* Low Low De-emphasis 44.1 kHz ON
...
...
@@ -74,83 +121,29 @@ static int pcm3008_soc_probe(struct snd_soc_codec *codec)
*/
/* Configure DEM0 GPIO (turning OFF DAC De-emphasis). */
ret
=
gpio_request
(
setup
->
dem0_pin
,
"codec_dem0"
);
if
(
ret
==
0
)
ret
=
gpio_direction_output
(
setup
->
dem0_pin
,
1
);
ret
=
devm_gpio_request_one
(
&
pdev
->
dev
,
setup
->
dem0_pin
,
GPIOF_OUT_INIT_HIGH
,
"codec_dem0"
);
if
(
ret
!=
0
)
goto
gpio_err
;
return
ret
;
/* Configure DEM1 GPIO (turning OFF DAC De-emphasis). */
ret
=
gpio_request
(
setup
->
dem1_pin
,
"codec_dem1"
);
if
(
ret
==
0
)
ret
=
gpio_direction_output
(
setup
->
dem1_pin
,
0
);
ret
=
devm_gpio_request_one
(
&
pdev
->
dev
,
setup
->
dem1_pin
,
GPIOF_OUT_INIT_LOW
,
"codec_dem1"
);
if
(
ret
!=
0
)
goto
gpio_err
;
return
ret
;
/* Configure PDAD GPIO. */
ret
=
gpio_request
(
setup
->
pdad_pin
,
"codec_pdad"
);
if
(
ret
==
0
)
ret
=
gpio_direction_output
(
setup
->
pdad_pin
,
1
);
ret
=
devm_gpio_request_one
(
&
pdev
->
dev
,
setup
->
pdad_pin
,
GPIOF_OUT_INIT_LOW
,
"codec_pdad"
);
if
(
ret
!=
0
)
goto
gpio_err
;
return
ret
;
/* Configure PDDA GPIO. */
ret
=
gpio_request
(
setup
->
pdda_pin
,
"codec_pdda"
);
if
(
ret
==
0
)
ret
=
gpio_direction_output
(
setup
->
pdda_pin
,
1
);
ret
=
devm_gpio_request_one
(
&
pdev
->
dev
,
setup
->
pdda_pin
,
GPIOF_OUT_INIT_LOW
,
"codec_pdda"
);
if
(
ret
!=
0
)
goto
gpio_err
;
return
ret
;
gpio_err:
pcm3008_gpio_free
(
setup
);
return
ret
;
return
ret
;
}
static
int
pcm3008_soc_remove
(
struct
snd_soc_codec
*
codec
)
{
struct
pcm3008_setup_data
*
setup
=
codec
->
dev
->
platform_data
;
pcm3008_gpio_free
(
setup
);
return
0
;
}
#ifdef CONFIG_PM
static
int
pcm3008_soc_suspend
(
struct
snd_soc_codec
*
codec
)
{
struct
pcm3008_setup_data
*
setup
=
codec
->
dev
->
platform_data
;
gpio_set_value
(
setup
->
pdad_pin
,
0
);
gpio_set_value
(
setup
->
pdda_pin
,
0
);
return
0
;
}
static
int
pcm3008_soc_resume
(
struct
snd_soc_codec
*
codec
)
{
struct
pcm3008_setup_data
*
setup
=
codec
->
dev
->
platform_data
;
gpio_set_value
(
setup
->
pdad_pin
,
1
);
gpio_set_value
(
setup
->
pdda_pin
,
1
);
return
0
;
}
#else
#define pcm3008_soc_suspend NULL
#define pcm3008_soc_resume NULL
#endif
static
struct
snd_soc_codec_driver
soc_codec_dev_pcm3008
=
{
.
probe
=
pcm3008_soc_probe
,
.
remove
=
pcm3008_soc_remove
,
.
suspend
=
pcm3008_soc_suspend
,
.
resume
=
pcm3008_soc_resume
,
};
static
int
pcm3008_codec_probe
(
struct
platform_device
*
pdev
)
{
return
snd_soc_register_codec
(
&
pdev
->
dev
,
&
soc_codec_dev_pcm3008
,
&
pcm3008_dai
,
1
);
}
...
...
@@ -158,6 +151,7 @@ static int pcm3008_codec_probe(struct platform_device *pdev)
static
int
pcm3008_codec_remove
(
struct
platform_device
*
pdev
)
{
snd_soc_unregister_codec
(
&
pdev
->
dev
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录