Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
7c56c29a
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7c56c29a
编写于
2月 13, 2009
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'fix/hda' into for-linus
上级
b4583a46
9411e21c
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
71 addition
and
33 deletion
+71
-33
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+10
-0
sound/pci/hda/hda_hwdep.c
sound/pci/hda/hda_hwdep.c
+1
-1
sound/pci/hda/hda_local.h
sound/pci/hda/hda_local.h
+2
-0
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_analog.c
+12
-3
sound/pci/hda/patch_intelhdmi.c
sound/pci/hda/patch_intelhdmi.c
+34
-27
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+1
-0
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+11
-2
未找到文件。
sound/pci/hda/hda_codec.c
浏览文件 @
7c56c29a
...
...
@@ -3088,6 +3088,16 @@ int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
}
EXPORT_SYMBOL_HDA
(
snd_hda_multi_out_dig_prepare
);
int
snd_hda_multi_out_dig_cleanup
(
struct
hda_codec
*
codec
,
struct
hda_multi_out
*
mout
)
{
mutex_lock
(
&
codec
->
spdif_mutex
);
cleanup_dig_out_stream
(
codec
,
mout
->
dig_out_nid
);
mutex_unlock
(
&
codec
->
spdif_mutex
);
return
0
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_multi_out_dig_cleanup
);
/*
* release the digital out
*/
...
...
sound/pci/hda/hda_hwdep.c
浏览文件 @
7c56c29a
...
...
@@ -175,7 +175,7 @@ static int reconfig_codec(struct hda_codec *codec)
err
=
snd_hda_codec_build_controls
(
codec
);
if
(
err
<
0
)
return
err
;
return
0
;
return
snd_card_register
(
codec
->
bus
->
card
)
;
}
/*
...
...
sound/pci/hda/hda_local.h
浏览文件 @
7c56c29a
...
...
@@ -251,6 +251,8 @@ int snd_hda_multi_out_dig_prepare(struct hda_codec *codec,
unsigned
int
stream_tag
,
unsigned
int
format
,
struct
snd_pcm_substream
*
substream
);
int
snd_hda_multi_out_dig_cleanup
(
struct
hda_codec
*
codec
,
struct
hda_multi_out
*
mout
);
int
snd_hda_multi_out_analog_open
(
struct
hda_codec
*
codec
,
struct
hda_multi_out
*
mout
,
struct
snd_pcm_substream
*
substream
,
...
...
sound/pci/hda/patch_analog.c
浏览文件 @
7c56c29a
...
...
@@ -275,6 +275,14 @@ static int ad198x_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
format
,
substream
);
}
static
int
ad198x_dig_playback_pcm_cleanup
(
struct
hda_pcm_stream
*
hinfo
,
struct
hda_codec
*
codec
,
struct
snd_pcm_substream
*
substream
)
{
struct
ad198x_spec
*
spec
=
codec
->
spec
;
return
snd_hda_multi_out_dig_cleanup
(
codec
,
&
spec
->
multiout
);
}
/*
* Analog capture
*/
...
...
@@ -333,7 +341,8 @@ static struct hda_pcm_stream ad198x_pcm_digital_playback = {
.
ops
=
{
.
open
=
ad198x_dig_playback_pcm_open
,
.
close
=
ad198x_dig_playback_pcm_close
,
.
prepare
=
ad198x_dig_playback_pcm_prepare
.
prepare
=
ad198x_dig_playback_pcm_prepare
,
.
cleanup
=
ad198x_dig_playback_pcm_cleanup
},
};
...
...
@@ -1885,8 +1894,8 @@ static hda_nid_t ad1988_capsrc_nids[3] = {
#define AD1988_SPDIF_OUT_HDMI 0x0b
#define AD1988_SPDIF_IN 0x07
static
hda_nid_t
ad1989b_slave_dig_outs
[
2
]
=
{
AD1988_SPDIF_OUT
,
AD1988_SPDIF_OUT_HDMI
static
hda_nid_t
ad1989b_slave_dig_outs
[]
=
{
AD1988_SPDIF_OUT
,
AD1988_SPDIF_OUT_HDMI
,
0
};
static
struct
hda_input_mux
ad1988_6stack_capture_source
=
{
...
...
sound/pci/hda/patch_intelhdmi.c
浏览文件 @
7c56c29a
...
...
@@ -49,11 +49,6 @@ static struct hda_verb pinout_enable_verb[] = {
{}
/* terminator */
};
static
struct
hda_verb
pinout_disable_verb
[]
=
{
{
PIN_NID
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
0x00
},
{}
};
static
struct
hda_verb
unsolicited_response_verb
[]
=
{
{
PIN_NID
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
AC_USRSP_EN
|
INTEL_HDMI_EVENT_TAG
},
...
...
@@ -248,10 +243,6 @@ static void hdmi_write_dip_byte(struct hda_codec *codec, hda_nid_t nid,
static
void
hdmi_enable_output
(
struct
hda_codec
*
codec
)
{
/* Enable Audio InfoFrame Transmission */
hdmi_set_dip_index
(
codec
,
PIN_NID
,
0x0
,
0x0
);
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
AC_VERB_SET_HDMI_DIP_XMIT
,
AC_DIPXMIT_BEST
);
/* Unmute */
if
(
get_wcaps
(
codec
,
PIN_NID
)
&
AC_WCAP_OUT_AMP
)
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
...
...
@@ -260,17 +251,24 @@ static void hdmi_enable_output(struct hda_codec *codec)
snd_hda_sequence_write
(
codec
,
pinout_enable_verb
);
}
static
void
hdmi_disable_output
(
struct
hda_codec
*
codec
)
/*
* Enable Audio InfoFrame Transmission
*/
static
void
hdmi_start_infoframe_trans
(
struct
hda_codec
*
codec
)
{
snd_hda_sequence_write
(
codec
,
pinout_disable_verb
);
if
(
get_wcaps
(
codec
,
PIN_NID
)
&
AC_WCAP_OUT_AMP
)
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_OUT_MUTE
);
hdmi_set_dip_index
(
codec
,
PIN_NID
,
0x0
,
0x0
);
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
AC_VERB_SET_HDMI_DIP_XMIT
,
AC_DIPXMIT_BEST
);
}
/*
* FIXME: noises may arise when playing music after reloading the
* kernel module, until the next X restart or monitor repower.
*/
/*
* Disable Audio InfoFrame Transmission
*/
static
void
hdmi_stop_infoframe_trans
(
struct
hda_codec
*
codec
)
{
hdmi_set_dip_index
(
codec
,
PIN_NID
,
0x0
,
0x0
);
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
AC_VERB_SET_HDMI_DIP_XMIT
,
AC_DIPXMIT_DISABLE
);
}
static
int
hdmi_get_channel_count
(
struct
hda_codec
*
codec
)
...
...
@@ -368,11 +366,16 @@ static void hdmi_fill_audio_infoframe(struct hda_codec *codec,
struct
hdmi_audio_infoframe
*
ai
)
{
u8
*
params
=
(
u8
*
)
ai
;
u8
sum
=
0
;
int
i
;
hdmi_debug_dip_size
(
codec
);
hdmi_clear_dip_buffers
(
codec
);
/* be paranoid */
for
(
i
=
0
;
i
<
sizeof
(
ai
);
i
++
)
sum
+=
params
[
i
];
ai
->
checksum
=
-
sum
;
hdmi_set_dip_index
(
codec
,
PIN_NID
,
0x0
,
0x0
);
for
(
i
=
0
;
i
<
sizeof
(
ai
);
i
++
)
hdmi_write_dip_byte
(
codec
,
PIN_NID
,
params
[
i
]);
...
...
@@ -419,13 +422,17 @@ static int hdmi_setup_channel_allocation(struct hda_codec *codec,
/*
* CA defaults to 0 for basic stereo audio
*/
if
(
!
eld
->
eld_ver
)
return
0
;
if
(
!
eld
->
spk_alloc
)
return
0
;
if
(
channels
<=
2
)
return
0
;
/*
* HDMI sink's ELD info cannot always be retrieved for now, e.g.
* in console or for audio devices. Assume the highest speakers
* configuration, to _not_ prohibit multi-channel audio playback.
*/
if
(
!
eld
->
spk_alloc
)
eld
->
spk_alloc
=
0xffff
;
/*
* expand ELD's speaker allocation mask
*
...
...
@@ -485,6 +492,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec,
hdmi_setup_channel_mapping
(
codec
,
&
ai
);
hdmi_fill_audio_infoframe
(
codec
,
&
ai
);
hdmi_start_infoframe_trans
(
codec
);
}
...
...
@@ -562,7 +570,7 @@ static int intel_hdmi_playback_pcm_close(struct hda_pcm_stream *hinfo,
{
struct
intel_hdmi_spec
*
spec
=
codec
->
spec
;
hdmi_
disable_output
(
codec
);
hdmi_
stop_infoframe_trans
(
codec
);
return
snd_hda_multi_out_dig_close
(
codec
,
&
spec
->
multiout
);
}
...
...
@@ -582,8 +590,6 @@ static int intel_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
hdmi_setup_audio_infoframe
(
codec
,
substream
);
hdmi_enable_output
(
codec
);
return
0
;
}
...
...
@@ -628,8 +634,7 @@ static int intel_hdmi_build_controls(struct hda_codec *codec)
static
int
intel_hdmi_init
(
struct
hda_codec
*
codec
)
{
/* disable audio output as early as possible */
hdmi_disable_output
(
codec
);
hdmi_enable_output
(
codec
);
snd_hda_sequence_write
(
codec
,
unsolicited_response_verb
);
...
...
@@ -679,6 +684,7 @@ static struct hda_codec_preset snd_hda_preset_intelhdmi[] = {
{
.
id
=
0x80862801
,
.
name
=
"G45 DEVBLC"
,
.
patch
=
patch_intel_hdmi
},
{
.
id
=
0x80862802
,
.
name
=
"G45 DEVCTG"
,
.
patch
=
patch_intel_hdmi
},
{
.
id
=
0x80862803
,
.
name
=
"G45 DEVELK"
,
.
patch
=
patch_intel_hdmi
},
{
.
id
=
0x80862804
,
.
name
=
"G45 DEVIBX"
,
.
patch
=
patch_intel_hdmi
},
{
.
id
=
0x10951392
,
.
name
=
"SiI1392 HDMI"
,
.
patch
=
patch_intel_hdmi
},
{}
/* terminator */
};
...
...
@@ -687,6 +693,7 @@ MODULE_ALIAS("snd-hda-codec-id:808629fb");
MODULE_ALIAS
(
"snd-hda-codec-id:80862801"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862802"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862803"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862804"
);
MODULE_ALIAS
(
"snd-hda-codec-id:10951392"
);
MODULE_LICENSE
(
"GPL"
);
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
7c56c29a
...
...
@@ -8478,6 +8478,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x2a66, "HP Acacia", ALC888_3ST_HP),
SND_PCI_QUIRK(0x1043, 0x1873, "Asus M90V", ALC888_ASUS_M90V),
SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG),
SND_PCI_QUIRK(0x1043, 0x8284, "Asus Z37E", ALC883_6ST_DIG),
SND_PCI_QUIRK(0x1043, 0x82fe, "Asus P5Q-EM HDMI", ALC1200_ASUS_P5Q),
SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_ASUS_EEE1601),
SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG),
...
...
sound/pci/hda/patch_sigmatel.c
浏览文件 @
7c56c29a
...
...
@@ -1799,7 +1799,7 @@ static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = {
SND_PCI_QUIRK
(
PCI_VENDOR_ID_HP
,
0x30f2
,
"HP dv5"
,
STAC_HP_M4
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_HP
,
0x30f4
,
"HP dv7"
,
STAC_HP_
M4
),
"HP dv7"
,
STAC_HP_
DV5
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_HP
,
0x30f7
,
"HP dv4"
,
STAC_HP_DV5
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_HP
,
0x30fc
,
...
...
@@ -2442,6 +2442,14 @@ static int stac92xx_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
stream_tag
,
format
,
substream
);
}
static
int
stac92xx_dig_playback_pcm_cleanup
(
struct
hda_pcm_stream
*
hinfo
,
struct
hda_codec
*
codec
,
struct
snd_pcm_substream
*
substream
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
return
snd_hda_multi_out_dig_cleanup
(
codec
,
&
spec
->
multiout
);
}
/*
* Analog capture callbacks
...
...
@@ -2486,7 +2494,8 @@ static struct hda_pcm_stream stac92xx_pcm_digital_playback = {
.
ops
=
{
.
open
=
stac92xx_dig_playback_pcm_open
,
.
close
=
stac92xx_dig_playback_pcm_close
,
.
prepare
=
stac92xx_dig_playback_pcm_prepare
.
prepare
=
stac92xx_dig_playback_pcm_prepare
,
.
cleanup
=
stac92xx_dig_playback_pcm_cleanup
},
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录