Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
0f97b69a
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看板
提交
0f97b69a
编写于
8月 30, 2013
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/topic/fsl' into tmp
上级
812e6bbf
2f82cdba
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
197 addition
and
15 deletion
+197
-15
Documentation/devicetree/bindings/sound/imx-audio-spdif.txt
Documentation/devicetree/bindings/sound/imx-audio-spdif.txt
+34
-0
sound/soc/fsl/Kconfig
sound/soc/fsl/Kconfig
+10
-0
sound/soc/fsl/Makefile
sound/soc/fsl/Makefile
+2
-0
sound/soc/fsl/fsl_spdif.c
sound/soc/fsl/fsl_spdif.c
+3
-14
sound/soc/fsl/fsl_ssi.c
sound/soc/fsl/fsl_ssi.c
+0
-1
sound/soc/fsl/imx-spdif.c
sound/soc/fsl/imx-spdif.c
+148
-0
未找到文件。
Documentation/devicetree/bindings/sound/imx-audio-spdif.txt
0 → 100644
浏览文件 @
0f97b69a
Freescale i.MX audio complex with S/PDIF transceiver
Required properties:
- compatible : "fsl,imx-audio-spdif"
- model : The user-visible name of this sound complex
- spdif-controller : The phandle of the i.MX S/PDIF controller
Optional properties:
- spdif-out : This is a boolean property. If present, the transmitting
function of S/PDIF will be enabled, indicating there's a physical
S/PDIF out connector/jack on the board or it's connecting to some
other IP block, such as an HDMI encoder/display-controller.
- spdif-in : This is a boolean property. If present, the receiving
function of S/PDIF will be enabled, indicating there's a physical
S/PDIF in connector/jack on the board.
* Note: At least one of these two properties should be set in the DT binding.
Example:
sound-spdif {
compatible = "fsl,imx-audio-spdif";
model = "imx-spdif";
spdif-controller = <&spdif>;
spdif-out;
spdif-in;
};
sound/soc/fsl/Kconfig
浏览文件 @
0f97b69a
...
...
@@ -193,6 +193,16 @@ config SND_SOC_IMX_SGTL5000
Say Y if you want to add support for SoC audio on an i.MX board with
a sgtl5000 codec.
config SND_SOC_IMX_SPDIF
tristate "SoC Audio support for i.MX boards with S/PDIF"
select SND_SOC_IMX_PCM_DMA
select SND_SOC_FSL_SPDIF
select SND_SOC_SPDIF
help
SoC Audio support for i.MX boards with S/PDIF
Say Y if you want to add support for SoC audio on an i.MX board with
a S/DPDIF.
config SND_SOC_IMX_MC13783
tristate "SoC Audio support for I.MX boards with mc13783"
depends on MFD_MC13783 && ARM
...
...
sound/soc/fsl/Makefile
浏览文件 @
0f97b69a
...
...
@@ -45,6 +45,7 @@ snd-soc-mx27vis-aic32x4-objs := mx27vis-aic32x4.o
snd-soc-wm1133-ev1-objs
:=
wm1133-ev1.o
snd-soc-imx-sgtl5000-objs
:=
imx-sgtl5000.o
snd-soc-imx-wm8962-objs
:=
imx-wm8962.o
snd-soc-imx-spdif-objs
:=
imx-spdif.o
snd-soc-imx-mc13783-objs
:=
imx-mc13783.o
obj-$(CONFIG_SND_SOC_EUKREA_TLV320)
+=
snd-soc-eukrea-tlv320.o
...
...
@@ -53,4 +54,5 @@ obj-$(CONFIG_SND_SOC_MX27VIS_AIC32X4) += snd-soc-mx27vis-aic32x4.o
obj-$(CONFIG_SND_MXC_SOC_WM1133_EV1)
+=
snd-soc-wm1133-ev1.o
obj-$(CONFIG_SND_SOC_IMX_SGTL5000)
+=
snd-soc-imx-sgtl5000.o
obj-$(CONFIG_SND_SOC_IMX_WM8962)
+=
snd-soc-imx-wm8962.o
obj-$(CONFIG_SND_SOC_IMX_SPDIF)
+=
snd-soc-imx-spdif.o
obj-$(CONFIG_SND_SOC_IMX_MC13783)
+=
snd-soc-imx-mc13783.o
sound/soc/fsl/fsl_spdif.c
浏览文件 @
0f97b69a
...
...
@@ -555,7 +555,6 @@ struct snd_soc_dai_ops fsl_spdif_dai_ops = {
/*
* ============================================
* FSL SPDIF IEC958 controller(mixer) functions
*
* Channel status get/put control
...
...
@@ -563,7 +562,6 @@ struct snd_soc_dai_ops fsl_spdif_dai_ops = {
* Valid bit value get control
* DPLL lock status get control
* User bit sync mode selection control
* ============================================
*/
static
int
fsl_spdif_info
(
struct
snd_kcontrol
*
kcontrol
,
...
...
@@ -942,11 +940,7 @@ static const struct snd_soc_component_driver fsl_spdif_component = {
.
name
=
"fsl-spdif"
,
};
/*
* ================
* FSL SPDIF REGMAP
* ================
*/
/* FSL SPDIF REGMAP */
static
bool
fsl_spdif_readable_reg
(
struct
device
*
dev
,
unsigned
int
reg
)
{
...
...
@@ -1119,10 +1113,8 @@ static int fsl_spdif_probe(struct platform_device *pdev)
}
regs
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
if
(
IS_ERR
(
regs
))
{
dev_err
(
&
pdev
->
dev
,
"could not map device resources
\n
"
);
if
(
IS_ERR
(
regs
))
return
PTR_ERR
(
regs
);
}
spdif_priv
->
regmap
=
devm_regmap_init_mmio_clk
(
&
pdev
->
dev
,
"core"
,
regs
,
&
fsl_spdif_regmap_config
);
...
...
@@ -1184,7 +1176,7 @@ static int fsl_spdif_probe(struct platform_device *pdev)
&
spdif_priv
->
cpu_dai_drv
,
1
);
if
(
ret
)
{
dev_err
(
&
pdev
->
dev
,
"failed to register DAI: %d
\n
"
,
ret
);
goto
error_dev
;
return
ret
;
}
ret
=
imx_pcm_dma_init
(
pdev
);
...
...
@@ -1197,8 +1189,6 @@ static int fsl_spdif_probe(struct platform_device *pdev)
error_component:
snd_soc_unregister_component
(
&
pdev
->
dev
);
error_dev:
dev_set_drvdata
(
&
pdev
->
dev
,
NULL
);
return
ret
;
}
...
...
@@ -1207,7 +1197,6 @@ static int fsl_spdif_remove(struct platform_device *pdev)
{
imx_pcm_dma_exit
(
pdev
);
snd_soc_unregister_component
(
&
pdev
->
dev
);
dev_set_drvdata
(
&
pdev
->
dev
,
NULL
);
return
0
;
}
...
...
sound/soc/fsl/fsl_ssi.c
浏览文件 @
0f97b69a
...
...
@@ -1114,7 +1114,6 @@ static int fsl_ssi_probe(struct platform_device *pdev)
snd_soc_unregister_component
(
&
pdev
->
dev
);
error_dev:
dev_set_drvdata
(
&
pdev
->
dev
,
NULL
);
device_remove_file
(
&
pdev
->
dev
,
dev_attr
);
error_clk:
...
...
sound/soc/fsl/imx-spdif.c
0 → 100644
浏览文件 @
0f97b69a
/*
* Copyright (C) 2013 Freescale Semiconductor, Inc.
*
* The code contained herein is licensed under the GNU General Public
* License. You may obtain a copy of the GNU General Public License
* Version 2 or later at the following locations:
*
* http://www.opensource.org/licenses/gpl-license.html
* http://www.gnu.org/copyleft/gpl.html
*/
#include <linux/module.h>
#include <linux/of_platform.h>
#include <sound/soc.h>
struct
imx_spdif_data
{
struct
snd_soc_dai_link
dai
[
2
];
struct
snd_soc_card
card
;
struct
platform_device
*
txdev
;
struct
platform_device
*
rxdev
;
};
static
int
imx_spdif_audio_probe
(
struct
platform_device
*
pdev
)
{
struct
device_node
*
spdif_np
,
*
np
=
pdev
->
dev
.
of_node
;
struct
imx_spdif_data
*
data
;
int
ret
=
0
,
num_links
=
0
;
spdif_np
=
of_parse_phandle
(
np
,
"spdif-controller"
,
0
);
if
(
!
spdif_np
)
{
dev_err
(
&
pdev
->
dev
,
"failed to find spdif-controller
\n
"
);
ret
=
-
EINVAL
;
goto
end
;
}
data
=
devm_kzalloc
(
&
pdev
->
dev
,
sizeof
(
*
data
),
GFP_KERNEL
);
if
(
!
data
)
{
dev_err
(
&
pdev
->
dev
,
"failed to allocate memory
\n
"
);
ret
=
-
ENOMEM
;
goto
end
;
}
if
(
of_property_read_bool
(
np
,
"spdif-out"
))
{
data
->
dai
[
num_links
].
name
=
"S/PDIF TX"
;
data
->
dai
[
num_links
].
stream_name
=
"S/PDIF PCM Playback"
;
data
->
dai
[
num_links
].
codec_dai_name
=
"dit-hifi"
;
data
->
dai
[
num_links
].
codec_name
=
"spdif-dit"
;
data
->
dai
[
num_links
].
cpu_of_node
=
spdif_np
;
data
->
dai
[
num_links
].
platform_of_node
=
spdif_np
;
num_links
++
;
data
->
txdev
=
platform_device_register_simple
(
"spdif-dit"
,
-
1
,
NULL
,
0
);
if
(
IS_ERR
(
data
->
txdev
))
{
ret
=
PTR_ERR
(
data
->
txdev
);
dev_err
(
&
pdev
->
dev
,
"register dit failed: %d
\n
"
,
ret
);
goto
end
;
}
}
if
(
of_property_read_bool
(
np
,
"spdif-in"
))
{
data
->
dai
[
num_links
].
name
=
"S/PDIF RX"
;
data
->
dai
[
num_links
].
stream_name
=
"S/PDIF PCM Capture"
;
data
->
dai
[
num_links
].
codec_dai_name
=
"dir-hifi"
;
data
->
dai
[
num_links
].
codec_name
=
"spdif-dir"
;
data
->
dai
[
num_links
].
cpu_of_node
=
spdif_np
;
data
->
dai
[
num_links
].
platform_of_node
=
spdif_np
;
num_links
++
;
data
->
rxdev
=
platform_device_register_simple
(
"spdif-dir"
,
-
1
,
NULL
,
0
);
if
(
IS_ERR
(
data
->
rxdev
))
{
ret
=
PTR_ERR
(
data
->
rxdev
);
dev_err
(
&
pdev
->
dev
,
"register dir failed: %d
\n
"
,
ret
);
goto
error_dit
;
}
}
if
(
!
num_links
)
{
dev_err
(
&
pdev
->
dev
,
"no enabled S/PDIF DAI link
\n
"
);
goto
error_dir
;
}
data
->
card
.
dev
=
&
pdev
->
dev
;
data
->
card
.
num_links
=
num_links
;
data
->
card
.
dai_link
=
data
->
dai
;
ret
=
snd_soc_of_parse_card_name
(
&
data
->
card
,
"model"
);
if
(
ret
)
goto
error_dir
;
ret
=
snd_soc_register_card
(
&
data
->
card
);
if
(
ret
)
{
dev_err
(
&
pdev
->
dev
,
"snd_soc_register_card failed: %d
\n
"
,
ret
);
goto
error_dir
;
}
platform_set_drvdata
(
pdev
,
data
);
goto
end
;
error_dir:
if
(
data
->
rxdev
)
platform_device_unregister
(
data
->
rxdev
);
error_dit:
if
(
data
->
txdev
)
platform_device_unregister
(
data
->
txdev
);
end:
if
(
spdif_np
)
of_node_put
(
spdif_np
);
return
ret
;
}
static
int
imx_spdif_audio_remove
(
struct
platform_device
*
pdev
)
{
struct
imx_spdif_data
*
data
=
platform_get_drvdata
(
pdev
);
if
(
data
->
rxdev
)
platform_device_unregister
(
data
->
rxdev
);
if
(
data
->
txdev
)
platform_device_unregister
(
data
->
txdev
);
snd_soc_unregister_card
(
&
data
->
card
);
return
0
;
}
static
const
struct
of_device_id
imx_spdif_dt_ids
[]
=
{
{
.
compatible
=
"fsl,imx-audio-spdif"
,
},
{
/* sentinel */
}
};
MODULE_DEVICE_TABLE
(
of
,
imx_spdif_dt_ids
);
static
struct
platform_driver
imx_spdif_driver
=
{
.
driver
=
{
.
name
=
"imx-spdif"
,
.
owner
=
THIS_MODULE
,
.
of_match_table
=
imx_spdif_dt_ids
,
},
.
probe
=
imx_spdif_audio_probe
,
.
remove
=
imx_spdif_audio_remove
,
};
module_platform_driver
(
imx_spdif_driver
);
MODULE_AUTHOR
(
"Freescale Semiconductor, Inc."
);
MODULE_DESCRIPTION
(
"Freescale i.MX S/PDIF machine driver"
);
MODULE_LICENSE
(
"GPL v2"
);
MODULE_ALIAS
(
"platform:imx-spdif"
);
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录