Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
f257f1d8
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
f257f1d8
编写于
11月 16, 2015
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-linus' into for-next
上级
8005c49d
a91e627e
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
64 addition
and
0 deletion
+64
-0
sound/firewire/dice/dice.c
sound/firewire/dice/dice.c
+4
-0
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+1
-0
sound/usb/midi.c
sound/usb/midi.c
+46
-0
sound/usb/quirks-table.h
sound/usb/quirks-table.h
+11
-0
sound/usb/quirks.c
sound/usb/quirks.c
+1
-0
sound/usb/usbaudio.h
sound/usb/usbaudio.h
+1
-0
未找到文件。
sound/firewire/dice/dice.c
浏览文件 @
f257f1d8
...
@@ -12,9 +12,11 @@ MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
...
@@ -12,9 +12,11 @@ MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
MODULE_LICENSE
(
"GPL v2"
);
MODULE_LICENSE
(
"GPL v2"
);
#define OUI_WEISS 0x001c6a
#define OUI_WEISS 0x001c6a
#define OUI_LOUD 0x000ff2
#define DICE_CATEGORY_ID 0x04
#define DICE_CATEGORY_ID 0x04
#define WEISS_CATEGORY_ID 0x00
#define WEISS_CATEGORY_ID 0x00
#define LOUD_CATEGORY_ID 0x10
static
int
dice_interface_check
(
struct
fw_unit
*
unit
)
static
int
dice_interface_check
(
struct
fw_unit
*
unit
)
{
{
...
@@ -57,6 +59,8 @@ static int dice_interface_check(struct fw_unit *unit)
...
@@ -57,6 +59,8 @@ static int dice_interface_check(struct fw_unit *unit)
}
}
if
(
vendor
==
OUI_WEISS
)
if
(
vendor
==
OUI_WEISS
)
category
=
WEISS_CATEGORY_ID
;
category
=
WEISS_CATEGORY_ID
;
else
if
(
vendor
==
OUI_LOUD
)
category
=
LOUD_CATEGORY_ID
;
else
else
category
=
DICE_CATEGORY_ID
;
category
=
DICE_CATEGORY_ID
;
if
(
device
->
config_rom
[
3
]
!=
((
vendor
<<
8
)
|
category
)
||
if
(
device
->
config_rom
[
3
]
!=
((
vendor
<<
8
)
|
category
)
||
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
f257f1d8
...
@@ -5182,6 +5182,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
...
@@ -5182,6 +5182,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK
(
0x1025
,
0x079b
,
"Acer Aspire V5-573G"
,
ALC282_FIXUP_ASPIRE_V5_PINS
),
SND_PCI_QUIRK
(
0x1025
,
0x079b
,
"Acer Aspire V5-573G"
,
ALC282_FIXUP_ASPIRE_V5_PINS
),
SND_PCI_QUIRK
(
0x1028
,
0x0470
,
"Dell M101z"
,
ALC269_FIXUP_DELL_M101Z
),
SND_PCI_QUIRK
(
0x1028
,
0x0470
,
"Dell M101z"
,
ALC269_FIXUP_DELL_M101Z
),
SND_PCI_QUIRK
(
0x1028
,
0x054b
,
"Dell XPS one 2710"
,
ALC275_FIXUP_DELL_XPS
),
SND_PCI_QUIRK
(
0x1028
,
0x054b
,
"Dell XPS one 2710"
,
ALC275_FIXUP_DELL_XPS
),
SND_PCI_QUIRK
(
0x1028
,
0x05bd
,
"Dell Latitude E6440"
,
ALC292_FIXUP_DELL_E7X
),
SND_PCI_QUIRK
(
0x1028
,
0x05ca
,
"Dell Latitude E7240"
,
ALC292_FIXUP_DELL_E7X
),
SND_PCI_QUIRK
(
0x1028
,
0x05ca
,
"Dell Latitude E7240"
,
ALC292_FIXUP_DELL_E7X
),
SND_PCI_QUIRK
(
0x1028
,
0x05cb
,
"Dell Latitude E7440"
,
ALC292_FIXUP_DELL_E7X
),
SND_PCI_QUIRK
(
0x1028
,
0x05cb
,
"Dell Latitude E7440"
,
ALC292_FIXUP_DELL_E7X
),
SND_PCI_QUIRK
(
0x1028
,
0x05da
,
"Dell Vostro 5460"
,
ALC290_FIXUP_SUBWOOFER
),
SND_PCI_QUIRK
(
0x1028
,
0x05da
,
"Dell Vostro 5460"
,
ALC290_FIXUP_SUBWOOFER
),
...
...
sound/usb/midi.c
浏览文件 @
f257f1d8
...
@@ -174,6 +174,8 @@ struct snd_usb_midi_in_endpoint {
...
@@ -174,6 +174,8 @@ struct snd_usb_midi_in_endpoint {
u8
running_status_length
;
u8
running_status_length
;
}
ports
[
0x10
];
}
ports
[
0x10
];
u8
seen_f5
;
u8
seen_f5
;
bool
in_sysex
;
u8
last_cin
;
u8
error_resubmit
;
u8
error_resubmit
;
int
current_port
;
int
current_port
;
};
};
...
@@ -467,6 +469,39 @@ static void snd_usbmidi_maudio_broken_running_status_input(
...
@@ -467,6 +469,39 @@ static void snd_usbmidi_maudio_broken_running_status_input(
}
}
}
}
/*
* QinHeng CH345 is buggy: every second packet inside a SysEx has not CIN 4
* but the previously seen CIN, but still with three data bytes.
*/
static
void
ch345_broken_sysex_input
(
struct
snd_usb_midi_in_endpoint
*
ep
,
uint8_t
*
buffer
,
int
buffer_length
)
{
unsigned
int
i
,
cin
,
length
;
for
(
i
=
0
;
i
+
3
<
buffer_length
;
i
+=
4
)
{
if
(
buffer
[
i
]
==
0
&&
i
>
0
)
break
;
cin
=
buffer
[
i
]
&
0x0f
;
if
(
ep
->
in_sysex
&&
cin
==
ep
->
last_cin
&&
(
buffer
[
i
+
1
+
(
cin
==
0x6
)]
&
0x80
)
==
0
)
cin
=
0x4
;
#if 0
if (buffer[i + 1] == 0x90) {
/*
* Either a corrupted running status or a real note-on
* message; impossible to detect reliably.
*/
}
#endif
length
=
snd_usbmidi_cin_length
[
cin
];
snd_usbmidi_input_data
(
ep
,
0
,
&
buffer
[
i
+
1
],
length
);
ep
->
in_sysex
=
cin
==
0x4
;
if
(
!
ep
->
in_sysex
)
ep
->
last_cin
=
cin
;
}
}
/*
/*
* CME protocol: like the standard protocol, but SysEx commands are sent as a
* CME protocol: like the standard protocol, but SysEx commands are sent as a
* single USB packet preceded by a 0x0F byte.
* single USB packet preceded by a 0x0F byte.
...
@@ -660,6 +695,12 @@ static struct usb_protocol_ops snd_usbmidi_cme_ops = {
...
@@ -660,6 +695,12 @@ static struct usb_protocol_ops snd_usbmidi_cme_ops = {
.
output_packet
=
snd_usbmidi_output_standard_packet
,
.
output_packet
=
snd_usbmidi_output_standard_packet
,
};
};
static
struct
usb_protocol_ops
snd_usbmidi_ch345_broken_sysex_ops
=
{
.
input
=
ch345_broken_sysex_input
,
.
output
=
snd_usbmidi_standard_output
,
.
output_packet
=
snd_usbmidi_output_standard_packet
,
};
/*
/*
* AKAI MPD16 protocol:
* AKAI MPD16 protocol:
*
*
...
@@ -1341,6 +1382,7 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi *umidi,
...
@@ -1341,6 +1382,7 @@ static int snd_usbmidi_out_endpoint_create(struct snd_usb_midi *umidi,
* Various chips declare a packet size larger than 4 bytes, but
* Various chips declare a packet size larger than 4 bytes, but
* do not actually work with larger packets:
* do not actually work with larger packets:
*/
*/
case
USB_ID
(
0x0a67
,
0x5011
):
/* Medeli DD305 */
case
USB_ID
(
0x0a92
,
0x1020
):
/* ESI M4U */
case
USB_ID
(
0x0a92
,
0x1020
):
/* ESI M4U */
case
USB_ID
(
0x1430
,
0x474b
):
/* RedOctane GH MIDI INTERFACE */
case
USB_ID
(
0x1430
,
0x474b
):
/* RedOctane GH MIDI INTERFACE */
case
USB_ID
(
0x15ca
,
0x0101
):
/* Textech USB Midi Cable */
case
USB_ID
(
0x15ca
,
0x0101
):
/* Textech USB Midi Cable */
...
@@ -2376,6 +2418,10 @@ int snd_usbmidi_create(struct snd_card *card,
...
@@ -2376,6 +2418,10 @@ int snd_usbmidi_create(struct snd_card *card,
if
(
err
<
0
)
if
(
err
<
0
)
break
;
break
;
err
=
snd_usbmidi_detect_per_port_endpoints
(
umidi
,
endpoints
);
break
;
case
QUIRK_MIDI_CH345
:
umidi
->
usb_protocol_ops
=
&
snd_usbmidi_ch345_broken_sysex_ops
;
err
=
snd_usbmidi_detect_per_port_endpoints
(
umidi
,
endpoints
);
err
=
snd_usbmidi_detect_per_port_endpoints
(
umidi
,
endpoints
);
break
;
break
;
default:
default:
...
...
sound/usb/quirks-table.h
浏览文件 @
f257f1d8
...
@@ -2829,6 +2829,17 @@ YAMAHA_DEVICE(0x7010, "UB99"),
...
@@ -2829,6 +2829,17 @@ YAMAHA_DEVICE(0x7010, "UB99"),
.
idProduct
=
0x1020
,
.
idProduct
=
0x1020
,
},
},
/* QinHeng devices */
{
USB_DEVICE
(
0x1a86
,
0x752d
),
.
driver_info
=
(
unsigned
long
)
&
(
const
struct
snd_usb_audio_quirk
)
{
.
vendor_name
=
"QinHeng"
,
.
product_name
=
"CH345"
,
.
ifnum
=
1
,
.
type
=
QUIRK_MIDI_CH345
}
},
/* KeithMcMillen Stringport */
/* KeithMcMillen Stringport */
{
{
USB_DEVICE
(
0x1f38
,
0x0001
),
USB_DEVICE
(
0x1f38
,
0x0001
),
...
...
sound/usb/quirks.c
浏览文件 @
f257f1d8
...
@@ -538,6 +538,7 @@ int snd_usb_create_quirk(struct snd_usb_audio *chip,
...
@@ -538,6 +538,7 @@ int snd_usb_create_quirk(struct snd_usb_audio *chip,
[
QUIRK_MIDI_CME
]
=
create_any_midi_quirk
,
[
QUIRK_MIDI_CME
]
=
create_any_midi_quirk
,
[
QUIRK_MIDI_AKAI
]
=
create_any_midi_quirk
,
[
QUIRK_MIDI_AKAI
]
=
create_any_midi_quirk
,
[
QUIRK_MIDI_FTDI
]
=
create_any_midi_quirk
,
[
QUIRK_MIDI_FTDI
]
=
create_any_midi_quirk
,
[
QUIRK_MIDI_CH345
]
=
create_any_midi_quirk
,
[
QUIRK_AUDIO_STANDARD_INTERFACE
]
=
create_standard_audio_quirk
,
[
QUIRK_AUDIO_STANDARD_INTERFACE
]
=
create_standard_audio_quirk
,
[
QUIRK_AUDIO_FIXED_ENDPOINT
]
=
create_fixed_stream_quirk
,
[
QUIRK_AUDIO_FIXED_ENDPOINT
]
=
create_fixed_stream_quirk
,
[
QUIRK_AUDIO_EDIROL_UAXX
]
=
create_uaxx_quirk
,
[
QUIRK_AUDIO_EDIROL_UAXX
]
=
create_uaxx_quirk
,
...
...
sound/usb/usbaudio.h
浏览文件 @
f257f1d8
...
@@ -95,6 +95,7 @@ enum quirk_type {
...
@@ -95,6 +95,7 @@ enum quirk_type {
QUIRK_MIDI_AKAI
,
QUIRK_MIDI_AKAI
,
QUIRK_MIDI_US122L
,
QUIRK_MIDI_US122L
,
QUIRK_MIDI_FTDI
,
QUIRK_MIDI_FTDI
,
QUIRK_MIDI_CH345
,
QUIRK_AUDIO_STANDARD_INTERFACE
,
QUIRK_AUDIO_STANDARD_INTERFACE
,
QUIRK_AUDIO_FIXED_ENDPOINT
,
QUIRK_AUDIO_FIXED_ENDPOINT
,
QUIRK_AUDIO_EDIROL_UAXX
,
QUIRK_AUDIO_EDIROL_UAXX
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录