Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
8e28e3b2
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8e28e3b2
编写于
4月 07, 2011
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'fix/hda' into topic/hda
上级
ad93ffe6
262ac22d
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
71 addition
and
34 deletion
+71
-34
sound/core/pcm_lib.c
sound/core/pcm_lib.c
+3
-1
sound/firewire/speakers.c
sound/firewire/speakers.c
+1
-2
sound/pci/ens1370.c
sound/pci/ens1370.c
+19
-4
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+2
-0
sound/pci/hda/patch_hdmi.c
sound/pci/hda/patch_hdmi.c
+44
-26
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+1
-1
sound/usb/midi.c
sound/usb/midi.c
+1
-0
未找到文件。
sound/core/pcm_lib.c
浏览文件 @
8e28e3b2
...
@@ -375,6 +375,7 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream,
...
@@ -375,6 +375,7 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream,
}
}
if
(
runtime
->
no_period_wakeup
)
{
if
(
runtime
->
no_period_wakeup
)
{
snd_pcm_sframes_t
xrun_threshold
;
/*
/*
* Without regular period interrupts, we have to check
* Without regular period interrupts, we have to check
* the elapsed time to detect xruns.
* the elapsed time to detect xruns.
...
@@ -383,7 +384,8 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream,
...
@@ -383,7 +384,8 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream,
if
(
jdelta
<
runtime
->
hw_ptr_buffer_jiffies
/
2
)
if
(
jdelta
<
runtime
->
hw_ptr_buffer_jiffies
/
2
)
goto
no_delta_check
;
goto
no_delta_check
;
hdelta
=
jdelta
-
delta
*
HZ
/
runtime
->
rate
;
hdelta
=
jdelta
-
delta
*
HZ
/
runtime
->
rate
;
while
(
hdelta
>
runtime
->
hw_ptr_buffer_jiffies
/
2
+
1
)
{
xrun_threshold
=
runtime
->
hw_ptr_buffer_jiffies
/
2
+
1
;
while
(
hdelta
>
xrun_threshold
)
{
delta
+=
runtime
->
buffer_size
;
delta
+=
runtime
->
buffer_size
;
hw_base
+=
runtime
->
buffer_size
;
hw_base
+=
runtime
->
buffer_size
;
if
(
hw_base
>=
runtime
->
boundary
)
if
(
hw_base
>=
runtime
->
boundary
)
...
...
sound/firewire/speakers.c
浏览文件 @
8e28e3b2
...
@@ -778,10 +778,9 @@ static int __devexit fwspk_remove(struct device *dev)
...
@@ -778,10 +778,9 @@ static int __devexit fwspk_remove(struct device *dev)
{
{
struct
fwspk
*
fwspk
=
dev_get_drvdata
(
dev
);
struct
fwspk
*
fwspk
=
dev_get_drvdata
(
dev
);
snd_card_disconnect
(
fwspk
->
card
);
mutex_lock
(
&
fwspk
->
mutex
);
mutex_lock
(
&
fwspk
->
mutex
);
amdtp_out_stream_pcm_abort
(
&
fwspk
->
stream
);
amdtp_out_stream_pcm_abort
(
&
fwspk
->
stream
);
snd_card_disconnect
(
fwspk
->
card
);
fwspk_stop_stream
(
fwspk
);
fwspk_stop_stream
(
fwspk
);
mutex_unlock
(
&
fwspk
->
mutex
);
mutex_unlock
(
&
fwspk
->
mutex
);
...
...
sound/pci/ens1370.c
浏览文件 @
8e28e3b2
...
@@ -229,6 +229,7 @@ MODULE_PARM_DESC(lineio, "Line In to Rear Out (0 = auto, 1 = force).");
...
@@ -229,6 +229,7 @@ MODULE_PARM_DESC(lineio, "Line In to Rear Out (0 = auto, 1 = force).");
#define ES_REG_1371_CODEC 0x14
/* W/R: Codec Read/Write register address */
#define ES_REG_1371_CODEC 0x14
/* W/R: Codec Read/Write register address */
#define ES_1371_CODEC_RDY (1<<31)
/* codec ready */
#define ES_1371_CODEC_RDY (1<<31)
/* codec ready */
#define ES_1371_CODEC_WIP (1<<30)
/* codec register access in progress */
#define ES_1371_CODEC_WIP (1<<30)
/* codec register access in progress */
#define EV_1938_CODEC_MAGIC (1<<26)
#define ES_1371_CODEC_PIRD (1<<23)
/* codec read/write select register */
#define ES_1371_CODEC_PIRD (1<<23)
/* codec read/write select register */
#define ES_1371_CODEC_WRITE(a,d) ((((a)&0x7f)<<16)|(((d)&0xffff)<<0))
#define ES_1371_CODEC_WRITE(a,d) ((((a)&0x7f)<<16)|(((d)&0xffff)<<0))
#define ES_1371_CODEC_READS(a) ((((a)&0x7f)<<16)|ES_1371_CODEC_PIRD)
#define ES_1371_CODEC_READS(a) ((((a)&0x7f)<<16)|ES_1371_CODEC_PIRD)
...
@@ -603,12 +604,18 @@ static void snd_es1370_codec_write(struct snd_ak4531 *ak4531,
...
@@ -603,12 +604,18 @@ static void snd_es1370_codec_write(struct snd_ak4531 *ak4531,
#ifdef CHIP1371
#ifdef CHIP1371
static
inline
bool
is_ev1938
(
struct
ensoniq
*
ensoniq
)
{
return
ensoniq
->
pci
->
device
==
0x8938
;
}
static
void
snd_es1371_codec_write
(
struct
snd_ac97
*
ac97
,
static
void
snd_es1371_codec_write
(
struct
snd_ac97
*
ac97
,
unsigned
short
reg
,
unsigned
short
val
)
unsigned
short
reg
,
unsigned
short
val
)
{
{
struct
ensoniq
*
ensoniq
=
ac97
->
private_data
;
struct
ensoniq
*
ensoniq
=
ac97
->
private_data
;
unsigned
int
t
,
x
;
unsigned
int
t
,
x
,
flag
;
flag
=
is_ev1938
(
ensoniq
)
?
EV_1938_CODEC_MAGIC
:
0
;
mutex_lock
(
&
ensoniq
->
src_mutex
);
mutex_lock
(
&
ensoniq
->
src_mutex
);
for
(
t
=
0
;
t
<
POLL_COUNT
;
t
++
)
{
for
(
t
=
0
;
t
<
POLL_COUNT
;
t
++
)
{
if
(
!
(
inl
(
ES_REG
(
ensoniq
,
1371
_CODEC
))
&
ES_1371_CODEC_WIP
))
{
if
(
!
(
inl
(
ES_REG
(
ensoniq
,
1371
_CODEC
))
&
ES_1371_CODEC_WIP
))
{
...
@@ -630,7 +637,8 @@ static void snd_es1371_codec_write(struct snd_ac97 *ac97,
...
@@ -630,7 +637,8 @@ static void snd_es1371_codec_write(struct snd_ac97 *ac97,
0x00010000
)
0x00010000
)
break
;
break
;
}
}
outl
(
ES_1371_CODEC_WRITE
(
reg
,
val
),
ES_REG
(
ensoniq
,
1371
_CODEC
));
outl
(
ES_1371_CODEC_WRITE
(
reg
,
val
)
|
flag
,
ES_REG
(
ensoniq
,
1371
_CODEC
));
/* restore SRC reg */
/* restore SRC reg */
snd_es1371_wait_src_ready
(
ensoniq
);
snd_es1371_wait_src_ready
(
ensoniq
);
outl
(
x
,
ES_REG
(
ensoniq
,
1371
_SMPRATE
));
outl
(
x
,
ES_REG
(
ensoniq
,
1371
_SMPRATE
));
...
@@ -647,8 +655,9 @@ static unsigned short snd_es1371_codec_read(struct snd_ac97 *ac97,
...
@@ -647,8 +655,9 @@ static unsigned short snd_es1371_codec_read(struct snd_ac97 *ac97,
unsigned
short
reg
)
unsigned
short
reg
)
{
{
struct
ensoniq
*
ensoniq
=
ac97
->
private_data
;
struct
ensoniq
*
ensoniq
=
ac97
->
private_data
;
unsigned
int
t
,
x
,
fail
=
0
;
unsigned
int
t
,
x
,
f
lag
,
f
ail
=
0
;
flag
=
is_ev1938
(
ensoniq
)
?
EV_1938_CODEC_MAGIC
:
0
;
__again:
__again:
mutex_lock
(
&
ensoniq
->
src_mutex
);
mutex_lock
(
&
ensoniq
->
src_mutex
);
for
(
t
=
0
;
t
<
POLL_COUNT
;
t
++
)
{
for
(
t
=
0
;
t
<
POLL_COUNT
;
t
++
)
{
...
@@ -671,7 +680,8 @@ static unsigned short snd_es1371_codec_read(struct snd_ac97 *ac97,
...
@@ -671,7 +680,8 @@ static unsigned short snd_es1371_codec_read(struct snd_ac97 *ac97,
0x00010000
)
0x00010000
)
break
;
break
;
}
}
outl
(
ES_1371_CODEC_READS
(
reg
),
ES_REG
(
ensoniq
,
1371
_CODEC
));
outl
(
ES_1371_CODEC_READS
(
reg
)
|
flag
,
ES_REG
(
ensoniq
,
1371
_CODEC
));
/* restore SRC reg */
/* restore SRC reg */
snd_es1371_wait_src_ready
(
ensoniq
);
snd_es1371_wait_src_ready
(
ensoniq
);
outl
(
x
,
ES_REG
(
ensoniq
,
1371
_SMPRATE
));
outl
(
x
,
ES_REG
(
ensoniq
,
1371
_SMPRATE
));
...
@@ -683,6 +693,11 @@ static unsigned short snd_es1371_codec_read(struct snd_ac97 *ac97,
...
@@ -683,6 +693,11 @@ static unsigned short snd_es1371_codec_read(struct snd_ac97 *ac97,
/* now wait for the stinkin' data (RDY) */
/* now wait for the stinkin' data (RDY) */
for
(
t
=
0
;
t
<
POLL_COUNT
;
t
++
)
{
for
(
t
=
0
;
t
<
POLL_COUNT
;
t
++
)
{
if
((
x
=
inl
(
ES_REG
(
ensoniq
,
1371
_CODEC
)))
&
ES_1371_CODEC_RDY
)
{
if
((
x
=
inl
(
ES_REG
(
ensoniq
,
1371
_CODEC
)))
&
ES_1371_CODEC_RDY
)
{
if
(
is_ev1938
(
ensoniq
))
{
for
(
t
=
0
;
t
<
100
;
t
++
)
inl
(
ES_REG
(
ensoniq
,
CONTROL
));
x
=
inl
(
ES_REG
(
ensoniq
,
1371
_CODEC
));
}
mutex_unlock
(
&
ensoniq
->
src_mutex
);
mutex_unlock
(
&
ensoniq
->
src_mutex
);
return
ES_1371_CODEC_READ
(
x
);
return
ES_1371_CODEC_READ
(
x
);
}
}
...
...
sound/pci/hda/patch_conexant.c
浏览文件 @
8e28e3b2
...
@@ -3034,6 +3034,8 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
...
@@ -3034,6 +3034,8 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
SND_PCI_QUIRK
(
0x17aa
,
0x21c5
,
"Thinkpad Edge 13"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21c5
,
"Thinkpad Edge 13"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21c6
,
"Thinkpad Edge 13"
,
CXT5066_ASUS
),
SND_PCI_QUIRK
(
0x17aa
,
0x21c6
,
"Thinkpad Edge 13"
,
CXT5066_ASUS
),
SND_PCI_QUIRK
(
0x17aa
,
0x215e
,
"Lenovo Thinkpad"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x215e
,
"Lenovo Thinkpad"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21da
,
"Lenovo X220"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21db
,
"Lenovo X220-tablet"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x38af
,
"Lenovo G560"
,
CXT5066_ASUS
),
SND_PCI_QUIRK
(
0x17aa
,
0x38af
,
"Lenovo G560"
,
CXT5066_ASUS
),
SND_PCI_QUIRK_VENDOR
(
0x17aa
,
"Lenovo"
,
CXT5066_IDEAPAD
),
/* Fallback for Lenovos without dock mic */
SND_PCI_QUIRK_VENDOR
(
0x17aa
,
"Lenovo"
,
CXT5066_IDEAPAD
),
/* Fallback for Lenovos without dock mic */
{}
{}
...
...
sound/pci/hda/patch_hdmi.c
浏览文件 @
8e28e3b2
...
@@ -1280,6 +1280,39 @@ static int simple_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
...
@@ -1280,6 +1280,39 @@ static int simple_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
stream_tag
,
format
,
substream
);
stream_tag
,
format
,
substream
);
}
}
static
void
nvhdmi_8ch_7x_set_info_frame_parameters
(
struct
hda_codec
*
codec
,
int
channels
)
{
unsigned
int
chanmask
;
int
chan
=
channels
?
(
channels
-
1
)
:
1
;
switch
(
channels
)
{
default:
case
0
:
case
2
:
chanmask
=
0x00
;
break
;
case
4
:
chanmask
=
0x08
;
break
;
case
6
:
chanmask
=
0x0b
;
break
;
case
8
:
chanmask
=
0x13
;
break
;
}
/* Set the audio infoframe channel allocation and checksum fields. The
* channel count is computed implicitly by the hardware. */
snd_hda_codec_write
(
codec
,
0x1
,
0
,
Nv_VERB_SET_Channel_Allocation
,
chanmask
);
snd_hda_codec_write
(
codec
,
0x1
,
0
,
Nv_VERB_SET_Info_Frame_Checksum
,
(
0x71
-
chan
-
chanmask
));
}
static
int
nvhdmi_8ch_7x_pcm_close
(
struct
hda_pcm_stream
*
hinfo
,
static
int
nvhdmi_8ch_7x_pcm_close
(
struct
hda_pcm_stream
*
hinfo
,
struct
hda_codec
*
codec
,
struct
hda_codec
*
codec
,
struct
snd_pcm_substream
*
substream
)
struct
snd_pcm_substream
*
substream
)
...
@@ -1298,6 +1331,10 @@ static int nvhdmi_8ch_7x_pcm_close(struct hda_pcm_stream *hinfo,
...
@@ -1298,6 +1331,10 @@ static int nvhdmi_8ch_7x_pcm_close(struct hda_pcm_stream *hinfo,
AC_VERB_SET_STREAM_FORMAT
,
0
);
AC_VERB_SET_STREAM_FORMAT
,
0
);
}
}
/* The audio hardware sends a channel count of 0x7 (8ch) when all the
* streams are disabled. */
nvhdmi_8ch_7x_set_info_frame_parameters
(
codec
,
8
);
return
snd_hda_multi_out_dig_close
(
codec
,
&
spec
->
multiout
);
return
snd_hda_multi_out_dig_close
(
codec
,
&
spec
->
multiout
);
}
}
...
@@ -1308,37 +1345,16 @@ static int nvhdmi_8ch_7x_pcm_prepare(struct hda_pcm_stream *hinfo,
...
@@ -1308,37 +1345,16 @@ static int nvhdmi_8ch_7x_pcm_prepare(struct hda_pcm_stream *hinfo,
struct
snd_pcm_substream
*
substream
)
struct
snd_pcm_substream
*
substream
)
{
{
int
chs
;
int
chs
;
unsigned
int
dataDCC1
,
dataDCC2
,
chan
,
chanmask
,
chan
nel_id
;
unsigned
int
dataDCC1
,
dataDCC2
,
channel_id
;
int
i
;
int
i
;
mutex_lock
(
&
codec
->
spdif_mutex
);
mutex_lock
(
&
codec
->
spdif_mutex
);
chs
=
substream
->
runtime
->
channels
;
chs
=
substream
->
runtime
->
channels
;
chan
=
chs
?
(
chs
-
1
)
:
1
;
switch
(
chs
)
{
default:
case
0
:
case
2
:
chanmask
=
0x00
;
break
;
case
4
:
chanmask
=
0x08
;
break
;
case
6
:
chanmask
=
0x0b
;
break
;
case
8
:
chanmask
=
0x13
;
break
;
}
dataDCC1
=
AC_DIG1_ENABLE
|
AC_DIG1_COPYRIGHT
;
dataDCC1
=
AC_DIG1_ENABLE
|
AC_DIG1_COPYRIGHT
;
dataDCC2
=
0x2
;
dataDCC2
=
0x2
;
/* set the Audio InforFrame Channel Allocation */
snd_hda_codec_write
(
codec
,
0x1
,
0
,
Nv_VERB_SET_Channel_Allocation
,
chanmask
);
/* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
/* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
if
(
codec
->
spdif_status_reset
&&
(
codec
->
spdif_ctls
&
AC_DIG1_ENABLE
))
if
(
codec
->
spdif_status_reset
&&
(
codec
->
spdif_ctls
&
AC_DIG1_ENABLE
))
snd_hda_codec_write
(
codec
,
snd_hda_codec_write
(
codec
,
...
@@ -1413,10 +1429,7 @@ static int nvhdmi_8ch_7x_pcm_prepare(struct hda_pcm_stream *hinfo,
...
@@ -1413,10 +1429,7 @@ static int nvhdmi_8ch_7x_pcm_prepare(struct hda_pcm_stream *hinfo,
}
}
}
}
/* set the Audio Info Frame Checksum */
nvhdmi_8ch_7x_set_info_frame_parameters
(
codec
,
chs
);
snd_hda_codec_write
(
codec
,
0x1
,
0
,
Nv_VERB_SET_Info_Frame_Checksum
,
(
0x71
-
chan
-
chanmask
));
mutex_unlock
(
&
codec
->
spdif_mutex
);
mutex_unlock
(
&
codec
->
spdif_mutex
);
return
0
;
return
0
;
...
@@ -1512,6 +1525,11 @@ static int patch_nvhdmi_8ch_7x(struct hda_codec *codec)
...
@@ -1512,6 +1525,11 @@ static int patch_nvhdmi_8ch_7x(struct hda_codec *codec)
spec
->
multiout
.
max_channels
=
8
;
spec
->
multiout
.
max_channels
=
8
;
spec
->
pcm_playback
=
&
nvhdmi_pcm_playback_8ch_7x
;
spec
->
pcm_playback
=
&
nvhdmi_pcm_playback_8ch_7x
;
codec
->
patch_ops
=
nvhdmi_patch_ops_8ch_7x
;
codec
->
patch_ops
=
nvhdmi_patch_ops_8ch_7x
;
/* Initialize the audio infoframe channel mask and checksum to something
* valid */
nvhdmi_8ch_7x_set_info_frame_parameters
(
codec
,
8
);
return
0
;
return
0
;
}
}
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
8e28e3b2
...
@@ -14134,7 +14134,7 @@ static hda_nid_t alc269vb_capsrc_nids[1] = {
...
@@ -14134,7 +14134,7 @@ static hda_nid_t alc269vb_capsrc_nids[1] = {
};
};
static hda_nid_t alc269_adc_candidates[] = {
static hda_nid_t alc269_adc_candidates[] = {
0x08, 0x09, 0x07,
0x08, 0x09, 0x07,
0x11,
};
};
#define alc269_modes alc260_modes
#define alc269_modes alc260_modes
...
...
sound/usb/midi.c
浏览文件 @
8e28e3b2
...
@@ -1301,6 +1301,7 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
...
@@ -1301,6 +1301,7 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi* umidi,
case
USB_ID
(
0x15ca
,
0x0101
):
/* Textech USB Midi Cable */
case
USB_ID
(
0x15ca
,
0x0101
):
/* Textech USB Midi Cable */
case
USB_ID
(
0x15ca
,
0x1806
):
/* Textech USB Midi Cable */
case
USB_ID
(
0x15ca
,
0x1806
):
/* Textech USB Midi Cable */
case
USB_ID
(
0x1a86
,
0x752d
):
/* QinHeng CH345 "USB2.0-MIDI" */
case
USB_ID
(
0x1a86
,
0x752d
):
/* QinHeng CH345 "USB2.0-MIDI" */
case
USB_ID
(
0xfc08
,
0x0101
):
/* Unknown vendor Cable */
ep
->
max_transfer
=
4
;
ep
->
max_transfer
=
4
;
break
;
break
;
/*
/*
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录