Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
8f88f025
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 2 年 前同步成功
通知
170
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看板
提交
8f88f025
编写于
3月 16, 2015
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/hda-bus' into for-next
上级
34e72afe
820cc6cf
变更
24
展开全部
隐藏空白更改
内联
并排
Showing
24 changed file
with
572 addition
and
991 deletion
+572
-991
sound/pci/hda/Makefile
sound/pci/hda/Makefile
+1
-1
sound/pci/hda/hda_beep.c
sound/pci/hda/hda_beep.c
+1
-1
sound/pci/hda/hda_bind.c
sound/pci/hda/hda_bind.c
+321
-0
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+142
-589
sound/pci/hda/hda_codec.h
sound/pci/hda/hda_codec.h
+29
-79
sound/pci/hda/hda_controller.c
sound/pci/hda/hda_controller.c
+19
-43
sound/pci/hda/hda_controller.h
sound/pci/hda/hda_controller.h
+2
-2
sound/pci/hda/hda_generic.c
sound/pci/hda/hda_generic.c
+13
-5
sound/pci/hda/hda_hwdep.c
sound/pci/hda/hda_hwdep.c
+0
-3
sound/pci/hda/hda_intel.c
sound/pci/hda/hda_intel.c
+6
-27
sound/pci/hda/hda_local.h
sound/pci/hda/hda_local.h
+8
-33
sound/pci/hda/hda_tegra.c
sound/pci/hda/hda_tegra.c
+3
-20
sound/pci/hda/hda_trace.h
sound/pci/hda/hda_trace.h
+0
-24
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_analog.c
+2
-14
sound/pci/hda/patch_ca0110.c
sound/pci/hda/patch_ca0110.c
+2
-14
sound/pci/hda/patch_ca0132.c
sound/pci/hda/patch_ca0132.c
+2
-14
sound/pci/hda/patch_cirrus.c
sound/pci/hda/patch_cirrus.c
+2
-14
sound/pci/hda/patch_cmedia.c
sound/pci/hda/patch_cmedia.c
+2
-14
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+2
-14
sound/pci/hda/patch_hdmi.c
sound/pci/hda/patch_hdmi.c
+4
-23
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+2
-14
sound/pci/hda/patch_si3054.c
sound/pci/hda/patch_si3054.c
+2
-14
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+5
-15
sound/pci/hda/patch_via.c
sound/pci/hda/patch_via.c
+2
-14
未找到文件。
sound/pci/hda/Makefile
浏览文件 @
8f88f025
...
@@ -4,7 +4,7 @@ snd-hda-tegra-objs := hda_tegra.o
...
@@ -4,7 +4,7 @@ snd-hda-tegra-objs := hda_tegra.o
# for haswell power well
# for haswell power well
snd-hda-intel-$(CONFIG_SND_HDA_I915)
+=
hda_i915.o
snd-hda-intel-$(CONFIG_SND_HDA_I915)
+=
hda_i915.o
snd-hda-codec-y
:=
hda_codec.o hda_jack.o hda_auto_parser.o hda_sysfs.o
snd-hda-codec-y
:=
hda_
bind.o hda_
codec.o hda_jack.o hda_auto_parser.o hda_sysfs.o
snd-hda-codec-$(CONFIG_PROC_FS)
+=
hda_proc.o
snd-hda-codec-$(CONFIG_PROC_FS)
+=
hda_proc.o
snd-hda-codec-$(CONFIG_SND_HDA_HWDEP)
+=
hda_hwdep.o
snd-hda-codec-$(CONFIG_SND_HDA_HWDEP)
+=
hda_hwdep.o
snd-hda-codec-$(CONFIG_SND_HDA_INPUT_BEEP)
+=
hda_beep.o
snd-hda-codec-$(CONFIG_SND_HDA_INPUT_BEEP)
+=
hda_beep.o
...
...
sound/pci/hda/hda_beep.c
浏览文件 @
8f88f025
...
@@ -160,6 +160,7 @@ static int snd_hda_do_attach(struct hda_beep *beep)
...
@@ -160,6 +160,7 @@ static int snd_hda_do_attach(struct hda_beep *beep)
input_dev
->
name
=
"HDA Digital PCBeep"
;
input_dev
->
name
=
"HDA Digital PCBeep"
;
input_dev
->
phys
=
beep
->
phys
;
input_dev
->
phys
=
beep
->
phys
;
input_dev
->
id
.
bustype
=
BUS_PCI
;
input_dev
->
id
.
bustype
=
BUS_PCI
;
input_dev
->
dev
.
parent
=
&
codec
->
bus
->
card
->
card_dev
;
input_dev
->
id
.
vendor
=
codec
->
vendor_id
>>
16
;
input_dev
->
id
.
vendor
=
codec
->
vendor_id
>>
16
;
input_dev
->
id
.
product
=
codec
->
vendor_id
&
0xffff
;
input_dev
->
id
.
product
=
codec
->
vendor_id
&
0xffff
;
...
@@ -168,7 +169,6 @@ static int snd_hda_do_attach(struct hda_beep *beep)
...
@@ -168,7 +169,6 @@ static int snd_hda_do_attach(struct hda_beep *beep)
input_dev
->
evbit
[
0
]
=
BIT_MASK
(
EV_SND
);
input_dev
->
evbit
[
0
]
=
BIT_MASK
(
EV_SND
);
input_dev
->
sndbit
[
0
]
=
BIT_MASK
(
SND_BELL
)
|
BIT_MASK
(
SND_TONE
);
input_dev
->
sndbit
[
0
]
=
BIT_MASK
(
SND_BELL
)
|
BIT_MASK
(
SND_TONE
);
input_dev
->
event
=
snd_hda_beep_event
;
input_dev
->
event
=
snd_hda_beep_event
;
input_dev
->
dev
.
parent
=
&
codec
->
dev
;
input_set_drvdata
(
input_dev
,
beep
);
input_set_drvdata
(
input_dev
,
beep
);
beep
->
dev
=
input_dev
;
beep
->
dev
=
input_dev
;
...
...
sound/pci/hda/hda_bind.c
0 → 100644
浏览文件 @
8f88f025
/*
* HD-audio codec driver binding
* Copyright (c) Takashi Iwai <tiwai@suse.de>
*/
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/mutex.h>
#include <linux/module.h>
#include <linux/export.h>
#include <linux/pm.h>
#include <sound/core.h>
#include "hda_codec.h"
#include "hda_local.h"
/* codec vendor labels */
struct
hda_vendor_id
{
unsigned
int
id
;
const
char
*
name
;
};
static
struct
hda_vendor_id
hda_vendor_ids
[]
=
{
{
0x1002
,
"ATI"
},
{
0x1013
,
"Cirrus Logic"
},
{
0x1057
,
"Motorola"
},
{
0x1095
,
"Silicon Image"
},
{
0x10de
,
"Nvidia"
},
{
0x10ec
,
"Realtek"
},
{
0x1102
,
"Creative"
},
{
0x1106
,
"VIA"
},
{
0x111d
,
"IDT"
},
{
0x11c1
,
"LSI"
},
{
0x11d4
,
"Analog Devices"
},
{
0x13f6
,
"C-Media"
},
{
0x14f1
,
"Conexant"
},
{
0x17e8
,
"Chrontel"
},
{
0x1854
,
"LG"
},
{
0x1aec
,
"Wolfson Microelectronics"
},
{
0x1af4
,
"QEMU"
},
{
0x434d
,
"C-Media"
},
{
0x8086
,
"Intel"
},
{
0x8384
,
"SigmaTel"
},
{}
/* terminator */
};
/*
* find a matching codec preset
*/
static
int
hda_bus_match
(
struct
device
*
dev
,
struct
device_driver
*
drv
)
{
struct
hda_codec
*
codec
=
container_of
(
dev
,
struct
hda_codec
,
dev
);
struct
hda_codec_driver
*
driver
=
container_of
(
drv
,
struct
hda_codec_driver
,
driver
);
const
struct
hda_codec_preset
*
preset
;
/* check probe_id instead of vendor_id if set */
u32
id
=
codec
->
probe_id
?
codec
->
probe_id
:
codec
->
vendor_id
;
for
(
preset
=
driver
->
preset
;
preset
->
id
;
preset
++
)
{
u32
mask
=
preset
->
mask
;
if
(
preset
->
afg
&&
preset
->
afg
!=
codec
->
afg
)
continue
;
if
(
preset
->
mfg
&&
preset
->
mfg
!=
codec
->
mfg
)
continue
;
if
(
!
mask
)
mask
=
~
0
;
if
(
preset
->
id
==
(
id
&
mask
)
&&
(
!
preset
->
rev
||
preset
->
rev
==
codec
->
revision_id
))
{
codec
->
preset
=
preset
;
return
1
;
}
}
return
0
;
}
/* reset the codec name from the preset */
static
int
codec_refresh_name
(
struct
hda_codec
*
codec
,
const
char
*
name
)
{
char
tmp
[
16
];
kfree
(
codec
->
chip_name
);
if
(
!
name
)
{
sprintf
(
tmp
,
"ID %x"
,
codec
->
vendor_id
&
0xffff
);
name
=
tmp
;
}
codec
->
chip_name
=
kstrdup
(
name
,
GFP_KERNEL
);
return
codec
->
chip_name
?
0
:
-
ENOMEM
;
}
static
int
hda_codec_driver_probe
(
struct
device
*
dev
)
{
struct
hda_codec
*
codec
=
dev_to_hda_codec
(
dev
);
struct
module
*
owner
=
dev
->
driver
->
owner
;
int
err
;
if
(
WARN_ON
(
!
codec
->
preset
))
return
-
EINVAL
;
err
=
codec_refresh_name
(
codec
,
codec
->
preset
->
name
);
if
(
err
<
0
)
goto
error
;
if
(
!
try_module_get
(
owner
))
{
err
=
-
EINVAL
;
goto
error
;
}
err
=
codec
->
preset
->
patch
(
codec
);
if
(
err
<
0
)
{
module_put
(
owner
);
goto
error
;
}
return
0
;
error:
codec
->
preset
=
NULL
;
memset
(
&
codec
->
patch_ops
,
0
,
sizeof
(
codec
->
patch_ops
));
return
err
;
}
static
int
hda_codec_driver_remove
(
struct
device
*
dev
)
{
struct
hda_codec
*
codec
=
dev_to_hda_codec
(
dev
);
if
(
codec
->
patch_ops
.
free
)
codec
->
patch_ops
.
free
(
codec
);
codec
->
preset
=
NULL
;
memset
(
&
codec
->
patch_ops
,
0
,
sizeof
(
codec
->
patch_ops
));
module_put
(
dev
->
driver
->
owner
);
return
0
;
}
int
__hda_codec_driver_register
(
struct
hda_codec_driver
*
drv
,
const
char
*
name
,
struct
module
*
owner
)
{
drv
->
driver
.
name
=
name
;
drv
->
driver
.
owner
=
owner
;
drv
->
driver
.
bus
=
&
snd_hda_bus_type
;
drv
->
driver
.
probe
=
hda_codec_driver_probe
;
drv
->
driver
.
remove
=
hda_codec_driver_remove
;
drv
->
driver
.
pm
=
&
hda_codec_driver_pm
;
return
driver_register
(
&
drv
->
driver
);
}
EXPORT_SYMBOL_GPL
(
__hda_codec_driver_register
);
void
hda_codec_driver_unregister
(
struct
hda_codec_driver
*
drv
)
{
driver_unregister
(
&
drv
->
driver
);
}
EXPORT_SYMBOL_GPL
(
hda_codec_driver_unregister
);
static
inline
bool
codec_probed
(
struct
hda_codec
*
codec
)
{
return
device_attach
(
hda_codec_dev
(
codec
))
>
0
&&
codec
->
preset
;
}
/* try to auto-load and bind the codec module */
static
void
codec_bind_module
(
struct
hda_codec
*
codec
)
{
#ifdef MODULE
request_module
(
"snd-hda-codec-id:%08x"
,
codec
->
vendor_id
);
if
(
codec_probed
(
codec
))
return
;
request_module
(
"snd-hda-codec-id:%04x*"
,
(
codec
->
vendor_id
>>
16
)
&
0xffff
);
if
(
codec_probed
(
codec
))
return
;
#endif
}
/* store the codec vendor name */
static
int
get_codec_vendor_name
(
struct
hda_codec
*
codec
)
{
const
struct
hda_vendor_id
*
c
;
const
char
*
vendor
=
NULL
;
u16
vendor_id
=
codec
->
vendor_id
>>
16
;
char
tmp
[
16
];
for
(
c
=
hda_vendor_ids
;
c
->
id
;
c
++
)
{
if
(
c
->
id
==
vendor_id
)
{
vendor
=
c
->
name
;
break
;
}
}
if
(
!
vendor
)
{
sprintf
(
tmp
,
"Generic %04x"
,
vendor_id
);
vendor
=
tmp
;
}
codec
->
vendor_name
=
kstrdup
(
vendor
,
GFP_KERNEL
);
if
(
!
codec
->
vendor_name
)
return
-
ENOMEM
;
return
0
;
}
#if IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI)
/* if all audio out widgets are digital, let's assume the codec as a HDMI/DP */
static
bool
is_likely_hdmi_codec
(
struct
hda_codec
*
codec
)
{
hda_nid_t
nid
=
codec
->
start_nid
;
int
i
;
for
(
i
=
0
;
i
<
codec
->
num_nodes
;
i
++
,
nid
++
)
{
unsigned
int
wcaps
=
get_wcaps
(
codec
,
nid
);
switch
(
get_wcaps_type
(
wcaps
))
{
case
AC_WID_AUD_IN
:
return
false
;
/* HDMI parser supports only HDMI out */
case
AC_WID_AUD_OUT
:
if
(
!
(
wcaps
&
AC_WCAP_DIGITAL
))
return
false
;
break
;
}
}
return
true
;
}
#else
/* no HDMI codec parser support */
#define is_likely_hdmi_codec(codec) false
#endif
/* CONFIG_SND_HDA_CODEC_HDMI */
static
int
codec_bind_generic
(
struct
hda_codec
*
codec
)
{
if
(
codec
->
probe_id
)
return
-
ENODEV
;
if
(
is_likely_hdmi_codec
(
codec
))
{
codec
->
probe_id
=
HDA_CODEC_ID_GENERIC_HDMI
;
#if IS_MODULE(CONFIG_SND_HDA_CODEC_HDMI)
request_module
(
"snd-hda-codec-hdmi"
);
#endif
if
(
codec_probed
(
codec
))
return
0
;
}
codec
->
probe_id
=
HDA_CODEC_ID_GENERIC
;
#if IS_MODULE(CONFIG_SND_HDA_GENERIC)
request_module
(
"snd-hda-codec-generic"
);
#endif
if
(
codec_probed
(
codec
))
return
0
;
return
-
ENODEV
;
}
#if IS_ENABLED(CONFIG_SND_HDA_GENERIC)
#define is_generic_config(codec) \
(codec->modelname && !strcmp(codec->modelname, "generic"))
#else
#define is_generic_config(codec) 0
#endif
/**
* snd_hda_codec_configure - (Re-)configure the HD-audio codec
* @codec: the HDA codec
*
* Start parsing of the given codec tree and (re-)initialize the whole
* patch instance.
*
* Returns 0 if successful or a negative error code.
*/
int
snd_hda_codec_configure
(
struct
hda_codec
*
codec
)
{
int
err
;
if
(
!
codec
->
vendor_name
)
{
err
=
get_codec_vendor_name
(
codec
);
if
(
err
<
0
)
return
err
;
}
if
(
is_generic_config
(
codec
))
codec
->
probe_id
=
HDA_CODEC_ID_GENERIC
;
else
codec
->
probe_id
=
0
;
err
=
device_add
(
hda_codec_dev
(
codec
));
if
(
err
<
0
)
return
err
;
if
(
!
codec
->
preset
)
codec_bind_module
(
codec
);
if
(
!
codec
->
preset
)
{
err
=
codec_bind_generic
(
codec
);
if
(
err
<
0
)
{
codec_err
(
codec
,
"Unable to bind the codec
\n
"
);
goto
error
;
}
}
/* audio codec should override the mixer name */
if
(
codec
->
afg
||
!*
codec
->
bus
->
card
->
mixername
)
snprintf
(
codec
->
bus
->
card
->
mixername
,
sizeof
(
codec
->
bus
->
card
->
mixername
),
"%s %s"
,
codec
->
vendor_name
,
codec
->
chip_name
);
return
0
;
error:
device_del
(
hda_codec_dev
(
codec
));
return
err
;
}
EXPORT_SYMBOL_GPL
(
snd_hda_codec_configure
);
/*
* bus registration
*/
struct
bus_type
snd_hda_bus_type
=
{
.
name
=
"hdaudio"
,
.
match
=
hda_bus_match
,
};
static
int
__init
hda_codec_init
(
void
)
{
return
bus_register
(
&
snd_hda_bus_type
);
}
static
void
__exit
hda_codec_exit
(
void
)
{
bus_unregister
(
&
snd_hda_bus_type
);
}
module_init
(
hda_codec_init
);
module_exit
(
hda_codec_exit
);
sound/pci/hda/hda_codec.c
浏览文件 @
8f88f025
此差异已折叠。
点击以展开。
sound/pci/hda/hda_codec.h
浏览文件 @
8f88f025
...
@@ -83,10 +83,6 @@ struct hda_bus_ops {
...
@@ -83,10 +83,6 @@ struct hda_bus_ops {
struct
hda_pcm
*
pcm
);
struct
hda_pcm
*
pcm
);
/* reset bus for retry verb */
/* reset bus for retry verb */
void
(
*
bus_reset
)(
struct
hda_bus
*
bus
);
void
(
*
bus_reset
)(
struct
hda_bus
*
bus
);
#ifdef CONFIG_PM
/* notify power-up/down from codec to controller */
void
(
*
pm_notify
)(
struct
hda_bus
*
bus
,
bool
power_up
);
#endif
#ifdef CONFIG_SND_HDA_DSP_LOADER
#ifdef CONFIG_SND_HDA_DSP_LOADER
/* prepare DSP transfer */
/* prepare DSP transfer */
int
(
*
load_dsp_prepare
)(
struct
hda_bus
*
bus
,
unsigned
int
format
,
int
(
*
load_dsp_prepare
)(
struct
hda_bus
*
bus
,
unsigned
int
format
,
...
@@ -122,7 +118,6 @@ struct hda_bus {
...
@@ -122,7 +118,6 @@ struct hda_bus {
void
*
private_data
;
void
*
private_data
;
struct
pci_dev
*
pci
;
struct
pci_dev
*
pci
;
const
char
*
modelname
;
const
char
*
modelname
;
int
*
power_save
;
struct
hda_bus_ops
ops
;
struct
hda_bus_ops
ops
;
/* codec linked list */
/* codec linked list */
...
@@ -151,10 +146,10 @@ struct hda_bus {
...
@@ -151,10 +146,10 @@ struct hda_bus {
unsigned
int
rirb_error
:
1
;
/* error in codec communication */
unsigned
int
rirb_error
:
1
;
/* error in codec communication */
unsigned
int
response_reset
:
1
;
/* controller was reset */
unsigned
int
response_reset
:
1
;
/* controller was reset */
unsigned
int
in_reset
:
1
;
/* during reset operation */
unsigned
int
in_reset
:
1
;
/* during reset operation */
unsigned
int
power_keep_link_on
:
1
;
/* don't power off HDA link */
unsigned
int
no_response_fallback
:
1
;
/* don't fallback at RIRB error */
unsigned
int
no_response_fallback
:
1
;
/* don't fallback at RIRB error */
int
primary_dig_out_type
;
/* primary digital out PCM type */
int
primary_dig_out_type
;
/* primary digital out PCM type */
unsigned
long
codec_powered
;
/* bit flags of powered codecs */
};
};
/*
/*
...
@@ -174,15 +169,22 @@ struct hda_codec_preset {
...
@@ -174,15 +169,22 @@ struct hda_codec_preset {
int
(
*
patch
)(
struct
hda_codec
*
codec
);
int
(
*
patch
)(
struct
hda_codec
*
codec
);
};
};
struct
hda_codec_preset_list
{
#define HDA_CODEC_ID_GENERIC_HDMI 0x00000101
#define HDA_CODEC_ID_GENERIC 0x00000201
struct
hda_codec_driver
{
struct
device_driver
driver
;
const
struct
hda_codec_preset
*
preset
;
const
struct
hda_codec_preset
*
preset
;
struct
module
*
owner
;
struct
list_head
list
;
};
};
/* initial hook */
int
__hda_codec_driver_register
(
struct
hda_codec_driver
*
drv
,
const
char
*
name
,
int
snd_hda_add_codec_preset
(
struct
hda_codec_preset_list
*
preset
);
struct
module
*
owner
);
int
snd_hda_delete_codec_preset
(
struct
hda_codec_preset_list
*
preset
);
#define hda_codec_driver_register(drv) \
__hda_codec_driver_register(drv, KBUILD_MODNAME, THIS_MODULE)
void
hda_codec_driver_unregister
(
struct
hda_codec_driver
*
drv
);
#define module_hda_codec_driver(drv) \
module_driver(drv, hda_codec_driver_register, \
hda_codec_driver_unregister)
/* ops set by the preset patch */
/* ops set by the preset patch */
struct
hda_codec_ops
{
struct
hda_codec_ops
{
...
@@ -286,11 +288,10 @@ struct hda_codec {
...
@@ -286,11 +288,10 @@ struct hda_codec {
u32
vendor_id
;
u32
vendor_id
;
u32
subsystem_id
;
u32
subsystem_id
;
u32
revision_id
;
u32
revision_id
;
u32
probe_id
;
/* overridden id for probing */
/* detected preset */
/* detected preset */
const
struct
hda_codec_preset
*
preset
;
const
struct
hda_codec_preset
*
preset
;
struct
module
*
owner
;
int
(
*
parser
)(
struct
hda_codec
*
codec
);
const
char
*
vendor_name
;
/* codec vendor name */
const
char
*
vendor_name
;
/* codec vendor name */
const
char
*
chip_name
;
/* codec chip name */
const
char
*
chip_name
;
/* codec chip name */
const
char
*
modelname
;
/* model name for preset */
const
char
*
modelname
;
/* model name for preset */
...
@@ -366,17 +367,11 @@ struct hda_codec {
...
@@ -366,17 +367,11 @@ struct hda_codec {
unsigned
int
dp_mst
:
1
;
/* support DP1.2 Multi-stream transport */
unsigned
int
dp_mst
:
1
;
/* support DP1.2 Multi-stream transport */
unsigned
int
dump_coef
:
1
;
/* dump processing coefs in codec proc file */
unsigned
int
dump_coef
:
1
;
/* dump processing coefs in codec proc file */
#ifdef CONFIG_PM
#ifdef CONFIG_PM
unsigned
int
power_on
:
1
;
/* current (global) power-state */
unsigned
int
d3_stop_clk
:
1
;
/* support D3 operation without BCLK */
unsigned
int
d3_stop_clk
:
1
;
/* support D3 operation without BCLK */
unsigned
int
pm_up_notified
:
1
;
/* PM notified to controller */
atomic_t
in_pm
;
/* suspend/resume being performed */
unsigned
int
in_pm
:
1
;
/* suspend/resume being performed */
int
power_transition
;
/* power-state in transition */
int
power_count
;
/* current (global) power refcount */
struct
delayed_work
power_work
;
/* delayed task for powerdown */
unsigned
long
power_on_acct
;
unsigned
long
power_on_acct
;
unsigned
long
power_off_acct
;
unsigned
long
power_off_acct
;
unsigned
long
power_jiffies
;
unsigned
long
power_jiffies
;
spinlock_t
power_lock
;
#endif
#endif
/* filter the requested power state per nid */
/* filter the requested power state per nid */
...
@@ -408,6 +403,11 @@ struct hda_codec {
...
@@ -408,6 +403,11 @@ struct hda_codec {
struct
snd_array
verbs
;
struct
snd_array
verbs
;
};
};
#define dev_to_hda_codec(_dev) container_of(_dev, struct hda_codec, dev)
#define hda_codec_dev(_dev) (&(_dev)->dev)
extern
struct
bus_type
snd_hda_bus_type
;
/* direction */
/* direction */
enum
{
enum
{
HDA_INPUT
,
HDA_OUTPUT
HDA_INPUT
,
HDA_OUTPUT
...
@@ -556,14 +556,12 @@ void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
...
@@ -556,14 +556,12 @@ void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
int
snd_hda_lock_devices
(
struct
hda_bus
*
bus
);
int
snd_hda_lock_devices
(
struct
hda_bus
*
bus
);
void
snd_hda_unlock_devices
(
struct
hda_bus
*
bus
);
void
snd_hda_unlock_devices
(
struct
hda_bus
*
bus
);
void
snd_hda_bus_reset
(
struct
hda_bus
*
bus
);
/*
/*
* power management
* power management
*/
*/
#ifdef CONFIG_PM
extern
const
struct
dev_pm_ops
hda_codec_driver_pm
;
int
snd_hda_suspend
(
struct
hda_bus
*
bus
);
int
snd_hda_resume
(
struct
hda_bus
*
bus
);
#endif
static
inline
static
inline
int
hda_call_check_power_status
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
int
hda_call_check_power_status
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
...
@@ -586,64 +584,16 @@ const char *snd_hda_get_jack_location(u32 cfg);
...
@@ -586,64 +584,16 @@ const char *snd_hda_get_jack_location(u32 cfg);
* power saving
* power saving
*/
*/
#ifdef CONFIG_PM
#ifdef CONFIG_PM
void
snd_hda_power_save
(
struct
hda_codec
*
codec
,
int
delta
,
bool
d3wait
);
void
snd_hda_power_up
(
struct
hda_codec
*
codec
);
void
snd_hda_power_down
(
struct
hda_codec
*
codec
);
void
snd_hda_set_power_save
(
struct
hda_bus
*
bus
,
int
delay
);
void
snd_hda_update_power_acct
(
struct
hda_codec
*
codec
);
void
snd_hda_update_power_acct
(
struct
hda_codec
*
codec
);
#else
#else
static
inline
void
snd_hda_power_save
(
struct
hda_codec
*
codec
,
int
delta
,
static
inline
void
snd_hda_power_up
(
struct
hda_codec
*
codec
)
{}
bool
d3wait
)
{}
static
inline
void
snd_hda_power_down
(
struct
hda_codec
*
codec
)
{}
static
inline
void
snd_hda_set_power_save
(
struct
hda_bus
*
bus
,
int
delay
)
{}
#endif
#endif
/**
* snd_hda_power_up - Power-up the codec
* @codec: HD-audio codec
*
* Increment the power-up counter and power up the hardware really when
* not turned on yet.
*/
static
inline
void
snd_hda_power_up
(
struct
hda_codec
*
codec
)
{
snd_hda_power_save
(
codec
,
1
,
false
);
}
/**
* snd_hda_power_up_d3wait - Power-up the codec after waiting for any pending
* D3 transition to complete. This differs from snd_hda_power_up() when
* power_transition == -1. snd_hda_power_up sees this case as a nop,
* snd_hda_power_up_d3wait waits for the D3 transition to complete then powers
* back up.
* @codec: HD-audio codec
*
* Cancel any power down operation hapenning on the work queue, then power up.
*/
static
inline
void
snd_hda_power_up_d3wait
(
struct
hda_codec
*
codec
)
{
snd_hda_power_save
(
codec
,
1
,
true
);
}
/**
* snd_hda_power_down - Power-down the codec
* @codec: HD-audio codec
*
* Decrement the power-up counter and schedules the power-off work if
* the counter rearches to zero.
*/
static
inline
void
snd_hda_power_down
(
struct
hda_codec
*
codec
)
{
snd_hda_power_save
(
codec
,
-
1
,
false
);
}
/**
* snd_hda_power_sync - Synchronize the power-save status
* @codec: HD-audio codec
*
* Synchronize the actual power state with the power account;
* called when power_save parameter is changed
*/
static
inline
void
snd_hda_power_sync
(
struct
hda_codec
*
codec
)
{
snd_hda_power_save
(
codec
,
0
,
false
);
}
#ifdef CONFIG_SND_HDA_PATCH_LOADER
#ifdef CONFIG_SND_HDA_PATCH_LOADER
/*
/*
* patch firmware
* patch firmware
...
...
sound/pci/hda/hda_controller.c
浏览文件 @
8f88f025
...
@@ -258,11 +258,18 @@ static void azx_timecounter_init(struct snd_pcm_substream *substream,
...
@@ -258,11 +258,18 @@ static void azx_timecounter_init(struct snd_pcm_substream *substream,
tc
->
cycle_last
=
last
;
tc
->
cycle_last
=
last
;
}
}
static
inline
struct
hda_pcm_stream
*
to_hda_pcm_stream
(
struct
snd_pcm_substream
*
substream
)
{
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
return
&
apcm
->
info
->
stream
[
substream
->
stream
];
}
static
u64
azx_adjust_codec_delay
(
struct
snd_pcm_substream
*
substream
,
static
u64
azx_adjust_codec_delay
(
struct
snd_pcm_substream
*
substream
,
u64
nsec
)
u64
nsec
)
{
{
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
hda_pcm_stream
*
hinfo
=
apcm
->
hinfo
[
substream
->
stream
]
;
struct
hda_pcm_stream
*
hinfo
=
to_hda_pcm_stream
(
substream
)
;
u64
codec_frames
,
codec_nsecs
;
u64
codec_frames
,
codec_nsecs
;
if
(
!
hinfo
->
ops
.
get_delay
)
if
(
!
hinfo
->
ops
.
get_delay
)
...
@@ -398,7 +405,7 @@ static int azx_setup_periods(struct azx *chip,
...
@@ -398,7 +405,7 @@ static int azx_setup_periods(struct azx *chip,
static
int
azx_pcm_close
(
struct
snd_pcm_substream
*
substream
)
static
int
azx_pcm_close
(
struct
snd_pcm_substream
*
substream
)
{
{
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
hda_pcm_stream
*
hinfo
=
apcm
->
hinfo
[
substream
->
stream
]
;
struct
hda_pcm_stream
*
hinfo
=
to_hda_pcm_stream
(
substream
)
;
struct
azx
*
chip
=
apcm
->
chip
;
struct
azx
*
chip
=
apcm
->
chip
;
struct
azx_dev
*
azx_dev
=
get_azx_dev
(
substream
);
struct
azx_dev
*
azx_dev
=
get_azx_dev
(
substream
);
unsigned
long
flags
;
unsigned
long
flags
;
...
@@ -440,7 +447,7 @@ static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
...
@@ -440,7 +447,7 @@ static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
azx_dev
*
azx_dev
=
get_azx_dev
(
substream
);
struct
azx_dev
*
azx_dev
=
get_azx_dev
(
substream
);
struct
azx
*
chip
=
apcm
->
chip
;
struct
azx
*
chip
=
apcm
->
chip
;
struct
hda_pcm_stream
*
hinfo
=
apcm
->
hinfo
[
substream
->
stream
]
;
struct
hda_pcm_stream
*
hinfo
=
to_hda_pcm_stream
(
substream
)
;
int
err
;
int
err
;
/* reset BDL address */
/* reset BDL address */
...
@@ -467,7 +474,7 @@ static int azx_pcm_prepare(struct snd_pcm_substream *substream)
...
@@ -467,7 +474,7 @@ static int azx_pcm_prepare(struct snd_pcm_substream *substream)
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
azx
*
chip
=
apcm
->
chip
;
struct
azx
*
chip
=
apcm
->
chip
;
struct
azx_dev
*
azx_dev
=
get_azx_dev
(
substream
);
struct
azx_dev
*
azx_dev
=
get_azx_dev
(
substream
);
struct
hda_pcm_stream
*
hinfo
=
apcm
->
hinfo
[
substream
->
stream
]
;
struct
hda_pcm_stream
*
hinfo
=
to_hda_pcm_stream
(
substream
)
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
unsigned
int
bufsize
,
period_bytes
,
format_val
,
stream_tag
;
unsigned
int
bufsize
,
period_bytes
,
format_val
,
stream_tag
;
int
err
;
int
err
;
...
@@ -707,7 +714,7 @@ unsigned int azx_get_position(struct azx *chip,
...
@@ -707,7 +714,7 @@ unsigned int azx_get_position(struct azx *chip,
if
(
substream
->
runtime
)
{
if
(
substream
->
runtime
)
{
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
hda_pcm_stream
*
hinfo
=
apcm
->
hinfo
[
stream
]
;
struct
hda_pcm_stream
*
hinfo
=
to_hda_pcm_stream
(
substream
)
;
if
(
chip
->
get_delay
[
stream
])
if
(
chip
->
get_delay
[
stream
])
delay
+=
chip
->
get_delay
[
stream
](
chip
,
azx_dev
,
pos
);
delay
+=
chip
->
get_delay
[
stream
](
chip
,
azx_dev
,
pos
);
...
@@ -790,7 +797,7 @@ static struct snd_pcm_hardware azx_pcm_hw = {
...
@@ -790,7 +797,7 @@ static struct snd_pcm_hardware azx_pcm_hw = {
static
int
azx_pcm_open
(
struct
snd_pcm_substream
*
substream
)
static
int
azx_pcm_open
(
struct
snd_pcm_substream
*
substream
)
{
{
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
azx_pcm
*
apcm
=
snd_pcm_substream_chip
(
substream
);
struct
hda_pcm_stream
*
hinfo
=
apcm
->
hinfo
[
substream
->
stream
]
;
struct
hda_pcm_stream
*
hinfo
=
to_hda_pcm_stream
(
substream
)
;
struct
azx
*
chip
=
apcm
->
chip
;
struct
azx
*
chip
=
apcm
->
chip
;
struct
azx_dev
*
azx_dev
;
struct
azx_dev
*
azx_dev
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
...
@@ -836,7 +843,7 @@ static int azx_pcm_open(struct snd_pcm_substream *substream)
...
@@ -836,7 +843,7 @@ static int azx_pcm_open(struct snd_pcm_substream *substream)
buff_step
);
buff_step
);
snd_pcm_hw_constraint_step
(
runtime
,
0
,
SNDRV_PCM_HW_PARAM_PERIOD_BYTES
,
snd_pcm_hw_constraint_step
(
runtime
,
0
,
SNDRV_PCM_HW_PARAM_PERIOD_BYTES
,
buff_step
);
buff_step
);
snd_hda_power_up
_d3wait
(
apcm
->
codec
);
snd_hda_power_up
(
apcm
->
codec
);
err
=
hinfo
->
ops
.
open
(
hinfo
,
apcm
->
codec
,
substream
);
err
=
hinfo
->
ops
.
open
(
hinfo
,
apcm
->
codec
,
substream
);
if
(
err
<
0
)
{
if
(
err
<
0
)
{
azx_release_device
(
azx_dev
);
azx_release_device
(
azx_dev
);
...
@@ -904,6 +911,7 @@ static void azx_pcm_free(struct snd_pcm *pcm)
...
@@ -904,6 +911,7 @@ static void azx_pcm_free(struct snd_pcm *pcm)
struct
azx_pcm
*
apcm
=
pcm
->
private_data
;
struct
azx_pcm
*
apcm
=
pcm
->
private_data
;
if
(
apcm
)
{
if
(
apcm
)
{
list_del
(
&
apcm
->
list
);
list_del
(
&
apcm
->
list
);
apcm
->
info
->
pcm
=
NULL
;
kfree
(
apcm
);
kfree
(
apcm
);
}
}
}
}
...
@@ -940,6 +948,7 @@ static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
...
@@ -940,6 +948,7 @@ static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
apcm
->
chip
=
chip
;
apcm
->
chip
=
chip
;
apcm
->
pcm
=
pcm
;
apcm
->
pcm
=
pcm
;
apcm
->
codec
=
codec
;
apcm
->
codec
=
codec
;
apcm
->
info
=
cpcm
;
pcm
->
private_data
=
apcm
;
pcm
->
private_data
=
apcm
;
pcm
->
private_free
=
azx_pcm_free
;
pcm
->
private_free
=
azx_pcm_free
;
if
(
cpcm
->
pcm_type
==
HDA_PCM_TYPE_MODEM
)
if
(
cpcm
->
pcm_type
==
HDA_PCM_TYPE_MODEM
)
...
@@ -947,7 +956,6 @@ static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
...
@@ -947,7 +956,6 @@ static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
list_add_tail
(
&
apcm
->
list
,
&
chip
->
pcm_list
);
list_add_tail
(
&
apcm
->
list
,
&
chip
->
pcm_list
);
cpcm
->
pcm
=
pcm
;
cpcm
->
pcm
=
pcm
;
for
(
s
=
0
;
s
<
2
;
s
++
)
{
for
(
s
=
0
;
s
<
2
;
s
++
)
{
apcm
->
hinfo
[
s
]
=
&
cpcm
->
stream
[
s
];
if
(
cpcm
->
stream
[
s
].
substreams
)
if
(
cpcm
->
stream
[
s
].
substreams
)
snd_pcm_set_ops
(
pcm
,
s
,
&
azx_pcm_ops
);
snd_pcm_set_ops
(
pcm
,
s
,
&
azx_pcm_ops
);
}
}
...
@@ -958,9 +966,6 @@ static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
...
@@ -958,9 +966,6 @@ static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
snd_pcm_lib_preallocate_pages_for_all
(
pcm
,
SNDRV_DMA_TYPE_DEV_SG
,
snd_pcm_lib_preallocate_pages_for_all
(
pcm
,
SNDRV_DMA_TYPE_DEV_SG
,
chip
->
card
->
dev
,
chip
->
card
->
dev
,
size
,
MAX_PREALLOC_SIZE
);
size
,
MAX_PREALLOC_SIZE
);
/* link to codec */
for
(
s
=
0
;
s
<
2
;
s
++
)
pcm
->
streams
[
s
].
dev
.
parent
=
&
codec
->
dev
;
return
0
;
return
0
;
}
}
...
@@ -1778,34 +1783,11 @@ static void azx_bus_reset(struct hda_bus *bus)
...
@@ -1778,34 +1783,11 @@ static void azx_bus_reset(struct hda_bus *bus)
bus
->
in_reset
=
1
;
bus
->
in_reset
=
1
;
azx_stop_chip
(
chip
);
azx_stop_chip
(
chip
);
azx_init_chip
(
chip
,
true
);
azx_init_chip
(
chip
,
true
);
#ifdef CONFIG_PM
if
(
chip
->
initialized
)
if
(
chip
->
initialized
)
{
snd_hda_bus_reset
(
chip
->
bus
);
struct
azx_pcm
*
p
;
list_for_each_entry
(
p
,
&
chip
->
pcm_list
,
list
)
snd_pcm_suspend_all
(
p
->
pcm
);
snd_hda_suspend
(
chip
->
bus
);
snd_hda_resume
(
chip
->
bus
);
}
#endif
bus
->
in_reset
=
0
;
bus
->
in_reset
=
0
;
}
}
#ifdef CONFIG_PM
/* power-up/down the controller */
static
void
azx_power_notify
(
struct
hda_bus
*
bus
,
bool
power_up
)
{
struct
azx
*
chip
=
bus
->
private_data
;
if
(
!
azx_has_pm_runtime
(
chip
))
return
;
if
(
power_up
)
pm_runtime_get_sync
(
chip
->
card
->
dev
);
else
pm_runtime_put_sync
(
chip
->
card
->
dev
);
}
#endif
static
int
get_jackpoll_interval
(
struct
azx
*
chip
)
static
int
get_jackpoll_interval
(
struct
azx
*
chip
)
{
{
int
i
;
int
i
;
...
@@ -1832,9 +1814,6 @@ static struct hda_bus_ops bus_ops = {
...
@@ -1832,9 +1814,6 @@ static struct hda_bus_ops bus_ops = {
.
get_response
=
azx_get_response
,
.
get_response
=
azx_get_response
,
.
attach_pcm
=
azx_attach_pcm_stream
,
.
attach_pcm
=
azx_attach_pcm_stream
,
.
bus_reset
=
azx_bus_reset
,
.
bus_reset
=
azx_bus_reset
,
#ifdef CONFIG_PM
.
pm_notify
=
azx_power_notify
,
#endif
#ifdef CONFIG_SND_HDA_DSP_LOADER
#ifdef CONFIG_SND_HDA_DSP_LOADER
.
load_dsp_prepare
=
azx_load_dsp_prepare
,
.
load_dsp_prepare
=
azx_load_dsp_prepare
,
.
load_dsp_trigger
=
azx_load_dsp_trigger
,
.
load_dsp_trigger
=
azx_load_dsp_trigger
,
...
@@ -1843,7 +1822,7 @@ static struct hda_bus_ops bus_ops = {
...
@@ -1843,7 +1822,7 @@ static struct hda_bus_ops bus_ops = {
};
};
/* HD-audio bus initialization */
/* HD-audio bus initialization */
int
azx_bus_create
(
struct
azx
*
chip
,
const
char
*
model
,
int
*
power_save_to
)
int
azx_bus_create
(
struct
azx
*
chip
,
const
char
*
model
)
{
{
struct
hda_bus
*
bus
;
struct
hda_bus
*
bus
;
int
err
;
int
err
;
...
@@ -1857,9 +1836,6 @@ int azx_bus_create(struct azx *chip, const char *model, int *power_save_to)
...
@@ -1857,9 +1836,6 @@ int azx_bus_create(struct azx *chip, const char *model, int *power_save_to)
bus
->
pci
=
chip
->
pci
;
bus
->
pci
=
chip
->
pci
;
bus
->
modelname
=
model
;
bus
->
modelname
=
model
;
bus
->
ops
=
bus_ops
;
bus
->
ops
=
bus_ops
;
#ifdef CONFIG_PM
bus
->
power_save
=
power_save_to
;
#endif
if
(
chip
->
driver_caps
&
AZX_DCAPS_RIRB_DELAY
)
{
if
(
chip
->
driver_caps
&
AZX_DCAPS_RIRB_DELAY
)
{
dev_dbg
(
chip
->
card
->
dev
,
"Enable delay in RIRB handling
\n
"
);
dev_dbg
(
chip
->
card
->
dev
,
"Enable delay in RIRB handling
\n
"
);
...
...
sound/pci/hda/hda_controller.h
浏览文件 @
8f88f025
...
@@ -283,7 +283,7 @@ struct azx_pcm {
...
@@ -283,7 +283,7 @@ struct azx_pcm {
struct
azx
*
chip
;
struct
azx
*
chip
;
struct
snd_pcm
*
pcm
;
struct
snd_pcm
*
pcm
;
struct
hda_codec
*
codec
;
struct
hda_codec
*
codec
;
struct
hda_pcm
_stream
*
hinfo
[
2
]
;
struct
hda_pcm
*
info
;
struct
list_head
list
;
struct
list_head
list
;
};
};
...
@@ -432,7 +432,7 @@ void azx_enter_link_reset(struct azx *chip);
...
@@ -432,7 +432,7 @@ void azx_enter_link_reset(struct azx *chip);
irqreturn_t
azx_interrupt
(
int
irq
,
void
*
dev_id
);
irqreturn_t
azx_interrupt
(
int
irq
,
void
*
dev_id
);
/* Codec interface */
/* Codec interface */
int
azx_bus_create
(
struct
azx
*
chip
,
const
char
*
model
,
int
*
power_save_to
);
int
azx_bus_create
(
struct
azx
*
chip
,
const
char
*
model
);
int
azx_probe_codecs
(
struct
azx
*
chip
,
unsigned
int
max_slots
);
int
azx_probe_codecs
(
struct
azx
*
chip
,
unsigned
int
max_slots
);
int
azx_codec_configure
(
struct
azx
*
chip
);
int
azx_codec_configure
(
struct
azx
*
chip
);
int
azx_init_stream
(
struct
azx
*
chip
);
int
azx_init_stream
(
struct
azx
*
chip
);
...
...
sound/pci/hda/hda_generic.c
浏览文件 @
8f88f025
...
@@ -5524,13 +5524,11 @@ static const struct hda_codec_ops generic_patch_ops = {
...
@@ -5524,13 +5524,11 @@ static const struct hda_codec_ops generic_patch_ops = {
#endif
#endif
};
};
/*
*
/*
* snd_hda_parse_generic_codec - Generic codec parser
* snd_hda_parse_generic_codec - Generic codec parser
* @codec: the HDA codec
* @codec: the HDA codec
*
* This should be called from the HDA codec core.
*/
*/
int
snd_hda_parse_generic_codec
(
struct
hda_codec
*
codec
)
static
int
snd_hda_parse_generic_codec
(
struct
hda_codec
*
codec
)
{
{
struct
hda_gen_spec
*
spec
;
struct
hda_gen_spec
*
spec
;
int
err
;
int
err
;
...
@@ -5556,7 +5554,17 @@ int snd_hda_parse_generic_codec(struct hda_codec *codec)
...
@@ -5556,7 +5554,17 @@ int snd_hda_parse_generic_codec(struct hda_codec *codec)
snd_hda_gen_free
(
codec
);
snd_hda_gen_free
(
codec
);
return
err
;
return
err
;
}
}
EXPORT_SYMBOL_GPL
(
snd_hda_parse_generic_codec
);
static
const
struct
hda_codec_preset
snd_hda_preset_generic
[]
=
{
{
.
id
=
HDA_CODEC_ID_GENERIC
,
.
patch
=
snd_hda_parse_generic_codec
},
{}
/* terminator */
};
static
struct
hda_codec_driver
generic_driver
=
{
.
preset
=
snd_hda_preset_generic
,
};
module_hda_codec_driver
(
generic_driver
);
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Generic HD-audio codec parser"
);
MODULE_DESCRIPTION
(
"Generic HD-audio codec parser"
);
sound/pci/hda/hda_hwdep.c
浏览文件 @
8f88f025
...
@@ -116,9 +116,6 @@ int snd_hda_create_hwdep(struct hda_codec *codec)
...
@@ -116,9 +116,6 @@ int snd_hda_create_hwdep(struct hda_codec *codec)
hwdep
->
ops
.
ioctl_compat
=
hda_hwdep_ioctl_compat
;
hwdep
->
ops
.
ioctl_compat
=
hda_hwdep_ioctl_compat
;
#endif
#endif
/* link to codec */
hwdep
->
dev
.
parent
=
&
codec
->
dev
;
/* for sysfs */
/* for sysfs */
hwdep
->
dev
.
groups
=
snd_hda_dev_attr_groups
;
hwdep
->
dev
.
groups
=
snd_hda_dev_attr_groups
;
dev_set_drvdata
(
&
hwdep
->
dev
,
codec
);
dev_set_drvdata
(
&
hwdep
->
dev
,
codec
);
...
...
sound/pci/hda/hda_intel.c
浏览文件 @
8f88f025
...
@@ -173,7 +173,6 @@ static struct kernel_param_ops param_ops_xint = {
...
@@ -173,7 +173,6 @@ static struct kernel_param_ops param_ops_xint = {
#define param_check_xint param_check_int
#define param_check_xint param_check_int
static
int
power_save
=
CONFIG_SND_HDA_POWER_SAVE_DEFAULT
;
static
int
power_save
=
CONFIG_SND_HDA_POWER_SAVE_DEFAULT
;
static
int
*
power_save_addr
=
&
power_save
;
module_param
(
power_save
,
xint
,
0644
);
module_param
(
power_save
,
xint
,
0644
);
MODULE_PARM_DESC
(
power_save
,
"Automatic power-saving timeout "
MODULE_PARM_DESC
(
power_save
,
"Automatic power-saving timeout "
"(in second, 0 = disable)."
);
"(in second, 0 = disable)."
);
...
@@ -186,7 +185,7 @@ static bool power_save_controller = 1;
...
@@ -186,7 +185,7 @@ static bool power_save_controller = 1;
module_param
(
power_save_controller
,
bool
,
0644
);
module_param
(
power_save_controller
,
bool
,
0644
);
MODULE_PARM_DESC
(
power_save_controller
,
"Reset controller in power save mode."
);
MODULE_PARM_DESC
(
power_save_controller
,
"Reset controller in power save mode."
);
#else
#else
static
int
*
power_save_addr
;
#define power_save 0
#endif
/* CONFIG_PM */
#endif
/* CONFIG_PM */
static
int
align_buffer_size
=
-
1
;
static
int
align_buffer_size
=
-
1
;
...
@@ -740,7 +739,6 @@ static int param_set_xint(const char *val, const struct kernel_param *kp)
...
@@ -740,7 +739,6 @@ static int param_set_xint(const char *val, const struct kernel_param *kp)
{
{
struct
hda_intel
*
hda
;
struct
hda_intel
*
hda
;
struct
azx
*
chip
;
struct
azx
*
chip
;
struct
hda_codec
*
c
;
int
prev
=
power_save
;
int
prev
=
power_save
;
int
ret
=
param_set_int
(
val
,
kp
);
int
ret
=
param_set_int
(
val
,
kp
);
...
@@ -752,8 +750,7 @@ static int param_set_xint(const char *val, const struct kernel_param *kp)
...
@@ -752,8 +750,7 @@ static int param_set_xint(const char *val, const struct kernel_param *kp)
chip
=
&
hda
->
chip
;
chip
=
&
hda
->
chip
;
if
(
!
chip
->
bus
||
chip
->
disabled
)
if
(
!
chip
->
bus
||
chip
->
disabled
)
continue
;
continue
;
list_for_each_entry
(
c
,
&
chip
->
bus
->
codec_list
,
list
)
snd_hda_set_power_save
(
chip
->
bus
,
power_save
*
1000
);
snd_hda_power_sync
(
c
);
}
}
mutex_unlock
(
&
card_list_lock
);
mutex_unlock
(
&
card_list_lock
);
return
0
;
return
0
;
...
@@ -772,7 +769,6 @@ static int azx_suspend(struct device *dev)
...
@@ -772,7 +769,6 @@ static int azx_suspend(struct device *dev)
struct
snd_card
*
card
=
dev_get_drvdata
(
dev
);
struct
snd_card
*
card
=
dev_get_drvdata
(
dev
);
struct
azx
*
chip
;
struct
azx
*
chip
;
struct
hda_intel
*
hda
;
struct
hda_intel
*
hda
;
struct
azx_pcm
*
p
;
if
(
!
card
)
if
(
!
card
)
return
0
;
return
0
;
...
@@ -784,10 +780,6 @@ static int azx_suspend(struct device *dev)
...
@@ -784,10 +780,6 @@ static int azx_suspend(struct device *dev)
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D3hot
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D3hot
);
azx_clear_irq_pending
(
chip
);
azx_clear_irq_pending
(
chip
);
list_for_each_entry
(
p
,
&
chip
->
pcm_list
,
list
)
snd_pcm_suspend_all
(
p
->
pcm
);
if
(
chip
->
initialized
)
snd_hda_suspend
(
chip
->
bus
);
azx_stop_chip
(
chip
);
azx_stop_chip
(
chip
);
azx_enter_link_reset
(
chip
);
azx_enter_link_reset
(
chip
);
if
(
chip
->
irq
>=
0
)
{
if
(
chip
->
irq
>=
0
)
{
...
@@ -830,7 +822,6 @@ static int azx_resume(struct device *dev)
...
@@ -830,7 +822,6 @@ static int azx_resume(struct device *dev)
azx_init_chip
(
chip
,
true
);
azx_init_chip
(
chip
,
true
);
snd_hda_resume
(
chip
->
bus
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D0
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D0
);
return
0
;
return
0
;
}
}
...
@@ -927,7 +918,8 @@ static int azx_runtime_idle(struct device *dev)
...
@@ -927,7 +918,8 @@ static int azx_runtime_idle(struct device *dev)
if
(
chip
->
disabled
||
hda
->
init_failed
)
if
(
chip
->
disabled
||
hda
->
init_failed
)
return
0
;
return
0
;
if
(
!
power_save_controller
||
!
azx_has_pm_runtime
(
chip
))
if
(
!
power_save_controller
||
!
azx_has_pm_runtime
(
chip
)
||
chip
->
bus
->
codec_powered
)
return
-
EBUSY
;
return
-
EBUSY
;
return
0
;
return
0
;
...
@@ -1612,19 +1604,6 @@ static int azx_first_init(struct azx *chip)
...
@@ -1612,19 +1604,6 @@ static int azx_first_init(struct azx *chip)
return
0
;
return
0
;
}
}
static
void
power_down_all_codecs
(
struct
azx
*
chip
)
{
#ifdef CONFIG_PM
/* The codecs were powered up in snd_hda_codec_new().
* Now all initialization done, so turn them down if possible
*/
struct
hda_codec
*
codec
;
list_for_each_entry
(
codec
,
&
chip
->
bus
->
codec_list
,
list
)
{
snd_hda_power_down
(
codec
);
}
#endif
}
#ifdef CONFIG_SND_HDA_PATCH_LOADER
#ifdef CONFIG_SND_HDA_PATCH_LOADER
/* callback from request_firmware_nowait() */
/* callback from request_firmware_nowait() */
static
void
azx_firmware_cb
(
const
struct
firmware
*
fw
,
void
*
context
)
static
void
azx_firmware_cb
(
const
struct
firmware
*
fw
,
void
*
context
)
...
@@ -1893,7 +1872,7 @@ static int azx_probe_continue(struct azx *chip)
...
@@ -1893,7 +1872,7 @@ static int azx_probe_continue(struct azx *chip)
#endif
#endif
/* create codec instances */
/* create codec instances */
err
=
azx_bus_create
(
chip
,
model
[
dev
]
,
power_save_addr
);
err
=
azx_bus_create
(
chip
,
model
[
dev
]);
if
(
err
<
0
)
if
(
err
<
0
)
goto
out_free
;
goto
out_free
;
...
@@ -1934,9 +1913,9 @@ static int azx_probe_continue(struct azx *chip)
...
@@ -1934,9 +1913,9 @@ static int azx_probe_continue(struct azx *chip)
goto
out_free
;
goto
out_free
;
chip
->
running
=
1
;
chip
->
running
=
1
;
power_down_all_codecs
(
chip
);
azx_notifier_register
(
chip
);
azx_notifier_register
(
chip
);
azx_add_card_list
(
chip
);
azx_add_card_list
(
chip
);
snd_hda_set_power_save
(
chip
->
bus
,
power_save
*
1000
);
if
(
azx_has_pm_runtime
(
chip
)
||
hda
->
use_vga_switcheroo
)
if
(
azx_has_pm_runtime
(
chip
)
||
hda
->
use_vga_switcheroo
)
pm_runtime_put_noidle
(
&
pci
->
dev
);
pm_runtime_put_noidle
(
&
pci
->
dev
);
...
...
sound/pci/hda/hda_local.h
浏览文件 @
8f88f025
...
@@ -272,29 +272,6 @@ int snd_hda_add_imux_item(struct hda_codec *codec,
...
@@ -272,29 +272,6 @@ int snd_hda_add_imux_item(struct hda_codec *codec,
struct
hda_input_mux
*
imux
,
const
char
*
label
,
struct
hda_input_mux
*
imux
,
const
char
*
label
,
int
index
,
int
*
type_index_ret
);
int
index
,
int
*
type_index_ret
);
/*
* Channel mode helper
*/
struct
hda_channel_mode
{
int
channels
;
const
struct
hda_verb
*
sequence
;
};
int
snd_hda_ch_mode_info
(
struct
hda_codec
*
codec
,
struct
snd_ctl_elem_info
*
uinfo
,
const
struct
hda_channel_mode
*
chmode
,
int
num_chmodes
);
int
snd_hda_ch_mode_get
(
struct
hda_codec
*
codec
,
struct
snd_ctl_elem_value
*
ucontrol
,
const
struct
hda_channel_mode
*
chmode
,
int
num_chmodes
,
int
max_channels
);
int
snd_hda_ch_mode_put
(
struct
hda_codec
*
codec
,
struct
snd_ctl_elem_value
*
ucontrol
,
const
struct
hda_channel_mode
*
chmode
,
int
num_chmodes
,
int
*
max_channelsp
);
/*
/*
* Multi-channel / digital-out PCM helper
* Multi-channel / digital-out PCM helper
*/
*/
...
@@ -350,12 +327,6 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
...
@@ -350,12 +327,6 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
int
snd_hda_multi_out_analog_cleanup
(
struct
hda_codec
*
codec
,
int
snd_hda_multi_out_analog_cleanup
(
struct
hda_codec
*
codec
,
struct
hda_multi_out
*
mout
);
struct
hda_multi_out
*
mout
);
/*
* generic codec parser
*/
int
snd_hda_parse_generic_codec
(
struct
hda_codec
*
codec
);
int
snd_hda_parse_hdmi_codec
(
struct
hda_codec
*
codec
);
/*
/*
* generic proc interface
* generic proc interface
*/
*/
...
@@ -783,9 +754,13 @@ void snd_print_channel_allocation(int spk_alloc, char *buf, int buflen);
...
@@ -783,9 +754,13 @@ void snd_print_channel_allocation(int spk_alloc, char *buf, int buflen);
/*
/*
*/
*/
#define codec_err(codec, fmt, args...) dev_err(&(codec)->dev, fmt, ##args)
#define codec_err(codec, fmt, args...) \
#define codec_warn(codec, fmt, args...) dev_warn(&(codec)->dev, fmt, ##args)
dev_err(hda_codec_dev(codec), fmt, ##args)
#define codec_info(codec, fmt, args...) dev_info(&(codec)->dev, fmt, ##args)
#define codec_warn(codec, fmt, args...) \
#define codec_dbg(codec, fmt, args...) dev_dbg(&(codec)->dev, fmt, ##args)
dev_warn(hda_codec_dev(codec), fmt, ##args)
#define codec_info(codec, fmt, args...) \
dev_info(hda_codec_dev(codec), fmt, ##args)
#define codec_dbg(codec, fmt, args...) \
dev_dbg(hda_codec_dev(codec), fmt, ##args)
#endif
/* __SOUND_HDA_LOCAL_H */
#endif
/* __SOUND_HDA_LOCAL_H */
sound/pci/hda/hda_tegra.c
浏览文件 @
8f88f025
...
@@ -81,7 +81,7 @@ module_param(power_save, bint, 0644);
...
@@ -81,7 +81,7 @@ module_param(power_save, bint, 0644);
MODULE_PARM_DESC
(
power_save
,
MODULE_PARM_DESC
(
power_save
,
"Automatic power-saving timeout (in seconds, 0 = disable)."
);
"Automatic power-saving timeout (in seconds, 0 = disable)."
);
#else
#else
static
int
power_save
=
0
;
#define power_save 0
#endif
#endif
/*
/*
...
@@ -249,14 +249,9 @@ static int hda_tegra_suspend(struct device *dev)
...
@@ -249,14 +249,9 @@ static int hda_tegra_suspend(struct device *dev)
{
{
struct
snd_card
*
card
=
dev_get_drvdata
(
dev
);
struct
snd_card
*
card
=
dev_get_drvdata
(
dev
);
struct
azx
*
chip
=
card
->
private_data
;
struct
azx
*
chip
=
card
->
private_data
;
struct
azx_pcm
*
p
;
struct
hda_tegra
*
hda
=
container_of
(
chip
,
struct
hda_tegra
,
chip
);
struct
hda_tegra
*
hda
=
container_of
(
chip
,
struct
hda_tegra
,
chip
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D3hot
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D3hot
);
list_for_each_entry
(
p
,
&
chip
->
pcm_list
,
list
)
snd_pcm_suspend_all
(
p
->
pcm
);
if
(
chip
->
initialized
)
snd_hda_suspend
(
chip
->
bus
);
azx_stop_chip
(
chip
);
azx_stop_chip
(
chip
);
azx_enter_link_reset
(
chip
);
azx_enter_link_reset
(
chip
);
...
@@ -277,7 +272,6 @@ static int hda_tegra_resume(struct device *dev)
...
@@ -277,7 +272,6 @@ static int hda_tegra_resume(struct device *dev)
azx_init_chip
(
chip
,
1
);
azx_init_chip
(
chip
,
1
);
snd_hda_resume
(
chip
->
bus
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D0
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D0
);
return
0
;
return
0
;
...
@@ -343,17 +337,6 @@ static int hda_tegra_init_chip(struct azx *chip, struct platform_device *pdev)
...
@@ -343,17 +337,6 @@ static int hda_tegra_init_chip(struct azx *chip, struct platform_device *pdev)
return
0
;
return
0
;
}
}
/*
* The codecs were powered up in snd_hda_codec_new().
* Now all initialization done, so turn them down if possible
*/
static
void
power_down_all_codecs
(
struct
azx
*
chip
)
{
struct
hda_codec
*
codec
;
list_for_each_entry
(
codec
,
&
chip
->
bus
->
codec_list
,
list
)
snd_hda_power_down
(
codec
);
}
static
int
hda_tegra_first_init
(
struct
azx
*
chip
,
struct
platform_device
*
pdev
)
static
int
hda_tegra_first_init
(
struct
azx
*
chip
,
struct
platform_device
*
pdev
)
{
{
struct
snd_card
*
card
=
chip
->
card
;
struct
snd_card
*
card
=
chip
->
card
;
...
@@ -502,7 +485,7 @@ static int hda_tegra_probe(struct platform_device *pdev)
...
@@ -502,7 +485,7 @@ static int hda_tegra_probe(struct platform_device *pdev)
goto
out_free
;
goto
out_free
;
/* create codec instances */
/* create codec instances */
err
=
azx_bus_create
(
chip
,
NULL
,
&
power_save
);
err
=
azx_bus_create
(
chip
,
NULL
);
if
(
err
<
0
)
if
(
err
<
0
)
goto
out_free
;
goto
out_free
;
...
@@ -529,8 +512,8 @@ static int hda_tegra_probe(struct platform_device *pdev)
...
@@ -529,8 +512,8 @@ static int hda_tegra_probe(struct platform_device *pdev)
goto
out_free
;
goto
out_free
;
chip
->
running
=
1
;
chip
->
running
=
1
;
power_down_all_codecs
(
chip
);
azx_notifier_register
(
chip
);
azx_notifier_register
(
chip
);
snd_hda_set_power_save
(
chip
->
bus
,
power_save
*
1000
);
return
0
;
return
0
;
...
...
sound/pci/hda/hda_trace.h
浏览文件 @
8f88f025
...
@@ -87,30 +87,6 @@ DEFINE_EVENT(hda_power, hda_power_up,
...
@@ -87,30 +87,6 @@ DEFINE_EVENT(hda_power, hda_power_up,
TP_PROTO
(
struct
hda_codec
*
codec
),
TP_PROTO
(
struct
hda_codec
*
codec
),
TP_ARGS
(
codec
)
TP_ARGS
(
codec
)
);
);
TRACE_EVENT
(
hda_power_count
,
TP_PROTO
(
struct
hda_codec
*
codec
),
TP_ARGS
(
codec
),
TP_STRUCT__entry
(
__field
(
unsigned
int
,
card
)
__field
(
unsigned
int
,
addr
)
__field
(
int
,
power_count
)
__field
(
int
,
power_on
)
__field
(
int
,
power_transition
)
),
TP_fast_assign
(
__entry
->
card
=
(
codec
)
->
bus
->
card
->
number
;
__entry
->
addr
=
(
codec
)
->
addr
;
__entry
->
power_count
=
(
codec
)
->
power_count
;
__entry
->
power_on
=
(
codec
)
->
power_on
;
__entry
->
power_transition
=
(
codec
)
->
power_transition
;
),
TP_printk
(
"[%d:%d] power_count=%d, power_on=%d, power_transition=%d"
,
__entry
->
card
,
__entry
->
addr
,
__entry
->
power_count
,
__entry
->
power_on
,
__entry
->
power_transition
)
);
#endif
/* CONFIG_PM */
#endif
/* CONFIG_PM */
TRACE_EVENT
(
hda_unsol_event
,
TRACE_EVENT
(
hda_unsol_event
,
...
...
sound/pci/hda/patch_analog.c
浏览文件 @
8f88f025
...
@@ -1194,20 +1194,8 @@ MODULE_ALIAS("snd-hda-codec-id:11d4*");
...
@@ -1194,20 +1194,8 @@ MODULE_ALIAS("snd-hda-codec-id:11d4*");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Analog Devices HD-audio codec"
);
MODULE_DESCRIPTION
(
"Analog Devices HD-audio codec"
);
static
struct
hda_codec_
preset_list
analog_list
=
{
static
struct
hda_codec_
driver
analog_driver
=
{
.
preset
=
snd_hda_preset_analog
,
.
preset
=
snd_hda_preset_analog
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_analog_init
(
void
)
module_hda_codec_driver
(
analog_driver
);
{
return
snd_hda_add_codec_preset
(
&
analog_list
);
}
static
void
__exit
patch_analog_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
analog_list
);
}
module_init
(
patch_analog_init
)
module_exit
(
patch_analog_exit
)
sound/pci/hda/patch_ca0110.c
浏览文件 @
8f88f025
...
@@ -98,20 +98,8 @@ MODULE_ALIAS("snd-hda-codec-id:1102000d");
...
@@ -98,20 +98,8 @@ MODULE_ALIAS("snd-hda-codec-id:1102000d");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Creative CA0110-IBG HD-audio codec"
);
MODULE_DESCRIPTION
(
"Creative CA0110-IBG HD-audio codec"
);
static
struct
hda_codec_
preset_list
ca0110_list
=
{
static
struct
hda_codec_
driver
ca0110_driver
=
{
.
preset
=
snd_hda_preset_ca0110
,
.
preset
=
snd_hda_preset_ca0110
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_ca0110_init
(
void
)
module_hda_codec_driver
(
ca0110_driver
);
{
return
snd_hda_add_codec_preset
(
&
ca0110_list
);
}
static
void
__exit
patch_ca0110_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
ca0110_list
);
}
module_init
(
patch_ca0110_init
)
module_exit
(
patch_ca0110_exit
)
sound/pci/hda/patch_ca0132.c
浏览文件 @
8f88f025
...
@@ -4702,20 +4702,8 @@ MODULE_ALIAS("snd-hda-codec-id:11020011");
...
@@ -4702,20 +4702,8 @@ MODULE_ALIAS("snd-hda-codec-id:11020011");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Creative Sound Core3D codec"
);
MODULE_DESCRIPTION
(
"Creative Sound Core3D codec"
);
static
struct
hda_codec_
preset_list
ca0132_list
=
{
static
struct
hda_codec_
driver
ca0132_driver
=
{
.
preset
=
snd_hda_preset_ca0132
,
.
preset
=
snd_hda_preset_ca0132
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_ca0132_init
(
void
)
module_hda_codec_driver
(
ca0132_driver
);
{
return
snd_hda_add_codec_preset
(
&
ca0132_list
);
}
static
void
__exit
patch_ca0132_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
ca0132_list
);
}
module_init
(
patch_ca0132_init
)
module_exit
(
patch_ca0132_exit
)
sound/pci/hda/patch_cirrus.c
浏览文件 @
8f88f025
...
@@ -1221,20 +1221,8 @@ MODULE_ALIAS("snd-hda-codec-id:10134213");
...
@@ -1221,20 +1221,8 @@ MODULE_ALIAS("snd-hda-codec-id:10134213");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Cirrus Logic HD-audio codec"
);
MODULE_DESCRIPTION
(
"Cirrus Logic HD-audio codec"
);
static
struct
hda_codec_
preset_list
cirrus_list
=
{
static
struct
hda_codec_
driver
cirrus_driver
=
{
.
preset
=
snd_hda_preset_cirrus
,
.
preset
=
snd_hda_preset_cirrus
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_cirrus_init
(
void
)
module_hda_codec_driver
(
cirrus_driver
);
{
return
snd_hda_add_codec_preset
(
&
cirrus_list
);
}
static
void
__exit
patch_cirrus_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
cirrus_list
);
}
module_init
(
patch_cirrus_init
)
module_exit
(
patch_cirrus_exit
)
sound/pci/hda/patch_cmedia.c
浏览文件 @
8f88f025
...
@@ -137,20 +137,8 @@ MODULE_ALIAS("snd-hda-codec-id:434d4980");
...
@@ -137,20 +137,8 @@ MODULE_ALIAS("snd-hda-codec-id:434d4980");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"C-Media HD-audio codec"
);
MODULE_DESCRIPTION
(
"C-Media HD-audio codec"
);
static
struct
hda_codec_
preset_list
cmedia_list
=
{
static
struct
hda_codec_
driver
cmedia_driver
=
{
.
preset
=
snd_hda_preset_cmedia
,
.
preset
=
snd_hda_preset_cmedia
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_cmedia_init
(
void
)
module_hda_codec_driver
(
cmedia_driver
);
{
return
snd_hda_add_codec_preset
(
&
cmedia_list
);
}
static
void
__exit
patch_cmedia_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
cmedia_list
);
}
module_init
(
patch_cmedia_init
)
module_exit
(
patch_cmedia_exit
)
sound/pci/hda/patch_conexant.c
浏览文件 @
8f88f025
...
@@ -1018,20 +1018,8 @@ MODULE_ALIAS("snd-hda-codec-id:14f151d7");
...
@@ -1018,20 +1018,8 @@ MODULE_ALIAS("snd-hda-codec-id:14f151d7");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Conexant HD-audio codec"
);
MODULE_DESCRIPTION
(
"Conexant HD-audio codec"
);
static
struct
hda_codec_
preset_list
conexant_list
=
{
static
struct
hda_codec_
driver
conexant_driver
=
{
.
preset
=
snd_hda_preset_conexant
,
.
preset
=
snd_hda_preset_conexant
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_conexant_init
(
void
)
module_hda_codec_driver
(
conexant_driver
);
{
return
snd_hda_add_codec_preset
(
&
conexant_list
);
}
static
void
__exit
patch_conexant_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
conexant_list
);
}
module_init
(
patch_conexant_init
)
module_exit
(
patch_conexant_exit
)
sound/pci/hda/patch_hdmi.c
浏览文件 @
8f88f025
...
@@ -3300,15 +3300,6 @@ static int patch_via_hdmi(struct hda_codec *codec)
...
@@ -3300,15 +3300,6 @@ static int patch_via_hdmi(struct hda_codec *codec)
return
patch_simple_hdmi
(
codec
,
VIAHDMI_CVT_NID
,
VIAHDMI_PIN_NID
);
return
patch_simple_hdmi
(
codec
,
VIAHDMI_CVT_NID
,
VIAHDMI_PIN_NID
);
}
}
/*
* called from hda_codec.c for generic HDMI support
*/
int
snd_hda_parse_hdmi_codec
(
struct
hda_codec
*
codec
)
{
return
patch_generic_hdmi
(
codec
);
}
EXPORT_SYMBOL_GPL
(
snd_hda_parse_hdmi_codec
);
/*
/*
* patch entries
* patch entries
*/
*/
...
@@ -3373,6 +3364,8 @@ static const struct hda_codec_preset snd_hda_preset_hdmi[] = {
...
@@ -3373,6 +3364,8 @@ static const struct hda_codec_preset snd_hda_preset_hdmi[] = {
{
.
id
=
0x80862882
,
.
name
=
"Valleyview2 HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862882
,
.
name
=
"Valleyview2 HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862883
,
.
name
=
"Braswell HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x80862883
,
.
name
=
"Braswell HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x808629fb
,
.
name
=
"Crestline HDMI"
,
.
patch
=
patch_generic_hdmi
},
{
.
id
=
0x808629fb
,
.
name
=
"Crestline HDMI"
,
.
patch
=
patch_generic_hdmi
},
/* special ID for generic HDMI */
{
.
id
=
HDA_CODEC_ID_GENERIC_HDMI
,
.
patch
=
patch_generic_hdmi
},
{}
/* terminator */
{}
/* terminator */
};
};
...
@@ -3442,20 +3435,8 @@ MODULE_ALIAS("snd-hda-codec-intelhdmi");
...
@@ -3442,20 +3435,8 @@ MODULE_ALIAS("snd-hda-codec-intelhdmi");
MODULE_ALIAS
(
"snd-hda-codec-nvhdmi"
);
MODULE_ALIAS
(
"snd-hda-codec-nvhdmi"
);
MODULE_ALIAS
(
"snd-hda-codec-atihdmi"
);
MODULE_ALIAS
(
"snd-hda-codec-atihdmi"
);
static
struct
hda_codec_
preset_list
intel_list
=
{
static
struct
hda_codec_
driver
hdmi_driver
=
{
.
preset
=
snd_hda_preset_hdmi
,
.
preset
=
snd_hda_preset_hdmi
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_hdmi_init
(
void
)
module_hda_codec_driver
(
hdmi_driver
);
{
return
snd_hda_add_codec_preset
(
&
intel_list
);
}
static
void
__exit
patch_hdmi_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
intel_list
);
}
module_init
(
patch_hdmi_init
)
module_exit
(
patch_hdmi_exit
)
sound/pci/hda/patch_realtek.c
浏览文件 @
8f88f025
...
@@ -6521,20 +6521,8 @@ MODULE_ALIAS("snd-hda-codec-id:10ec*");
...
@@ -6521,20 +6521,8 @@ MODULE_ALIAS("snd-hda-codec-id:10ec*");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Realtek HD-audio codec"
);
MODULE_DESCRIPTION
(
"Realtek HD-audio codec"
);
static
struct
hda_codec_
preset_list
realtek_list
=
{
static
struct
hda_codec_
driver
realtek_driver
=
{
.
preset
=
snd_hda_preset_realtek
,
.
preset
=
snd_hda_preset_realtek
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_realtek_init
(
void
)
module_hda_codec_driver
(
realtek_driver
);
{
return
snd_hda_add_codec_preset
(
&
realtek_list
);
}
static
void
__exit
patch_realtek_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
realtek_list
);
}
module_init
(
patch_realtek_init
)
module_exit
(
patch_realtek_exit
)
sound/pci/hda/patch_si3054.c
浏览文件 @
8f88f025
...
@@ -319,20 +319,8 @@ MODULE_ALIAS("snd-hda-codec-id:18540018");
...
@@ -319,20 +319,8 @@ MODULE_ALIAS("snd-hda-codec-id:18540018");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Si3054 HD-audio modem codec"
);
MODULE_DESCRIPTION
(
"Si3054 HD-audio modem codec"
);
static
struct
hda_codec_
preset_list
si3054_list
=
{
static
struct
hda_codec_
driver
si3054_driver
=
{
.
preset
=
snd_hda_preset_si3054
,
.
preset
=
snd_hda_preset_si3054
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_si3054_init
(
void
)
module_hda_codec_driver
(
si3054_driver
);
{
return
snd_hda_add_codec_preset
(
&
si3054_list
);
}
static
void
__exit
patch_si3054_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
si3054_list
);
}
module_init
(
patch_si3054_init
)
module_exit
(
patch_si3054_exit
)
sound/pci/hda/patch_sigmatel.c
浏览文件 @
8f88f025
...
@@ -2132,8 +2132,10 @@ static void stac92hd83xxx_fixup_hp_mic_led(struct hda_codec *codec,
...
@@ -2132,8 +2132,10 @@ static void stac92hd83xxx_fixup_hp_mic_led(struct hda_codec *codec,
if
(
action
==
HDA_FIXUP_ACT_PRE_PROBE
)
{
if
(
action
==
HDA_FIXUP_ACT_PRE_PROBE
)
{
spec
->
mic_mute_led_gpio
=
0x08
;
/* GPIO3 */
spec
->
mic_mute_led_gpio
=
0x08
;
/* GPIO3 */
#ifdef CONFIG_PM
/* resetting controller clears GPIO, so we need to keep on */
/* resetting controller clears GPIO, so we need to keep on */
codec
->
bus
->
power_keep_link_on
=
1
;
codec
->
d3_stop_clk
=
0
;
#endif
}
}
}
}
...
@@ -5091,20 +5093,8 @@ MODULE_ALIAS("snd-hda-codec-id:111d*");
...
@@ -5091,20 +5093,8 @@ MODULE_ALIAS("snd-hda-codec-id:111d*");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"IDT/Sigmatel HD-audio codec"
);
MODULE_DESCRIPTION
(
"IDT/Sigmatel HD-audio codec"
);
static
struct
hda_codec_
preset_list
sigmatel_list
=
{
static
struct
hda_codec_
driver
sigmatel_driver
=
{
.
preset
=
snd_hda_preset_sigmatel
,
.
preset
=
snd_hda_preset_sigmatel
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
patch_sigmatel_init
(
void
)
module_hda_codec_driver
(
sigmatel_driver
);
{
return
snd_hda_add_codec_preset
(
&
sigmatel_list
);
}
static
void
__exit
patch_sigmatel_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
sigmatel_list
);
}
module_init
(
patch_sigmatel_init
)
module_exit
(
patch_sigmatel_exit
)
sound/pci/hda/patch_via.c
浏览文件 @
8f88f025
...
@@ -1884,23 +1884,11 @@ static const struct hda_codec_preset snd_hda_preset_via[] = {
...
@@ -1884,23 +1884,11 @@ static const struct hda_codec_preset snd_hda_preset_via[] = {
MODULE_ALIAS
(
"snd-hda-codec-id:1106*"
);
MODULE_ALIAS
(
"snd-hda-codec-id:1106*"
);
static
struct
hda_codec_
preset_list
via_list
=
{
static
struct
hda_codec_
driver
via_driver
=
{
.
preset
=
snd_hda_preset_via
,
.
preset
=
snd_hda_preset_via
,
.
owner
=
THIS_MODULE
,
};
};
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"VIA HD-audio codec"
);
MODULE_DESCRIPTION
(
"VIA HD-audio codec"
);
static
int
__init
patch_via_init
(
void
)
module_hda_codec_driver
(
via_driver
);
{
return
snd_hda_add_codec_preset
(
&
via_list
);
}
static
void
__exit
patch_via_exit
(
void
)
{
snd_hda_delete_codec_preset
(
&
via_list
);
}
module_init
(
patch_via_init
)
module_exit
(
patch_via_exit
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录