Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
7e9c2eb6
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看板
提交
7e9c2eb6
编写于
6月 26, 2014
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-linus' into for-next
上级
db8e8a9d
a07187c9
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
365 addition
and
335 deletion
+365
-335
Documentation/sound/alsa/HD-Audio-Models.txt
Documentation/sound/alsa/HD-Audio-Models.txt
+5
-0
include/uapi/sound/compress_offload.h
include/uapi/sound/compress_offload.h
+7
-7
include/uapi/sound/compress_params.h
include/uapi/sound/compress_params.h
+7
-7
sound/pci/hda/hda_auto_parser.c
sound/pci/hda/hda_auto_parser.c
+1
-0
sound/pci/hda/hda_intel.c
sound/pci/hda/hda_intel.c
+58
-7
sound/pci/hda/hda_local.h
sound/pci/hda/hda_local.h
+21
-0
sound/pci/hda/patch_hdmi.c
sound/pci/hda/patch_hdmi.c
+1
-1
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+183
-306
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+57
-1
sound/usb/card.c
sound/usb/card.c
+10
-3
sound/usb/endpoint.c
sound/usb/endpoint.c
+14
-3
sound/usb/endpoint.h
sound/usb/endpoint.h
+1
-0
未找到文件。
Documentation/sound/alsa/HD-Audio-Models.txt
浏览文件 @
7e9c2eb6
...
...
@@ -286,6 +286,11 @@ STAC92HD83*
hp-inv-led HP with broken BIOS for inverted mute LED
auto BIOS setup (default)
STAC92HD95
==========
hp-led LED support for HP laptops
hp-bass Bass HPF setup for HP Spectre 13
STAC9872
========
vaio VAIO laptop without SPDIF
...
...
include/uapi/sound/compress_offload.h
浏览文件 @
7e9c2eb6
...
...
@@ -39,7 +39,7 @@
struct
snd_compressed_buffer
{
__u32
fragment_size
;
__u32
fragments
;
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/**
* struct snd_compr_params: compressed stream params
...
...
@@ -51,7 +51,7 @@ struct snd_compr_params {
struct
snd_compressed_buffer
buffer
;
struct
snd_codec
codec
;
__u8
no_wake_mode
;
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/**
* struct snd_compr_tstamp: timestamp descriptor
...
...
@@ -70,7 +70,7 @@ struct snd_compr_tstamp {
__u32
pcm_frames
;
__u32
pcm_io_frames
;
__u32
sampling_rate
;
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/**
* struct snd_compr_avail: avail descriptor
...
...
@@ -80,7 +80,7 @@ struct snd_compr_tstamp {
struct
snd_compr_avail
{
__u64
avail
;
struct
snd_compr_tstamp
tstamp
;
}
__attribute__
((
packed
));
}
__attribute__
((
packed
,
aligned
(
4
)
));
enum
snd_compr_direction
{
SND_COMPRESS_PLAYBACK
=
0
,
...
...
@@ -107,7 +107,7 @@ struct snd_compr_caps {
__u32
max_fragments
;
__u32
codecs
[
MAX_NUM_CODECS
];
__u32
reserved
[
11
];
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/**
* struct snd_compr_codec_caps: query capability of codec
...
...
@@ -119,7 +119,7 @@ struct snd_compr_codec_caps {
__u32
codec
;
__u32
num_descriptors
;
struct
snd_codec_desc
descriptor
[
MAX_NUM_CODEC_DESCRIPTORS
];
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/**
* @SNDRV_COMPRESS_ENCODER_PADDING: no of samples appended by the encoder at the
...
...
@@ -140,7 +140,7 @@ enum {
struct
snd_compr_metadata
{
__u32
key
;
__u32
value
[
8
];
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/**
* compress path ioctl definitions
...
...
include/uapi/sound/compress_params.h
浏览文件 @
7e9c2eb6
...
...
@@ -268,7 +268,7 @@ struct snd_enc_vorbis {
__u32
max_bit_rate
;
__u32
min_bit_rate
;
__u32
downmix
;
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/**
...
...
@@ -284,7 +284,7 @@ struct snd_enc_real {
__u32
quant_bits
;
__u32
start_region
;
__u32
num_regions
;
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/**
* struct snd_enc_flac
...
...
@@ -308,12 +308,12 @@ struct snd_enc_real {
struct
snd_enc_flac
{
__u32
num
;
__u32
gain
;
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
struct
snd_enc_generic
{
__u32
bw
;
/* encoder bandwidth */
__s32
reserved
[
15
];
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
union
snd_codec_options
{
struct
snd_enc_wma
wma
;
...
...
@@ -321,7 +321,7 @@ union snd_codec_options {
struct
snd_enc_real
real
;
struct
snd_enc_flac
flac
;
struct
snd_enc_generic
generic
;
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/** struct snd_codec_desc - description of codec capabilities
* @max_ch: Maximum number of audio channels
...
...
@@ -358,7 +358,7 @@ struct snd_codec_desc {
__u32
formats
;
__u32
min_buffer
;
__u32
reserved
[
15
];
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
/** struct snd_codec
* @id: Identifies the supported audio encoder/decoder.
...
...
@@ -399,6 +399,6 @@ struct snd_codec {
__u32
align
;
union
snd_codec_options
options
;
__u32
reserved
[
3
];
};
}
__attribute__
((
packed
,
aligned
(
4
)))
;
#endif
sound/pci/hda/hda_auto_parser.c
浏览文件 @
7e9c2eb6
...
...
@@ -898,6 +898,7 @@ void snd_hda_pick_fixup(struct hda_codec *codec,
if
(
!
strcmp
(
codec
->
modelname
,
models
->
name
))
{
codec
->
fixup_id
=
models
->
id
;
codec
->
fixup_name
=
models
->
name
;
codec
->
fixup_list
=
fixlist
;
codec
->
fixup_forced
=
1
;
return
;
}
...
...
sound/pci/hda/hda_intel.c
浏览文件 @
7e9c2eb6
...
...
@@ -288,6 +288,24 @@ static char *driver_short_names[] = {
[
AZX_DRIVER_GENERIC
]
=
"HD-Audio Generic"
,
};
/* Intel HSW/BDW display HDA controller Extended Mode registers.
* EM4 (M value) and EM5 (N Value) are used to convert CDClk (Core Display
* Clock) to 24MHz BCLK: BCLK = CDCLK * M / N
* The values will be lost when the display power well is disabled.
*/
#define ICH6_REG_EM4 0x100c
#define ICH6_REG_EM5 0x1010
struct
hda_intel
{
struct
azx
chip
;
/* HSW/BDW display HDA controller to restore BCLK from CDCLK */
unsigned
int
bclk_m
;
unsigned
int
bclk_n
;
};
#ifdef CONFIG_X86
static
void
__mark_pages_wc
(
struct
azx
*
chip
,
struct
snd_dma_buffer
*
dmab
,
bool
on
)
{
...
...
@@ -580,6 +598,22 @@ static int param_set_xint(const char *val, const struct kernel_param *kp)
#define azx_del_card_list(chip)
/* NOP */
#endif
/* CONFIG_PM */
static
void
haswell_save_bclk
(
struct
azx
*
chip
)
{
struct
hda_intel
*
hda
=
container_of
(
chip
,
struct
hda_intel
,
chip
);
hda
->
bclk_m
=
azx_readw
(
chip
,
EM4
);
hda
->
bclk_n
=
azx_readw
(
chip
,
EM5
);
}
static
void
haswell_restore_bclk
(
struct
azx
*
chip
)
{
struct
hda_intel
*
hda
=
container_of
(
chip
,
struct
hda_intel
,
chip
);
azx_writew
(
chip
,
EM4
,
hda
->
bclk_m
);
azx_writew
(
chip
,
EM5
,
hda
->
bclk_n
);
}
#if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)
/*
* power management
...
...
@@ -606,6 +640,13 @@ static int azx_suspend(struct device *dev)
free_irq
(
chip
->
irq
,
chip
);
chip
->
irq
=
-
1
;
}
/* Save BCLK M/N values before they become invalid in D3.
* Will test if display power well can be released now.
*/
if
(
chip
->
driver_caps
&
AZX_DCAPS_I915_POWERWELL
)
haswell_save_bclk
(
chip
);
if
(
chip
->
msi
)
pci_disable_msi
(
chip
->
pci
);
pci_disable_device
(
pci
);
...
...
@@ -625,8 +666,10 @@ static int azx_resume(struct device *dev)
if
(
chip
->
disabled
)
return
0
;
if
(
chip
->
driver_caps
&
AZX_DCAPS_I915_POWERWELL
)
if
(
chip
->
driver_caps
&
AZX_DCAPS_I915_POWERWELL
)
{
hda_display_power
(
true
);
haswell_restore_bclk
(
chip
);
}
pci_set_power_state
(
pci
,
PCI_D0
);
pci_restore_state
(
pci
);
if
(
pci_enable_device
(
pci
)
<
0
)
{
...
...
@@ -670,8 +713,10 @@ static int azx_runtime_suspend(struct device *dev)
azx_stop_chip
(
chip
);
azx_enter_link_reset
(
chip
);
azx_clear_irq_pending
(
chip
);
if
(
chip
->
driver_caps
&
AZX_DCAPS_I915_POWERWELL
)
if
(
chip
->
driver_caps
&
AZX_DCAPS_I915_POWERWELL
)
{
haswell_save_bclk
(
chip
);
hda_display_power
(
false
);
}
return
0
;
}
...
...
@@ -689,8 +734,10 @@ static int azx_runtime_resume(struct device *dev)
if
(
!
(
chip
->
driver_caps
&
AZX_DCAPS_PM_RUNTIME
))
return
0
;
if
(
chip
->
driver_caps
&
AZX_DCAPS_I915_POWERWELL
)
if
(
chip
->
driver_caps
&
AZX_DCAPS_I915_POWERWELL
)
{
hda_display_power
(
true
);
haswell_restore_bclk
(
chip
);
}
/* Read STATESTS before controller reset */
status
=
azx_readw
(
chip
,
STATESTS
);
...
...
@@ -883,6 +930,8 @@ static int register_vga_switcheroo(struct azx *chip)
static
int
azx_free
(
struct
azx
*
chip
)
{
struct
pci_dev
*
pci
=
chip
->
pci
;
struct
hda_intel
*
hda
=
container_of
(
chip
,
struct
hda_intel
,
chip
);
int
i
;
if
((
chip
->
driver_caps
&
AZX_DCAPS_PM_RUNTIME
)
...
...
@@ -930,7 +979,7 @@ static int azx_free(struct azx *chip)
hda_display_power
(
false
);
hda_i915_exit
();
}
kfree
(
chip
);
kfree
(
hda
);
return
0
;
}
...
...
@@ -1174,6 +1223,7 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci,
static
struct
snd_device_ops
ops
=
{
.
dev_free
=
azx_dev_free
,
};
struct
hda_intel
*
hda
;
struct
azx
*
chip
;
int
err
;
...
...
@@ -1183,13 +1233,14 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci,
if
(
err
<
0
)
return
err
;
chip
=
kzalloc
(
sizeof
(
*
chip
),
GFP_KERNEL
);
if
(
!
chip
)
{
dev_err
(
card
->
dev
,
"Cannot allocate
chip
\n
"
);
hda
=
kzalloc
(
sizeof
(
*
hda
),
GFP_KERNEL
);
if
(
!
hda
)
{
dev_err
(
card
->
dev
,
"Cannot allocate
hda
\n
"
);
pci_disable_device
(
pci
);
return
-
ENOMEM
;
}
chip
=
&
hda
->
chip
;
spin_lock_init
(
&
chip
->
reg_lock
);
mutex_init
(
&
chip
->
open_mutex
);
chip
->
card
=
card
;
...
...
sound/pci/hda/hda_local.h
浏览文件 @
7e9c2eb6
...
...
@@ -418,6 +418,27 @@ struct snd_hda_pin_quirk {
int
value
;
/* quirk value */
};
#ifdef CONFIG_SND_DEBUG_VERBOSE
#define SND_HDA_PIN_QUIRK(_codec, _subvendor, _name, _value, _pins...) \
{ .codec = _codec,\
.subvendor = _subvendor,\
.name = _name,\
.value = _value,\
.pins = (const struct hda_pintbl[]) { _pins } \
}
#else
#define SND_HDA_PIN_QUIRK(_codec, _subvendor, _name, _value, _pins...) \
{ .codec = _codec,\
.subvendor = _subvendor,\
.value = _value,\
.pins = (const struct hda_pintbl[]) { _pins } \
}
#endif
/* fixup types */
enum
{
HDA_FIXUP_INVALID
,
...
...
sound/pci/hda/patch_hdmi.c
浏览文件 @
7e9c2eb6
...
...
@@ -2205,7 +2205,7 @@ static int generic_hdmi_resume(struct hda_codec *codec)
struct
hdmi_spec
*
spec
=
codec
->
spec
;
int
pin_idx
;
generic_hdmi_
init
(
codec
);
codec
->
patch_ops
.
init
(
codec
);
snd_hda_codec_resume_amp
(
codec
);
snd_hda_codec_resume_cache
(
codec
);
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
7e9c2eb6
...
...
@@ -5076,228 +5076,129 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
};
static
const
struct
snd_hda_pin_quirk
alc269_pin_fixup_tbl
[]
=
{
{
.
codec
=
0x10ec0255
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60140
},
{
0x14
,
0x90170110
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211020
},
},
.
value
=
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0255
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170120
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211030
},
},
.
value
=
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0255
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170120
},
{
0x17
,
0x90170140
},
{
0x18
,
0x40000000
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41163b05
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x0321102f
},
},
.
value
=
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0255
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170130
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211040
},
},
.
value
=
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0255
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170140
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211050
},
},
.
value
=
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0255
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60170
},
{
0x14
,
0x90170120
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211030
},
},
.
value
=
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0255
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60170
},
{
0x14
,
0x90170130
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211040
},
},
.
value
=
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0283
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60130
},
{
0x14
,
0x90170110
},
{
0x17
,
0x40020008
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40e00001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x0321101f
},
},
.
value
=
ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0283
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170120
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211030
},
},
.
value
=
ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0292
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x90a60140
},
{
0x13
,
0x411111f0
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0221401f
},
{
0x16
,
0x411111f0
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
},
.
value
=
ALC269_FIXUP_DELL3_MIC_NO_PRESENCE
,
},
{
.
codec
=
0x10ec0293
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x40000000
},
{
0x13
,
0x90a60140
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0221401f
},
{
0x16
,
0x21014020
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x21a19030
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
},
.
value
=
ALC293_FIXUP_DELL1_MIC_NO_PRESENCE
,
},
SND_HDA_PIN_QUIRK
(
0x10ec0255
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60140
},
{
0x14
,
0x90170110
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211020
}),
SND_HDA_PIN_QUIRK
(
0x10ec0255
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170120
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211030
}),
SND_HDA_PIN_QUIRK
(
0x10ec0255
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170120
},
{
0x17
,
0x90170140
},
{
0x18
,
0x40000000
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41163b05
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x0321102f
}),
SND_HDA_PIN_QUIRK
(
0x10ec0255
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170130
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211040
}),
SND_HDA_PIN_QUIRK
(
0x10ec0255
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170140
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211050
}),
SND_HDA_PIN_QUIRK
(
0x10ec0255
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60170
},
{
0x14
,
0x90170120
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211030
}),
SND_HDA_PIN_QUIRK
(
0x10ec0255
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60170
},
{
0x14
,
0x90170130
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211040
}),
SND_HDA_PIN_QUIRK
(
0x10ec0283
,
0x1028
,
"Dell"
,
ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60130
},
{
0x14
,
0x90170110
},
{
0x17
,
0x40020008
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40e00001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x0321101f
}),
SND_HDA_PIN_QUIRK
(
0x10ec0283
,
0x1028
,
"Dell"
,
ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60160
},
{
0x14
,
0x90170120
},
{
0x17
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
},
{
0x21
,
0x02211030
}),
SND_HDA_PIN_QUIRK
(
0x10ec0292
,
0x1028
,
"Dell"
,
ALC269_FIXUP_DELL3_MIC_NO_PRESENCE
,
{
0x12
,
0x90a60140
},
{
0x13
,
0x411111f0
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0221401f
},
{
0x16
,
0x411111f0
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
}),
SND_HDA_PIN_QUIRK
(
0x10ec0293
,
0x1028
,
"Dell"
,
ALC293_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x40000000
},
{
0x13
,
0x90a60140
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0221401f
},
{
0x16
,
0x21014020
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x21a19030
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40700001
},
{
0x1e
,
0x411111f0
}),
{}
};
...
...
@@ -6153,90 +6054,66 @@ static const struct hda_model_fixup alc662_fixup_models[] = {
};
static
const
struct
snd_hda_pin_quirk
alc662_pin_fixup_tbl
[]
=
{
{
.
codec
=
0x10ec0668
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x99a30130
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0321101f
},
{
0x16
,
0x03011020
},
{
0x18
,
0x40000008
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41000001
},
{
0x1e
,
0x411111f0
},
{
0x1f
,
0x411111f0
},
},
.
value
=
ALC668_FIXUP_AUTO_MUTE
,
},
{
.
codec
=
0x10ec0668
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x99a30140
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0321101f
},
{
0x16
,
0x03011020
},
{
0x18
,
0x40000008
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41000001
},
{
0x1e
,
0x411111f0
},
{
0x1f
,
0x411111f0
},
},
.
value
=
ALC668_FIXUP_AUTO_MUTE
,
},
{
.
codec
=
0x10ec0668
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x99a30150
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0321101f
},
{
0x16
,
0x03011020
},
{
0x18
,
0x40000008
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41000001
},
{
0x1e
,
0x411111f0
},
{
0x1f
,
0x411111f0
},
},
.
value
=
ALC668_FIXUP_AUTO_MUTE
,
},
{
.
codec
=
0x10ec0668
,
.
subvendor
=
0x1028
,
#ifdef CONFIG_SND_DEBUG_VERBOSE
.
name
=
"Dell"
,
#endif
.
pins
=
(
const
struct
hda_pintbl
[])
{
{
0x12
,
0x411111f0
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0321101f
},
{
0x16
,
0x03011020
},
{
0x18
,
0x40000008
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41000001
},
{
0x1e
,
0x411111f0
},
{
0x1f
,
0x411111f0
},
},
.
value
=
ALC668_FIXUP_AUTO_MUTE
,
},
SND_HDA_PIN_QUIRK
(
0x10ec0668
,
0x1028
,
"Dell"
,
ALC668_FIXUP_AUTO_MUTE
,
{
0x12
,
0x99a30130
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0321101f
},
{
0x16
,
0x03011020
},
{
0x18
,
0x40000008
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41000001
},
{
0x1e
,
0x411111f0
},
{
0x1f
,
0x411111f0
}),
SND_HDA_PIN_QUIRK
(
0x10ec0668
,
0x1028
,
"Dell"
,
ALC668_FIXUP_AUTO_MUTE
,
{
0x12
,
0x99a30140
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0321101f
},
{
0x16
,
0x03011020
},
{
0x18
,
0x40000008
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41000001
},
{
0x1e
,
0x411111f0
},
{
0x1f
,
0x411111f0
}),
SND_HDA_PIN_QUIRK
(
0x10ec0668
,
0x1028
,
"Dell"
,
ALC668_FIXUP_AUTO_MUTE
,
{
0x12
,
0x99a30150
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0321101f
},
{
0x16
,
0x03011020
},
{
0x18
,
0x40000008
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41000001
},
{
0x1e
,
0x411111f0
},
{
0x1f
,
0x411111f0
}),
SND_HDA_PIN_QUIRK
(
0x10ec0668
,
0x1028
,
"Dell"
,
ALC668_FIXUP_AUTO_MUTE
,
{
0x12
,
0x411111f0
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0321101f
},
{
0x16
,
0x03011020
},
{
0x18
,
0x40000008
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x41000001
},
{
0x1e
,
0x411111f0
},
{
0x1f
,
0x411111f0
}),
SND_HDA_PIN_QUIRK
(
0x10ec0668
,
0x1028
,
"Dell XPS 15"
,
ALC668_FIXUP_AUTO_MUTE
,
{
0x12
,
0x90a60130
},
{
0x14
,
0x90170110
},
{
0x15
,
0x0321101f
},
{
0x16
,
0x40000000
},
{
0x18
,
0x411111f0
},
{
0x19
,
0x411111f0
},
{
0x1a
,
0x411111f0
},
{
0x1b
,
0x411111f0
},
{
0x1d
,
0x40d6832d
},
{
0x1e
,
0x411111f0
},
{
0x1f
,
0x411111f0
}),
{}
};
...
...
sound/pci/hda/patch_sigmatel.c
浏览文件 @
7e9c2eb6
...
...
@@ -121,6 +121,12 @@ enum {
STAC_92HD71BXX_MODELS
};
enum
{
STAC_92HD95_HP_LED
,
STAC_92HD95_HP_BASS
,
STAC_92HD95_MODELS
};
enum
{
STAC_925x_REF
,
STAC_M1
,
...
...
@@ -4128,6 +4134,48 @@ static const struct snd_pci_quirk stac9205_fixup_tbl[] = {
{}
/* terminator */
};
static
void
stac92hd95_fixup_hp_led
(
struct
hda_codec
*
codec
,
const
struct
hda_fixup
*
fix
,
int
action
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
if
(
action
!=
HDA_FIXUP_ACT_PRE_PROBE
)
return
;
if
(
find_mute_led_cfg
(
codec
,
spec
->
default_polarity
))
codec_dbg
(
codec
,
"mute LED gpio %d polarity %d
\n
"
,
spec
->
gpio_led
,
spec
->
gpio_led_polarity
);
}
static
const
struct
hda_fixup
stac92hd95_fixups
[]
=
{
[
STAC_92HD95_HP_LED
]
=
{
.
type
=
HDA_FIXUP_FUNC
,
.
v
.
func
=
stac92hd95_fixup_hp_led
,
},
[
STAC_92HD95_HP_BASS
]
=
{
.
type
=
HDA_FIXUP_VERBS
,
.
v
.
verbs
=
(
const
struct
hda_verb
[])
{
{
0x1a
,
0x795
,
0x00
},
/* HPF to 100Hz */
{}
},
.
chained
=
true
,
.
chain_id
=
STAC_92HD95_HP_LED
,
},
};
static
const
struct
snd_pci_quirk
stac92hd95_fixup_tbl
[]
=
{
SND_PCI_QUIRK
(
PCI_VENDOR_ID_HP
,
0x1911
,
"HP Spectre 13"
,
STAC_92HD95_HP_BASS
),
{}
/* terminator */
};
static
const
struct
hda_model_fixup
stac92hd95_models
[]
=
{
{
.
id
=
STAC_92HD95_HP_LED
,
.
name
=
"hp-led"
},
{
.
id
=
STAC_92HD95_HP_BASS
,
.
name
=
"hp-bass"
},
{}
};
static
int
stac_parse_auto_config
(
struct
hda_codec
*
codec
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
...
...
@@ -4580,10 +4628,16 @@ static int patch_stac92hd95(struct hda_codec *codec)
spec
->
gen
.
beep_nid
=
0x19
;
/* digital beep */
spec
->
pwr_nids
=
stac92hd95_pwr_nids
;
spec
->
num_pwrs
=
ARRAY_SIZE
(
stac92hd95_pwr_nids
);
spec
->
default_polarity
=
-
1
;
/* no default cfg */
spec
->
default_polarity
=
0
;
codec
->
patch_ops
=
stac_patch_ops
;
snd_hda_pick_fixup
(
codec
,
stac92hd95_models
,
stac92hd95_fixup_tbl
,
stac92hd95_fixups
);
snd_hda_apply_fixup
(
codec
,
HDA_FIXUP_ACT_PRE_PROBE
);
stac_setup_gpio
(
codec
);
err
=
stac_parse_auto_config
(
codec
);
if
(
err
<
0
)
{
stac_free
(
codec
);
...
...
@@ -4592,6 +4646,8 @@ static int patch_stac92hd95(struct hda_codec *codec)
codec
->
proc_widget_hook
=
stac92hd_proc_hook
;
snd_hda_apply_fixup
(
codec
,
HDA_FIXUP_ACT_PROBE
);
return
0
;
}
...
...
sound/usb/card.c
浏览文件 @
7e9c2eb6
...
...
@@ -307,6 +307,11 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif)
static
int
snd_usb_audio_free
(
struct
snd_usb_audio
*
chip
)
{
struct
list_head
*
p
,
*
n
;
list_for_each_safe
(
p
,
n
,
&
chip
->
ep_list
)
snd_usb_endpoint_free
(
p
);
mutex_destroy
(
&
chip
->
mutex
);
kfree
(
chip
);
return
0
;
...
...
@@ -585,7 +590,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
struct
snd_usb_audio
*
chip
)
{
struct
snd_card
*
card
;
struct
list_head
*
p
,
*
n
;
struct
list_head
*
p
;
if
(
chip
==
(
void
*
)
-
1L
)
return
;
...
...
@@ -598,14 +603,16 @@ static void snd_usb_audio_disconnect(struct usb_device *dev,
mutex_lock
(
&
register_mutex
);
chip
->
num_interfaces
--
;
if
(
chip
->
num_interfaces
<=
0
)
{
struct
snd_usb_endpoint
*
ep
;
snd_card_disconnect
(
card
);
/* release the pcm resources */
list_for_each
(
p
,
&
chip
->
pcm_list
)
{
snd_usb_stream_disconnect
(
p
);
}
/* release the endpoint resources */
list_for_each_
safe
(
p
,
n
,
&
chip
->
ep_
list
)
{
snd_usb_endpoint_
free
(
p
);
list_for_each_
entry
(
ep
,
&
chip
->
ep_list
,
list
)
{
snd_usb_endpoint_
release
(
e
p
);
}
/* release the midi resources */
list_for_each
(
p
,
&
chip
->
midi_list
)
{
...
...
sound/usb/endpoint.c
浏览文件 @
7e9c2eb6
...
...
@@ -986,20 +986,31 @@ void snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep)
wait_clear_urbs
(
ep
);
}
/**
* snd_usb_endpoint_release: Tear down an snd_usb_endpoint
*
* @ep: the endpoint to release
*
* This function does not care for the endpoint's use count but will tear
* down all the streaming URBs immediately.
*/
void
snd_usb_endpoint_release
(
struct
snd_usb_endpoint
*
ep
)
{
release_urbs
(
ep
,
1
);
}
/**
* snd_usb_endpoint_free: Free the resources of an snd_usb_endpoint
*
* @ep: the list header of the endpoint to free
*
* This function does not care for the endpoint's use count but will tear
* down all the streaming URBs immediately and free all resources.
* This free all resources of the given ep.
*/
void
snd_usb_endpoint_free
(
struct
list_head
*
head
)
{
struct
snd_usb_endpoint
*
ep
;
ep
=
list_entry
(
head
,
struct
snd_usb_endpoint
,
list
);
release_urbs
(
ep
,
1
);
kfree
(
ep
);
}
...
...
sound/usb/endpoint.h
浏览文件 @
7e9c2eb6
...
...
@@ -23,6 +23,7 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep);
void
snd_usb_endpoint_sync_pending_stop
(
struct
snd_usb_endpoint
*
ep
);
int
snd_usb_endpoint_activate
(
struct
snd_usb_endpoint
*
ep
);
void
snd_usb_endpoint_deactivate
(
struct
snd_usb_endpoint
*
ep
);
void
snd_usb_endpoint_release
(
struct
snd_usb_endpoint
*
ep
);
void
snd_usb_endpoint_free
(
struct
list_head
*
head
);
int
snd_usb_endpoint_implicit_feedback_sink
(
struct
snd_usb_endpoint
*
ep
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录