Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
ad797a04
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ad797a04
编写于
8月 09, 2021
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-linus' into for-next
上级
9732c148
dc0dc8a7
变更
28
隐藏空白更改
内联
并排
Showing
28 changed file
with
232 addition
and
150 deletion
+232
-150
MAINTAINERS
MAINTAINERS
+2
-1
sound/core/pcm_native.c
sound/core/pcm_native.c
+4
-1
sound/core/seq/seq_ports.c
sound/core/seq/seq_ports.c
+27
-12
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+1
-0
sound/soc/Kconfig
sound/soc/Kconfig
+1
-0
sound/soc/amd/acp-da7219-max98357a.c
sound/soc/amd/acp-da7219-max98357a.c
+5
-0
sound/soc/amd/acp-pcm-dma.c
sound/soc/amd/acp-pcm-dma.c
+1
-1
sound/soc/amd/raven/acp3x-pcm-dma.c
sound/soc/amd/raven/acp3x-pcm-dma.c
+1
-1
sound/soc/amd/renoir/acp3x-pdm-dma.c
sound/soc/amd/renoir/acp3x-pdm-dma.c
+1
-1
sound/soc/amd/renoir/rn-pci-acp3x.c
sound/soc/amd/renoir/rn-pci-acp3x.c
+2
-0
sound/soc/codecs/Kconfig
sound/soc/codecs/Kconfig
+1
-0
sound/soc/codecs/Makefile
sound/soc/codecs/Makefile
+4
-1
sound/soc/codecs/cs42l42.c
sound/soc/codecs/cs42l42.c
+70
-34
sound/soc/codecs/cs42l42.h
sound/soc/codecs/cs42l42.h
+3
-0
sound/soc/codecs/nau8824.c
sound/soc/codecs/nau8824.c
+6
-36
sound/soc/codecs/rt5682.c
sound/soc/codecs/rt5682.c
+1
-0
sound/soc/codecs/tlv320aic31xx.c
sound/soc/codecs/tlv320aic31xx.c
+10
-0
sound/soc/codecs/tlv320aic32x4.c
sound/soc/codecs/tlv320aic32x4.c
+26
-7
sound/soc/codecs/wm_adsp.c
sound/soc/codecs/wm_adsp.c
+0
-1
sound/soc/intel/atom/sst-mfld-platform-pcm.c
sound/soc/intel/atom/sst-mfld-platform-pcm.c
+1
-2
sound/soc/intel/boards/sof_da7219_max98373.c
sound/soc/intel/boards/sof_da7219_max98373.c
+1
-1
sound/soc/kirkwood/kirkwood-dma.c
sound/soc/kirkwood/kirkwood-dma.c
+18
-8
sound/soc/soc-component.c
sound/soc/soc-component.c
+27
-36
sound/soc/sof/intel/Kconfig
sound/soc/sof/intel/Kconfig
+2
-2
sound/soc/sof/intel/hda-ipc.c
sound/soc/sof/intel/hda-ipc.c
+2
-2
sound/soc/sof/intel/hda.c
sound/soc/sof/intel/hda.c
+12
-0
sound/soc/uniphier/aio-dma.c
sound/soc/uniphier/aio-dma.c
+1
-1
sound/soc/xilinx/xlnx_formatter_pcm.c
sound/soc/xilinx/xlnx_formatter_pcm.c
+2
-2
未找到文件。
MAINTAINERS
浏览文件 @
ad797a04
...
...
@@ -19992,7 +19992,8 @@ F: Documentation/devicetree/bindings/extcon/wlf,arizona.yaml
F: Documentation/devicetree/bindings/mfd/wlf,arizona.yaml
F: Documentation/devicetree/bindings/mfd/wm831x.txt
F: Documentation/devicetree/bindings/regulator/wlf,arizona.yaml
F: Documentation/devicetree/bindings/sound/wlf,arizona.yaml
F: Documentation/devicetree/bindings/sound/wlf,*.yaml
F: Documentation/devicetree/bindings/sound/wm*
F: Documentation/hwmon/wm83??.rst
F: arch/arm/mach-s3c/mach-crag6410*
F: drivers/clk/clk-wm83*.c
...
...
sound/core/pcm_native.c
浏览文件 @
ad797a04
...
...
@@ -251,7 +251,10 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream)
switch
(
substream
->
dma_buffer
.
dev
.
type
)
{
case
SNDRV_DMA_TYPE_UNKNOWN
:
return
false
;
/* we can't know the device, so just assume that the driver does
* everything right
*/
return
true
;
case
SNDRV_DMA_TYPE_CONTINUOUS
:
case
SNDRV_DMA_TYPE_VMALLOC
:
return
true
;
...
...
sound/core/seq/seq_ports.c
浏览文件 @
ad797a04
...
...
@@ -514,10 +514,11 @@ static int check_and_subscribe_port(struct snd_seq_client *client,
return
err
;
}
static
void
delete_and_unsubscribe_port
(
struct
snd_seq_client
*
client
,
struct
snd_seq_client_port
*
port
,
struct
snd_seq_subscribers
*
subs
,
bool
is_src
,
bool
ack
)
/* called with grp->list_mutex held */
static
void
__delete_and_unsubscribe_port
(
struct
snd_seq_client
*
client
,
struct
snd_seq_client_port
*
port
,
struct
snd_seq_subscribers
*
subs
,
bool
is_src
,
bool
ack
)
{
struct
snd_seq_port_subs_info
*
grp
;
struct
list_head
*
list
;
...
...
@@ -525,7 +526,6 @@ static void delete_and_unsubscribe_port(struct snd_seq_client *client,
grp
=
is_src
?
&
port
->
c_src
:
&
port
->
c_dest
;
list
=
is_src
?
&
subs
->
src_list
:
&
subs
->
dest_list
;
down_write
(
&
grp
->
list_mutex
);
write_lock_irq
(
&
grp
->
list_lock
);
empty
=
list_empty
(
list
);
if
(
!
empty
)
...
...
@@ -535,6 +535,18 @@ static void delete_and_unsubscribe_port(struct snd_seq_client *client,
if
(
!
empty
)
unsubscribe_port
(
client
,
port
,
grp
,
&
subs
->
info
,
ack
);
}
static
void
delete_and_unsubscribe_port
(
struct
snd_seq_client
*
client
,
struct
snd_seq_client_port
*
port
,
struct
snd_seq_subscribers
*
subs
,
bool
is_src
,
bool
ack
)
{
struct
snd_seq_port_subs_info
*
grp
;
grp
=
is_src
?
&
port
->
c_src
:
&
port
->
c_dest
;
down_write
(
&
grp
->
list_mutex
);
__delete_and_unsubscribe_port
(
client
,
port
,
subs
,
is_src
,
ack
);
up_write
(
&
grp
->
list_mutex
);
}
...
...
@@ -590,27 +602,30 @@ int snd_seq_port_disconnect(struct snd_seq_client *connector,
struct
snd_seq_client_port
*
dest_port
,
struct
snd_seq_port_subscribe
*
info
)
{
struct
snd_seq_port_subs_info
*
src
=
&
src_port
->
c_src
;
struct
snd_seq_port_subs_info
*
dest
=
&
dest_port
->
c_dest
;
struct
snd_seq_subscribers
*
subs
;
int
err
=
-
ENOENT
;
down_write
(
&
src
->
list_mutex
);
/* always start from deleting the dest port for avoiding concurrent
* deletions
*/
down_write
(
&
dest
->
list_mutex
);
/* look for the connection */
list_for_each_entry
(
subs
,
&
src
->
list_head
,
src
_list
)
{
list_for_each_entry
(
subs
,
&
dest
->
list_head
,
dest
_list
)
{
if
(
match_subs_info
(
info
,
&
subs
->
info
))
{
atomic_dec
(
&
subs
->
ref_count
);
/* mark as not ready */
__delete_and_unsubscribe_port
(
dest_client
,
dest_port
,
subs
,
false
,
connector
->
number
!=
dest_client
->
number
);
err
=
0
;
break
;
}
}
up_write
(
&
src
->
list_mutex
);
up_write
(
&
dest
->
list_mutex
);
if
(
err
<
0
)
return
err
;
delete_and_unsubscribe_port
(
src_client
,
src_port
,
subs
,
true
,
connector
->
number
!=
src_client
->
number
);
delete_and_unsubscribe_port
(
dest_client
,
dest_port
,
subs
,
false
,
connector
->
number
!=
dest_client
->
number
);
kfree
(
subs
);
return
0
;
}
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
ad797a04
...
...
@@ -8465,6 +8465,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK
(
0x1043
,
0x16e3
,
"ASUS UX50"
,
ALC269_FIXUP_STEREO_DMIC
),
SND_PCI_QUIRK
(
0x1043
,
0x1740
,
"ASUS UX430UA"
,
ALC295_FIXUP_ASUS_DACS
),
SND_PCI_QUIRK
(
0x1043
,
0x17d1
,
"ASUS UX431FL"
,
ALC294_FIXUP_ASUS_DUAL_SPK
),
SND_PCI_QUIRK
(
0x1043
,
0x1662
,
"ASUS GV301QH"
,
ALC294_FIXUP_ASUS_DUAL_SPK
),
SND_PCI_QUIRK
(
0x1043
,
0x1881
,
"ASUS Zephyrus S/M"
,
ALC294_FIXUP_ASUS_GX502_PINS
),
SND_PCI_QUIRK
(
0x1043
,
0x18b1
,
"Asus MJ401TA"
,
ALC256_FIXUP_ASUS_HEADSET_MIC
),
SND_PCI_QUIRK
(
0x1043
,
0x18f1
,
"Asus FX505DT"
,
ALC256_FIXUP_ASUS_HEADSET_MIC
),
...
...
sound/soc/Kconfig
浏览文件 @
ad797a04
...
...
@@ -36,6 +36,7 @@ config SND_SOC_COMPRESS
config SND_SOC_TOPOLOGY
bool
select SND_DYNAMIC_MINORS
config SND_SOC_TOPOLOGY_KUNIT_TEST
tristate "KUnit tests for SoC topology"
...
...
sound/soc/amd/acp-da7219-max98357a.c
浏览文件 @
ad797a04
...
...
@@ -525,6 +525,7 @@ static struct snd_soc_dai_link cz_dai_7219_98357[] = {
|
SND_SOC_DAIFMT_CBM_CFM
,
.
init
=
cz_da7219_init
,
.
dpcm_playback
=
1
,
.
stop_dma_first
=
1
,
.
ops
=
&
cz_da7219_play_ops
,
SND_SOC_DAILINK_REG
(
designware1
,
dlgs
,
platform
),
},
...
...
@@ -534,6 +535,7 @@ static struct snd_soc_dai_link cz_dai_7219_98357[] = {
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
.
dpcm_capture
=
1
,
.
stop_dma_first
=
1
,
.
ops
=
&
cz_da7219_cap_ops
,
SND_SOC_DAILINK_REG
(
designware2
,
dlgs
,
platform
),
},
...
...
@@ -543,6 +545,7 @@ static struct snd_soc_dai_link cz_dai_7219_98357[] = {
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
.
dpcm_playback
=
1
,
.
stop_dma_first
=
1
,
.
ops
=
&
cz_max_play_ops
,
SND_SOC_DAILINK_REG
(
designware3
,
mx
,
platform
),
},
...
...
@@ -553,6 +556,7 @@ static struct snd_soc_dai_link cz_dai_7219_98357[] = {
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
.
dpcm_capture
=
1
,
.
stop_dma_first
=
1
,
.
ops
=
&
cz_dmic0_cap_ops
,
SND_SOC_DAILINK_REG
(
designware3
,
adau
,
platform
),
},
...
...
@@ -563,6 +567,7 @@ static struct snd_soc_dai_link cz_dai_7219_98357[] = {
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
.
dpcm_capture
=
1
,
.
stop_dma_first
=
1
,
.
ops
=
&
cz_dmic1_cap_ops
,
SND_SOC_DAILINK_REG
(
designware2
,
adau
,
platform
),
},
...
...
sound/soc/amd/acp-pcm-dma.c
浏览文件 @
ad797a04
...
...
@@ -969,7 +969,7 @@ static int acp_dma_hw_params(struct snd_soc_component *component,
acp_set_sram_bank_state
(
rtd
->
acp_mmio
,
0
,
true
);
/* Save for runtime private data */
rtd
->
dma_addr
=
substream
->
dma_buffer
.
addr
;
rtd
->
dma_addr
=
runtime
->
dma_
addr
;
rtd
->
order
=
get_order
(
size
);
/* Fill the page table entries in ACP SRAM */
...
...
sound/soc/amd/raven/acp3x-pcm-dma.c
浏览文件 @
ad797a04
...
...
@@ -286,7 +286,7 @@ static int acp3x_dma_hw_params(struct snd_soc_component *component,
pr_err
(
"pinfo failed
\n
"
);
}
size
=
params_buffer_bytes
(
params
);
rtd
->
dma_addr
=
substream
->
dma_buffer
.
addr
;
rtd
->
dma_addr
=
substream
->
runtime
->
dma_
addr
;
rtd
->
num_pages
=
(
PAGE_ALIGN
(
size
)
>>
PAGE_SHIFT
);
config_acp3x_dma
(
rtd
,
substream
->
stream
);
return
0
;
...
...
sound/soc/amd/renoir/acp3x-pdm-dma.c
浏览文件 @
ad797a04
...
...
@@ -242,7 +242,7 @@ static int acp_pdm_dma_hw_params(struct snd_soc_component *component,
return
-
EINVAL
;
size
=
params_buffer_bytes
(
params
);
period_bytes
=
params_period_bytes
(
params
);
rtd
->
dma_addr
=
substream
->
dma_buffer
.
addr
;
rtd
->
dma_addr
=
substream
->
runtime
->
dma_
addr
;
rtd
->
num_pages
=
(
PAGE_ALIGN
(
size
)
>>
PAGE_SHIFT
);
config_acp_dma
(
rtd
,
substream
->
stream
);
init_pdm_ring_buffer
(
MEM_WINDOW_START
,
size
,
period_bytes
,
...
...
sound/soc/amd/renoir/rn-pci-acp3x.c
浏览文件 @
ad797a04
...
...
@@ -382,6 +382,8 @@ static const struct dev_pm_ops rn_acp_pm = {
.
runtime_resume
=
snd_rn_acp_resume
,
.
suspend
=
snd_rn_acp_suspend
,
.
resume
=
snd_rn_acp_resume
,
.
restore
=
snd_rn_acp_resume
,
.
poweroff
=
snd_rn_acp_suspend
,
};
static
void
snd_rn_acp_remove
(
struct
pci_dev
*
pci
)
...
...
sound/soc/codecs/Kconfig
浏览文件 @
ad797a04
...
...
@@ -1559,6 +1559,7 @@ config SND_SOC_WCD934X
config SND_SOC_WCD938X
depends on SND_SOC_WCD938X_SDW
tristate
depends on SOUNDWIRE || !SOUNDWIRE
config SND_SOC_WCD938X_SDW
tristate "WCD9380/WCD9385 Codec - SDW"
...
...
sound/soc/codecs/Makefile
浏览文件 @
ad797a04
...
...
@@ -583,7 +583,10 @@ obj-$(CONFIG_SND_SOC_WCD_MBHC) += snd-soc-wcd-mbhc.o
obj-$(CONFIG_SND_SOC_WCD9335)
+=
snd-soc-wcd9335.o
obj-$(CONFIG_SND_SOC_WCD934X)
+=
snd-soc-wcd934x.o
obj-$(CONFIG_SND_SOC_WCD938X)
+=
snd-soc-wcd938x.o
obj-$(CONFIG_SND_SOC_WCD938X_SDW)
+=
snd-soc-wcd938x-sdw.o
ifdef
CONFIG_SND_SOC_WCD938X_SDW
# avoid link failure by forcing sdw code built-in when needed
obj-$(CONFIG_SND_SOC_WCD938X)
+=
snd-soc-wcd938x-sdw.o
endif
obj-$(CONFIG_SND_SOC_WL1273)
+=
snd-soc-wl1273.o
obj-$(CONFIG_SND_SOC_WM0010)
+=
snd-soc-wm0010.o
obj-$(CONFIG_SND_SOC_WM1250_EV1)
+=
snd-soc-wm1250-ev1.o
...
...
sound/soc/codecs/cs42l42.c
浏览文件 @
ad797a04
...
...
@@ -405,7 +405,7 @@ static const struct regmap_config cs42l42_regmap = {
.
use_single_write
=
true
,
};
static
DECLARE_TLV_DB_SCALE
(
adc_tlv
,
-
9
600
,
100
,
fals
e
);
static
DECLARE_TLV_DB_SCALE
(
adc_tlv
,
-
9
700
,
100
,
tru
e
);
static
DECLARE_TLV_DB_SCALE
(
mixer_tlv
,
-
6300
,
100
,
true
);
static
const
char
*
const
cs42l42_hpf_freq_text
[]
=
{
...
...
@@ -425,34 +425,23 @@ static SOC_ENUM_SINGLE_DECL(cs42l42_wnf3_freq_enum, CS42L42_ADC_WNF_HPF_CTL,
CS42L42_ADC_WNF_CF_SHIFT
,
cs42l42_wnf3_freq_text
);
static
const
char
*
const
cs42l42_wnf05_freq_text
[]
=
{
"280Hz"
,
"315Hz"
,
"350Hz"
,
"385Hz"
,
"420Hz"
,
"455Hz"
,
"490Hz"
,
"525Hz"
};
static
SOC_ENUM_SINGLE_DECL
(
cs42l42_wnf05_freq_enum
,
CS42L42_ADC_WNF_HPF_CTL
,
CS42L42_ADC_WNF_CF_SHIFT
,
cs42l42_wnf05_freq_text
);
static
const
struct
snd_kcontrol_new
cs42l42_snd_controls
[]
=
{
/* ADC Volume and Filter Controls */
SOC_SINGLE
(
"ADC Notch Switch"
,
CS42L42_ADC_CTL
,
CS42L42_ADC_NOTCH_DIS_SHIFT
,
true
,
fals
e
),
CS42L42_ADC_NOTCH_DIS_SHIFT
,
true
,
tru
e
),
SOC_SINGLE
(
"ADC Weak Force Switch"
,
CS42L42_ADC_CTL
,
CS42L42_ADC_FORCE_WEAK_VCM_SHIFT
,
true
,
false
),
SOC_SINGLE
(
"ADC Invert Switch"
,
CS42L42_ADC_CTL
,
CS42L42_ADC_INV_SHIFT
,
true
,
false
),
SOC_SINGLE
(
"ADC Boost Switch"
,
CS42L42_ADC_CTL
,
CS42L42_ADC_DIG_BOOST_SHIFT
,
true
,
false
),
SOC_SINGLE_SX_TLV
(
"ADC Volume"
,
CS42L42_ADC_VOLUME
,
CS42L42_ADC_VOL_SHIFT
,
0xA0
,
0x6C
,
adc_tlv
),
SOC_SINGLE_S8_TLV
(
"ADC Volume"
,
CS42L42_ADC_VOLUME
,
-
97
,
12
,
adc_tlv
),
SOC_SINGLE
(
"ADC WNF Switch"
,
CS42L42_ADC_WNF_HPF_CTL
,
CS42L42_ADC_WNF_EN_SHIFT
,
true
,
false
),
SOC_SINGLE
(
"ADC HPF Switch"
,
CS42L42_ADC_WNF_HPF_CTL
,
CS42L42_ADC_HPF_EN_SHIFT
,
true
,
false
),
SOC_ENUM
(
"HPF Corner Freq"
,
cs42l42_hpf_freq_enum
),
SOC_ENUM
(
"WNF 3dB Freq"
,
cs42l42_wnf3_freq_enum
),
SOC_ENUM
(
"WNF 05dB Freq"
,
cs42l42_wnf05_freq_enum
),
/* DAC Volume and Filter Controls */
SOC_SINGLE
(
"DACA Invert Switch"
,
CS42L42_DAC_CTL1
,
...
...
@@ -471,8 +460,8 @@ static const struct snd_soc_dapm_widget cs42l42_dapm_widgets[] = {
SND_SOC_DAPM_OUTPUT
(
"HP"
),
SND_SOC_DAPM_DAC
(
"DAC"
,
NULL
,
CS42L42_PWR_CTL1
,
CS42L42_HP_PDN_SHIFT
,
1
),
SND_SOC_DAPM_MIXER
(
"MIXER"
,
CS42L42_PWR_CTL1
,
CS42L42_MIXER_PDN_SHIFT
,
1
,
NULL
,
0
),
SND_SOC_DAPM_AIF_IN
(
"SDIN1"
,
NULL
,
0
,
CS42L42_ASP_RX_DAI0_EN
,
CS42L42_ASP_RX0_CH1_SHIFT
,
0
),
SND_SOC_DAPM_AIF_IN
(
"SDIN2"
,
NULL
,
1
,
CS42L42_ASP_RX_DAI0_EN
,
CS42L42_ASP_RX0_CH2_SHIFT
,
0
),
SND_SOC_DAPM_AIF_IN
(
"SDIN1"
,
NULL
,
0
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_AIF_IN
(
"SDIN2"
,
NULL
,
1
,
SND_SOC_NOPM
,
0
,
0
),
/* Playback Requirements */
SND_SOC_DAPM_SUPPLY
(
"ASP DAI0"
,
CS42L42_PWR_CTL1
,
CS42L42_ASP_DAI_PDN_SHIFT
,
1
,
NULL
,
0
),
...
...
@@ -630,6 +619,8 @@ static int cs42l42_pll_config(struct snd_soc_component *component)
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
pll_ratio_table
);
i
++
)
{
if
(
pll_ratio_table
[
i
].
sclk
==
clk
)
{
cs42l42
->
pll_config
=
i
;
/* Configure the internal sample rate */
snd_soc_component_update_bits
(
component
,
CS42L42_MCLK_CTL
,
CS42L42_INTERNAL_FS_MASK
,
...
...
@@ -638,14 +629,9 @@ static int cs42l42_pll_config(struct snd_soc_component *component)
(
pll_ratio_table
[
i
].
mclk_int
!=
24000000
))
<<
CS42L42_INTERNAL_FS_SHIFT
);
/* Set the MCLK src (PLL or SCLK) and the divide
* ratio
*/
snd_soc_component_update_bits
(
component
,
CS42L42_MCLK_SRC_SEL
,
CS42L42_MCLK_SRC_SEL_MASK
|
CS42L42_MCLKDIV_MASK
,
(
pll_ratio_table
[
i
].
mclk_src_sel
<<
CS42L42_MCLK_SRC_SEL_SHIFT
)
|
(
pll_ratio_table
[
i
].
mclk_div
<<
CS42L42_MCLKDIV_SHIFT
));
/* Set up the LRCLK */
...
...
@@ -681,15 +667,6 @@ static int cs42l42_pll_config(struct snd_soc_component *component)
CS42L42_FSYNC_PULSE_WIDTH_MASK
,
CS42L42_FRAC1_VAL
(
fsync
-
1
)
<<
CS42L42_FSYNC_PULSE_WIDTH_SHIFT
);
snd_soc_component_update_bits
(
component
,
CS42L42_ASP_FRM_CFG
,
CS42L42_ASP_5050_MASK
,
CS42L42_ASP_5050_MASK
);
/* Set the frame delay to 1.0 SCLK clocks */
snd_soc_component_update_bits
(
component
,
CS42L42_ASP_FRM_CFG
,
CS42L42_ASP_FSD_MASK
,
CS42L42_ASP_FSD_1_0
<<
CS42L42_ASP_FSD_SHIFT
);
/* Set the sample rates (96k or lower) */
snd_soc_component_update_bits
(
component
,
CS42L42_FS_RATE_EN
,
CS42L42_FS_EN_MASK
,
...
...
@@ -789,7 +766,18 @@ static int cs42l42_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
/* interface format */
switch
(
fmt
&
SND_SOC_DAIFMT_FORMAT_MASK
)
{
case
SND_SOC_DAIFMT_I2S
:
case
SND_SOC_DAIFMT_LEFT_J
:
/*
* 5050 mode, frame starts on falling edge of LRCLK,
* frame delayed by 1.0 SCLKs
*/
snd_soc_component_update_bits
(
component
,
CS42L42_ASP_FRM_CFG
,
CS42L42_ASP_STP_MASK
|
CS42L42_ASP_5050_MASK
|
CS42L42_ASP_FSD_MASK
,
CS42L42_ASP_5050_MASK
|
(
CS42L42_ASP_FSD_1_0
<<
CS42L42_ASP_FSD_SHIFT
));
break
;
default:
return
-
EINVAL
;
...
...
@@ -819,6 +807,25 @@ static int cs42l42_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
return
0
;
}
static
int
cs42l42_dai_startup
(
struct
snd_pcm_substream
*
substream
,
struct
snd_soc_dai
*
dai
)
{
struct
snd_soc_component
*
component
=
dai
->
component
;
struct
cs42l42_private
*
cs42l42
=
snd_soc_component_get_drvdata
(
component
);
/*
* Sample rates < 44.1 kHz would produce an out-of-range SCLK with
* a standard I2S frame. If the machine driver sets SCLK it must be
* legal.
*/
if
(
cs42l42
->
sclk
)
return
0
;
/* Machine driver has not set a SCLK, limit bottom end to 44.1 kHz */
return
snd_pcm_hw_constraint_minmax
(
substream
->
runtime
,
SNDRV_PCM_HW_PARAM_RATE
,
44100
,
192000
);
}
static
int
cs42l42_pcm_hw_params
(
struct
snd_pcm_substream
*
substream
,
struct
snd_pcm_hw_params
*
params
,
struct
snd_soc_dai
*
dai
)
...
...
@@ -832,6 +839,10 @@ static int cs42l42_pcm_hw_params(struct snd_pcm_substream *substream,
cs42l42
->
srate
=
params_rate
(
params
);
cs42l42
->
bclk
=
snd_soc_params_to_bclk
(
params
);
/* I2S frame always has 2 channels even for mono audio */
if
(
channels
==
1
)
cs42l42
->
bclk
*=
2
;
switch
(
substream
->
stream
)
{
case
SNDRV_PCM_STREAM_CAPTURE
:
if
(
channels
==
2
)
{
...
...
@@ -855,6 +866,17 @@ static int cs42l42_pcm_hw_params(struct snd_pcm_substream *substream,
snd_soc_component_update_bits
(
component
,
CS42L42_ASP_RX_DAI0_CH2_AP_RES
,
CS42L42_ASP_RX_CH_AP_MASK
|
CS42L42_ASP_RX_CH_RES_MASK
,
val
);
/* Channel B comes from the last active channel */
snd_soc_component_update_bits
(
component
,
CS42L42_SP_RX_CH_SEL
,
CS42L42_SP_RX_CHB_SEL_MASK
,
(
channels
-
1
)
<<
CS42L42_SP_RX_CHB_SEL_SHIFT
);
/* Both LRCLK slots must be enabled */
snd_soc_component_update_bits
(
component
,
CS42L42_ASP_RX_DAI0_EN
,
CS42L42_ASP_RX0_CH_EN_MASK
,
BIT
(
CS42L42_ASP_RX0_CH1_SHIFT
)
|
BIT
(
CS42L42_ASP_RX0_CH2_SHIFT
));
break
;
default:
break
;
...
...
@@ -900,13 +922,21 @@ static int cs42l42_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
*/
regmap_multi_reg_write
(
cs42l42
->
regmap
,
cs42l42_to_osc_seq
,
ARRAY_SIZE
(
cs42l42_to_osc_seq
));
/* Must disconnect PLL before stopping it */
snd_soc_component_update_bits
(
component
,
CS42L42_MCLK_SRC_SEL
,
CS42L42_MCLK_SRC_SEL_MASK
,
0
);
usleep_range
(
100
,
200
);
snd_soc_component_update_bits
(
component
,
CS42L42_PLL_CTL1
,
CS42L42_PLL_START_MASK
,
0
);
}
}
else
{
if
(
!
cs42l42
->
stream_use
)
{
/* SCLK must be running before codec unmute */
if
(
(
cs42l42
->
bclk
<
11289600
)
&&
(
cs42l42
->
sclk
<
11289600
)
)
{
if
(
pll_ratio_table
[
cs42l42
->
pll_config
].
mclk_src_sel
)
{
snd_soc_component_update_bits
(
component
,
CS42L42_PLL_CTL1
,
CS42L42_PLL_START_MASK
,
1
);
...
...
@@ -927,6 +957,12 @@ static int cs42l42_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
CS42L42_PLL_LOCK_TIMEOUT_US
);
if
(
ret
<
0
)
dev_warn
(
component
->
dev
,
"PLL failed to lock: %d
\n
"
,
ret
);
/* PLL must be running to drive glitchless switch logic */
snd_soc_component_update_bits
(
component
,
CS42L42_MCLK_SRC_SEL
,
CS42L42_MCLK_SRC_SEL_MASK
,
CS42L42_MCLK_SRC_SEL_MASK
);
}
/* Mark SCLK as present, turn off internal oscillator */
...
...
@@ -960,8 +996,8 @@ static int cs42l42_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
SNDRV_PCM_FMTBIT_S24_LE |\
SNDRV_PCM_FMTBIT_S32_LE )
static
const
struct
snd_soc_dai_ops
cs42l42_ops
=
{
.
startup
=
cs42l42_dai_startup
,
.
hw_params
=
cs42l42_pcm_hw_params
,
.
set_fmt
=
cs42l42_set_dai_fmt
,
.
set_sysclk
=
cs42l42_set_sysclk
,
...
...
sound/soc/codecs/cs42l42.h
浏览文件 @
ad797a04
...
...
@@ -653,6 +653,8 @@
/* Page 0x25 Audio Port Registers */
#define CS42L42_SP_RX_CH_SEL (CS42L42_PAGE_25 + 0x01)
#define CS42L42_SP_RX_CHB_SEL_SHIFT 2
#define CS42L42_SP_RX_CHB_SEL_MASK (3 << CS42L42_SP_RX_CHB_SEL_SHIFT)
#define CS42L42_SP_RX_ISOC_CTL (CS42L42_PAGE_25 + 0x02)
#define CS42L42_SP_RX_RSYNC_SHIFT 6
...
...
@@ -775,6 +777,7 @@ struct cs42l42_private {
struct
gpio_desc
*
reset_gpio
;
struct
completion
pdn_done
;
struct
snd_soc_jack
*
jack
;
int
pll_config
;
int
bclk
;
u32
sclk
;
u32
srate
;
...
...
sound/soc/codecs/nau8824.c
浏览文件 @
ad797a04
...
...
@@ -828,36 +828,6 @@ static void nau8824_int_status_clear_all(struct regmap *regmap)
}
}
static
void
nau8824_dapm_disable_pin
(
struct
nau8824
*
nau8824
,
const
char
*
pin
)
{
struct
snd_soc_dapm_context
*
dapm
=
nau8824
->
dapm
;
const
char
*
prefix
=
dapm
->
component
->
name_prefix
;
char
prefixed_pin
[
80
];
if
(
prefix
)
{
snprintf
(
prefixed_pin
,
sizeof
(
prefixed_pin
),
"%s %s"
,
prefix
,
pin
);
snd_soc_dapm_disable_pin
(
dapm
,
prefixed_pin
);
}
else
{
snd_soc_dapm_disable_pin
(
dapm
,
pin
);
}
}
static
void
nau8824_dapm_enable_pin
(
struct
nau8824
*
nau8824
,
const
char
*
pin
)
{
struct
snd_soc_dapm_context
*
dapm
=
nau8824
->
dapm
;
const
char
*
prefix
=
dapm
->
component
->
name_prefix
;
char
prefixed_pin
[
80
];
if
(
prefix
)
{
snprintf
(
prefixed_pin
,
sizeof
(
prefixed_pin
),
"%s %s"
,
prefix
,
pin
);
snd_soc_dapm_force_enable_pin
(
dapm
,
prefixed_pin
);
}
else
{
snd_soc_dapm_force_enable_pin
(
dapm
,
pin
);
}
}
static
void
nau8824_eject_jack
(
struct
nau8824
*
nau8824
)
{
struct
snd_soc_dapm_context
*
dapm
=
nau8824
->
dapm
;
...
...
@@ -866,8 +836,8 @@ static void nau8824_eject_jack(struct nau8824 *nau8824)
/* Clear all interruption status */
nau8824_int_status_clear_all
(
regmap
);
nau8824_dapm_disable_pin
(
nau8824
,
"SAR"
);
nau8824_dapm_disable_pin
(
nau8824
,
"MICBIAS"
);
snd_soc_dapm_disable_pin
(
dapm
,
"SAR"
);
snd_soc_dapm_disable_pin
(
dapm
,
"MICBIAS"
);
snd_soc_dapm_sync
(
dapm
);
/* Enable the insertion interruption, disable the ejection
...
...
@@ -897,8 +867,8 @@ static void nau8824_jdet_work(struct work_struct *work)
struct
regmap
*
regmap
=
nau8824
->
regmap
;
int
adc_value
,
event
=
0
,
event_mask
=
0
;
nau8824_dapm_enable_pin
(
nau8824
,
"MICBIAS"
);
nau8824_dapm_enable_pin
(
nau8824
,
"SAR"
);
snd_soc_dapm_enable_pin
(
dapm
,
"MICBIAS"
);
snd_soc_dapm_enable_pin
(
dapm
,
"SAR"
);
snd_soc_dapm_sync
(
dapm
);
msleep
(
100
);
...
...
@@ -909,8 +879,8 @@ static void nau8824_jdet_work(struct work_struct *work)
if
(
adc_value
<
HEADSET_SARADC_THD
)
{
event
|=
SND_JACK_HEADPHONE
;
nau8824_dapm_disable_pin
(
nau8824
,
"SAR"
);
nau8824_dapm_disable_pin
(
nau8824
,
"MICBIAS"
);
snd_soc_dapm_disable_pin
(
dapm
,
"SAR"
);
snd_soc_dapm_disable_pin
(
dapm
,
"MICBIAS"
);
snd_soc_dapm_sync
(
dapm
);
}
else
{
event
|=
SND_JACK_HEADSET
;
...
...
sound/soc/codecs/rt5682.c
浏览文件 @
ad797a04
...
...
@@ -44,6 +44,7 @@ static const struct reg_sequence patch_list[] = {
{
RT5682_I2C_CTRL
,
0x000f
},
{
RT5682_PLL2_INTERNAL
,
0x8266
},
{
RT5682_SAR_IL_CMD_3
,
0x8365
},
{
RT5682_SAR_IL_CMD_6
,
0x0180
},
};
void
rt5682_apply_patch_list
(
struct
rt5682_priv
*
rt5682
,
struct
device
*
dev
)
...
...
sound/soc/codecs/tlv320aic31xx.c
浏览文件 @
ad797a04
...
...
@@ -35,6 +35,9 @@
#include "tlv320aic31xx.h"
static
int
aic31xx_set_jack
(
struct
snd_soc_component
*
component
,
struct
snd_soc_jack
*
jack
,
void
*
data
);
static
const
struct
reg_default
aic31xx_reg_defaults
[]
=
{
{
AIC31XX_CLKMUX
,
0x00
},
{
AIC31XX_PLLPR
,
0x11
},
...
...
@@ -1256,6 +1259,13 @@ static int aic31xx_power_on(struct snd_soc_component *component)
return
ret
;
}
/*
* The jack detection configuration is in the same register
* that is used to report jack detect status so is volatile
* and not covered by the cache sync, restore it separately.
*/
aic31xx_set_jack
(
component
,
aic31xx
->
jack
,
NULL
);
return
0
;
}
...
...
sound/soc/codecs/tlv320aic32x4.c
浏览文件 @
ad797a04
...
...
@@ -682,11 +682,20 @@ static int aic32x4_set_dosr(struct snd_soc_component *component, u16 dosr)
static
int
aic32x4_set_processing_blocks
(
struct
snd_soc_component
*
component
,
u8
r_block
,
u8
p_block
)
{
if
(
r_block
>
18
||
p_block
>
25
)
return
-
EINVAL
;
struct
aic32x4_priv
*
aic32x4
=
snd_soc_component_get_drvdata
(
component
);
if
(
aic32x4
->
type
==
AIC32X4_TYPE_TAS2505
)
{
if
(
r_block
||
p_block
>
3
)
return
-
EINVAL
;
snd_soc_component_write
(
component
,
AIC32X4_ADCSPB
,
r_block
);
snd_soc_component_write
(
component
,
AIC32X4_DACSPB
,
p_block
);
snd_soc_component_write
(
component
,
AIC32X4_DACSPB
,
p_block
);
}
else
{
/* AIC32x4 */
if
(
r_block
>
18
||
p_block
>
25
)
return
-
EINVAL
;
snd_soc_component_write
(
component
,
AIC32X4_ADCSPB
,
r_block
);
snd_soc_component_write
(
component
,
AIC32X4_DACSPB
,
p_block
);
}
return
0
;
}
...
...
@@ -695,6 +704,7 @@ static int aic32x4_setup_clocks(struct snd_soc_component *component,
unsigned
int
sample_rate
,
unsigned
int
channels
,
unsigned
int
bit_depth
)
{
struct
aic32x4_priv
*
aic32x4
=
snd_soc_component_get_drvdata
(
component
);
u8
aosr
;
u16
dosr
;
u8
adc_resource_class
,
dac_resource_class
;
...
...
@@ -721,19 +731,28 @@ static int aic32x4_setup_clocks(struct snd_soc_component *component,
adc_resource_class
=
6
;
dac_resource_class
=
8
;
dosr_increment
=
8
;
aic32x4_set_processing_blocks
(
component
,
1
,
1
);
if
(
aic32x4
->
type
==
AIC32X4_TYPE_TAS2505
)
aic32x4_set_processing_blocks
(
component
,
0
,
1
);
else
aic32x4_set_processing_blocks
(
component
,
1
,
1
);
}
else
if
(
sample_rate
<=
96000
)
{
aosr
=
64
;
adc_resource_class
=
6
;
dac_resource_class
=
8
;
dosr_increment
=
4
;
aic32x4_set_processing_blocks
(
component
,
1
,
9
);
if
(
aic32x4
->
type
==
AIC32X4_TYPE_TAS2505
)
aic32x4_set_processing_blocks
(
component
,
0
,
1
);
else
aic32x4_set_processing_blocks
(
component
,
1
,
9
);
}
else
if
(
sample_rate
==
192000
)
{
aosr
=
32
;
adc_resource_class
=
3
;
dac_resource_class
=
4
;
dosr_increment
=
2
;
aic32x4_set_processing_blocks
(
component
,
13
,
19
);
if
(
aic32x4
->
type
==
AIC32X4_TYPE_TAS2505
)
aic32x4_set_processing_blocks
(
component
,
0
,
1
);
else
aic32x4_set_processing_blocks
(
component
,
13
,
19
);
}
else
{
dev_err
(
component
->
dev
,
"Sampling rate not supported
\n
"
);
return
-
EINVAL
;
...
...
sound/soc/codecs/wm_adsp.c
浏览文件 @
ad797a04
...
...
@@ -747,7 +747,6 @@ static void wm_adsp2_init_debugfs(struct wm_adsp *dsp,
static
void
wm_adsp2_cleanup_debugfs
(
struct
wm_adsp
*
dsp
)
{
wm_adsp_debugfs_clear
(
dsp
);
debugfs_remove_recursive
(
dsp
->
debugfs_root
);
}
#else
static
inline
void
wm_adsp2_init_debugfs
(
struct
wm_adsp
*
dsp
,
...
...
sound/soc/intel/atom/sst-mfld-platform-pcm.c
浏览文件 @
ad797a04
...
...
@@ -127,7 +127,7 @@ static void sst_fill_alloc_params(struct snd_pcm_substream *substream,
snd_pcm_uframes_t
period_size
;
ssize_t
periodbytes
;
ssize_t
buffer_bytes
=
snd_pcm_lib_buffer_bytes
(
substream
);
u32
buffer_addr
=
virt_to_phys
(
substream
->
dma_buffer
.
area
)
;
u32
buffer_addr
=
substream
->
runtime
->
dma_addr
;
channels
=
substream
->
runtime
->
channels
;
period_size
=
substream
->
runtime
->
period_size
;
...
...
@@ -233,7 +233,6 @@ static int sst_platform_alloc_stream(struct snd_pcm_substream *substream,
/* set codec params and inform SST driver the same */
sst_fill_pcm_params
(
substream
,
&
param
);
sst_fill_alloc_params
(
substream
,
&
alloc_params
);
substream
->
runtime
->
dma_area
=
substream
->
dma_buffer
.
area
;
str_params
.
sparams
=
param
;
str_params
.
aparams
=
alloc_params
;
str_params
.
codec
=
SST_CODEC_TYPE_PCM
;
...
...
sound/soc/intel/boards/sof_da7219_max98373.c
浏览文件 @
ad797a04
...
...
@@ -404,7 +404,7 @@ static int audio_probe(struct platform_device *pdev)
return
-
ENOMEM
;
/* By default dais[0] is configured for max98373 */
if
(
!
strcmp
(
pdev
->
name
,
"sof_da7219_m
a
x98360a"
))
{
if
(
!
strcmp
(
pdev
->
name
,
"sof_da7219_mx98360a"
))
{
dais
[
0
]
=
(
struct
snd_soc_dai_link
)
{
.
name
=
"SSP1-Codec"
,
.
id
=
0
,
...
...
sound/soc/kirkwood/kirkwood-dma.c
浏览文件 @
ad797a04
...
...
@@ -104,8 +104,6 @@ static int kirkwood_dma_open(struct snd_soc_component *component,
int
err
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
kirkwood_dma_data
*
priv
=
kirkwood_priv
(
substream
);
const
struct
mbus_dram_target_info
*
dram
;
unsigned
long
addr
;
snd_soc_set_runtime_hwparams
(
substream
,
&
kirkwood_dma_snd_hw
);
...
...
@@ -142,20 +140,14 @@ static int kirkwood_dma_open(struct snd_soc_component *component,
writel
((
unsigned
int
)
-
1
,
priv
->
io
+
KIRKWOOD_ERR_MASK
);
}
dram
=
mv_mbus_dram_info
();
addr
=
substream
->
dma_buffer
.
addr
;
if
(
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
)
{
if
(
priv
->
substream_play
)
return
-
EBUSY
;
priv
->
substream_play
=
substream
;
kirkwood_dma_conf_mbus_windows
(
priv
->
io
,
KIRKWOOD_PLAYBACK_WIN
,
addr
,
dram
);
}
else
{
if
(
priv
->
substream_rec
)
return
-
EBUSY
;
priv
->
substream_rec
=
substream
;
kirkwood_dma_conf_mbus_windows
(
priv
->
io
,
KIRKWOOD_RECORD_WIN
,
addr
,
dram
);
}
return
0
;
...
...
@@ -182,6 +174,23 @@ static int kirkwood_dma_close(struct snd_soc_component *component,
return
0
;
}
static
int
kirkwood_dma_hw_params
(
struct
snd_soc_component
*
component
,
struct
snd_pcm_substream
*
substream
,
struct
snd_pcm_hw_params
*
params
)
{
struct
kirkwood_dma_data
*
priv
=
kirkwood_priv
(
substream
);
const
struct
mbus_dram_target_info
*
dram
=
mv_mbus_dram_info
();
unsigned
long
addr
=
substream
->
runtime
->
dma_addr
;
if
(
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
)
kirkwood_dma_conf_mbus_windows
(
priv
->
io
,
KIRKWOOD_PLAYBACK_WIN
,
addr
,
dram
);
else
kirkwood_dma_conf_mbus_windows
(
priv
->
io
,
KIRKWOOD_RECORD_WIN
,
addr
,
dram
);
return
0
;
}
static
int
kirkwood_dma_prepare
(
struct
snd_soc_component
*
component
,
struct
snd_pcm_substream
*
substream
)
{
...
...
@@ -246,6 +255,7 @@ const struct snd_soc_component_driver kirkwood_soc_component = {
.
name
=
DRV_NAME
,
.
open
=
kirkwood_dma_open
,
.
close
=
kirkwood_dma_close
,
.
hw_params
=
kirkwood_dma_hw_params
,
.
prepare
=
kirkwood_dma_prepare
,
.
pointer
=
kirkwood_dma_pointer
,
.
pcm_construct
=
kirkwood_dma_new
,
...
...
sound/soc/soc-component.c
浏览文件 @
ad797a04
...
...
@@ -148,86 +148,75 @@ int snd_soc_component_set_bias_level(struct snd_soc_component *component,
return
soc_component_ret
(
component
,
ret
);
}
static
int
soc_component_pin
(
struct
snd_soc_component
*
component
,
const
char
*
pin
,
int
(
*
pin_func
)(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
))
{
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
char
*
full_name
;
int
ret
;
if
(
!
component
->
name_prefix
)
{
ret
=
pin_func
(
dapm
,
pin
);
goto
end
;
}
full_name
=
kasprintf
(
GFP_KERNEL
,
"%s %s"
,
component
->
name_prefix
,
pin
);
if
(
!
full_name
)
{
ret
=
-
ENOMEM
;
goto
end
;
}
ret
=
pin_func
(
dapm
,
full_name
);
kfree
(
full_name
);
end:
return
soc_component_ret
(
component
,
ret
);
}
int
snd_soc_component_enable_pin
(
struct
snd_soc_component
*
component
,
const
char
*
pin
)
{
return
soc_component_pin
(
component
,
pin
,
snd_soc_dapm_enable_pin
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
return
snd_soc_dapm_enable_pin
(
dapm
,
pin
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_enable_pin
);
int
snd_soc_component_enable_pin_unlocked
(
struct
snd_soc_component
*
component
,
const
char
*
pin
)
{
return
soc_component_pin
(
component
,
pin
,
snd_soc_dapm_enable_pin_unlocked
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
return
snd_soc_dapm_enable_pin_unlocked
(
dapm
,
pin
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_enable_pin_unlocked
);
int
snd_soc_component_disable_pin
(
struct
snd_soc_component
*
component
,
const
char
*
pin
)
{
return
soc_component_pin
(
component
,
pin
,
snd_soc_dapm_disable_pin
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
return
snd_soc_dapm_disable_pin
(
dapm
,
pin
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_disable_pin
);
int
snd_soc_component_disable_pin_unlocked
(
struct
snd_soc_component
*
component
,
const
char
*
pin
)
{
return
soc_component_pin
(
component
,
pin
,
snd_soc_dapm_disable_pin_unlocked
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
return
snd_soc_dapm_disable_pin_unlocked
(
dapm
,
pin
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_disable_pin_unlocked
);
int
snd_soc_component_nc_pin
(
struct
snd_soc_component
*
component
,
const
char
*
pin
)
{
return
soc_component_pin
(
component
,
pin
,
snd_soc_dapm_nc_pin
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
return
snd_soc_dapm_nc_pin
(
dapm
,
pin
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_nc_pin
);
int
snd_soc_component_nc_pin_unlocked
(
struct
snd_soc_component
*
component
,
const
char
*
pin
)
{
return
soc_component_pin
(
component
,
pin
,
snd_soc_dapm_nc_pin_unlocked
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
return
snd_soc_dapm_nc_pin_unlocked
(
dapm
,
pin
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_nc_pin_unlocked
);
int
snd_soc_component_get_pin_status
(
struct
snd_soc_component
*
component
,
const
char
*
pin
)
{
return
soc_component_pin
(
component
,
pin
,
snd_soc_dapm_get_pin_status
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
return
snd_soc_dapm_get_pin_status
(
dapm
,
pin
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_get_pin_status
);
int
snd_soc_component_force_enable_pin
(
struct
snd_soc_component
*
component
,
const
char
*
pin
)
{
return
soc_component_pin
(
component
,
pin
,
snd_soc_dapm_force_enable_pin
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
return
snd_soc_dapm_force_enable_pin
(
dapm
,
pin
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_force_enable_pin
);
...
...
@@ -235,7 +224,9 @@ int snd_soc_component_force_enable_pin_unlocked(
struct
snd_soc_component
*
component
,
const
char
*
pin
)
{
return
soc_component_pin
(
component
,
pin
,
snd_soc_dapm_force_enable_pin_unlocked
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_component_get_dapm
(
component
);
return
snd_soc_dapm_force_enable_pin_unlocked
(
dapm
,
pin
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_force_enable_pin_unlocked
);
...
...
sound/soc/sof/intel/Kconfig
浏览文件 @
ad797a04
...
...
@@ -278,6 +278,8 @@ config SND_SOC_SOF_HDA
config SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
tristate
select SOUNDWIRE_INTEL if SND_SOC_SOF_INTEL_SOUNDWIRE
select SND_INTEL_SOUNDWIRE_ACPI if SND_SOC_SOF_INTEL_SOUNDWIRE
config SND_SOC_SOF_INTEL_SOUNDWIRE
tristate "SOF support for SoundWire"
...
...
@@ -285,8 +287,6 @@ config SND_SOC_SOF_INTEL_SOUNDWIRE
depends on SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE
depends on ACPI && SOUNDWIRE
depends on !(SOUNDWIRE=m && SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=y)
select SOUNDWIRE_INTEL
select SND_INTEL_SOUNDWIRE_ACPI
help
This adds support for SoundWire with Sound Open Firmware
for Intel(R) platforms.
...
...
sound/soc/sof/intel/hda-ipc.c
浏览文件 @
ad797a04
...
...
@@ -107,8 +107,8 @@ void hda_dsp_ipc_get_reply(struct snd_sof_dev *sdev)
}
else
{
/* reply correct size ? */
if
(
reply
.
hdr
.
size
!=
msg
->
reply_size
&&
/* getter payload is never known upfront */
!
(
reply
.
hdr
.
cmd
&
SOF_IPC_GLB_PROBE
))
{
/* getter payload is never known upfront */
((
reply
.
hdr
.
cmd
&
SOF_GLB_TYPE_MASK
)
!=
SOF_IPC_GLB_PROBE
))
{
dev_err
(
sdev
->
dev
,
"error: reply expected %zu got %u bytes
\n
"
,
msg
->
reply_size
,
reply
.
hdr
.
size
);
ret
=
-
EINVAL
;
...
...
sound/soc/sof/intel/hda.c
浏览文件 @
ad797a04
...
...
@@ -187,12 +187,16 @@ static int hda_sdw_probe(struct snd_sof_dev *sdev)
int
hda_sdw_startup
(
struct
snd_sof_dev
*
sdev
)
{
struct
sof_intel_hda_dev
*
hdev
;
struct
snd_sof_pdata
*
pdata
=
sdev
->
pdata
;
hdev
=
sdev
->
pdata
->
hw_pdata
;
if
(
!
hdev
->
sdw
)
return
0
;
if
(
pdata
->
machine
&&
!
pdata
->
machine
->
mach_params
.
link_mask
)
return
0
;
return
sdw_intel_startup
(
hdev
->
sdw
);
}
...
...
@@ -1002,6 +1006,14 @@ static int hda_generic_machine_select(struct snd_sof_dev *sdev)
hda_mach
->
mach_params
.
dmic_num
=
dmic_num
;
pdata
->
machine
=
hda_mach
;
pdata
->
tplg_filename
=
tplg_filename
;
if
(
codec_num
==
2
)
{
/*
* Prevent SoundWire links from starting when an external
* HDaudio codec is used
*/
hda_mach
->
mach_params
.
link_mask
=
0
;
}
}
}
...
...
sound/soc/uniphier/aio-dma.c
浏览文件 @
ad797a04
...
...
@@ -198,7 +198,7 @@ static int uniphier_aiodma_mmap(struct snd_soc_component *component,
vma
->
vm_page_prot
=
pgprot_writecombine
(
vma
->
vm_page_prot
);
return
remap_pfn_range
(
vma
,
vma
->
vm_start
,
substream
->
dma_buffer
.
addr
>>
PAGE_SHIFT
,
substream
->
runtime
->
dma_
addr
>>
PAGE_SHIFT
,
vma
->
vm_end
-
vma
->
vm_start
,
vma
->
vm_page_prot
);
}
...
...
sound/soc/xilinx/xlnx_formatter_pcm.c
浏览文件 @
ad797a04
...
...
@@ -452,8 +452,8 @@ static int xlnx_formatter_pcm_hw_params(struct snd_soc_component *component,
stream_data
->
buffer_size
=
size
;
low
=
lower_32_bits
(
substream
->
dma_buffer
.
addr
);
high
=
upper_32_bits
(
substream
->
dma_buffer
.
addr
);
low
=
lower_32_bits
(
runtime
->
dma_
addr
);
high
=
upper_32_bits
(
runtime
->
dma_
addr
);
writel
(
low
,
stream_data
->
mmio
+
XLNX_AUD_BUFF_ADDR_LSB
);
writel
(
high
,
stream_data
->
mmio
+
XLNX_AUD_BUFF_ADDR_MSB
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录