Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
53880546
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看板
提交
53880546
编写于
6月 06, 2005
作者:
S
Stephane VOLTZ
提交者:
Dmitry Torokhov
6月 06, 2005
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Input: add driver for Acecad Flair USB tablets
Signed-off-by:
N
Dmitry Torokhov
<
dtor@mail.ru
>
上级
3c241f83
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
306 addition
and
0 deletion
+306
-0
drivers/usb/Makefile
drivers/usb/Makefile
+1
-0
drivers/usb/input/Kconfig
drivers/usb/input/Kconfig
+12
-0
drivers/usb/input/Makefile
drivers/usb/input/Makefile
+1
-0
drivers/usb/input/acecad.c
drivers/usb/input/acecad.c
+285
-0
drivers/usb/input/hid-core.c
drivers/usb/input/hid-core.c
+7
-0
未找到文件。
drivers/usb/Makefile
浏览文件 @
53880546
...
...
@@ -31,6 +31,7 @@ obj-$(CONFIG_USB_MOUSE) += input/
obj-$(CONFIG_USB_MTOUCH)
+=
input/
obj-$(CONFIG_USB_POWERMATE)
+=
input/
obj-$(CONFIG_USB_WACOM)
+=
input/
obj-$(CONFIG_USB_ACECAD)
+=
input/
obj-$(CONFIG_USB_XPAD)
+=
input/
obj-$(CONFIG_USB_DABUSB)
+=
media/
...
...
drivers/usb/input/Kconfig
浏览文件 @
53880546
...
...
@@ -151,6 +151,18 @@ config USB_WACOM
To compile this driver as a module, choose M here: the
module will be called wacom.
config USB_ACECAD
tristate "Acecad Flair tablet support"
depends on USB && INPUT
help
Say Y here if you want to use the USB version of the Acecad Flair
tablet. Make sure to say Y to "Mouse support"
(CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
(CONFIG_INPUT_EVDEV) as well.
To compile this driver as a module, choose M here: the
module will be called acecad.
config USB_KBTAB
tristate "KB Gear JamStudio tablet support"
depends on USB && INPUT
...
...
drivers/usb/input/Makefile
浏览文件 @
53880546
...
...
@@ -37,4 +37,5 @@ obj-$(CONFIG_USB_ITMTOUCH) += itmtouch.o
obj-$(CONFIG_USB_EGALAX)
+=
touchkitusb.o
obj-$(CONFIG_USB_POWERMATE)
+=
powermate.o
obj-$(CONFIG_USB_WACOM)
+=
wacom.o
obj-$(CONFIG_USB_ACECAD)
+=
acecad.o
obj-$(CONFIG_USB_XPAD)
+=
xpad.o
drivers/usb/input/acecad.c
0 → 100644
浏览文件 @
53880546
/*
* Copyright (c) 2001-2005 Edouard TISSERANT <edouard.tisserant@wanadoo.fr>
* Copyright (c) 2004-2005 Stephane VOLTZ <svoltz@numericable.fr>
*
* USB Acecad "Acecad Flair" tablet support
*
* Changelog:
* v3.2 - Added sysfs support
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/input.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/usb.h>
/*
* Version Information
*/
#define DRIVER_VERSION "v3.2"
#define DRIVER_DESC "USB Acecad Flair tablet driver"
#define DRIVER_LICENSE "GPL"
#define DRIVER_AUTHOR "Edouard TISSERANT <edouard.tisserant@wanadoo.fr>"
MODULE_AUTHOR
(
DRIVER_AUTHOR
);
MODULE_DESCRIPTION
(
DRIVER_DESC
);
MODULE_LICENSE
(
DRIVER_LICENSE
);
#define USB_VENDOR_ID_ACECAD 0x0460
#define USB_DEVICE_ID_FLAIR 0x0004
#define USB_DEVICE_ID_302 0x0008
struct
usb_acecad
{
char
name
[
128
];
char
phys
[
64
];
struct
usb_device
*
usbdev
;
struct
input_dev
dev
;
struct
urb
*
irq
;
signed
char
*
data
;
dma_addr_t
data_dma
;
};
static
void
usb_acecad_irq
(
struct
urb
*
urb
,
struct
pt_regs
*
regs
)
{
struct
usb_acecad
*
acecad
=
urb
->
context
;
unsigned
char
*
data
=
acecad
->
data
;
struct
input_dev
*
dev
=
&
acecad
->
dev
;
int
prox
,
status
;
switch
(
urb
->
status
)
{
case
0
:
/* success */
break
;
case
-
ECONNRESET
:
case
-
ENOENT
:
case
-
ESHUTDOWN
:
/* this urb is terminated, clean up */
dbg
(
"%s - urb shutting down with status: %d"
,
__FUNCTION__
,
urb
->
status
);
return
;
default:
dbg
(
"%s - nonzero urb status received: %d"
,
__FUNCTION__
,
urb
->
status
);
goto
resubmit
;
}
prox
=
(
data
[
0
]
&
0x04
)
>>
2
;
input_report_key
(
dev
,
BTN_TOOL_PEN
,
prox
);
if
(
prox
)
{
int
x
=
data
[
1
]
|
(
data
[
2
]
<<
8
);
int
y
=
data
[
3
]
|
(
data
[
4
]
<<
8
);
/*Pressure should compute the same way for flair and 302*/
int
pressure
=
data
[
5
]
|
((
int
)
data
[
6
]
<<
8
);
int
touch
=
data
[
0
]
&
0x01
;
int
stylus
=
(
data
[
0
]
&
0x10
)
>>
4
;
int
stylus2
=
(
data
[
0
]
&
0x20
)
>>
5
;
input_report_abs
(
dev
,
ABS_X
,
x
);
input_report_abs
(
dev
,
ABS_Y
,
y
);
input_report_abs
(
dev
,
ABS_PRESSURE
,
pressure
);
input_report_key
(
dev
,
BTN_TOUCH
,
touch
);
input_report_key
(
dev
,
BTN_STYLUS
,
stylus
);
input_report_key
(
dev
,
BTN_STYLUS2
,
stylus2
);
}
/* event termination */
input_sync
(
dev
);
resubmit:
status
=
usb_submit_urb
(
urb
,
GFP_ATOMIC
);
if
(
status
)
err
(
"can't resubmit intr, %s-%s/input0, status %d"
,
acecad
->
usbdev
->
bus
->
bus_name
,
acecad
->
usbdev
->
devpath
,
status
);
}
static
int
usb_acecad_open
(
struct
input_dev
*
dev
)
{
struct
usb_acecad
*
acecad
=
dev
->
private
;
acecad
->
irq
->
dev
=
acecad
->
usbdev
;
if
(
usb_submit_urb
(
acecad
->
irq
,
GFP_KERNEL
))
return
-
EIO
;
return
0
;
}
static
void
usb_acecad_close
(
struct
input_dev
*
dev
)
{
struct
usb_acecad
*
acecad
=
dev
->
private
;
usb_kill_urb
(
acecad
->
irq
);
}
static
int
usb_acecad_probe
(
struct
usb_interface
*
intf
,
const
struct
usb_device_id
*
id
)
{
struct
usb_device
*
dev
=
interface_to_usbdev
(
intf
);
struct
usb_host_interface
*
interface
=
intf
->
cur_altsetting
;
struct
usb_endpoint_descriptor
*
endpoint
;
struct
usb_acecad
*
acecad
;
int
pipe
,
maxp
;
char
path
[
64
];
if
(
interface
->
desc
.
bNumEndpoints
!=
1
)
return
-
ENODEV
;
endpoint
=
&
interface
->
endpoint
[
0
].
desc
;
if
(
!
(
endpoint
->
bEndpointAddress
&
0x80
))
return
-
ENODEV
;
if
((
endpoint
->
bmAttributes
&
3
)
!=
3
)
return
-
ENODEV
;
pipe
=
usb_rcvintpipe
(
dev
,
endpoint
->
bEndpointAddress
);
maxp
=
usb_maxpacket
(
dev
,
pipe
,
usb_pipeout
(
pipe
));
acecad
=
kcalloc
(
1
,
sizeof
(
struct
usb_acecad
),
GFP_KERNEL
);
if
(
!
acecad
)
return
-
ENOMEM
;
acecad
->
data
=
usb_buffer_alloc
(
dev
,
8
,
SLAB_KERNEL
,
&
acecad
->
data_dma
);
if
(
!
acecad
->
data
)
goto
fail1
;
acecad
->
irq
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
acecad
->
irq
)
goto
fail2
;
if
(
dev
->
manufacturer
)
strlcpy
(
acecad
->
name
,
dev
->
manufacturer
,
sizeof
(
acecad
->
name
));
if
(
dev
->
product
)
{
if
(
dev
->
manufacturer
)
strlcat
(
acecad
->
name
,
" "
,
sizeof
(
acecad
->
name
));
strlcat
(
acecad
->
name
,
dev
->
product
,
sizeof
(
acecad
->
name
));
}
usb_make_path
(
dev
,
path
,
sizeof
(
path
));
snprintf
(
acecad
->
phys
,
sizeof
(
acecad
->
phys
),
"%s/input0"
,
path
);
acecad
->
usbdev
=
dev
;
acecad
->
dev
.
evbit
[
0
]
=
BIT
(
EV_KEY
)
|
BIT
(
EV_ABS
);
acecad
->
dev
.
absbit
[
0
]
=
BIT
(
ABS_X
)
|
BIT
(
ABS_Y
)
|
BIT
(
ABS_PRESSURE
);
acecad
->
dev
.
keybit
[
LONG
(
BTN_LEFT
)]
=
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_RIGHT
)
|
BIT
(
BTN_MIDDLE
);
acecad
->
dev
.
keybit
[
LONG
(
BTN_DIGI
)]
=
BIT
(
BTN_TOOL_PEN
)
|
BIT
(
BTN_TOUCH
)
|
BIT
(
BTN_STYLUS
)
|
BIT
(
BTN_STYLUS2
);
switch
(
id
->
driver_info
)
{
case
0
:
acecad
->
dev
.
absmax
[
ABS_X
]
=
5000
;
acecad
->
dev
.
absmax
[
ABS_Y
]
=
3750
;
acecad
->
dev
.
absmax
[
ABS_PRESSURE
]
=
512
;
if
(
!
strlen
(
acecad
->
name
))
snprintf
(
acecad
->
name
,
sizeof
(
acecad
->
name
),
"USB Acecad Flair Tablet %04x:%04x"
,
dev
->
descriptor
.
idVendor
,
dev
->
descriptor
.
idProduct
);
break
;
case
1
:
acecad
->
dev
.
absmax
[
ABS_X
]
=
3000
;
acecad
->
dev
.
absmax
[
ABS_Y
]
=
2250
;
acecad
->
dev
.
absmax
[
ABS_PRESSURE
]
=
1024
;
if
(
!
strlen
(
acecad
->
name
))
snprintf
(
acecad
->
name
,
sizeof
(
acecad
->
name
),
"USB Acecad 302 Tablet %04x:%04x"
,
dev
->
descriptor
.
idVendor
,
dev
->
descriptor
.
idProduct
);
break
;
}
acecad
->
dev
.
absfuzz
[
ABS_X
]
=
4
;
acecad
->
dev
.
absfuzz
[
ABS_Y
]
=
4
;
acecad
->
dev
.
private
=
acecad
;
acecad
->
dev
.
open
=
usb_acecad_open
;
acecad
->
dev
.
close
=
usb_acecad_close
;
acecad
->
dev
.
name
=
acecad
->
name
;
acecad
->
dev
.
phys
=
acecad
->
phys
;
acecad
->
dev
.
id
.
bustype
=
BUS_USB
;
acecad
->
dev
.
id
.
vendor
=
le16_to_cpu
(
dev
->
descriptor
.
idVendor
);
acecad
->
dev
.
id
.
product
=
le16_to_cpu
(
dev
->
descriptor
.
idProduct
);
acecad
->
dev
.
id
.
version
=
le16_to_cpu
(
dev
->
descriptor
.
bcdDevice
);
acecad
->
dev
.
dev
=
&
intf
->
dev
;
usb_fill_int_urb
(
acecad
->
irq
,
dev
,
pipe
,
acecad
->
data
,
maxp
>
8
?
8
:
maxp
,
usb_acecad_irq
,
acecad
,
endpoint
->
bInterval
);
acecad
->
irq
->
transfer_dma
=
acecad
->
data_dma
;
acecad
->
irq
->
transfer_flags
|=
URB_NO_TRANSFER_DMA_MAP
;
input_register_device
(
&
acecad
->
dev
);
printk
(
KERN_INFO
"input: %s with packet size %d on %s
\n
"
,
acecad
->
name
,
maxp
,
path
);
usb_set_intfdata
(
intf
,
acecad
);
return
0
;
fail2:
usb_buffer_free
(
dev
,
8
,
acecad
->
data
,
acecad
->
data_dma
);
fail1:
kfree
(
acecad
);
return
-
ENOMEM
;
}
static
void
usb_acecad_disconnect
(
struct
usb_interface
*
intf
)
{
struct
usb_acecad
*
acecad
=
usb_get_intfdata
(
intf
);
usb_set_intfdata
(
intf
,
NULL
);
if
(
acecad
)
{
usb_kill_urb
(
acecad
->
irq
);
input_unregister_device
(
&
acecad
->
dev
);
usb_free_urb
(
acecad
->
irq
);
usb_buffer_free
(
interface_to_usbdev
(
intf
),
10
,
acecad
->
data
,
acecad
->
data_dma
);
kfree
(
acecad
);
}
}
static
struct
usb_device_id
usb_acecad_id_table
[]
=
{
{
USB_DEVICE
(
USB_VENDOR_ID_ACECAD
,
USB_DEVICE_ID_FLAIR
),
.
driver_info
=
0
},
{
USB_DEVICE
(
USB_VENDOR_ID_ACECAD
,
USB_DEVICE_ID_302
),
.
driver_info
=
1
},
{
}
};
MODULE_DEVICE_TABLE
(
usb
,
usb_acecad_id_table
);
static
struct
usb_driver
usb_acecad_driver
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"usb_acecad"
,
.
probe
=
usb_acecad_probe
,
.
disconnect
=
usb_acecad_disconnect
,
.
id_table
=
usb_acecad_id_table
,
};
static
int
__init
usb_acecad_init
(
void
)
{
int
result
=
usb_register
(
&
usb_acecad_driver
);
if
(
result
==
0
)
info
(
DRIVER_VERSION
":"
DRIVER_DESC
);
return
result
;
}
static
void
__exit
usb_acecad_exit
(
void
)
{
usb_deregister
(
&
usb_acecad_driver
);
}
module_init
(
usb_acecad_init
);
module_exit
(
usb_acecad_exit
);
drivers/usb/input/hid-core.c
浏览文件 @
53880546
...
...
@@ -1321,6 +1321,10 @@ void hid_init_reports(struct hid_device *hid)
#define USB_DEVICE_ID_WACOM_INTUOS3 0x00B0
#define USB_DEVICE_ID_WACOM_CINTIQ 0x003F
#define USB_VENDOR_ID_ACECAD 0x0460
#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004
#define USB_DEVICE_ID_ACECAD_302 0x0008
#define USB_VENDOR_ID_KBGEAR 0x084e
#define USB_DEVICE_ID_KBGEAR_JAMSTUDIO 0x1001
...
...
@@ -1505,6 +1509,9 @@ static struct hid_blacklist {
{
USB_VENDOR_ID_WISEGROUP
,
USB_DEVICE_ID_4_PHIDGETSERVO_20
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_WISEGROUP
,
USB_DEVICE_ID_1_PHIDGETSERVO_20
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_ACECAD
,
USB_DEVICE_ID_ACECAD_FLAIR
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_ACECAD
,
USB_DEVICE_ID_ACECAD_302
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_ATEN
,
USB_DEVICE_ID_ATEN_UC100KM
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_ATEN
,
USB_DEVICE_ID_ATEN_CS124U
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_ATEN
,
USB_DEVICE_ID_ATEN_2PORTKVM
,
HID_QUIRK_NOGET
},
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录