提交 393bfca1 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/dtor/input

* master.kernel.org:/pub/scm/linux/kernel/git/dtor/input:
  Input: move USB miscellaneous devices under drivers/input/misc
  Input: move USB mice under drivers/input/mouse
  Input: move USB gamepads under drivers/input/joystick
  Input: move USB touchscreens under drivers/input/touchscreen
  Input: move USB tablets under drivers/input/tablet
  Input: i8042 - fix AUX port detection with some chips
  Input: aaed2000_kbd - convert to use polldev library
  Input: drivers/usb/input - usb_buffer_free() cleanup
  Input: synaptics - don't complain about failed resets
  Input: pull input.h into uinpit.h
  Input: drivers/usb/input - fix sparse warnings (signedness)
  Input: evdev - fix some sparse warnings (signedness, shadowing)
  Input: drivers/joystick - fix various sparse warnings
  Input: force feedback - make sure effect is present before playing
...@@ -153,6 +153,8 @@ source "drivers/input/mouse/Kconfig" ...@@ -153,6 +153,8 @@ source "drivers/input/mouse/Kconfig"
source "drivers/input/joystick/Kconfig" source "drivers/input/joystick/Kconfig"
source "drivers/input/tablet/Kconfig"
source "drivers/input/touchscreen/Kconfig" source "drivers/input/touchscreen/Kconfig"
source "drivers/input/misc/Kconfig" source "drivers/input/misc/Kconfig"
......
...@@ -18,6 +18,7 @@ obj-$(CONFIG_INPUT_EVBUG) += evbug.o ...@@ -18,6 +18,7 @@ obj-$(CONFIG_INPUT_EVBUG) += evbug.o
obj-$(CONFIG_INPUT_KEYBOARD) += keyboard/ obj-$(CONFIG_INPUT_KEYBOARD) += keyboard/
obj-$(CONFIG_INPUT_MOUSE) += mouse/ obj-$(CONFIG_INPUT_MOUSE) += mouse/
obj-$(CONFIG_INPUT_JOYSTICK) += joystick/ obj-$(CONFIG_INPUT_JOYSTICK) += joystick/
obj-$(CONFIG_INPUT_TABLET) += tablet/
obj-$(CONFIG_INPUT_TOUCHSCREEN) += touchscreen/ obj-$(CONFIG_INPUT_TOUCHSCREEN) += touchscreen/
obj-$(CONFIG_INPUT_MISC) += misc/ obj-$(CONFIG_INPUT_MISC) += misc/
...@@ -511,7 +511,7 @@ static long evdev_ioctl_handler(struct file *file, unsigned int cmd, ...@@ -511,7 +511,7 @@ static long evdev_ioctl_handler(struct file *file, unsigned int cmd,
if ((_IOC_NR(cmd) & ~EV_MAX) == _IOC_NR(EVIOCGBIT(0,0))) { if ((_IOC_NR(cmd) & ~EV_MAX) == _IOC_NR(EVIOCGBIT(0,0))) {
long *bits; unsigned long *bits;
int len; int len;
switch (_IOC_NR(cmd) & EV_MAX) { switch (_IOC_NR(cmd) & EV_MAX) {
...@@ -556,7 +556,7 @@ static long evdev_ioctl_handler(struct file *file, unsigned int cmd, ...@@ -556,7 +556,7 @@ static long evdev_ioctl_handler(struct file *file, unsigned int cmd,
if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) { if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) {
int t = _IOC_NR(cmd) & ABS_MAX; t = _IOC_NR(cmd) & ABS_MAX;
abs.value = dev->abs[t]; abs.value = dev->abs[t];
abs.minimum = dev->absmin[t]; abs.minimum = dev->absmin[t];
...@@ -576,7 +576,7 @@ static long evdev_ioctl_handler(struct file *file, unsigned int cmd, ...@@ -576,7 +576,7 @@ static long evdev_ioctl_handler(struct file *file, unsigned int cmd,
if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCSABS(0))) { if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCSABS(0))) {
int t = _IOC_NR(cmd) & ABS_MAX; t = _IOC_NR(cmd) & ABS_MAX;
if (copy_from_user(&abs, p, sizeof(struct input_absinfo))) if (copy_from_user(&abs, p, sizeof(struct input_absinfo)))
return -EFAULT; return -EFAULT;
......
...@@ -281,7 +281,8 @@ int input_ff_event(struct input_dev *dev, unsigned int type, ...@@ -281,7 +281,8 @@ int input_ff_event(struct input_dev *dev, unsigned int type,
break; break;
default: default:
ff->playback(dev, code, value); if (check_effect_access(ff, code, NULL) == 0)
ff->playback(dev, code, value);
break; break;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Joystick driver configuration # Joystick driver configuration
# #
menuconfig INPUT_JOYSTICK menuconfig INPUT_JOYSTICK
bool "Joysticks" bool "Joysticks/Gamepads"
help help
If you have a joystick, 6dof controller, gamepad, steering wheel, If you have a joystick, 6dof controller, gamepad, steering wheel,
weapon control system or something like that you can say Y here weapon control system or something like that you can say Y here
...@@ -196,7 +196,7 @@ config JOYSTICK_TWIDJOY ...@@ -196,7 +196,7 @@ config JOYSTICK_TWIDJOY
config JOYSTICK_DB9 config JOYSTICK_DB9
tristate "Multisystem, Sega Genesis, Saturn joysticks and gamepads" tristate "Multisystem, Sega Genesis, Saturn joysticks and gamepads"
depends on PARPORT depends on PARPORT
---help--- help
Say Y here if you have a Sega Master System gamepad, Sega Genesis Say Y here if you have a Sega Master System gamepad, Sega Genesis
gamepad, Sega Saturn gamepad, or a Multisystem -- Atari, Amiga, gamepad, Sega Saturn gamepad, or a Multisystem -- Atari, Amiga,
Commodore, Amstrad CPC joystick connected to your parallel port. Commodore, Amstrad CPC joystick connected to your parallel port.
...@@ -253,4 +253,18 @@ config JOYSTICK_JOYDUMP ...@@ -253,4 +253,18 @@ config JOYSTICK_JOYDUMP
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called joydump. module will be called joydump.
config JOYSTICK_XPAD
tristate "X-Box gamepad support"
select USB
help
Say Y here if you want to use the X-Box pad with your computer.
Make sure to say Y to "Joystick support" (CONFIG_INPUT_JOYDEV)
and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well.
For information about how to connect the X-Box pad to USB, see
<file:Documentation/input/xpad.txt>.
To compile this driver as a module, choose M here: the
module will be called xpad.
endif endif
...@@ -26,5 +26,6 @@ obj-$(CONFIG_JOYSTICK_TMDC) += tmdc.o ...@@ -26,5 +26,6 @@ obj-$(CONFIG_JOYSTICK_TMDC) += tmdc.o
obj-$(CONFIG_JOYSTICK_TURBOGRAFX) += turbografx.o obj-$(CONFIG_JOYSTICK_TURBOGRAFX) += turbografx.o
obj-$(CONFIG_JOYSTICK_TWIDJOY) += twidjoy.o obj-$(CONFIG_JOYSTICK_TWIDJOY) += twidjoy.o
obj-$(CONFIG_JOYSTICK_WARRIOR) += warrior.o obj-$(CONFIG_JOYSTICK_WARRIOR) += warrior.o
obj-$(CONFIG_JOYSTICK_XPAD) += xpad.o
obj-$(CONFIG_JOYSTICK_IFORCE) += iforce/ obj-$(CONFIG_JOYSTICK_IFORCE) += iforce/
...@@ -53,7 +53,7 @@ MODULE_LICENSE("GPL"); ...@@ -53,7 +53,7 @@ MODULE_LICENSE("GPL");
#define ANALOG_PORTS 16 #define ANALOG_PORTS 16
static char *js[ANALOG_PORTS]; static char *js[ANALOG_PORTS];
static int js_nargs; static unsigned int js_nargs;
static int analog_options[ANALOG_PORTS]; static int analog_options[ANALOG_PORTS];
module_param_array_named(map, js, charp, &js_nargs, 0); module_param_array_named(map, js, charp, &js_nargs, 0);
MODULE_PARM_DESC(map, "Describes analog joysticks type/capabilities"); MODULE_PARM_DESC(map, "Describes analog joysticks type/capabilities");
......
...@@ -46,17 +46,17 @@ MODULE_LICENSE("GPL"); ...@@ -46,17 +46,17 @@ MODULE_LICENSE("GPL");
struct db9_config { struct db9_config {
int args[2]; int args[2];
int nargs; unsigned int nargs;
}; };
#define DB9_MAX_PORTS 3 #define DB9_MAX_PORTS 3
static struct db9_config db9[DB9_MAX_PORTS] __initdata; static struct db9_config db9_cfg[DB9_MAX_PORTS] __initdata;
module_param_array_named(dev, db9[0].args, int, &db9[0].nargs, 0); module_param_array_named(dev, db9_cfg[0].args, int, &db9_cfg[0].nargs, 0);
MODULE_PARM_DESC(dev, "Describes first attached device (<parport#>,<type>)"); MODULE_PARM_DESC(dev, "Describes first attached device (<parport#>,<type>)");
module_param_array_named(dev2, db9[1].args, int, &db9[0].nargs, 0); module_param_array_named(dev2, db9_cfg[1].args, int, &db9_cfg[0].nargs, 0);
MODULE_PARM_DESC(dev2, "Describes second attached device (<parport#>,<type>)"); MODULE_PARM_DESC(dev2, "Describes second attached device (<parport#>,<type>)");
module_param_array_named(dev3, db9[2].args, int, &db9[2].nargs, 0); module_param_array_named(dev3, db9_cfg[2].args, int, &db9_cfg[2].nargs, 0);
MODULE_PARM_DESC(dev3, "Describes third attached device (<parport#>,<type>)"); MODULE_PARM_DESC(dev3, "Describes third attached device (<parport#>,<type>)");
#define DB9_ARG_PARPORT 0 #define DB9_ARG_PARPORT 0
...@@ -680,17 +680,17 @@ static int __init db9_init(void) ...@@ -680,17 +680,17 @@ static int __init db9_init(void)
int err = 0; int err = 0;
for (i = 0; i < DB9_MAX_PORTS; i++) { for (i = 0; i < DB9_MAX_PORTS; i++) {
if (db9[i].nargs == 0 || db9[i].args[DB9_ARG_PARPORT] < 0) if (db9_cfg[i].nargs == 0 || db9_cfg[i].args[DB9_ARG_PARPORT] < 0)
continue; continue;
if (db9[i].nargs < 2) { if (db9_cfg[i].nargs < 2) {
printk(KERN_ERR "db9.c: Device type must be specified.\n"); printk(KERN_ERR "db9.c: Device type must be specified.\n");
err = -EINVAL; err = -EINVAL;
break; break;
} }
db9_base[i] = db9_probe(db9[i].args[DB9_ARG_PARPORT], db9_base[i] = db9_probe(db9_cfg[i].args[DB9_ARG_PARPORT],
db9[i].args[DB9_ARG_MODE]); db9_cfg[i].args[DB9_ARG_MODE]);
if (IS_ERR(db9_base[i])) { if (IS_ERR(db9_base[i])) {
err = PTR_ERR(db9_base[i]); err = PTR_ERR(db9_base[i]);
break; break;
......
...@@ -48,16 +48,16 @@ MODULE_LICENSE("GPL"); ...@@ -48,16 +48,16 @@ MODULE_LICENSE("GPL");
struct gc_config { struct gc_config {
int args[GC_MAX_DEVICES + 1]; int args[GC_MAX_DEVICES + 1];
int nargs; unsigned int nargs;
}; };
static struct gc_config gc[GC_MAX_PORTS] __initdata; static struct gc_config gc_cfg[GC_MAX_PORTS] __initdata;
module_param_array_named(map, gc[0].args, int, &gc[0].nargs, 0); module_param_array_named(map, gc_cfg[0].args, int, &gc_cfg[0].nargs, 0);
MODULE_PARM_DESC(map, "Describes first set of devices (<parport#>,<pad1>,<pad2>,..<pad5>)"); MODULE_PARM_DESC(map, "Describes first set of devices (<parport#>,<pad1>,<pad2>,..<pad5>)");
module_param_array_named(map2, gc[1].args, int, &gc[1].nargs, 0); module_param_array_named(map2, gc_cfg[1].args, int, &gc_cfg[1].nargs, 0);
MODULE_PARM_DESC(map2, "Describes second set of devices"); MODULE_PARM_DESC(map2, "Describes second set of devices");
module_param_array_named(map3, gc[2].args, int, &gc[2].nargs, 0); module_param_array_named(map3, gc_cfg[2].args, int, &gc_cfg[2].nargs, 0);
MODULE_PARM_DESC(map3, "Describes third set of devices"); MODULE_PARM_DESC(map3, "Describes third set of devices");
/* see also gs_psx_delay parameter in PSX support section */ /* see also gs_psx_delay parameter in PSX support section */
...@@ -810,16 +810,17 @@ static int __init gc_init(void) ...@@ -810,16 +810,17 @@ static int __init gc_init(void)
int err = 0; int err = 0;
for (i = 0; i < GC_MAX_PORTS; i++) { for (i = 0; i < GC_MAX_PORTS; i++) {
if (gc[i].nargs == 0 || gc[i].args[0] < 0) if (gc_cfg[i].nargs == 0 || gc_cfg[i].args[0] < 0)
continue; continue;
if (gc[i].nargs < 2) { if (gc_cfg[i].nargs < 2) {
printk(KERN_ERR "gamecon.c: at least one device must be specified\n"); printk(KERN_ERR "gamecon.c: at least one device must be specified\n");
err = -EINVAL; err = -EINVAL;
break; break;
} }
gc_base[i] = gc_probe(gc[i].args[0], gc[i].args + 1, gc[i].nargs - 1); gc_base[i] = gc_probe(gc_cfg[i].args[0],
gc_cfg[i].args + 1, gc_cfg[i].nargs - 1);
if (IS_ERR(gc_base[i])) { if (IS_ERR(gc_base[i])) {
err = PTR_ERR(gc_base[i]); err = PTR_ERR(gc_base[i]);
break; break;
......
...@@ -124,7 +124,7 @@ struct iforce { ...@@ -124,7 +124,7 @@ struct iforce {
/* Buffer used for asynchronous sending of bytes to the device */ /* Buffer used for asynchronous sending of bytes to the device */
struct circ_buf xmit; struct circ_buf xmit;
unsigned char xmit_data[XMIT_SIZE]; unsigned char xmit_data[XMIT_SIZE];
long xmit_flags[1]; unsigned long xmit_flags[1];
/* Force Feedback */ /* Force Feedback */
wait_queue_head_t wait; wait_queue_head_t wait;
......
...@@ -48,16 +48,16 @@ MODULE_LICENSE("GPL"); ...@@ -48,16 +48,16 @@ MODULE_LICENSE("GPL");
struct tgfx_config { struct tgfx_config {
int args[TGFX_MAX_DEVICES + 1]; int args[TGFX_MAX_DEVICES + 1];
int nargs; unsigned int nargs;
}; };
static struct tgfx_config tgfx[TGFX_MAX_PORTS] __initdata; static struct tgfx_config tgfx_cfg[TGFX_MAX_PORTS] __initdata;
module_param_array_named(map, tgfx[0].args, int, &tgfx[0].nargs, 0); module_param_array_named(map, tgfx_cfg[0].args, int, &tgfx_cfg[0].nargs, 0);
MODULE_PARM_DESC(map, "Describes first set of devices (<parport#>,<js1>,<js2>,..<js7>"); MODULE_PARM_DESC(map, "Describes first set of devices (<parport#>,<js1>,<js2>,..<js7>");
module_param_array_named(map2, tgfx[1].args, int, &tgfx[1].nargs, 0); module_param_array_named(map2, tgfx_cfg[1].args, int, &tgfx_cfg[1].nargs, 0);
MODULE_PARM_DESC(map2, "Describes second set of devices"); MODULE_PARM_DESC(map2, "Describes second set of devices");
module_param_array_named(map3, tgfx[2].args, int, &tgfx[2].nargs, 0); module_param_array_named(map3, tgfx_cfg[2].args, int, &tgfx_cfg[2].nargs, 0);
MODULE_PARM_DESC(map3, "Describes third set of devices"); MODULE_PARM_DESC(map3, "Describes third set of devices");
#define TGFX_REFRESH_TIME HZ/100 /* 10 ms */ #define TGFX_REFRESH_TIME HZ/100 /* 10 ms */
...@@ -283,16 +283,18 @@ static int __init tgfx_init(void) ...@@ -283,16 +283,18 @@ static int __init tgfx_init(void)
int err = 0; int err = 0;
for (i = 0; i < TGFX_MAX_PORTS; i++) { for (i = 0; i < TGFX_MAX_PORTS; i++) {
if (tgfx[i].nargs == 0 || tgfx[i].args[0] < 0) if (tgfx_cfg[i].nargs == 0 || tgfx_cfg[i].args[0] < 0)
continue; continue;
if (tgfx[i].nargs < 2) { if (tgfx_cfg[i].nargs < 2) {
printk(KERN_ERR "turbografx.c: at least one joystick must be specified\n"); printk(KERN_ERR "turbografx.c: at least one joystick must be specified\n");
err = -EINVAL; err = -EINVAL;
break; break;
} }
tgfx_base[i] = tgfx_probe(tgfx[i].args[0], tgfx[i].args + 1, tgfx[i].nargs - 1); tgfx_base[i] = tgfx_probe(tgfx_cfg[i].args[0],
tgfx_cfg[i].args + 1,
tgfx_cfg[i].nargs - 1);
if (IS_ERR(tgfx_base[i])) { if (IS_ERR(tgfx_base[i])) {
err = PTR_ERR(tgfx_base[i]); err = PTR_ERR(tgfx_base[i]);
break; break;
......
...@@ -226,6 +226,7 @@ config KEYBOARD_PXA27x ...@@ -226,6 +226,7 @@ config KEYBOARD_PXA27x
config KEYBOARD_AAED2000 config KEYBOARD_AAED2000
tristate "AAED-2000 keyboard" tristate "AAED-2000 keyboard"
depends on MACH_AAED2000 depends on MACH_AAED2000
select INPUT_POLLDEV
default y default y
help help
Say Y here to enable the keyboard on the Agilent AAED-2000 Say Y here to enable the keyboard on the Agilent AAED-2000
......
...@@ -14,12 +14,11 @@ ...@@ -14,12 +14,11 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/input.h> #include <linux/input-polldev.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/workqueue.h>
#include <asm/arch/hardware.h> #include <asm/arch/hardware.h>
#include <asm/arch/aaed2000.h> #include <asm/arch/aaed2000.h>
...@@ -46,8 +45,7 @@ static unsigned char aaedkbd_keycode[NR_SCANCODES] = { ...@@ -46,8 +45,7 @@ static unsigned char aaedkbd_keycode[NR_SCANCODES] = {
struct aaedkbd { struct aaedkbd {
unsigned char keycode[ARRAY_SIZE(aaedkbd_keycode)]; unsigned char keycode[ARRAY_SIZE(aaedkbd_keycode)];
struct input_dev *input; struct input_polled_dev *poll_dev;
struct work_struct workq;
int kbdscan_state[KB_COLS]; int kbdscan_state[KB_COLS];
int kbdscan_count[KB_COLS]; int kbdscan_count[KB_COLS];
}; };
...@@ -64,14 +62,15 @@ static void aaedkbd_report_col(struct aaedkbd *aaedkbd, ...@@ -64,14 +62,15 @@ static void aaedkbd_report_col(struct aaedkbd *aaedkbd,
scancode = SCANCODE(row, col); scancode = SCANCODE(row, col);
pressed = rowd & KB_ROWMASK(row); pressed = rowd & KB_ROWMASK(row);
input_report_key(aaedkbd->input, aaedkbd->keycode[scancode], pressed); input_report_key(aaedkbd->poll_dev->input,
aaedkbd->keycode[scancode], pressed);
} }
} }
/* Scan the hardware keyboard and push any changes up through the input layer */ /* Scan the hardware keyboard and push any changes up through the input layer */
static void aaedkbd_work(void *data) static void aaedkbd_poll(struct input_polled_dev *dev)
{ {
struct aaedkbd *aaedkbd = data; struct aaedkbd *aaedkbd = dev->private;
unsigned int col, rowd; unsigned int col, rowd;
col = 0; col = 0;
...@@ -90,51 +89,34 @@ static void aaedkbd_work(void *data) ...@@ -90,51 +89,34 @@ static void aaedkbd_work(void *data)
} while (col < KB_COLS); } while (col < KB_COLS);
AAEC_GPIO_KSCAN = 0x07; AAEC_GPIO_KSCAN = 0x07;
input_sync(aaedkbd->input); input_sync(dev->input);
schedule_delayed_work(&aaedkbd->workq, msecs_to_jiffies(SCAN_INTERVAL));
}
static int aaedkbd_open(struct input_dev *indev)
{
struct aaedkbd *aaedkbd = input_get_drvdata(indev);
schedule_delayed_work(&aaedkbd->workq, msecs_to_jiffies(SCAN_INTERVAL));
return 0;
}
static void aaedkbd_close(struct input_dev *indev)
{
struct aaedkbd *aaedkbd = input_get_drvdata(indev);
cancel_delayed_work(&aaedkbd->workq);
flush_scheduled_work();
} }
static int __devinit aaedkbd_probe(struct platform_device *pdev) static int __devinit aaedkbd_probe(struct platform_device *pdev)
{ {
struct aaedkbd *aaedkbd; struct aaedkbd *aaedkbd;
struct input_polled_dev *poll_dev;
struct input_dev *input_dev; struct input_dev *input_dev;
int i; int i;
int error; int error;
aaedkbd = kzalloc(sizeof(struct aaedkbd), GFP_KERNEL); aaedkbd = kzalloc(sizeof(struct aaedkbd), GFP_KERNEL);
input_dev = input_allocate_device(); poll_dev = input_allocate_polled_device();
if (!aaedkbd || !input_dev) { if (!aaedkbd || !poll_dev) {
error = -ENOMEM; error = -ENOMEM;
goto fail; goto fail;
} }
platform_set_drvdata(pdev, aaedkbd); platform_set_drvdata(pdev, aaedkbd);
aaedkbd->input = input_dev; aaedkbd->poll_dev = poll_dev;
/* Init keyboard rescan workqueue */
INIT_WORK(&aaedkbd->workq, aaedkbd_work, aaedkbd);
memcpy(aaedkbd->keycode, aaedkbd_keycode, sizeof(aaedkbd->keycode)); memcpy(aaedkbd->keycode, aaedkbd_keycode, sizeof(aaedkbd->keycode));
poll_dev->private = aaedkbd;
poll_dev->poll = aaedkbd_poll;
poll_dev->poll_interval = SCAN_INTERVAL;
input_dev = poll_dev->input;
input_dev->name = "AAED-2000 Keyboard"; input_dev->name = "AAED-2000 Keyboard";
input_dev->phys = "aaedkbd/input0"; input_dev->phys = "aaedkbd/input0";
input_dev->id.bustype = BUS_HOST; input_dev->id.bustype = BUS_HOST;
...@@ -143,8 +125,6 @@ static int __devinit aaedkbd_probe(struct platform_device *pdev) ...@@ -143,8 +125,6 @@ static int __devinit aaedkbd_probe(struct platform_device *pdev)
input_dev->id.version = 0x0100; input_dev->id.version = 0x0100;
input_dev->dev.parent = &pdev->dev; input_dev->dev.parent = &pdev->dev;
input_set_drvdata(input_dev, aaedkbd);
input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
input_dev->keycode = aaedkbd->keycode; input_dev->keycode = aaedkbd->keycode;
input_dev->keycodesize = sizeof(unsigned char); input_dev->keycodesize = sizeof(unsigned char);
...@@ -154,17 +134,14 @@ static int __devinit aaedkbd_probe(struct platform_device *pdev) ...@@ -154,17 +134,14 @@ static int __devinit aaedkbd_probe(struct platform_device *pdev)
set_bit(aaedkbd->keycode[i], input_dev->keybit); set_bit(aaedkbd->keycode[i], input_dev->keybit);
clear_bit(0, input_dev->keybit); clear_bit(0, input_dev->keybit);
input_dev->open = aaedkbd_open; error = input_register_polled_device(aaedkbd->poll_dev);
input_dev->close = aaedkbd_close;
error = input_register_device(aaedkbd->input);
if (error) if (error)
goto fail; goto fail;
return 0; return 0;
fail: kfree(aaedkbd); fail: kfree(aaedkbd);
input_free_device(input_dev); input_free_polled_device(poll_dev);
return error; return error;
} }
...@@ -172,7 +149,8 @@ static int __devexit aaedkbd_remove(struct platform_device *pdev) ...@@ -172,7 +149,8 @@ static int __devexit aaedkbd_remove(struct platform_device *pdev)
{ {
struct aaedkbd *aaedkbd = platform_get_drvdata(pdev); struct aaedkbd *aaedkbd = platform_get_drvdata(pdev);
input_unregister_device(aaedkbd->input); input_unregister_polled_device(aaedkbd->poll_dev);
input_free_polled_device(aaedkbd->poll_dev);
kfree(aaedkbd); kfree(aaedkbd);
return 0; return 0;
......
...@@ -40,6 +40,18 @@ config INPUT_M68K_BEEP ...@@ -40,6 +40,18 @@ config INPUT_M68K_BEEP
tristate "M68k Beeper support" tristate "M68k Beeper support"
depends on M68K depends on M68K
config INPUT_IXP4XX_BEEPER
tristate "IXP4XX Beeper support"
depends on ARCH_IXP4XX
help
If you say yes here, you can connect a beeper to the
ixp4xx gpio pins. This is used by the LinkSys NSLU2.
If unsure, say Y.
To compile this driver as a module, choose M here: the
module will be called ixp4xx-beeper.
config INPUT_COBALT_BTNS config INPUT_COBALT_BTNS
tristate "Cobalt button interface" tristate "Cobalt button interface"
depends on MIPS_COBALT depends on MIPS_COBALT
...@@ -70,17 +82,79 @@ config INPUT_ATLAS_BTNS ...@@ -70,17 +82,79 @@ config INPUT_ATLAS_BTNS
To compile this driver as a module, choose M here: the module will To compile this driver as a module, choose M here: the module will
be called atlas_btns. be called atlas_btns.
config INPUT_IXP4XX_BEEPER config INPUT_ATI_REMOTE
tristate "IXP4XX Beeper support" tristate "ATI / X10 USB RF remote control"
depends on ARCH_IXP4XX select USB
help help
If you say yes here, you can connect a beeper to the Say Y here if you want to use an ATI or X10 "Lola" USB remote control.
ixp4xx gpio pins. This is used by the LinkSys NSLU2. These are RF remotes with USB receivers.
The ATI remote comes with many of ATI's All-In-Wonder video cards.
The X10 "Lola" remote is available at:
<http://www.x10.com/products/lola_sg1.htm>
This driver provides mouse pointer, left and right mouse buttons,
and maps all the other remote buttons to keypress events.
To compile this driver as a module, choose M here: the module will be
called ati_remote.
config INPUT_ATI_REMOTE2
tristate "ATI / Philips USB RF remote control"
select USB
help
Say Y here if you want to use an ATI or Philips USB RF remote control.
These are RF remotes with USB receivers.
ATI Remote Wonder II comes with some ATI's All-In-Wonder video cards
and is also available as a separate product.
This driver provides mouse pointer, left and right mouse buttons,
and maps all the other remote buttons to keypress events.
To compile this driver as a module, choose M here: the module will be
called ati_remote2.
config INPUT_KEYSPAN_REMOTE
tristate "Keyspan DMR USB remote control (EXPERIMENTAL)"
depends on EXPERIMENTAL
select USB
help
Say Y here if you want to use a Keyspan DMR USB remote control.
Currently only the UIA-11 type of receiver has been tested. The tag
on the receiver that connects to the USB port should have a P/N that
will tell you what type of DMR you have. The UIA-10 type is not
supported at this time. This driver maps all buttons to keypress
events.
If unsure, say Y. To compile this driver as a module, choose M here: the module will
be called keyspan_remote.
config INPUT_POWERMATE
tristate "Griffin PowerMate and Contour Jog support"
select USB
help
Say Y here if you want to use Griffin PowerMate or Contour Jog devices.
These are aluminum dials which can measure clockwise and anticlockwise
rotation. The dial also acts as a pushbutton. The base contains an LED
which can be instructed to pulse or to switch to a particular intensity.
You can download userspace tools from
<http://sowerbutts.com/powermate/>.
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called ixp4xx-beeper. module will be called powermate.
config INPUT_YEALINK
tristate "Yealink usb-p1k voip phone"
depends EXPERIMENTAL
select USB
help
Say Y here if you want to enable keyboard and LCD functions of the
Yealink usb-p1k usb phones. The audio part is enabled by the generic
usb sound driver, so you might want to enable that as well.
For information about how to use these additional functions, see
<file:Documentation/input/yealink.txt>.
To compile this driver as a module, choose M here: the module will be
called yealink.
config INPUT_UINPUT config INPUT_UINPUT
tristate "User level driver support" tristate "User level driver support"
......
...@@ -8,9 +8,14 @@ obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o ...@@ -8,9 +8,14 @@ obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o
obj-$(CONFIG_INPUT_SPARCSPKR) += sparcspkr.o obj-$(CONFIG_INPUT_SPARCSPKR) += sparcspkr.o
obj-$(CONFIG_INPUT_PCSPKR) += pcspkr.o obj-$(CONFIG_INPUT_PCSPKR) += pcspkr.o
obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o
obj-$(CONFIG_INPUT_UINPUT) += uinput.o obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o
obj-$(CONFIG_INPUT_COBALT_BTNS) += cobalt_btns.o obj-$(CONFIG_INPUT_COBALT_BTNS) += cobalt_btns.o
obj-$(CONFIG_INPUT_WISTRON_BTNS) += wistron_btns.o obj-$(CONFIG_INPUT_WISTRON_BTNS) += wistron_btns.o
obj-$(CONFIG_INPUT_ATLAS_BTNS) += atlas_btns.o obj-$(CONFIG_INPUT_ATLAS_BTNS) += atlas_btns.o
obj-$(CONFIG_INPUT_ATI_REMOTE) += ati_remote.o
obj-$(CONFIG_INPUT_ATI_REMOTE2) += ati_remote2.o
obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o
obj-$(CONFIG_INPUT_POWERMATE) += powermate.o
obj-$(CONFIG_INPUT_YEALINK) += yealink.o
obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o
obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o obj-$(CONFIG_INPUT_UINPUT) += uinput.o
...@@ -405,9 +405,7 @@ static void ati_remote2_urb_cleanup(struct ati_remote2 *ar2) ...@@ -405,9 +405,7 @@ static void ati_remote2_urb_cleanup(struct ati_remote2 *ar2)
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
usb_free_urb(ar2->urb[i]); usb_free_urb(ar2->urb[i]);
usb_buffer_free(ar2->udev, 4, ar2->buf[i], ar2->buf_dma[i]);
if (ar2->buf[i])
usb_buffer_free(ar2->udev, 4, ar2->buf[i], ar2->buf_dma[i]);
} }
} }
......
...@@ -291,12 +291,10 @@ static int powermate_alloc_buffers(struct usb_device *udev, struct powermate_dev ...@@ -291,12 +291,10 @@ static int powermate_alloc_buffers(struct usb_device *udev, struct powermate_dev
static void powermate_free_buffers(struct usb_device *udev, struct powermate_device *pm) static void powermate_free_buffers(struct usb_device *udev, struct powermate_device *pm)
{ {
if (pm->data) usb_buffer_free(udev, POWERMATE_PAYLOAD_SIZE_MAX,
usb_buffer_free(udev, POWERMATE_PAYLOAD_SIZE_MAX, pm->data, pm->data_dma);
pm->data, pm->data_dma); usb_buffer_free(udev, sizeof(*(pm->configcr)),
if (pm->configcr) pm->configcr, pm->configcr_dma);
usb_buffer_free(udev, sizeof(*(pm->configcr)),
pm->configcr, pm->configcr_dma);
} }
/* Called whenever a USB device matching one in our supported devices table is connected */ /* Called whenever a USB device matching one in our supported devices table is connected */
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/input.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/miscdevice.h> #include <linux/miscdevice.h>
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
* This driver is based on: * This driver is based on:
* - the usbb2k-api http://savannah.nongnu.org/projects/usbb2k-api/ * - the usbb2k-api http://savannah.nongnu.org/projects/usbb2k-api/
* - information from http://memeteau.free.fr/usbb2k * - information from http://memeteau.free.fr/usbb2k
* - the xpad-driver drivers/usb/input/xpad.c * - the xpad-driver drivers/input/joystick/xpad.c
* *
* Thanks to: * Thanks to:
* - Olivier Vandorpe, for providing the usbb2k-api. * - Olivier Vandorpe, for providing the usbb2k-api.
...@@ -818,18 +818,17 @@ static int usb_cleanup(struct yealink_dev *yld, int err) ...@@ -818,18 +818,17 @@ static int usb_cleanup(struct yealink_dev *yld, int err)
else else
input_unregister_device(yld->idev); input_unregister_device(yld->idev);
} }
if (yld->ctl_req)
usb_buffer_free(yld->udev, sizeof(*(yld->ctl_req)), usb_free_urb(yld->urb_irq);
yld->ctl_req, yld->ctl_req_dma); usb_free_urb(yld->urb_ctl);
if (yld->ctl_data)
usb_buffer_free(yld->udev, USB_PKT_LEN, usb_buffer_free(yld->udev, sizeof(*(yld->ctl_req)),
yld->ctl_data, yld->ctl_dma); yld->ctl_req, yld->ctl_req_dma);
if (yld->irq_data) usb_buffer_free(yld->udev, USB_PKT_LEN,
usb_buffer_free(yld->udev, USB_PKT_LEN, yld->ctl_data, yld->ctl_dma);
yld->irq_data, yld->irq_dma); usb_buffer_free(yld->udev, USB_PKT_LEN,
yld->irq_data, yld->irq_dma);
usb_free_urb(yld->urb_irq); /* parameter validation in core/urb */
usb_free_urb(yld->urb_ctl); /* parameter validation in core/urb */
kfree(yld); kfree(yld);
return err; return err;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Mouse driver configuration # Mouse driver configuration
# #
menuconfig INPUT_MOUSE menuconfig INPUT_MOUSE
bool "Mouse" bool "Mice"
default y default y
help help
Say Y here, and a list of supported mice will be displayed. Say Y here, and a list of supported mice will be displayed.
...@@ -19,7 +19,7 @@ config MOUSE_PS2 ...@@ -19,7 +19,7 @@ config MOUSE_PS2
select SERIO_LIBPS2 select SERIO_LIBPS2
select SERIO_I8042 if X86_PC select SERIO_I8042 if X86_PC
select SERIO_GSCPS2 if GSC select SERIO_GSCPS2 if GSC
---help--- help
Say Y here if you have a PS/2 mouse connected to your system. This Say Y here if you have a PS/2 mouse connected to your system. This
includes the standard 2 or 3-button PS/2 mouse, as well as PS/2 includes the standard 2 or 3-button PS/2 mouse, as well as PS/2
mice with wheels and extra buttons, Microsoft, Logitech or Genius mice with wheels and extra buttons, Microsoft, Logitech or Genius
...@@ -41,7 +41,7 @@ config MOUSE_PS2_ALPS ...@@ -41,7 +41,7 @@ config MOUSE_PS2_ALPS
bool "ALPS PS/2 mouse protocol extension" if EMBEDDED bool "ALPS PS/2 mouse protocol extension" if EMBEDDED
default y default y
depends on MOUSE_PS2 depends on MOUSE_PS2
---help--- help
Say Y here if you have an ALPS PS/2 touchpad connected to Say Y here if you have an ALPS PS/2 touchpad connected to
your system. your system.
...@@ -51,7 +51,7 @@ config MOUSE_PS2_LOGIPS2PP ...@@ -51,7 +51,7 @@ config MOUSE_PS2_LOGIPS2PP
bool "Logictech PS/2++ mouse protocol extension" if EMBEDDED bool "Logictech PS/2++ mouse protocol extension" if EMBEDDED
default y default y
depends on MOUSE_PS2 depends on MOUSE_PS2
---help--- help
Say Y here if you have a Logictech PS/2++ mouse connected to Say Y here if you have a Logictech PS/2++ mouse connected to
your system. your system.
...@@ -61,7 +61,7 @@ config MOUSE_PS2_SYNAPTICS ...@@ -61,7 +61,7 @@ config MOUSE_PS2_SYNAPTICS
bool "Synaptics PS/2 mouse protocol extension" if EMBEDDED bool "Synaptics PS/2 mouse protocol extension" if EMBEDDED
default y default y
depends on MOUSE_PS2 depends on MOUSE_PS2
---help--- help
Say Y here if you have a Synaptics PS/2 TouchPad connected to Say Y here if you have a Synaptics PS/2 TouchPad connected to
your system. your system.
...@@ -71,7 +71,7 @@ config MOUSE_PS2_LIFEBOOK ...@@ -71,7 +71,7 @@ config MOUSE_PS2_LIFEBOOK
bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EMBEDDED bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EMBEDDED
default y default y
depends on MOUSE_PS2 depends on MOUSE_PS2
---help--- help
Say Y here if you have a Fujitsu B-series Lifebook PS/2 Say Y here if you have a Fujitsu B-series Lifebook PS/2
TouchScreen connected to your system. TouchScreen connected to your system.
...@@ -81,7 +81,7 @@ config MOUSE_PS2_TRACKPOINT ...@@ -81,7 +81,7 @@ config MOUSE_PS2_TRACKPOINT
bool "IBM Trackpoint PS/2 mouse protocol extension" if EMBEDDED bool "IBM Trackpoint PS/2 mouse protocol extension" if EMBEDDED
default y default y
depends on MOUSE_PS2 depends on MOUSE_PS2
---help--- help
Say Y here if you have an IBM Trackpoint PS/2 mouse connected Say Y here if you have an IBM Trackpoint PS/2 mouse connected
to your system. to your system.
...@@ -90,7 +90,7 @@ config MOUSE_PS2_TRACKPOINT ...@@ -90,7 +90,7 @@ config MOUSE_PS2_TRACKPOINT
config MOUSE_PS2_TOUCHKIT config MOUSE_PS2_TOUCHKIT
bool "eGalax TouchKit PS/2 protocol extension" bool "eGalax TouchKit PS/2 protocol extension"
depends on MOUSE_PS2 depends on MOUSE_PS2
---help--- help
Say Y here if you have an eGalax TouchKit PS/2 touchscreen Say Y here if you have an eGalax TouchKit PS/2 touchscreen
connected to your system. connected to your system.
...@@ -99,7 +99,7 @@ config MOUSE_PS2_TOUCHKIT ...@@ -99,7 +99,7 @@ config MOUSE_PS2_TOUCHKIT
config MOUSE_SERIAL config MOUSE_SERIAL
tristate "Serial mouse" tristate "Serial mouse"
select SERIO select SERIO
---help--- help
Say Y here if you have a serial (RS-232, COM port) mouse connected Say Y here if you have a serial (RS-232, COM port) mouse connected
to your system. This includes Sun, MouseSystems, Microsoft, to your system. This includes Sun, MouseSystems, Microsoft,
Logitech and all other compatible serial mice. Logitech and all other compatible serial mice.
...@@ -109,6 +109,26 @@ config MOUSE_SERIAL ...@@ -109,6 +109,26 @@ config MOUSE_SERIAL
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called sermouse. module will be called sermouse.
config MOUSE_APPLETOUCH
tristate "Apple USB Touchpad support"
select USB
help
Say Y here if you want to use an Apple USB Touchpad.
These are the touchpads that can be found on post-February 2005
Apple Powerbooks (prior models have a Synaptics touchpad connected
to the ADB bus).
This driver provides a basic mouse driver but can be interfaced
with the synaptics X11 driver to provide acceleration and
scrolling in X11.
For further information, see
<file:Documentation/input/appletouch.txt>.
To compile this driver as a module, choose M here: the
module will be called appletouch.
config MOUSE_INPORT config MOUSE_INPORT
tristate "InPort/MS/ATIXL busmouse" tristate "InPort/MS/ATIXL busmouse"
depends on ISA depends on ISA
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
# Each configuration option enables a list of files. # Each configuration option enables a list of files.
obj-$(CONFIG_MOUSE_AMIGA) += amimouse.o obj-$(CONFIG_MOUSE_AMIGA) += amimouse.o
obj-$(CONFIG_MOUSE_APPLETOUCH) += appletouch.o
obj-$(CONFIG_MOUSE_ATARI) += atarimouse.o obj-$(CONFIG_MOUSE_ATARI) += atarimouse.o
obj-$(CONFIG_MOUSE_RISCPC) += rpcmouse.o obj-$(CONFIG_MOUSE_RISCPC) += rpcmouse.o
obj-$(CONFIG_MOUSE_INPORT) += inport.o obj-$(CONFIG_MOUSE_INPORT) += inport.o
......
...@@ -185,7 +185,7 @@ static int synaptics_query_hardware(struct psmouse *psmouse) ...@@ -185,7 +185,7 @@ static int synaptics_query_hardware(struct psmouse *psmouse)
int retries = 0; int retries = 0;
while ((retries++ < 3) && psmouse_reset(psmouse)) while ((retries++ < 3) && psmouse_reset(psmouse))
printk(KERN_ERR "synaptics reset failed\n"); /* empty */;
if (synaptics_identify(psmouse)) if (synaptics_identify(psmouse))
return -1; return -1;
......
...@@ -526,6 +526,33 @@ static irqreturn_t __devinit i8042_aux_test_irq(int irq, void *dev_id) ...@@ -526,6 +526,33 @@ static irqreturn_t __devinit i8042_aux_test_irq(int irq, void *dev_id)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
/*
* i8042_toggle_aux - enables or disables AUX port on i8042 via command and
* verifies success by readinng CTR. Used when testing for presence of AUX
* port.
*/
static int __devinit i8042_toggle_aux(int on)
{
unsigned char param;
int i;
if (i8042_command(&param,
on ? I8042_CMD_AUX_ENABLE : I8042_CMD_AUX_DISABLE))
return -1;
/* some chips need some time to set the I8042_CTR_AUXDIS bit */
for (i = 0; i < 100; i++) {
udelay(50);
if (i8042_command(&param, I8042_CMD_CTL_RCTR))
return -1;
if (!(param & I8042_CTR_AUXDIS) == on)
return 0;
}
return -1;
}
/* /*
* i8042_check_aux() applies as much paranoia as it can at detecting * i8042_check_aux() applies as much paranoia as it can at detecting
...@@ -580,16 +607,12 @@ static int __devinit i8042_check_aux(void) ...@@ -580,16 +607,12 @@ static int __devinit i8042_check_aux(void)
* Bit assignment test - filters out PS/2 i8042's in AT mode * Bit assignment test - filters out PS/2 i8042's in AT mode
*/ */
if (i8042_command(&param, I8042_CMD_AUX_DISABLE)) if (i8042_toggle_aux(0)) {
return -1;
if (i8042_command(&param, I8042_CMD_CTL_RCTR) || (~param & I8042_CTR_AUXDIS)) {
printk(KERN_WARNING "Failed to disable AUX port, but continuing anyway... Is this a SiS?\n"); printk(KERN_WARNING "Failed to disable AUX port, but continuing anyway... Is this a SiS?\n");
printk(KERN_WARNING "If AUX port is really absent please use the 'i8042.noaux' option.\n"); printk(KERN_WARNING "If AUX port is really absent please use the 'i8042.noaux' option.\n");
} }
if (i8042_command(&param, I8042_CMD_AUX_ENABLE)) if (i8042_toggle_aux(1))
return -1;
if (i8042_command(&param, I8042_CMD_CTL_RCTR) || (param & I8042_CTR_AUXDIS))
return -1; return -1;
/* /*
......
#
# Tablet driver configuration
#
menuconfig INPUT_TABLET
bool "Tablets"
help
Say Y here, and a list of supported tablets will be displayed.
This option doesn't affect the kernel.
If unsure, say Y.
if INPUT_TABLET
config TABLET_USB_ACECAD
tristate "Acecad Flair tablet support (USB)"
select USB
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 TABLET_USB_AIPTEK
tristate "Aiptek 6000U/8000U tablet support (USB)"
select USB
help
Say Y here if you want to use the USB version of the Aiptek 6000U
or Aiptek 8000U 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 aiptek.
config TABLET_USB_GTCO
tristate "GTCO CalComp/InterWrite USB Support"
depends on USB && INPUT
help
Say Y here if you want to use the USB version of the GTCO
CalComp/InterWrite 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 gtco.
config TABLET_USB_KBTAB
tristate "KB Gear JamStudio tablet support (USB)"
select USB
help
Say Y here if you want to use the USB version of the KB Gear
JamStudio 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 kbtab.
config TABLET_USB_WACOM
tristate "Wacom Intuos/Graphire tablet support (USB)"
select USB
help
Say Y here if you want to use the USB version of the Wacom Intuos
or Graphire 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 wacom.
endif
#
# Makefile for the tablet drivers
#
# Multipart objects.
wacom-objs := wacom_wac.o wacom_sys.o
obj-$(CONFIG_TABLET_USB_ACECAD) += acecad.o
obj-$(CONFIG_TABLET_USB_AIPTEK) += aiptek.o
obj-$(CONFIG_TABLET_USB_GTCO) += gtco.o
obj-$(CONFIG_TABLET_USB_KBTAB) += kbtab.o
obj-$(CONFIG_TABLET_USB_WACOM) += wacom.o
...@@ -54,7 +54,7 @@ struct usb_acecad { ...@@ -54,7 +54,7 @@ struct usb_acecad {
struct input_dev *input; struct input_dev *input;
struct urb *irq; struct urb *irq;
signed char *data; unsigned char *data;
dma_addr_t data_dma; dma_addr_t data_dma;
}; };
......
...@@ -29,7 +29,7 @@ module_param(kb_pressure_click, int, 0); ...@@ -29,7 +29,7 @@ module_param(kb_pressure_click, int, 0);
MODULE_PARM_DESC(kb_pressure_click, "pressure threshold for clicks"); MODULE_PARM_DESC(kb_pressure_click, "pressure threshold for clicks");
struct kbtab { struct kbtab {
signed char *data; unsigned char *data;
dma_addr_t data_dma; dma_addr_t data_dma;
struct input_dev *dev; struct input_dev *dev;
struct usb_device *usbdev; struct usb_device *usbdev;
......
/* /*
* drivers/usb/input/wacom.h * drivers/input/tablet/wacom.h
* *
* USB Wacom Graphire and Wacom Intuos tablet support * USB Wacom Graphire and Wacom Intuos tablet support
* *
......
/* /*
* drivers/usb/input/wacom_sys.c * drivers/input/tablet/wacom_sys.c
* *
* USB Wacom Graphire and Wacom Intuos tablet support - system specific code * USB Wacom Graphire and Wacom Intuos tablet support - system specific code
*/ */
......
/* /*
* drivers/usb/input/wacom_wac.c * drivers/input/tablet/wacom_wac.c
* *
* USB Wacom Graphire and Wacom Intuos tablet support - Wacom specific code * USB Wacom Graphire and Wacom Intuos tablet support - Wacom specific code
* *
......
/* /*
* drivers/usb/input/wacom_wac.h * drivers/input/tablet/wacom_wac.h
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
...@@ -39,7 +39,7 @@ struct wacom_features { ...@@ -39,7 +39,7 @@ struct wacom_features {
}; };
struct wacom_wac { struct wacom_wac {
signed char *data; unsigned char *data;
int tool[2]; int tool[2];
int id[2]; int id[2];
__u32 serial[2]; __u32 serial[2];
......
# #
# Mouse driver configuration # Touchscreen driver configuration
# #
menuconfig INPUT_TOUCHSCREEN menuconfig INPUT_TOUCHSCREEN
bool "Touchscreens" bool "Touchscreens"
...@@ -44,9 +44,9 @@ config TOUCHSCREEN_BITSY ...@@ -44,9 +44,9 @@ config TOUCHSCREEN_BITSY
config TOUCHSCREEN_CORGI config TOUCHSCREEN_CORGI
tristate "SharpSL (Corgi and Spitz series) touchscreen driver" tristate "SharpSL (Corgi and Spitz series) touchscreen driver"
depends on PXA_SHARPSL depends on PXA_SHARPSL
default y default y
help help
Say Y here to enable the driver for the touchscreen on the Say Y here to enable the driver for the touchscreen on the
Sharp SL-C7xx and SL-Cxx00 series of PDAs. Sharp SL-C7xx and SL-Cxx00 series of PDAs.
If unsure, say N. If unsure, say N.
...@@ -164,4 +164,58 @@ config TOUCHSCREEN_UCB1400 ...@@ -164,4 +164,58 @@ config TOUCHSCREEN_UCB1400
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called ucb1400_ts. module will be called ucb1400_ts.
config TOUCHSCREEN_USB_COMPOSITE
tristate "USB Touchscreen Driver"
select USB
help
USB Touchscreen driver for:
- eGalax Touchkit USB (also includes eTurboTouch CT-410/510/700)
- PanJit TouchSet USB
- 3M MicroTouch USB (EX II series)
- ITM
- some other eTurboTouch
- Gunze AHL61
- DMC TSC-10/25
Have a look at <http://linux.chapter7.ch/touchkit/> for
a usage description and the required user-space stuff.
To compile this driver as a module, choose M here: the
module will be called usbtouchscreen.
config TOUCHSCREEN_USB_EGALAX
default y
bool "eGalax, eTurboTouch CT-410/510/700 device support" if EMBEDDED
depends on TOUCHSCREEN_USB_COMPOSITE
config TOUCHSCREEN_USB_PANJIT
default y
bool "PanJit device support" if EMBEDDED
depends on TOUCHSCREEN_USB_COMPOSITE
config TOUCHSCREEN_USB_3M
default y
bool "3M/Microtouch EX II series device support" if EMBEDDED
depends on TOUCHSCREEN_USB_COMPOSITE
config TOUCHSCREEN_USB_ITM
default y
bool "ITM device support" if EMBEDDED
depends on TOUCHSCREEN_USB_COMPOSITE
config TOUCHSCREEN_USB_ETURBO
default y
bool "eTurboTouch (non-eGalax compatible) device support" if EMBEDDED
depends on TOUCHSCREEN_USB_COMPOSITE
config TOUCHSCREEN_USB_GUNZE
default y
bool "Gunze AHL61 device support" if EMBEDDED
depends on TOUCHSCREEN_USB_COMPOSITE
config TOUCHSCREEN_USB_DMC_TSC10
default y
bool "DMC TSC-10/25 device support" if EMBEDDED
depends on TOUCHSCREEN_USB_COMPOSITE
endif endif
# #
# Makefile for the mouse drivers. # Makefile for the touchscreen drivers.
# #
# Each configuration option enables a list of files. # Each configuration option enables a list of files.
obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o
obj-$(CONFIG_TOUCHSCREEN_BITSY) += h3600_ts_input.o obj-$(CONFIG_TOUCHSCREEN_BITSY) += h3600_ts_input.o
obj-$(CONFIG_TOUCHSCREEN_CORGI) += corgi_ts.o obj-$(CONFIG_TOUCHSCREEN_CORGI) += corgi_ts.o
obj-$(CONFIG_TOUCHSCREEN_GUNZE) += gunze.o obj-$(CONFIG_TOUCHSCREEN_GUNZE) += gunze.o
obj-$(CONFIG_TOUCHSCREEN_ELO) += elo.o obj-$(CONFIG_TOUCHSCREEN_ELO) += elo.o
obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o
obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o
obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o
obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o
obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o
obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
......
...@@ -668,9 +668,8 @@ static void usbtouch_close(struct input_dev *input) ...@@ -668,9 +668,8 @@ static void usbtouch_close(struct input_dev *input)
static void usbtouch_free_buffers(struct usb_device *udev, static void usbtouch_free_buffers(struct usb_device *udev,
struct usbtouch_usb *usbtouch) struct usbtouch_usb *usbtouch)
{ {
if (usbtouch->data) usb_buffer_free(udev, usbtouch->type->rept_size,
usb_buffer_free(udev, usbtouch->type->rept_size, usbtouch->data, usbtouch->data_dma);
usbtouch->data, usbtouch->data_dma);
kfree(usbtouch->buffer); kfree(usbtouch->buffer);
} }
......
...@@ -85,8 +85,6 @@ source "drivers/usb/class/Kconfig" ...@@ -85,8 +85,6 @@ source "drivers/usb/class/Kconfig"
source "drivers/usb/storage/Kconfig" source "drivers/usb/storage/Kconfig"
source "drivers/usb/input/Kconfig"
source "drivers/usb/image/Kconfig" source "drivers/usb/image/Kconfig"
source "drivers/usb/net/Kconfig" source "drivers/usb/net/Kconfig"
......
...@@ -23,15 +23,6 @@ obj-$(CONFIG_USB_PRINTER) += class/ ...@@ -23,15 +23,6 @@ obj-$(CONFIG_USB_PRINTER) += class/
obj-$(CONFIG_USB_STORAGE) += storage/ obj-$(CONFIG_USB_STORAGE) += storage/
obj-$(CONFIG_USB) += storage/ obj-$(CONFIG_USB) += storage/
obj-$(CONFIG_USB_ACECAD) += input/
obj-$(CONFIG_USB_AIPTEK) += input/
obj-$(CONFIG_USB_ATI_REMOTE) += input/
obj-$(CONFIG_USB_KBTAB) += input/
obj-$(CONFIG_USB_MTOUCH) += input/
obj-$(CONFIG_USB_POWERMATE) += input/
obj-$(CONFIG_USB_WACOM) += input/
obj-$(CONFIG_USB_XPAD) += input/
obj-$(CONFIG_USB_CATC) += net/ obj-$(CONFIG_USB_CATC) += net/
obj-$(CONFIG_USB_KAWETH) += net/ obj-$(CONFIG_USB_KAWETH) += net/
obj-$(CONFIG_USB_PEGASUS) += net/ obj-$(CONFIG_USB_PEGASUS) += net/
......
#
# USB Input driver configuration
#
comment "USB Input Devices"
depends on USB
config USB_AIPTEK
tristate "Aiptek 6000U/8000U tablet support"
depends on USB && INPUT
help
Say Y here if you want to use the USB version of the Aiptek 6000U
or Aiptek 8000U 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 aiptek.
config USB_WACOM
tristate "Wacom Intuos/Graphire tablet support"
depends on USB && INPUT
help
Say Y here if you want to use the USB version of the Wacom Intuos
or Graphire 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 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
help
Say Y here if you want to use the USB version of the KB Gear
JamStudio 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 kbtab.
config USB_POWERMATE
tristate "Griffin PowerMate and Contour Jog support"
depends on USB && INPUT
---help---
Say Y here if you want to use Griffin PowerMate or Contour Jog devices.
These are aluminum dials which can measure clockwise and anticlockwise
rotation. The dial also acts as a pushbutton. The base contains an LED
which can be instructed to pulse or to switch to a particular intensity.
You can download userspace tools from
<http://sowerbutts.com/powermate/>.
To compile this driver as a module, choose M here: the
module will be called powermate.
config USB_TOUCHSCREEN
tristate "USB Touchscreen Driver"
depends on USB && INPUT
---help---
USB Touchscreen driver for:
- eGalax Touchkit USB (also includes eTurboTouch CT-410/510/700)
- PanJit TouchSet USB
- 3M MicroTouch USB (EX II series)
- ITM
- some other eTurboTouch
- Gunze AHL61
- DMC TSC-10/25
Have a look at <http://linux.chapter7.ch/touchkit/> for
a usage description and the required user-space stuff.
To compile this driver as a module, choose M here: the
module will be called usbtouchscreen.
config USB_TOUCHSCREEN_EGALAX
default y
bool "eGalax, eTurboTouch CT-410/510/700 device support" if EMBEDDED
depends on USB_TOUCHSCREEN
config USB_TOUCHSCREEN_PANJIT
default y
bool "PanJit device support" if EMBEDDED
depends on USB_TOUCHSCREEN
config USB_TOUCHSCREEN_3M
default y
bool "3M/Microtouch EX II series device support" if EMBEDDED
depends on USB_TOUCHSCREEN
config USB_TOUCHSCREEN_ITM
default y
bool "ITM device support" if EMBEDDED
depends on USB_TOUCHSCREEN
config USB_TOUCHSCREEN_ETURBO
default y
bool "eTurboTouch (non-eGalax compatible) device support" if EMBEDDED
depends on USB_TOUCHSCREEN
config USB_TOUCHSCREEN_GUNZE
default y
bool "Gunze AHL61 device support" if EMBEDDED
depends on USB_TOUCHSCREEN
config USB_TOUCHSCREEN_DMC_TSC10
default y
bool "DMC TSC-10/25 device support" if EMBEDDED
depends on USB_TOUCHSCREEN
config USB_YEALINK
tristate "Yealink usb-p1k voip phone"
depends on USB && INPUT && EXPERIMENTAL
---help---
Say Y here if you want to enable keyboard and LCD functions of the
Yealink usb-p1k usb phones. The audio part is enabled by the generic
usb sound driver, so you might want to enable that as well.
For information about how to use these additional functions, see
<file:Documentation/input/yealink.txt>.
To compile this driver as a module, choose M here: the module will be
called yealink.
config USB_XPAD
tristate "X-Box gamepad support"
depends on USB && INPUT
---help---
Say Y here if you want to use the X-Box pad with your computer.
Make sure to say Y to "Joystick support" (CONFIG_INPUT_JOYDEV)
and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well.
For information about how to connect the X-Box pad to USB, see
<file:Documentation/input/xpad.txt>.
To compile this driver as a module, choose M here: the
module will be called xpad.
config USB_ATI_REMOTE
tristate "ATI / X10 USB RF remote control"
depends on USB && INPUT
---help---
Say Y here if you want to use an ATI or X10 "Lola" USB remote control.
These are RF remotes with USB receivers.
The ATI remote comes with many of ATI's All-In-Wonder video cards.
The X10 "Lola" remote is available at:
<http://www.x10.com/products/lola_sg1.htm>
This driver provides mouse pointer, left and right mouse buttons,
and maps all the other remote buttons to keypress events.
To compile this driver as a module, choose M here: the module will be
called ati_remote.
config USB_ATI_REMOTE2
tristate "ATI / Philips USB RF remote control"
depends on USB && INPUT
---help---
Say Y here if you want to use an ATI or Philips USB RF remote control.
These are RF remotes with USB receivers.
ATI Remote Wonder II comes with some ATI's All-In-Wonder video cards
and is also available as a separate product.
This driver provides mouse pointer, left and right mouse buttons,
and maps all the other remote buttons to keypress events.
To compile this driver as a module, choose M here: the module will be
called ati_remote2.
config USB_KEYSPAN_REMOTE
tristate "Keyspan DMR USB remote control (EXPERIMENTAL)"
depends on USB && INPUT && EXPERIMENTAL
---help---
Say Y here if you want to use a Keyspan DMR USB remote control.
Currently only the UIA-11 type of receiver has been tested. The tag
on the receiver that connects to the USB port should have a P/N that
will tell you what type of DMR you have. The UIA-10 type is not
supported at this time. This driver maps all buttons to keypress
events.
To compile this driver as a module, choose M here: the module will
be called keyspan_remote.
config USB_APPLETOUCH
tristate "Apple USB Touchpad support"
depends on USB && INPUT
---help---
Say Y here if you want to use an Apple USB Touchpad.
These are the touchpads that can be found on post-February 2005
Apple Powerbooks (prior models have a Synaptics touchpad connected
to the ADB bus).
This driver provides a basic mouse driver but can be interfaced
with the synaptics X11 driver to provide acceleration and
scrolling in X11.
For further information, see
<file:Documentation/input/appletouch.txt>.
To compile this driver as a module, choose M here: the
module will be called appletouch.
config USB_GTCO
tristate "GTCO CalComp/InterWrite USB Support"
depends on USB && INPUT
---help---
Say Y here if you want to use the USB version of the GTCO
CalComp/InterWrite 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 gtco.
#
# Makefile for the USB input drivers
#
# Multipart objects.
wacom-objs := wacom_wac.o wacom_sys.o
obj-$(CONFIG_USB_AIPTEK) += aiptek.o
obj-$(CONFIG_USB_ATI_REMOTE) += ati_remote.o
obj-$(CONFIG_USB_ATI_REMOTE2) += ati_remote2.o
obj-$(CONFIG_USB_KBTAB) += kbtab.o
obj-$(CONFIG_USB_KEYSPAN_REMOTE) += keyspan_remote.o
obj-$(CONFIG_USB_TOUCHSCREEN) += usbtouchscreen.o
obj-$(CONFIG_USB_POWERMATE) += powermate.o
obj-$(CONFIG_USB_WACOM) += wacom.o
obj-$(CONFIG_USB_ACECAD) += acecad.o
obj-$(CONFIG_USB_YEALINK) += yealink.o
obj-$(CONFIG_USB_XPAD) += xpad.o
obj-$(CONFIG_USB_APPLETOUCH) += appletouch.o
obj-$(CONFIG_USB_GTCO) += gtco.o
ifeq ($(CONFIG_USB_DEBUG),y)
EXTRA_CFLAGS += -DDEBUG
endif
...@@ -32,6 +32,8 @@ ...@@ -32,6 +32,8 @@
* - first public version * - first public version
*/ */
#include <linux/input.h>
#define UINPUT_VERSION 3 #define UINPUT_VERSION 3
#ifdef __KERNEL__ #ifdef __KERNEL__
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册