Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
cf30f46a
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
cf30f46a
编写于
3月 18, 2013
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-linus' into for-next
Back-merged for refactoring beep stuff.
上级
0959f22e
a86b1a2c
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
166 addition
and
60 deletion
+166
-60
Documentation/sound/alsa/ALSA-Configuration.txt
Documentation/sound/alsa/ALSA-Configuration.txt
+1
-1
Documentation/sound/alsa/seq_oss.html
Documentation/sound/alsa/seq_oss.html
+1
-1
sound/core/seq/oss/seq_oss_event.c
sound/core/seq/oss/seq_oss_event.c
+12
-2
sound/core/seq/seq_timer.c
sound/core/seq/seq_timer.c
+4
-4
sound/core/vmaster.c
sound/core/vmaster.c
+4
-1
sound/oss/sequencer.c
sound/oss/sequencer.c
+6
-0
sound/pci/asihpi/asihpi.c
sound/pci/asihpi/asihpi.c
+2
-1
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+23
-12
sound/pci/hda/patch_ca0132.c
sound/pci/hda/patch_ca0132.c
+21
-15
sound/pci/hda/patch_cirrus.c
sound/pci/hda/patch_cirrus.c
+4
-0
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+11
-5
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+2
-0
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+29
-0
sound/pci/ice1712/ice1712.c
sound/pci/ice1712/ice1712.c
+2
-0
sound/soc/codecs/wm5102.c
sound/soc/codecs/wm5102.c
+13
-2
sound/soc/codecs/wm5110.c
sound/soc/codecs/wm5110.c
+8
-8
sound/soc/codecs/wm8350.c
sound/soc/codecs/wm8350.c
+2
-2
sound/soc/codecs/wm8960.c
sound/soc/codecs/wm8960.c
+4
-4
sound/soc/tegra/tegra20_i2s.h
sound/soc/tegra/tegra20_i2s.h
+1
-1
sound/soc/tegra/tegra30_i2s.h
sound/soc/tegra/tegra30_i2s.h
+1
-1
sound/usb/card.c
sound/usb/card.c
+15
-0
未找到文件。
Documentation/sound/alsa/ALSA-Configuration.txt
浏览文件 @
cf30f46a
...
...
@@ -912,7 +912,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
models depending on the codec chip. The list of available models
is found in HD-Audio-Models.txt
The model name "genric" is treated as a special case. When this
The model name "gen
e
ric" is treated as a special case. When this
model is given, the driver uses the generic codec parser without
"codec-patch". It's sometimes good for testing and debugging.
...
...
Documentation/sound/alsa/seq_oss.html
浏览文件 @
cf30f46a
...
...
@@ -285,7 +285,7 @@ sample data.
<H4>
7.2.4 Close Callback
</H4>
The
<TT>
close
</TT>
callback is called when this device is closed by the
applicaion. If any private data was allocated in open callback, it must
applica
t
ion. If any private data was allocated in open callback, it must
be released in the close callback. The deletion of ALSA port should be
done here, too. This callback must not be NULL.
<H4>
...
...
sound/core/seq/oss/seq_oss_event.c
浏览文件 @
cf30f46a
...
...
@@ -285,7 +285,12 @@ local_event(struct seq_oss_devinfo *dp, union evrec *q, struct snd_seq_event *ev
static
int
note_on_event
(
struct
seq_oss_devinfo
*
dp
,
int
dev
,
int
ch
,
int
note
,
int
vel
,
struct
snd_seq_event
*
ev
)
{
struct
seq_oss_synthinfo
*
info
=
&
dp
->
synths
[
dev
];
struct
seq_oss_synthinfo
*
info
;
if
(
!
snd_seq_oss_synth_is_valid
(
dp
,
dev
))
return
-
ENXIO
;
info
=
&
dp
->
synths
[
dev
];
switch
(
info
->
arg
.
event_passing
)
{
case
SNDRV_SEQ_OSS_PROCESS_EVENTS
:
if
(
!
info
->
ch
||
ch
<
0
||
ch
>=
info
->
nr_voices
)
{
...
...
@@ -340,7 +345,12 @@ note_on_event(struct seq_oss_devinfo *dp, int dev, int ch, int note, int vel, st
static
int
note_off_event
(
struct
seq_oss_devinfo
*
dp
,
int
dev
,
int
ch
,
int
note
,
int
vel
,
struct
snd_seq_event
*
ev
)
{
struct
seq_oss_synthinfo
*
info
=
&
dp
->
synths
[
dev
];
struct
seq_oss_synthinfo
*
info
;
if
(
!
snd_seq_oss_synth_is_valid
(
dp
,
dev
))
return
-
ENXIO
;
info
=
&
dp
->
synths
[
dev
];
switch
(
info
->
arg
.
event_passing
)
{
case
SNDRV_SEQ_OSS_PROCESS_EVENTS
:
if
(
!
info
->
ch
||
ch
<
0
||
ch
>=
info
->
nr_voices
)
{
...
...
sound/core/seq/seq_timer.c
浏览文件 @
cf30f46a
...
...
@@ -290,10 +290,10 @@ int snd_seq_timer_open(struct snd_seq_queue *q)
tid
.
device
=
SNDRV_TIMER_GLOBAL_SYSTEM
;
err
=
snd_timer_open
(
&
t
,
str
,
&
tid
,
q
->
queue
);
}
if
(
err
<
0
)
{
snd_printk
(
KERN_ERR
"seq fatal error: cannot create timer (%i)
\n
"
,
err
);
return
err
;
}
}
if
(
err
<
0
)
{
snd_printk
(
KERN_ERR
"seq fatal error: cannot create timer (%i)
\n
"
,
err
)
;
return
err
;
}
t
->
callback
=
snd_seq_timer_interrupt
;
t
->
callback_data
=
q
;
...
...
sound/core/vmaster.c
浏览文件 @
cf30f46a
...
...
@@ -213,7 +213,10 @@ static int slave_put(struct snd_kcontrol *kcontrol,
}
if
(
!
changed
)
return
0
;
return
slave_put_val
(
slave
,
ucontrol
);
err
=
slave_put_val
(
slave
,
ucontrol
);
if
(
err
<
0
)
return
err
;
return
1
;
}
static
int
slave_tlv_cmd
(
struct
snd_kcontrol
*
kcontrol
,
...
...
sound/oss/sequencer.c
浏览文件 @
cf30f46a
...
...
@@ -545,6 +545,9 @@ static void seq_chn_common_event(unsigned char *event_rec)
case
MIDI_PGM_CHANGE
:
if
(
seq_mode
==
SEQ_2
)
{
if
(
chn
>
15
)
break
;
synth_devs
[
dev
]
->
chn_info
[
chn
].
pgm_num
=
p1
;
if
((
int
)
dev
>=
num_synths
)
synth_devs
[
dev
]
->
set_instr
(
dev
,
chn
,
p1
);
...
...
@@ -596,6 +599,9 @@ static void seq_chn_common_event(unsigned char *event_rec)
case
MIDI_PITCH_BEND
:
if
(
seq_mode
==
SEQ_2
)
{
if
(
chn
>
15
)
break
;
synth_devs
[
dev
]
->
chn_info
[
chn
].
bender_value
=
w14
;
if
((
int
)
dev
<
num_synths
)
...
...
sound/pci/asihpi/asihpi.c
浏览文件 @
cf30f46a
...
...
@@ -2549,7 +2549,7 @@ static int snd_asihpi_sampleclock_add(struct snd_card_asihpi *asihpi,
static
int
snd_card_asihpi_mixer_new
(
struct
snd_card_asihpi
*
asihpi
)
{
struct
snd_card
*
card
=
asihpi
->
card
;
struct
snd_card
*
card
;
unsigned
int
idx
=
0
;
unsigned
int
subindex
=
0
;
int
err
;
...
...
@@ -2557,6 +2557,7 @@ static int snd_card_asihpi_mixer_new(struct snd_card_asihpi *asihpi)
if
(
snd_BUG_ON
(
!
asihpi
))
return
-
EINVAL
;
card
=
asihpi
->
card
;
strcpy
(
card
->
mixername
,
"Asihpi Mixer"
);
err
=
...
...
sound/pci/hda/hda_codec.c
浏览文件 @
cf30f46a
...
...
@@ -494,7 +494,7 @@ static unsigned int get_num_conns(struct hda_codec *codec, hda_nid_t nid)
int
snd_hda_get_num_raw_conns
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
{
return
get_num_conns
(
codec
,
nid
)
&
AC_CLIST_LENGTH
;
return
snd_hda_get_raw_connections
(
codec
,
nid
,
NULL
,
0
)
;
}
/**
...
...
@@ -517,9 +517,6 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
hda_nid_t
prev_nid
;
int
null_count
=
0
;
if
(
snd_BUG_ON
(
!
conn_list
||
max_conns
<=
0
))
return
-
EINVAL
;
parm
=
get_num_conns
(
codec
,
nid
);
if
(
!
parm
)
return
0
;
...
...
@@ -545,7 +542,8 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
AC_VERB_GET_CONNECT_LIST
,
0
);
if
(
parm
==
-
1
&&
codec
->
bus
->
rirb_error
)
return
-
EIO
;
conn_list
[
0
]
=
parm
&
mask
;
if
(
conn_list
)
conn_list
[
0
]
=
parm
&
mask
;
return
1
;
}
...
...
@@ -580,14 +578,20 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
continue
;
}
for
(
n
=
prev_nid
+
1
;
n
<=
val
;
n
++
)
{
if
(
conn_list
)
{
if
(
conns
>=
max_conns
)
return
-
ENOSPC
;
conn_list
[
conns
]
=
n
;
}
conns
++
;
}
}
else
{
if
(
conn_list
)
{
if
(
conns
>=
max_conns
)
return
-
ENOSPC
;
conn_list
[
conns
++
]
=
n
;
conn_list
[
conns
]
=
val
;
}
}
else
{
if
(
conns
>=
max_conns
)
return
-
ENOSPC
;
conn_list
[
conns
++
]
=
val
;
conns
++
;
}
prev_nid
=
val
;
}
...
...
@@ -3331,6 +3335,8 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
return
-
EBUSY
;
}
spdif
=
snd_array_new
(
&
codec
->
spdif_out
);
if
(
!
spdif
)
return
-
ENOMEM
;
for
(
dig_mix
=
dig_mixes
;
dig_mix
->
name
;
dig_mix
++
)
{
kctl
=
snd_ctl_new1
(
dig_mix
,
codec
);
if
(
!
kctl
)
...
...
@@ -3428,11 +3434,16 @@ static struct snd_kcontrol_new spdif_share_sw = {
int
snd_hda_create_spdif_share_sw
(
struct
hda_codec
*
codec
,
struct
hda_multi_out
*
mout
)
{
struct
snd_kcontrol
*
kctl
;
if
(
!
mout
->
dig_out_nid
)
return
0
;
kctl
=
snd_ctl_new1
(
&
spdif_share_sw
,
mout
);
if
(
!
kctl
)
return
-
ENOMEM
;
/* ATTENTION: here mout is passed as private_data, instead of codec */
return
snd_hda_ctl_add
(
codec
,
mout
->
dig_out_nid
,
snd_ctl_new1
(
&
spdif_share_sw
,
mout
));
return
snd_hda_ctl_add
(
codec
,
mout
->
dig_out_nid
,
kctl
);
}
EXPORT_SYMBOL_HDA
(
snd_hda_create_spdif_share_sw
);
...
...
sound/pci/hda/patch_ca0132.c
浏览文件 @
cf30f46a
...
...
@@ -2298,6 +2298,11 @@ static int dspxfr_one_seg(struct hda_codec *codec,
hda_frame_size_words
=
((
sample_rate_div
==
0
)
?
0
:
(
num_chans
*
sample_rate_mul
/
sample_rate_div
));
if
(
hda_frame_size_words
==
0
)
{
snd_printdd
(
KERN_ERR
"frmsz zero
\n
"
);
return
-
EINVAL
;
}
buffer_size_words
=
min
(
buffer_size_words
,
(
unsigned
int
)(
UC_RANGE
(
chip_addx
,
1
)
?
65536
:
32768
));
...
...
@@ -2308,8 +2313,7 @@ static int dspxfr_one_seg(struct hda_codec *codec,
chip_addx
,
hda_frame_size_words
,
num_chans
,
sample_rate_mul
,
sample_rate_div
,
buffer_size_words
);
if
((
buffer_addx
==
NULL
)
||
(
hda_frame_size_words
==
0
)
||
(
buffer_size_words
<
hda_frame_size_words
))
{
if
(
buffer_size_words
<
hda_frame_size_words
)
{
snd_printdd
(
KERN_ERR
"dspxfr_one_seg:failed
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -3235,7 +3239,7 @@ static int ca0132_set_vipsource(struct hda_codec *codec, int val)
struct
ca0132_spec
*
spec
=
codec
->
spec
;
unsigned
int
tmp
;
if
(
!
dspload_is_loaded
(
codec
)
)
if
(
spec
->
dsp_state
!=
DSP_DOWNLOADED
)
return
0
;
/* if CrystalVoice if off, vipsource should be 0 */
...
...
@@ -4263,11 +4267,12 @@ static void ca0132_refresh_widget_caps(struct hda_codec *codec)
*/
static
void
ca0132_setup_defaults
(
struct
hda_codec
*
codec
)
{
struct
ca0132_spec
*
spec
=
codec
->
spec
;
unsigned
int
tmp
;
int
num_fx
;
int
idx
,
i
;
if
(
!
dspload_is_loaded
(
codec
)
)
if
(
spec
->
dsp_state
!=
DSP_DOWNLOADED
)
return
;
/* out, in effects + voicefx */
...
...
@@ -4347,12 +4352,16 @@ static bool ca0132_download_dsp_images(struct hda_codec *codec)
return
false
;
dsp_os_image
=
(
struct
dsp_image_seg
*
)(
fw_entry
->
data
);
dspload_image
(
codec
,
dsp_os_image
,
0
,
0
,
true
,
0
);
if
(
dspload_image
(
codec
,
dsp_os_image
,
0
,
0
,
true
,
0
))
{
pr_err
(
"ca0132 dspload_image failed.
\n
"
);
goto
exit_download
;
}
dsp_loaded
=
dspload_wait_loaded
(
codec
);
exit_download:
release_firmware
(
fw_entry
);
return
dsp_loaded
;
}
...
...
@@ -4363,16 +4372,13 @@ static void ca0132_download_dsp(struct hda_codec *codec)
#ifndef CONFIG_SND_HDA_CODEC_CA0132_DSP
return
;
/* NOP */
#endif
spec
->
dsp_state
=
DSP_DOWNLOAD_INIT
;
if
(
spec
->
dsp_state
==
DSP_DOWNLOAD_INIT
)
{
chipio_enable_clocks
(
codec
);
spec
->
dsp_state
=
DSP_DOWNLOADING
;
if
(
!
ca0132_download_dsp_images
(
codec
))
spec
->
dsp_state
=
DSP_DOWNLOAD_FAILED
;
else
spec
->
dsp_state
=
DSP_DOWNLOADED
;
}
chipio_enable_clocks
(
codec
);
spec
->
dsp_state
=
DSP_DOWNLOADING
;
if
(
!
ca0132_download_dsp_images
(
codec
))
spec
->
dsp_state
=
DSP_DOWNLOAD_FAILED
;
else
spec
->
dsp_state
=
DSP_DOWNLOADED
;
if
(
spec
->
dsp_state
==
DSP_DOWNLOADED
)
ca0132_set_dsp_msr
(
codec
,
true
);
...
...
sound/pci/hda/patch_cirrus.c
浏览文件 @
cf30f46a
...
...
@@ -506,6 +506,8 @@ static int patch_cs420x(struct hda_codec *codec)
if
(
!
spec
)
return
-
ENOMEM
;
spec
->
gen
.
automute_hook
=
cs_automute
;
snd_hda_pick_fixup
(
codec
,
cs420x_models
,
cs420x_fixup_tbl
,
cs420x_fixups
);
snd_hda_apply_fixup
(
codec
,
HDA_FIXUP_ACT_PRE_PROBE
);
...
...
@@ -893,6 +895,8 @@ static int patch_cs4210(struct hda_codec *codec)
if
(
!
spec
)
return
-
ENOMEM
;
spec
->
gen
.
automute_hook
=
cs_automute
;
snd_hda_pick_fixup
(
codec
,
cs421x_models
,
cs421x_fixup_tbl
,
cs421x_fixups
);
snd_hda_apply_fixup
(
codec
,
HDA_FIXUP_ACT_PRE_PROBE
);
...
...
sound/pci/hda/patch_conexant.c
浏览文件 @
cf30f46a
...
...
@@ -1142,7 +1142,7 @@ static int patch_cxt5045(struct hda_codec *codec)
}
if
(
spec
->
beep_amp
)
snd_hda_attach_beep_device
(
codec
,
spec
->
beep_amp
);
snd_hda_attach_beep_device
(
codec
,
get_amp_nid_
(
spec
->
beep_amp
)
);
return
0
;
}
...
...
@@ -1921,7 +1921,7 @@ static int patch_cxt5051(struct hda_codec *codec)
}
if
(
spec
->
beep_amp
)
snd_hda_attach_beep_device
(
codec
,
spec
->
beep_amp
);
snd_hda_attach_beep_device
(
codec
,
get_amp_nid_
(
spec
->
beep_amp
)
);
return
0
;
}
...
...
@@ -3099,7 +3099,7 @@ static int patch_cxt5066(struct hda_codec *codec)
}
if
(
spec
->
beep_amp
)
snd_hda_attach_beep_device
(
codec
,
spec
->
beep_amp
);
snd_hda_attach_beep_device
(
codec
,
get_amp_nid_
(
spec
->
beep_amp
)
);
return
0
;
}
...
...
@@ -3191,11 +3191,17 @@ static int cx_auto_build_controls(struct hda_codec *codec)
return
0
;
}
static
void
cx_auto_free
(
struct
hda_codec
*
codec
)
{
snd_hda_detach_beep_device
(
codec
);
snd_hda_gen_free
(
codec
);
}
static
const
struct
hda_codec_ops
cx_auto_patch_ops
=
{
.
build_controls
=
cx_auto_build_controls
,
.
build_pcms
=
snd_hda_gen_build_pcms
,
.
init
=
snd_hda_gen_init
,
.
free
=
snd_hda_gen
_free
,
.
free
=
cx_auto
_free
,
.
unsol_event
=
snd_hda_jack_unsol_event
,
#ifdef CONFIG_PM
.
check_power_status
=
snd_hda_gen_check_power_status
,
...
...
@@ -3390,7 +3396,7 @@ static int patch_conexant_auto(struct hda_codec *codec)
codec
->
patch_ops
=
cx_auto_patch_ops
;
if
(
spec
->
beep_amp
)
snd_hda_attach_beep_device
(
codec
,
spec
->
beep_amp
);
snd_hda_attach_beep_device
(
codec
,
get_amp_nid_
(
spec
->
beep_amp
)
);
/* Some laptops with Conexant chips show stalls in S3 resume,
* which falls into the single-cmd mode.
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
cf30f46a
...
...
@@ -3182,6 +3182,7 @@ static int patch_alc269(struct hda_codec *codec)
case
0x10ec0290
:
spec
->
codec_variant
=
ALC269_TYPE_ALC280
;
break
;
case
0x10ec0233
:
case
0x10ec0282
:
case
0x10ec0283
:
spec
->
codec_variant
=
ALC269_TYPE_ALC282
;
...
...
@@ -3881,6 +3882,7 @@ static int patch_alc680(struct hda_codec *codec)
*/
static
const
struct
hda_codec_preset
snd_hda_preset_realtek
[]
=
{
{
.
id
=
0x10ec0221
,
.
name
=
"ALC221"
,
.
patch
=
patch_alc269
},
{
.
id
=
0x10ec0233
,
.
name
=
"ALC233"
,
.
patch
=
patch_alc269
},
{
.
id
=
0x10ec0260
,
.
name
=
"ALC260"
,
.
patch
=
patch_alc260
},
{
.
id
=
0x10ec0262
,
.
name
=
"ALC262"
,
.
patch
=
patch_alc262
},
{
.
id
=
0x10ec0267
,
.
name
=
"ALC267"
,
.
patch
=
patch_alc268
},
...
...
sound/pci/hda/patch_sigmatel.c
浏览文件 @
cf30f46a
...
...
@@ -815,6 +815,29 @@ static int find_mute_led_cfg(struct hda_codec *codec, int default_polarity)
return
0
;
}
/* check whether a built-in speaker is included in parsed pins */
static
bool
has_builtin_speaker
(
struct
hda_codec
*
codec
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
hda_nid_t
*
nid_pin
;
int
nids
,
i
;
if
(
spec
->
gen
.
autocfg
.
line_out_type
==
AUTO_PIN_SPEAKER_OUT
)
{
nid_pin
=
spec
->
gen
.
autocfg
.
line_out_pins
;
nids
=
spec
->
gen
.
autocfg
.
line_outs
;
}
else
{
nid_pin
=
spec
->
gen
.
autocfg
.
speaker_pins
;
nids
=
spec
->
gen
.
autocfg
.
speaker_outs
;
}
for
(
i
=
0
;
i
<
nids
;
i
++
)
{
unsigned
int
def_conf
=
snd_hda_codec_get_pincfg
(
codec
,
nid_pin
[
i
]);
if
(
snd_hda_get_input_pin_attr
(
def_conf
)
==
INPUT_PIN_ATTR_INT
)
return
true
;
}
return
false
;
}
/*
* PC beep controls
*/
...
...
@@ -3891,6 +3914,12 @@ static int patch_stac92hd73xx(struct hda_codec *codec)
return
err
;
}
/* Don't GPIO-mute speakers if there are no internal speakers, because
* the GPIO might be necessary for Headphone
*/
if
(
spec
->
eapd_switch
&&
!
has_builtin_speaker
(
codec
))
spec
->
eapd_switch
=
0
;
codec
->
proc_widget_hook
=
stac92hd7x_proc_hook
;
snd_hda_apply_fixup
(
codec
,
HDA_FIXUP_ACT_PROBE
);
...
...
sound/pci/ice1712/ice1712.c
浏览文件 @
cf30f46a
...
...
@@ -2594,6 +2594,8 @@ static int snd_ice1712_create(struct snd_card *card,
snd_ice1712_proc_init
(
ice
);
synchronize_irq
(
pci
->
irq
);
card
->
private_data
=
ice
;
err
=
pci_request_regions
(
pci
,
"ICE1712"
);
if
(
err
<
0
)
{
kfree
(
ice
);
...
...
sound/soc/codecs/wm5102.c
浏览文件 @
cf30f46a
...
...
@@ -573,6 +573,13 @@ static const struct reg_default wm5102_sysclk_reva_patch[] = {
{
0x025e
,
0x0112
},
};
static
const
struct
reg_default
wm5102_sysclk_revb_patch
[]
=
{
{
0x3081
,
0x08FE
},
{
0x3083
,
0x00ED
},
{
0x30C1
,
0x08FE
},
{
0x30C3
,
0x00ED
},
};
static
int
wm5102_sysclk_ev
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
kcontrol
,
int
event
)
{
...
...
@@ -587,6 +594,10 @@ static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
patch
=
wm5102_sysclk_reva_patch
;
patch_size
=
ARRAY_SIZE
(
wm5102_sysclk_reva_patch
);
break
;
default:
patch
=
wm5102_sysclk_revb_patch
;
patch_size
=
ARRAY_SIZE
(
wm5102_sysclk_revb_patch
);
break
;
}
switch
(
event
)
{
...
...
@@ -755,7 +766,7 @@ SOC_SINGLE("SPKDAT1 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_5L,
SOC_DOUBLE_R
(
"HPOUT1 Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_1L
,
ARIZONA_DAC_DIGITAL_VOLUME_1R
,
ARIZONA_OUT1L_MUTE_SHIFT
,
1
,
1
),
SOC_DOUBLE_R
(
"OUT2 Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
SOC_DOUBLE_R
(
"
HP
OUT2 Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
ARIZONA_DAC_DIGITAL_VOLUME_2R
,
ARIZONA_OUT2L_MUTE_SHIFT
,
1
,
1
),
SOC_SINGLE
(
"EPOUT Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_3L
,
ARIZONA_OUT3L_MUTE_SHIFT
,
1
,
1
),
...
...
@@ -767,7 +778,7 @@ SOC_DOUBLE_R("SPKDAT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_5L,
SOC_DOUBLE_R_TLV
(
"HPOUT1 Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_1L
,
ARIZONA_DAC_DIGITAL_VOLUME_1R
,
ARIZONA_OUT1L_VOL_SHIFT
,
0xbf
,
0
,
digital_tlv
),
SOC_DOUBLE_R_TLV
(
"OUT2 Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
SOC_DOUBLE_R_TLV
(
"
HP
OUT2 Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
ARIZONA_DAC_DIGITAL_VOLUME_2R
,
ARIZONA_OUT2L_VOL_SHIFT
,
0xbf
,
0
,
digital_tlv
),
SOC_SINGLE_TLV
(
"EPOUT Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_3L
,
...
...
sound/soc/codecs/wm5110.c
浏览文件 @
cf30f46a
...
...
@@ -213,9 +213,9 @@ ARIZONA_MIXER_CONTROLS("SPKDAT2R", ARIZONA_OUT6RMIX_INPUT_1_SOURCE),
SOC_SINGLE
(
"HPOUT1 High Performance Switch"
,
ARIZONA_OUTPUT_PATH_CONFIG_1L
,
ARIZONA_OUT1_OSR_SHIFT
,
1
,
0
),
SOC_SINGLE
(
"OUT2 High Performance Switch"
,
ARIZONA_OUTPUT_PATH_CONFIG_2L
,
SOC_SINGLE
(
"
HP
OUT2 High Performance Switch"
,
ARIZONA_OUTPUT_PATH_CONFIG_2L
,
ARIZONA_OUT2_OSR_SHIFT
,
1
,
0
),
SOC_SINGLE
(
"OUT3 High Performance Switch"
,
ARIZONA_OUTPUT_PATH_CONFIG_3L
,
SOC_SINGLE
(
"
HP
OUT3 High Performance Switch"
,
ARIZONA_OUTPUT_PATH_CONFIG_3L
,
ARIZONA_OUT3_OSR_SHIFT
,
1
,
0
),
SOC_SINGLE
(
"Speaker High Performance Switch"
,
ARIZONA_OUTPUT_PATH_CONFIG_4L
,
ARIZONA_OUT4_OSR_SHIFT
,
1
,
0
),
...
...
@@ -226,9 +226,9 @@ SOC_SINGLE("SPKDAT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_6L,
SOC_DOUBLE_R
(
"HPOUT1 Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_1L
,
ARIZONA_DAC_DIGITAL_VOLUME_1R
,
ARIZONA_OUT1L_MUTE_SHIFT
,
1
,
1
),
SOC_DOUBLE_R
(
"OUT2 Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
SOC_DOUBLE_R
(
"
HP
OUT2 Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
ARIZONA_DAC_DIGITAL_VOLUME_2R
,
ARIZONA_OUT2L_MUTE_SHIFT
,
1
,
1
),
SOC_DOUBLE_R
(
"OUT3 Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_3L
,
SOC_DOUBLE_R
(
"
HP
OUT3 Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_3L
,
ARIZONA_DAC_DIGITAL_VOLUME_3R
,
ARIZONA_OUT3L_MUTE_SHIFT
,
1
,
1
),
SOC_DOUBLE_R
(
"Speaker Digital Switch"
,
ARIZONA_DAC_DIGITAL_VOLUME_4L
,
ARIZONA_DAC_DIGITAL_VOLUME_4R
,
ARIZONA_OUT4L_MUTE_SHIFT
,
1
,
1
),
...
...
@@ -240,10 +240,10 @@ SOC_DOUBLE_R("SPKDAT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_6L,
SOC_DOUBLE_R_TLV
(
"HPOUT1 Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_1L
,
ARIZONA_DAC_DIGITAL_VOLUME_1R
,
ARIZONA_OUT1L_VOL_SHIFT
,
0xbf
,
0
,
digital_tlv
),
SOC_DOUBLE_R_TLV
(
"OUT2 Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
SOC_DOUBLE_R_TLV
(
"
HP
OUT2 Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_2L
,
ARIZONA_DAC_DIGITAL_VOLUME_2R
,
ARIZONA_OUT2L_VOL_SHIFT
,
0xbf
,
0
,
digital_tlv
),
SOC_DOUBLE_R_TLV
(
"OUT3 Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_3L
,
SOC_DOUBLE_R_TLV
(
"
HP
OUT3 Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_3L
,
ARIZONA_DAC_DIGITAL_VOLUME_3R
,
ARIZONA_OUT3L_VOL_SHIFT
,
0xbf
,
0
,
digital_tlv
),
SOC_DOUBLE_R_TLV
(
"Speaker Digital Volume"
,
ARIZONA_DAC_DIGITAL_VOLUME_4L
,
...
...
@@ -260,11 +260,11 @@ SOC_DOUBLE_R_RANGE_TLV("HPOUT1 Volume", ARIZONA_OUTPUT_PATH_CONFIG_1L,
ARIZONA_OUTPUT_PATH_CONFIG_1R
,
ARIZONA_OUT1L_PGA_VOL_SHIFT
,
0x34
,
0x40
,
0
,
ana_tlv
),
SOC_DOUBLE_R_RANGE_TLV
(
"OUT2 Volume"
,
ARIZONA_OUTPUT_PATH_CONFIG_2L
,
SOC_DOUBLE_R_RANGE_TLV
(
"
HP
OUT2 Volume"
,
ARIZONA_OUTPUT_PATH_CONFIG_2L
,
ARIZONA_OUTPUT_PATH_CONFIG_2R
,
ARIZONA_OUT2L_PGA_VOL_SHIFT
,
0x34
,
0x40
,
0
,
ana_tlv
),
SOC_DOUBLE_R_RANGE_TLV
(
"OUT3 Volume"
,
ARIZONA_OUTPUT_PATH_CONFIG_3L
,
SOC_DOUBLE_R_RANGE_TLV
(
"
HP
OUT3 Volume"
,
ARIZONA_OUTPUT_PATH_CONFIG_3L
,
ARIZONA_OUTPUT_PATH_CONFIG_3R
,
ARIZONA_OUT3L_PGA_VOL_SHIFT
,
0x34
,
0x40
,
0
,
ana_tlv
),
...
...
sound/soc/codecs/wm8350.c
浏览文件 @
cf30f46a
...
...
@@ -1301,7 +1301,7 @@ static irqreturn_t wm8350_hpl_jack_handler(int irq, void *data)
if
(
device_may_wakeup
(
wm8350
->
dev
))
pm_wakeup_event
(
wm8350
->
dev
,
250
);
schedule_delayed_work
(
&
priv
->
hpl
.
work
,
200
);
schedule_delayed_work
(
&
priv
->
hpl
.
work
,
msecs_to_jiffies
(
200
)
);
return
IRQ_HANDLED
;
}
...
...
@@ -1318,7 +1318,7 @@ static irqreturn_t wm8350_hpr_jack_handler(int irq, void *data)
if
(
device_may_wakeup
(
wm8350
->
dev
))
pm_wakeup_event
(
wm8350
->
dev
,
250
);
schedule_delayed_work
(
&
priv
->
hpr
.
work
,
200
);
schedule_delayed_work
(
&
priv
->
hpr
.
work
,
msecs_to_jiffies
(
200
)
);
return
IRQ_HANDLED
;
}
...
...
sound/soc/codecs/wm8960.c
浏览文件 @
cf30f46a
...
...
@@ -53,8 +53,8 @@
* using 2 wire for device control, so we cache them instead.
*/
static
const
struct
reg_default
wm8960_reg_defaults
[]
=
{
{
0x0
,
0x00
9
7
},
{
0x1
,
0x00
9
7
},
{
0x0
,
0x00
a
7
},
{
0x1
,
0x00
a
7
},
{
0x2
,
0x0000
},
{
0x3
,
0x0000
},
{
0x4
,
0x0000
},
...
...
@@ -323,8 +323,8 @@ SND_SOC_DAPM_MIXER("Left Input Mixer", WM8960_POWER3, 5, 0,
SND_SOC_DAPM_MIXER
(
"Right Input Mixer"
,
WM8960_POWER3
,
4
,
0
,
wm8960_rin
,
ARRAY_SIZE
(
wm8960_rin
)),
SND_SOC_DAPM_ADC
(
"Left ADC"
,
"Capture"
,
WM8960_POWER
2
,
3
,
0
),
SND_SOC_DAPM_ADC
(
"Right ADC"
,
"Capture"
,
WM8960_POWER
2
,
2
,
0
),
SND_SOC_DAPM_ADC
(
"Left ADC"
,
"Capture"
,
WM8960_POWER
1
,
3
,
0
),
SND_SOC_DAPM_ADC
(
"Right ADC"
,
"Capture"
,
WM8960_POWER
1
,
2
,
0
),
SND_SOC_DAPM_DAC
(
"Left DAC"
,
"Playback"
,
WM8960_POWER2
,
8
,
0
),
SND_SOC_DAPM_DAC
(
"Right DAC"
,
"Playback"
,
WM8960_POWER2
,
7
,
0
),
...
...
sound/soc/tegra/tegra20_i2s.h
浏览文件 @
cf30f46a
...
...
@@ -121,7 +121,7 @@
#define TEGRA20_I2S_TIMING_NON_SYM_ENABLE (1 << 12)
#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT 0
#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7ff
f
#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7ff
#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK (TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US << TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT)
/* Fields in TEGRA20_I2S_FIFO_SCR */
...
...
sound/soc/tegra/tegra30_i2s.h
浏览文件 @
cf30f46a
...
...
@@ -110,7 +110,7 @@
#define TEGRA30_I2S_TIMING_NON_SYM_ENABLE (1 << 12)
#define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT 0
#define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7ff
f
#define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7ff
#define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK (TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US << TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT)
/* Fields in TEGRA30_I2S_OFFSET */
...
...
sound/usb/card.c
浏览文件 @
cf30f46a
...
...
@@ -243,6 +243,21 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif)
struct
usb_interface_assoc_descriptor
*
assoc
=
usb_ifnum_to_if
(
dev
,
ctrlif
)
->
intf_assoc
;
if
(
!
assoc
)
{
/*
* Firmware writers cannot count to three. So to find
* the IAD on the NuForce UDH-100, also check the next
* interface.
*/
struct
usb_interface
*
iface
=
usb_ifnum_to_if
(
dev
,
ctrlif
+
1
);
if
(
iface
&&
iface
->
intf_assoc
&&
iface
->
intf_assoc
->
bFunctionClass
==
USB_CLASS_AUDIO
&&
iface
->
intf_assoc
->
bFunctionProtocol
==
UAC_VERSION_2
)
assoc
=
iface
->
intf_assoc
;
}
if
(
!
assoc
)
{
snd_printk
(
KERN_ERR
"Audio class v2 interfaces need an interface association
\n
"
);
return
-
EINVAL
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录