Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
1aaff096
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
1aaff096
编写于
8月 19, 2014
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-linus' into topic/hda-cleanup
Syncing the HD-audio updates for further cleanup works.
上级
7d1311b9
f475371a
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
67 addition
and
63 deletion
+67
-63
MAINTAINERS
MAINTAINERS
+3
-0
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+21
-5
sound/soc/codecs/arizona.c
sound/soc/codecs/arizona.c
+4
-2
sound/soc/codecs/pcm512x.c
sound/soc/codecs/pcm512x.c
+2
-2
sound/soc/davinci/davinci-mcasp.c
sound/soc/davinci/davinci-mcasp.c
+11
-3
sound/soc/fsl/Kconfig
sound/soc/fsl/Kconfig
+0
-1
sound/soc/fsl/fsl_esai.c
sound/soc/fsl/fsl_esai.c
+0
-2
sound/soc/intel/sst-acpi.c
sound/soc/intel/sst-acpi.c
+2
-2
sound/soc/intel/sst-baytrail-ipc.c
sound/soc/intel/sst-baytrail-ipc.c
+1
-9
sound/soc/intel/sst-baytrail-ipc.h
sound/soc/intel/sst-baytrail-ipc.h
+0
-1
sound/soc/intel/sst-baytrail-pcm.c
sound/soc/intel/sst-baytrail-pcm.c
+15
-28
sound/soc/pxa/pxa-ssp.c
sound/soc/pxa/pxa-ssp.c
+1
-3
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+7
-5
未找到文件。
MAINTAINERS
浏览文件 @
1aaff096
...
...
@@ -3843,10 +3843,13 @@ F: drivers/tty/serial/ucc_uart.c
FREESCALE SOC SOUND DRIVERS
M: Timur Tabi <timur@tabi.org>
M: Nicolin Chen <nicoleotsuka@gmail.com>
M: Xiubo Li <Li.Xiubo@freescale.com>
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
L: linuxppc-dev@lists.ozlabs.org
S: Maintained
F: sound/soc/fsl/fsl*
F: sound/soc/fsl/imx*
F: sound/soc/fsl/mpc8610_hpcd.c
FREEVXFS FILESYSTEM
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
1aaff096
...
...
@@ -181,6 +181,8 @@ static void alc_fix_pll(struct hda_codec *codec)
spec
->
pll_coef_idx
);
val
=
snd_hda_codec_read
(
codec
,
spec
->
pll_nid
,
0
,
AC_VERB_GET_PROC_COEF
,
0
);
if
(
val
==
-
1
)
return
;
snd_hda_codec_write
(
codec
,
spec
->
pll_nid
,
0
,
AC_VERB_SET_COEF_INDEX
,
spec
->
pll_coef_idx
);
snd_hda_codec_write
(
codec
,
spec
->
pll_nid
,
0
,
AC_VERB_SET_PROC_COEF
,
...
...
@@ -2806,6 +2808,8 @@ static void alc286_shutup(struct hda_codec *codec)
static
void
alc269vb_toggle_power_output
(
struct
hda_codec
*
codec
,
int
power_up
)
{
int
val
=
alc_read_coef_idx
(
codec
,
0x04
);
if
(
val
==
-
1
)
return
;
if
(
power_up
)
val
|=
1
<<
11
;
else
...
...
@@ -3264,6 +3268,15 @@ static int alc269_resume(struct hda_codec *codec)
snd_hda_codec_resume_cache
(
codec
);
alc_inv_dmic_sync
(
codec
,
true
);
hda_call_check_power_status
(
codec
,
0x01
);
/* on some machine, the BIOS will clear the codec gpio data when enter
* suspend, and won't restore the data after resume, so we restore it
* in the driver.
*/
if
(
spec
->
gpio_led
)
snd_hda_codec_write
(
codec
,
codec
->
afg
,
0
,
AC_VERB_SET_GPIO_DATA
,
spec
->
gpio_led
);
if
(
spec
->
has_alc5505_dsp
)
alc5505_dsp_resume
(
codec
);
...
...
@@ -5311,27 +5324,30 @@ static void alc269_fill_coef(struct hda_codec *codec)
if
((
alc_get_coef0
(
codec
)
&
0x00ff
)
==
0x017
)
{
val
=
alc_read_coef_idx
(
codec
,
0x04
);
/* Power up output pin */
alc_write_coef_idx
(
codec
,
0x04
,
val
|
(
1
<<
11
));
if
(
val
!=
-
1
)
alc_write_coef_idx
(
codec
,
0x04
,
val
|
(
1
<<
11
));
}
if
((
alc_get_coef0
(
codec
)
&
0x00ff
)
==
0x018
)
{
val
=
alc_read_coef_idx
(
codec
,
0xd
);
if
((
val
&
0x0c00
)
>>
10
!=
0x1
)
{
if
(
val
!=
-
1
&&
(
val
&
0x0c00
)
>>
10
!=
0x1
)
{
/* Capless ramp up clock control */
alc_write_coef_idx
(
codec
,
0xd
,
val
|
(
1
<<
10
));
}
val
=
alc_read_coef_idx
(
codec
,
0x17
);
if
((
val
&
0x01c0
)
>>
6
!=
0x4
)
{
if
(
val
!=
-
1
&&
(
val
&
0x01c0
)
>>
6
!=
0x4
)
{
/* Class D power on reset */
alc_write_coef_idx
(
codec
,
0x17
,
val
|
(
1
<<
7
));
}
}
val
=
alc_read_coef_idx
(
codec
,
0xd
);
/* Class D */
alc_write_coef_idx
(
codec
,
0xd
,
val
|
(
1
<<
14
));
if
(
val
!=
-
1
)
alc_write_coef_idx
(
codec
,
0xd
,
val
|
(
1
<<
14
));
val
=
alc_read_coef_idx
(
codec
,
0x4
);
/* HP */
alc_write_coef_idx
(
codec
,
0x4
,
val
|
(
1
<<
11
));
if
(
val
!=
-
1
)
alc_write_coef_idx
(
codec
,
0x4
,
val
|
(
1
<<
11
));
}
/*
...
...
sound/soc/codecs/arizona.c
浏览文件 @
1aaff096
...
...
@@ -1278,6 +1278,8 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
else
rates
=
&
arizona_48k_bclk_rates
[
0
];
wl
=
snd_pcm_format_width
(
params_format
(
params
));
if
(
tdm_slots
)
{
arizona_aif_dbg
(
dai
,
"Configuring for %d %d bit TDM slots
\n
"
,
tdm_slots
,
tdm_width
);
...
...
@@ -1285,6 +1287,7 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
channels
=
tdm_slots
;
}
else
{
bclk_target
=
snd_soc_params_to_bclk
(
params
);
tdm_width
=
wl
;
}
if
(
chan_limit
&&
chan_limit
<
channels
)
{
...
...
@@ -1319,8 +1322,7 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
arizona_aif_dbg
(
dai
,
"BCLK %dHz LRCLK %dHz
\n
"
,
rates
[
bclk
],
rates
[
bclk
]
/
lrclk
);
wl
=
snd_pcm_format_width
(
params_format
(
params
));
frame
=
wl
<<
ARIZONA_AIF1TX_WL_SHIFT
|
wl
;
frame
=
wl
<<
ARIZONA_AIF1TX_WL_SHIFT
|
tdm_width
;
reconfig
=
arizona_aif_cfg_changed
(
codec
,
base
,
bclk
,
lrclk
,
frame
);
...
...
sound/soc/codecs/pcm512x.c
浏览文件 @
1aaff096
...
...
@@ -259,13 +259,13 @@ static const struct soc_enum pcm512x_veds =
pcm512x_ramp_step_text
);
static
const
struct
snd_kcontrol_new
pcm512x_controls
[]
=
{
SOC_DOUBLE_R_TLV
(
"
Playback Digital
Volume"
,
PCM512x_DIGITAL_VOLUME_2
,
SOC_DOUBLE_R_TLV
(
"
Digital Playback
Volume"
,
PCM512x_DIGITAL_VOLUME_2
,
PCM512x_DIGITAL_VOLUME_3
,
0
,
255
,
1
,
digital_tlv
),
SOC_DOUBLE_TLV
(
"Playback Volume"
,
PCM512x_ANALOG_GAIN_CTRL
,
PCM512x_LAGN_SHIFT
,
PCM512x_RAGN_SHIFT
,
1
,
1
,
analog_tlv
),
SOC_DOUBLE_TLV
(
"Playback Boost Volume"
,
PCM512x_ANALOG_GAIN_BOOST
,
PCM512x_AGBL_SHIFT
,
PCM512x_AGBR_SHIFT
,
1
,
0
,
boost_tlv
),
SOC_DOUBLE
(
"
Playback Digital
Switch"
,
PCM512x_MUTE
,
PCM512x_RQML_SHIFT
,
SOC_DOUBLE
(
"
Digital Playback
Switch"
,
PCM512x_MUTE
,
PCM512x_RQML_SHIFT
,
PCM512x_RQMR_SHIFT
,
1
,
1
),
SOC_SINGLE
(
"Deemphasis Switch"
,
PCM512x_DSP
,
PCM512x_DEMP_SHIFT
,
1
,
1
),
...
...
sound/soc/davinci/davinci-mcasp.c
浏览文件 @
1aaff096
...
...
@@ -403,7 +403,8 @@ static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
return
ret
;
}
static
int
davinci_mcasp_set_clkdiv
(
struct
snd_soc_dai
*
dai
,
int
div_id
,
int
div
)
static
int
__davinci_mcasp_set_clkdiv
(
struct
snd_soc_dai
*
dai
,
int
div_id
,
int
div
,
bool
explicit
)
{
struct
davinci_mcasp
*
mcasp
=
snd_soc_dai_get_drvdata
(
dai
);
...
...
@@ -420,7 +421,8 @@ static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div
ACLKXDIV
(
div
-
1
),
ACLKXDIV_MASK
);
mcasp_mod_bits
(
mcasp
,
DAVINCI_MCASP_ACLKRCTL_REG
,
ACLKRDIV
(
div
-
1
),
ACLKRDIV_MASK
);
mcasp
->
bclk_div
=
div
;
if
(
explicit
)
mcasp
->
bclk_div
=
div
;
break
;
case
2
:
/* BCLK/LRCLK ratio */
...
...
@@ -434,6 +436,12 @@ static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div
return
0
;
}
static
int
davinci_mcasp_set_clkdiv
(
struct
snd_soc_dai
*
dai
,
int
div_id
,
int
div
)
{
return
__davinci_mcasp_set_clkdiv
(
dai
,
div_id
,
div
,
1
);
}
static
int
davinci_mcasp_set_sysclk
(
struct
snd_soc_dai
*
dai
,
int
clk_id
,
unsigned
int
freq
,
int
dir
)
{
...
...
@@ -738,7 +746,7 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
"Inaccurate BCLK: %u Hz / %u != %u Hz
\n
"
,
mcasp
->
sysclk_freq
,
div
,
bclk_freq
);
}
davinci_mcasp_set_clkdiv
(
cpu_dai
,
1
,
div
);
__davinci_mcasp_set_clkdiv
(
cpu_dai
,
1
,
div
,
0
);
}
ret
=
mcasp_common_hw_param
(
mcasp
,
substream
->
stream
,
...
...
sound/soc/fsl/Kconfig
浏览文件 @
1aaff096
...
...
@@ -49,7 +49,6 @@ config SND_SOC_FSL_ESAI
tristate "Enhanced Serial Audio Interface (ESAI) module support"
select REGMAP_MMIO
select SND_SOC_IMX_PCM_DMA if SND_IMX_SOC != n
select SND_SOC_FSL_UTILS
help
Say Y if you want to add Enhanced Synchronous Audio Interface
(ESAI) support for the Freescale CPUs.
...
...
sound/soc/fsl/fsl_esai.c
浏览文件 @
1aaff096
...
...
@@ -18,7 +18,6 @@
#include "fsl_esai.h"
#include "imx-pcm.h"
#include "fsl_utils.h"
#define FSL_ESAI_RATES SNDRV_PCM_RATE_8000_192000
#define FSL_ESAI_FORMATS (SNDRV_PCM_FMTBIT_S8 | \
...
...
@@ -607,7 +606,6 @@ static struct snd_soc_dai_ops fsl_esai_dai_ops = {
.
hw_params
=
fsl_esai_hw_params
,
.
set_sysclk
=
fsl_esai_set_dai_sysclk
,
.
set_fmt
=
fsl_esai_set_dai_fmt
,
.
xlate_tdm_slot_mask
=
fsl_asoc_xlate_tdm_slot_mask
,
.
set_tdm_slot
=
fsl_esai_set_dai_tdm_slot
,
};
...
...
sound/soc/intel/sst-acpi.c
浏览文件 @
1aaff096
...
...
@@ -246,8 +246,8 @@ static struct sst_acpi_desc sst_acpi_broadwell_desc = {
};
static
struct
sst_acpi_mach
baytrail_machines
[]
=
{
{
"10EC5640"
,
"byt-rt5640"
,
"intel/fw_sst_0f28.bin-i2s_master"
},
{
"193C9890"
,
"byt-max98090"
,
"intel/fw_sst_0f28.bin-i2s_master"
},
{
"10EC5640"
,
"byt-rt5640"
,
"intel/fw_sst_0f28.bin-
48kHz_
i2s_master"
},
{
"193C9890"
,
"byt-max98090"
,
"intel/fw_sst_0f28.bin-
48kHz_
i2s_master"
},
{}
};
...
...
sound/soc/intel/sst-baytrail-ipc.c
浏览文件 @
1aaff096
...
...
@@ -817,7 +817,7 @@ static struct sst_dsp_device byt_dev = {
.
ops
=
&
sst_byt_ops
,
};
int
sst_byt_dsp_suspend_
noirq
(
struct
device
*
dev
,
struct
sst_pdata
*
pdata
)
int
sst_byt_dsp_suspend_
late
(
struct
device
*
dev
,
struct
sst_pdata
*
pdata
)
{
struct
sst_byt
*
byt
=
pdata
->
dsp
;
...
...
@@ -826,14 +826,6 @@ int sst_byt_dsp_suspend_noirq(struct device *dev, struct sst_pdata *pdata)
sst_byt_drop_all
(
byt
);
dev_dbg
(
byt
->
dev
,
"dsp in reset
\n
"
);
return
0
;
}
EXPORT_SYMBOL_GPL
(
sst_byt_dsp_suspend_noirq
);
int
sst_byt_dsp_suspend_late
(
struct
device
*
dev
,
struct
sst_pdata
*
pdata
)
{
struct
sst_byt
*
byt
=
pdata
->
dsp
;
dev_dbg
(
byt
->
dev
,
"free all blocks and unload fw
\n
"
);
sst_fw_unload
(
byt
->
fw
);
...
...
sound/soc/intel/sst-baytrail-ipc.h
浏览文件 @
1aaff096
...
...
@@ -66,7 +66,6 @@ int sst_byt_get_dsp_position(struct sst_byt *byt,
int
sst_byt_dsp_init
(
struct
device
*
dev
,
struct
sst_pdata
*
pdata
);
void
sst_byt_dsp_free
(
struct
device
*
dev
,
struct
sst_pdata
*
pdata
);
struct
sst_dsp
*
sst_byt_get_dsp
(
struct
sst_byt
*
byt
);
int
sst_byt_dsp_suspend_noirq
(
struct
device
*
dev
,
struct
sst_pdata
*
pdata
);
int
sst_byt_dsp_suspend_late
(
struct
device
*
dev
,
struct
sst_pdata
*
pdata
);
int
sst_byt_dsp_boot
(
struct
device
*
dev
,
struct
sst_pdata
*
pdata
);
int
sst_byt_dsp_wait_for_ready
(
struct
device
*
dev
,
struct
sst_pdata
*
pdata
);
...
...
sound/soc/intel/sst-baytrail-pcm.c
浏览文件 @
1aaff096
...
...
@@ -59,6 +59,9 @@ struct sst_byt_priv_data {
/* DAI data */
struct
sst_byt_pcm_data
pcm
[
BYT_PCM_COUNT
];
/* flag indicating is stream context restore needed after suspend */
bool
restore_stream
;
};
/* this may get called several times by oss emulation */
...
...
@@ -184,7 +187,10 @@ static int sst_byt_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
sst_byt_stream_start
(
byt
,
pcm_data
->
stream
,
0
);
break
;
case
SNDRV_PCM_TRIGGER_RESUME
:
schedule_work
(
&
pcm_data
->
work
);
if
(
pdata
->
restore_stream
==
true
)
schedule_work
(
&
pcm_data
->
work
);
else
sst_byt_stream_resume
(
byt
,
pcm_data
->
stream
);
break
;
case
SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
sst_byt_stream_resume
(
byt
,
pcm_data
->
stream
);
...
...
@@ -193,6 +199,7 @@ static int sst_byt_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
sst_byt_stream_stop
(
byt
,
pcm_data
->
stream
);
break
;
case
SNDRV_PCM_TRIGGER_SUSPEND
:
pdata
->
restore_stream
=
false
;
case
SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
sst_byt_stream_pause
(
byt
,
pcm_data
->
stream
);
break
;
...
...
@@ -404,26 +411,10 @@ static const struct snd_soc_component_driver byt_dai_component = {
};
#ifdef CONFIG_PM
static
int
sst_byt_pcm_dev_suspend_noirq
(
struct
device
*
dev
)
{
struct
sst_pdata
*
sst_pdata
=
dev_get_platdata
(
dev
);
int
ret
;
dev_dbg
(
dev
,
"suspending noirq
\n
"
);
/* at this point all streams will be stopped and context saved */
ret
=
sst_byt_dsp_suspend_noirq
(
dev
,
sst_pdata
);
if
(
ret
<
0
)
{
dev_err
(
dev
,
"failed to suspend %d
\n
"
,
ret
);
return
ret
;
}
return
ret
;
}
static
int
sst_byt_pcm_dev_suspend_late
(
struct
device
*
dev
)
{
struct
sst_pdata
*
sst_pdata
=
dev_get_platdata
(
dev
);
struct
sst_byt_priv_data
*
priv_data
=
dev_get_drvdata
(
dev
);
int
ret
;
dev_dbg
(
dev
,
"suspending late
\n
"
);
...
...
@@ -434,34 +425,30 @@ static int sst_byt_pcm_dev_suspend_late(struct device *dev)
return
ret
;
}
priv_data
->
restore_stream
=
true
;
return
ret
;
}
static
int
sst_byt_pcm_dev_resume_early
(
struct
device
*
dev
)
{
struct
sst_pdata
*
sst_pdata
=
dev_get_platdata
(
dev
);
int
ret
;
dev_dbg
(
dev
,
"resume early
\n
"
);
/* load fw and boot DSP */
return
sst_byt_dsp_boot
(
dev
,
sst_pdata
);
}
static
int
sst_byt_pcm_dev_resume
(
struct
device
*
dev
)
{
struct
sst_pdata
*
sst_pdata
=
dev_get_platdata
(
dev
);
dev_dbg
(
dev
,
"resume
\n
"
);
ret
=
sst_byt_dsp_boot
(
dev
,
sst_pdata
);
if
(
ret
)
return
ret
;
/* wait for FW to finish booting */
return
sst_byt_dsp_wait_for_ready
(
dev
,
sst_pdata
);
}
static
const
struct
dev_pm_ops
sst_byt_pm_ops
=
{
.
suspend_noirq
=
sst_byt_pcm_dev_suspend_noirq
,
.
suspend_late
=
sst_byt_pcm_dev_suspend_late
,
.
resume_early
=
sst_byt_pcm_dev_resume_early
,
.
resume
=
sst_byt_pcm_dev_resume
,
};
#define SST_BYT_PM_OPS (&sst_byt_pm_ops)
...
...
sound/soc/pxa/pxa-ssp.c
浏览文件 @
1aaff096
...
...
@@ -765,9 +765,7 @@ static int pxa_ssp_remove(struct snd_soc_dai *dai)
SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_64000 | \
SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
#define PXA_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
SNDRV_PCM_FMTBIT_S24_LE | \
SNDRV_PCM_FMTBIT_S32_LE)
#define PXA_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
static
const
struct
snd_soc_dai_ops
pxa_ssp_dai_ops
=
{
.
startup
=
pxa_ssp_startup
,
...
...
sound/soc/soc-dapm.c
浏览文件 @
1aaff096
...
...
@@ -2860,12 +2860,14 @@ int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_dapm_kcontrol_dapm
(
kcontrol
);
struct
soc_enum
*
e
=
(
struct
soc_enum
*
)
kcontrol
->
private_value
;
unsigned
int
reg_val
,
val
;
int
ret
=
0
;
if
(
e
->
reg
!=
SND_SOC_NOPM
)
ret
=
soc_dapm_read
(
dapm
,
e
->
reg
,
&
reg_val
);
else
if
(
e
->
reg
!=
SND_SOC_NOPM
)
{
int
ret
=
soc_dapm_read
(
dapm
,
e
->
reg
,
&
reg_val
);
if
(
ret
)
return
ret
;
}
else
{
reg_val
=
dapm_kcontrol_get_value
(
kcontrol
);
}
val
=
(
reg_val
>>
e
->
shift_l
)
&
e
->
mask
;
ucontrol
->
value
.
enumerated
.
item
[
0
]
=
snd_soc_enum_val_to_item
(
e
,
val
);
...
...
@@ -2875,7 +2877,7 @@ int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
ucontrol
->
value
.
enumerated
.
item
[
1
]
=
val
;
}
return
ret
;
return
0
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_get_enum_double
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录