mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/dtor/input
* master.kernel.org:/pub/scm/linux/kernel/git/dtor/input: Input: iforce - remove some pointless casts Input: psmouse - add support for Intellimouse 4.0 Input: atkbd - fix HANGEUL/HANJA keys Input: fix misspelling of Hangeul key Input: via-pmu - add input device support Input: rearrange exports Input: fix formatting to better follow CodingStyle Input: reset name, phys and uniq when unregistering Input: return correct size when reading modalias attribute Input: change my e-mail address in MAINTAINERS file Input: fix potential overflows in driver/input/keyboard Input: fix potential overflows in driver/input/touchscreen Input: fix potential overflows in driver/input/joystick Input: fix potential overflows in driver/input/mouse Input: fix accuracy of fixp-arith.h Input: iforce - use ENOSPC instead of ENOMEM Input: constify drivers/char/keyboard.c
This commit is contained in:
commit
cdf4f383a4
45 files changed
+515
-248
No files matched your search
+2
-1
@@ -1401,7 +1401,8 @@ S: Supported
|
||||
|
||||
INPUT (KEYBOARD, MOUSE, JOYSTICK) DRIVERS
|
||||
P: Dmitry Torokhov
|
||||
M: dtor_core@ameritech.net
|
||||
M: dmitry.torokhov@gmail.com
|
||||
M: dtor@mail.ru
|
||||
L: linux-input@atrey.karlin.mff.cuni.cz
|
||||
L: linux-joystick@atrey.karlin.mff.cuni.cz
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/dtor/input.git
|
||||
|
||||
@@ -674,7 +674,7 @@ static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag, struc
|
||||
*/
|
||||
static void k_dead(struct vc_data *vc, unsigned char value, char up_flag, struct pt_regs *regs)
|
||||
{
|
||||
static unsigned char ret_diacr[NR_DEAD] = {'`', '\'', '^', '~', '"', ',' };
|
||||
static const unsigned char ret_diacr[NR_DEAD] = {'`', '\'', '^', '~', '"', ',' };
|
||||
value = ret_diacr[value];
|
||||
k_deadunicode(vc, value, up_flag, regs);
|
||||
}
|
||||
@@ -711,8 +711,8 @@ static void k_cur(struct vc_data *vc, unsigned char value, char up_flag, struct
|
||||
|
||||
static void k_pad(struct vc_data *vc, unsigned char value, char up_flag, struct pt_regs *regs)
|
||||
{
|
||||
static const char *pad_chars = "0123456789+-*/\015,.?()#";
|
||||
static const char *app_map = "pqrstuvwxylSRQMnnmPQS";
|
||||
static const char pad_chars[] = "0123456789+-*/\015,.?()#";
|
||||
static const char app_map[] = "pqrstuvwxylSRQMnnmPQS";
|
||||
|
||||
if (up_flag)
|
||||
return; /* no action, if this is a key release */
|
||||
@@ -1037,7 +1037,7 @@ static void kbd_refresh_leds(struct input_handle *handle)
|
||||
#define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\
|
||||
((dev)->id.bustype == BUS_I8042) && ((dev)->id.vendor == 0x0001) && ((dev)->id.product == 0x0001))
|
||||
|
||||
static unsigned short x86_keycodes[256] =
|
||||
static const unsigned short x86_keycodes[256] =
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
|
||||
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
@@ -1075,11 +1075,13 @@ static int emulate_raw(struct vc_data *vc, unsigned int keycode,
|
||||
put_queue(vc, 0x1d | up_flag);
|
||||
put_queue(vc, 0x45 | up_flag);
|
||||
return 0;
|
||||
case KEY_HANGUEL:
|
||||
if (!up_flag) put_queue(vc, 0xf1);
|
||||
case KEY_HANGEUL:
|
||||
if (!up_flag)
|
||||
put_queue(vc, 0xf2);
|
||||
return 0;
|
||||
case KEY_HANJA:
|
||||
if (!up_flag) put_queue(vc, 0xf2);
|
||||
if (!up_flag)
|
||||
put_queue(vc, 0xf1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -78,14 +78,19 @@ static int evdev_fasync(int fd, struct file *file, int on)
|
||||
{
|
||||
int retval;
|
||||
struct evdev_list *list = file->private_data;
|
||||
|
||||
retval = fasync_helper(fd, file, on, &list->fasync);
|
||||
|
||||
return retval < 0 ? retval : 0;
|
||||
}
|
||||
|
||||
static int evdev_flush(struct file * file, fl_owner_t id)
|
||||
static int evdev_flush(struct file *file, fl_owner_t id)
|
||||
{
|
||||
struct evdev_list *list = file->private_data;
|
||||
if (!list->evdev->exist) return -ENODEV;
|
||||
|
||||
if (!list->evdev->exist)
|
||||
return -ENODEV;
|
||||
|
||||
return input_flush_device(&list->evdev->handle, file);
|
||||
}
|
||||
|
||||
@@ -300,6 +305,7 @@ static ssize_t evdev_read(struct file * file, char __user * buffer, size_t count
|
||||
static unsigned int evdev_poll(struct file *file, poll_table *wait)
|
||||
{
|
||||
struct evdev_list *list = file->private_data;
|
||||
|
||||
poll_wait(file, &list->evdev->wait, wait);
|
||||
return ((list->head == list->tail) ? 0 : (POLLIN | POLLRDNORM)) |
|
||||
(list->evdev->exist ? 0 : (POLLHUP | POLLERR));
|
||||
|
||||
+57
-28
@@ -28,20 +28,6 @@ MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
|
||||
MODULE_DESCRIPTION("Input core");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
EXPORT_SYMBOL(input_allocate_device);
|
||||
EXPORT_SYMBOL(input_register_device);
|
||||
EXPORT_SYMBOL(input_unregister_device);
|
||||
EXPORT_SYMBOL(input_register_handler);
|
||||
EXPORT_SYMBOL(input_unregister_handler);
|
||||
EXPORT_SYMBOL(input_grab_device);
|
||||
EXPORT_SYMBOL(input_release_device);
|
||||
EXPORT_SYMBOL(input_open_device);
|
||||
EXPORT_SYMBOL(input_close_device);
|
||||
EXPORT_SYMBOL(input_accept_process);
|
||||
EXPORT_SYMBOL(input_flush_device);
|
||||
EXPORT_SYMBOL(input_event);
|
||||
EXPORT_SYMBOL_GPL(input_class);
|
||||
|
||||
#define INPUT_DEVICES 256
|
||||
|
||||
static LIST_HEAD(input_dev_list);
|
||||
@@ -63,11 +49,13 @@ void input_event(struct input_dev *dev, unsigned int type, unsigned int code, in
|
||||
case EV_SYN:
|
||||
switch (code) {
|
||||
case SYN_CONFIG:
|
||||
if (dev->event) dev->event(dev, type, code, value);
|
||||
if (dev->event)
|
||||
dev->event(dev, type, code, value);
|
||||
break;
|
||||
|
||||
case SYN_REPORT:
|
||||
if (dev->sync) return;
|
||||
if (dev->sync)
|
||||
return;
|
||||
dev->sync = 1;
|
||||
break;
|
||||
}
|
||||
@@ -136,7 +124,8 @@ void input_event(struct input_dev *dev, unsigned int type, unsigned int code, in
|
||||
if (code > MSC_MAX || !test_bit(code, dev->mscbit))
|
||||
return;
|
||||
|
||||
if (dev->event) dev->event(dev, type, code, value);
|
||||
if (dev->event)
|
||||
dev->event(dev, type, code, value);
|
||||
|
||||
break;
|
||||
|
||||
@@ -146,7 +135,9 @@ void input_event(struct input_dev *dev, unsigned int type, unsigned int code, in
|
||||
return;
|
||||
|
||||
change_bit(code, dev->led);
|
||||
if (dev->event) dev->event(dev, type, code, value);
|
||||
|
||||
if (dev->event)
|
||||
dev->event(dev, type, code, value);
|
||||
|
||||
break;
|
||||
|
||||
@@ -158,21 +149,25 @@ void input_event(struct input_dev *dev, unsigned int type, unsigned int code, in
|
||||
if (!!test_bit(code, dev->snd) != !!value)
|
||||
change_bit(code, dev->snd);
|
||||
|
||||
if (dev->event) dev->event(dev, type, code, value);
|
||||
if (dev->event)
|
||||
dev->event(dev, type, code, value);
|
||||
|
||||
break;
|
||||
|
||||
case EV_REP:
|
||||
|
||||
if (code > REP_MAX || value < 0 || dev->rep[code] == value) return;
|
||||
if (code > REP_MAX || value < 0 || dev->rep[code] == value)
|
||||
return;
|
||||
|
||||
dev->rep[code] = value;
|
||||
if (dev->event) dev->event(dev, type, code, value);
|
||||
if (dev->event)
|
||||
dev->event(dev, type, code, value);
|
||||
|
||||
break;
|
||||
|
||||
case EV_FF:
|
||||
if (dev->event) dev->event(dev, type, code, value);
|
||||
if (dev->event)
|
||||
dev->event(dev, type, code, value);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -186,6 +181,7 @@ void input_event(struct input_dev *dev, unsigned int type, unsigned int code, in
|
||||
if (handle->open)
|
||||
handle->handler->event(handle, type, code, value);
|
||||
}
|
||||
EXPORT_SYMBOL(input_event);
|
||||
|
||||
static void input_repeat_key(unsigned long data)
|
||||
{
|
||||
@@ -208,6 +204,7 @@ int input_accept_process(struct input_handle *handle, struct file *file)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(input_accept_process);
|
||||
|
||||
int input_grab_device(struct input_handle *handle)
|
||||
{
|
||||
@@ -217,12 +214,14 @@ int input_grab_device(struct input_handle *handle)
|
||||
handle->dev->grab = handle;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(input_grab_device);
|
||||
|
||||
void input_release_device(struct input_handle *handle)
|
||||
{
|
||||
if (handle->dev->grab == handle)
|
||||
handle->dev->grab = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(input_release_device);
|
||||
|
||||
int input_open_device(struct input_handle *handle)
|
||||
{
|
||||
@@ -245,6 +244,7 @@ int input_open_device(struct input_handle *handle)
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(input_open_device);
|
||||
|
||||
int input_flush_device(struct input_handle* handle, struct file* file)
|
||||
{
|
||||
@@ -253,6 +253,7 @@ int input_flush_device(struct input_handle* handle, struct file* file)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(input_flush_device);
|
||||
|
||||
void input_close_device(struct input_handle *handle)
|
||||
{
|
||||
@@ -268,6 +269,7 @@ void input_close_device(struct input_handle *handle)
|
||||
|
||||
mutex_unlock(&dev->mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(input_close_device);
|
||||
|
||||
static void input_link_handle(struct input_handle *handle)
|
||||
{
|
||||
@@ -335,9 +337,11 @@ static inline void input_wakeup_procfs_readers(void)
|
||||
static unsigned int input_proc_devices_poll(struct file *file, poll_table *wait)
|
||||
{
|
||||
int state = input_devices_state;
|
||||
|
||||
poll_wait(file, &input_devices_poll_wait, wait);
|
||||
if (state != input_devices_state)
|
||||
return POLLIN | POLLRDNORM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -629,7 +633,7 @@ static ssize_t input_dev_show_modalias(struct class_device *dev, char *buf)
|
||||
|
||||
len = input_print_modalias(buf, PAGE_SIZE, id, 1);
|
||||
|
||||
return max_t(int, len, PAGE_SIZE);
|
||||
return min_t(int, len, PAGE_SIZE);
|
||||
}
|
||||
static CLASS_DEVICE_ATTR(modalias, S_IRUGO, input_dev_show_modalias, NULL);
|
||||
|
||||
@@ -862,6 +866,7 @@ struct class input_class = {
|
||||
.release = input_dev_release,
|
||||
.uevent = input_dev_uevent,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(input_class);
|
||||
|
||||
struct input_dev *input_allocate_device(void)
|
||||
{
|
||||
@@ -872,12 +877,27 @@ struct input_dev *input_allocate_device(void)
|
||||
dev->dynalloc = 1;
|
||||
dev->cdev.class = &input_class;
|
||||
class_device_initialize(&dev->cdev);
|
||||
mutex_init(&dev->mutex);
|
||||
INIT_LIST_HEAD(&dev->h_list);
|
||||
INIT_LIST_HEAD(&dev->node);
|
||||
}
|
||||
|
||||
return dev;
|
||||
}
|
||||
EXPORT_SYMBOL(input_allocate_device);
|
||||
|
||||
void input_free_device(struct input_dev *dev)
|
||||
{
|
||||
if (dev) {
|
||||
|
||||
mutex_lock(&dev->mutex);
|
||||
dev->name = dev->phys = dev->uniq = NULL;
|
||||
mutex_unlock(&dev->mutex);
|
||||
|
||||
input_put_device(dev);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(input_free_device);
|
||||
|
||||
int input_register_device(struct input_dev *dev)
|
||||
{
|
||||
@@ -895,7 +915,6 @@ int input_register_device(struct input_dev *dev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mutex_init(&dev->mutex);
|
||||
set_bit(EV_SYN, dev->evbit);
|
||||
|
||||
/*
|
||||
@@ -956,12 +975,14 @@ int input_register_device(struct input_dev *dev)
|
||||
fail1: class_device_del(&dev->cdev);
|
||||
return error;
|
||||
}
|
||||
EXPORT_SYMBOL(input_register_device);
|
||||
|
||||
void input_unregister_device(struct input_dev *dev)
|
||||
{
|
||||
struct list_head * node, * next;
|
||||
struct list_head *node, *next;
|
||||
|
||||
if (!dev) return;
|
||||
if (!dev)
|
||||
return;
|
||||
|
||||
del_timer_sync(&dev->timer);
|
||||
|
||||
@@ -979,8 +1000,13 @@ void input_unregister_device(struct input_dev *dev)
|
||||
sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
|
||||
class_device_unregister(&dev->cdev);
|
||||
|
||||
mutex_lock(&dev->mutex);
|
||||
dev->name = dev->phys = dev->uniq = NULL;
|
||||
mutex_unlock(&dev->mutex);
|
||||
|
||||
input_wakeup_procfs_readers();
|
||||
}
|
||||
EXPORT_SYMBOL(input_unregister_device);
|
||||
|
||||
void input_register_handler(struct input_handler *handler)
|
||||
{
|
||||
@@ -988,7 +1014,8 @@ void input_register_handler(struct input_handler *handler)
|
||||
struct input_handle *handle;
|
||||
struct input_device_id *id;
|
||||
|
||||
if (!handler) return;
|
||||
if (!handler)
|
||||
return;
|
||||
|
||||
INIT_LIST_HEAD(&handler->h_list);
|
||||
|
||||
@@ -1005,10 +1032,11 @@ void input_register_handler(struct input_handler *handler)
|
||||
|
||||
input_wakeup_procfs_readers();
|
||||
}
|
||||
EXPORT_SYMBOL(input_register_handler);
|
||||
|
||||
void input_unregister_handler(struct input_handler *handler)
|
||||
{
|
||||
struct list_head * node, * next;
|
||||
struct list_head *node, *next;
|
||||
|
||||
list_for_each_safe(node, next, &handler->h_list) {
|
||||
struct input_handle * handle = to_handle_h(node);
|
||||
@@ -1024,6 +1052,7 @@ void input_unregister_handler(struct input_handler *handler)
|
||||
|
||||
input_wakeup_procfs_readers();
|
||||
}
|
||||
EXPORT_SYMBOL(input_unregister_handler);
|
||||
|
||||
static int input_open_file(struct inode *inode, struct file *file)
|
||||
{
|
||||
|
||||
+45
-24
@@ -81,10 +81,7 @@ static int joydev_correct(int value, struct js_corr *corr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (value < -32767) return -32767;
|
||||
if (value > 32767) return 32767;
|
||||
|
||||
return value;
|
||||
return value < -32767 ? -32767 : (value > 32767 ? 32767 : value);
|
||||
}
|
||||
|
||||
static void joydev_event(struct input_handle *handle, unsigned int type, unsigned int code, int value)
|
||||
@@ -96,7 +93,8 @@ static void joydev_event(struct input_handle *handle, unsigned int type, unsigne
|
||||
switch (type) {
|
||||
|
||||
case EV_KEY:
|
||||
if (code < BTN_MISC || value == 2) return;
|
||||
if (code < BTN_MISC || value == 2)
|
||||
return;
|
||||
event.type = JS_EVENT_BUTTON;
|
||||
event.number = joydev->keymap[code - BTN_MISC];
|
||||
event.value = value;
|
||||
@@ -106,7 +104,8 @@ static void joydev_event(struct input_handle *handle, unsigned int type, unsigne
|
||||
event.type = JS_EVENT_AXIS;
|
||||
event.number = joydev->absmap[code];
|
||||
event.value = joydev_correct(value, joydev->corr + event.number);
|
||||
if (event.value == joydev->abs[event.number]) return;
|
||||
if (event.value == joydev->abs[event.number])
|
||||
return;
|
||||
joydev->abs[event.number] = event.value;
|
||||
break;
|
||||
|
||||
@@ -134,7 +133,9 @@ static int joydev_fasync(int fd, struct file *file, int on)
|
||||
{
|
||||
int retval;
|
||||
struct joydev_list *list = file->private_data;
|
||||
|
||||
retval = fasync_helper(fd, file, on, &list->fasync);
|
||||
|
||||
return retval < 0 ? retval : 0;
|
||||
}
|
||||
|
||||
@@ -222,12 +223,12 @@ static ssize_t joydev_read(struct file *file, char __user *buf, size_t count, lo
|
||||
return sizeof(struct JS_DATA_TYPE);
|
||||
}
|
||||
|
||||
if (list->startup == joydev->nabs + joydev->nkey
|
||||
&& list->head == list->tail && (file->f_flags & O_NONBLOCK))
|
||||
return -EAGAIN;
|
||||
if (list->startup == joydev->nabs + joydev->nkey &&
|
||||
list->head == list->tail && (file->f_flags & O_NONBLOCK))
|
||||
return -EAGAIN;
|
||||
|
||||
retval = wait_event_interruptible(list->joydev->wait,
|
||||
!list->joydev->exist ||
|
||||
!list->joydev->exist ||
|
||||
list->startup < joydev->nabs + joydev->nkey ||
|
||||
list->head != list->tail);
|
||||
|
||||
@@ -276,8 +277,9 @@ static ssize_t joydev_read(struct file *file, char __user *buf, size_t count, lo
|
||||
static unsigned int joydev_poll(struct file *file, poll_table *wait)
|
||||
{
|
||||
struct joydev_list *list = file->private_data;
|
||||
|
||||
poll_wait(file, &list->joydev->wait, wait);
|
||||
return ((list->head != list->tail || list->startup < list->joydev->nabs + list->joydev->nkey) ?
|
||||
return ((list->head != list->tail || list->startup < list->joydev->nabs + list->joydev->nkey) ?
|
||||
(POLLIN | POLLRDNORM) : 0) | (list->joydev->exist ? 0 : (POLLHUP | POLLERR));
|
||||
}
|
||||
|
||||
@@ -291,20 +293,26 @@ static int joydev_ioctl_common(struct joydev *joydev, unsigned int cmd, void __u
|
||||
case JS_SET_CAL:
|
||||
return copy_from_user(&joydev->glue.JS_CORR, argp,
|
||||
sizeof(joydev->glue.JS_CORR)) ? -EFAULT : 0;
|
||||
|
||||
case JS_GET_CAL:
|
||||
return copy_to_user(argp, &joydev->glue.JS_CORR,
|
||||
sizeof(joydev->glue.JS_CORR)) ? -EFAULT : 0;
|
||||
|
||||
case JS_SET_TIMEOUT:
|
||||
return get_user(joydev->glue.JS_TIMEOUT, (s32 __user *) argp);
|
||||
|
||||
case JS_GET_TIMEOUT:
|
||||
return put_user(joydev->glue.JS_TIMEOUT, (s32 __user *) argp);
|
||||
|
||||
case JSIOCGVERSION:
|
||||
return put_user(JS_VERSION, (__u32 __user *) argp);
|
||||
|
||||
case JSIOCGAXES:
|
||||
return put_user(joydev->nabs, (__u8 __user *) argp);
|
||||
|
||||
case JSIOCGBUTTONS:
|
||||
return put_user(joydev->nkey, (__u8 __user *) argp);
|
||||
|
||||
case JSIOCSCORR:
|
||||
if (copy_from_user(joydev->corr, argp,
|
||||
sizeof(joydev->corr[0]) * joydev->nabs))
|
||||
@@ -314,38 +322,49 @@ static int joydev_ioctl_common(struct joydev *joydev, unsigned int cmd, void __u
|
||||
joydev->abs[i] = joydev_correct(dev->abs[j], joydev->corr + i);
|
||||
}
|
||||
return 0;
|
||||
|
||||
case JSIOCGCORR:
|
||||
return copy_to_user(argp, joydev->corr,
|
||||
sizeof(joydev->corr[0]) * joydev->nabs) ? -EFAULT : 0;
|
||||
|
||||
case JSIOCSAXMAP:
|
||||
if (copy_from_user(joydev->abspam, argp, sizeof(__u8) * (ABS_MAX + 1)))
|
||||
return -EFAULT;
|
||||
for (i = 0; i < joydev->nabs; i++) {
|
||||
if (joydev->abspam[i] > ABS_MAX) return -EINVAL;
|
||||
if (joydev->abspam[i] > ABS_MAX)
|
||||
return -EINVAL;
|
||||
joydev->absmap[joydev->abspam[i]] = i;
|
||||
}
|
||||
return 0;
|
||||
|
||||
case JSIOCGAXMAP:
|
||||
return copy_to_user(argp, joydev->abspam,
|
||||
sizeof(__u8) * (ABS_MAX + 1)) ? -EFAULT : 0;
|
||||
|
||||
case JSIOCSBTNMAP:
|
||||
if (copy_from_user(joydev->keypam, argp, sizeof(__u16) * (KEY_MAX - BTN_MISC + 1)))
|
||||
return -EFAULT;
|
||||
for (i = 0; i < joydev->nkey; i++) {
|
||||
if (joydev->keypam[i] > KEY_MAX || joydev->keypam[i] < BTN_MISC) return -EINVAL;
|
||||
if (joydev->keypam[i] > KEY_MAX || joydev->keypam[i] < BTN_MISC)
|
||||
return -EINVAL;
|
||||
joydev->keymap[joydev->keypam[i] - BTN_MISC] = i;
|
||||
}
|
||||
return 0;
|
||||
|
||||
case JSIOCGBTNMAP:
|
||||
return copy_to_user(argp, joydev->keypam,
|
||||
sizeof(__u16) * (KEY_MAX - BTN_MISC + 1)) ? -EFAULT : 0;
|
||||
|
||||
default:
|
||||
if ((cmd & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT)) == JSIOCGNAME(0)) {
|
||||
int len;
|
||||
if (!dev->name) return 0;
|
||||
if (!dev->name)
|
||||
return 0;
|
||||
len = strlen(dev->name) + 1;
|
||||
if (len > _IOC_SIZE(cmd)) len = _IOC_SIZE(cmd);
|
||||
if (copy_to_user(argp, dev->name, len)) return -EFAULT;
|
||||
if (len > _IOC_SIZE(cmd))
|
||||
len = _IOC_SIZE(cmd);
|
||||
if (copy_to_user(argp, dev->name, len))
|
||||
return -EFAULT;
|
||||
return len;
|
||||
}
|
||||
}
|
||||
@@ -362,7 +381,9 @@ static long joydev_compat_ioctl(struct file *file, unsigned int cmd, unsigned lo
|
||||
struct JS_DATA_SAVE_TYPE_32 ds32;
|
||||
int err;
|
||||
|
||||
if (!joydev->exist) return -ENODEV;
|
||||
if (!joydev->exist)
|
||||
return -ENODEV;
|
||||
|
||||
switch(cmd) {
|
||||
case JS_SET_TIMELIMIT:
|
||||
err = get_user(tmp32, (s32 __user *) arg);
|
||||
@@ -395,8 +416,7 @@ static long joydev_compat_ioctl(struct file *file, unsigned int cmd, unsigned lo
|
||||
ds32.JS_SAVE = joydev->glue.JS_SAVE;
|
||||
ds32.JS_CORR = joydev->glue.JS_CORR;
|
||||
|
||||
err = copy_to_user(argp, &ds32,
|
||||
sizeof(ds32)) ? -EFAULT : 0;
|
||||
err = copy_to_user(argp, &ds32, sizeof(ds32)) ? -EFAULT : 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -412,7 +432,8 @@ static int joydev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
|
||||
struct joydev *joydev = list->joydev;
|
||||
void __user *argp = (void __user *)arg;
|
||||
|
||||
if (!joydev->exist) return -ENODEV;
|
||||
if (!joydev->exist)
|
||||
return -ENODEV;
|
||||
|
||||
switch(cmd) {
|
||||
case JS_SET_TIMELIMIT:
|
||||
@@ -546,8 +567,8 @@ static struct input_device_id joydev_blacklist[] = {
|
||||
.flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_KEYBIT,
|
||||
.evbit = { BIT(EV_KEY) },
|
||||
.keybit = { [LONG(BTN_TOUCH)] = BIT(BTN_TOUCH) },
|
||||
}, /* Avoid itouchpads, touchscreens and tablets */
|
||||
{ }, /* Terminating entry */
|
||||
}, /* Avoid itouchpads, touchscreens and tablets */
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
static struct input_device_id joydev_ids[] = {
|
||||
@@ -566,7 +587,7 @@ static struct input_device_id joydev_ids[] = {
|
||||
.evbit = { BIT(EV_ABS) },
|
||||
.absbit = { BIT(ABS_THROTTLE) },
|
||||
},
|
||||
{ }, /* Terminating entry */
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(input, joydev_ids);
|
||||
@@ -579,7 +600,7 @@ static struct input_handler joydev_handler = {
|
||||
.minor = JOYDEV_MINOR_BASE,
|
||||
.name = "joydev",
|
||||
.id_table = joydev_ids,
|
||||
.blacklist = joydev_blacklist,
|
||||
.blacklist = joydev_blacklist,
|
||||
};
|
||||
|
||||
static int __init joydev_init(void)
|
||||
|
||||
@@ -306,7 +306,7 @@ static int a3d_connect(struct gameport *gameport, struct gameport_driver *drv)
|
||||
gameport_set_poll_handler(gameport, a3d_poll);
|
||||
gameport_set_poll_interval(gameport, 20);
|
||||
|
||||
sprintf(a3d->phys, "%s/input0", gameport->phys);
|
||||
snprintf(a3d->phys, sizeof(a3d->phys), "%s/input0", gameport->phys);
|
||||
|
||||
input_dev->name = a3d_names[a3d->mode];
|
||||
input_dev->phys = a3d->phys;
|
||||
|
||||
@@ -408,21 +408,23 @@ static void analog_calibrate_timer(struct analog_port *port)
|
||||
|
||||
static void analog_name(struct analog *analog)
|
||||
{
|
||||
sprintf(analog->name, "Analog %d-axis %d-button",
|
||||
hweight8(analog->mask & ANALOG_AXES_STD),
|
||||
hweight8(analog->mask & ANALOG_BTNS_STD) + !!(analog->mask & ANALOG_BTNS_CHF) * 2 +
|
||||
hweight16(analog->mask & ANALOG_BTNS_GAMEPAD) + !!(analog->mask & ANALOG_HBTN_CHF) * 4);
|
||||
snprintf(analog->name, sizeof(analog->name), "Analog %d-axis %d-button",
|
||||
hweight8(analog->mask & ANALOG_AXES_STD),
|
||||
hweight8(analog->mask & ANALOG_BTNS_STD) + !!(analog->mask & ANALOG_BTNS_CHF) * 2 +
|
||||
hweight16(analog->mask & ANALOG_BTNS_GAMEPAD) + !!(analog->mask & ANALOG_HBTN_CHF) * 4);
|
||||
|
||||
if (analog->mask & ANALOG_HATS_ALL)
|
||||
sprintf(analog->name, "%s %d-hat",
|
||||
analog->name, hweight16(analog->mask & ANALOG_HATS_ALL));
|
||||
snprintf(analog->name, sizeof(analog->name), "%s %d-hat",
|
||||
analog->name, hweight16(analog->mask & ANALOG_HATS_ALL));
|
||||
|
||||
if (analog->mask & ANALOG_HAT_FCS)
|
||||
strcat(analog->name, " FCS");
|
||||
strlcat(analog->name, " FCS", sizeof(analog->name));
|
||||
if (analog->mask & ANALOG_ANY_CHF)
|
||||
strcat(analog->name, (analog->mask & ANALOG_SAITEK) ? " Saitek" : " CHF");
|
||||
strlcat(analog->name, (analog->mask & ANALOG_SAITEK) ? " Saitek" : " CHF",
|
||||
sizeof(analog->name));
|
||||
|
||||
strcat(analog->name, (analog->mask & ANALOG_GAMEPAD) ? " gamepad": " joystick");
|
||||
strlcat(analog->name, (analog->mask & ANALOG_GAMEPAD) ? " gamepad": " joystick",
|
||||
sizeof(analog->name));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -435,7 +437,8 @@ static int analog_init_device(struct analog_port *port, struct analog *analog, i
|
||||
int i, j, t, v, w, x, y, z;
|
||||
|
||||
analog_name(analog);
|
||||
sprintf(analog->phys, "%s/input%d", port->gameport->phys, index);
|
||||
snprintf(analog->phys, sizeof(analog->phys),
|
||||
"%s/input%d", port->gameport->phys, index);
|
||||
analog->buttons = (analog->mask & ANALOG_GAMEPAD) ? analog_pad_btn : analog_joy_btn;
|
||||
|
||||
analog->dev = input_dev = input_allocate_device();
|
||||
|
||||
@@ -202,7 +202,8 @@ static int cobra_connect(struct gameport *gameport, struct gameport_driver *drv)
|
||||
goto fail3;
|
||||
}
|
||||
|
||||
sprintf(cobra->phys[i], "%s/input%d", gameport->phys, i);
|
||||
snprintf(cobra->phys[i], sizeof(cobra->phys[i]),
|
||||
"%s/input%d", gameport->phys, i);
|
||||
|
||||
input_dev->name = "Creative Labs Blaster GamePad Cobra";
|
||||
input_dev->phys = cobra->phys[i];
|
||||
|
||||
@@ -620,7 +620,8 @@ static struct db9 __init *db9_probe(int parport, int mode)
|
||||
goto err_unreg_devs;
|
||||
}
|
||||
|
||||
sprintf(db9->phys[i], "%s/input%d", db9->pd->port->name, i);
|
||||
snprintf(db9->phys[i], sizeof(db9->phys[i]),
|
||||
"%s/input%d", db9->pd->port->name, i);
|
||||
|
||||
input_dev->name = db9_mode->name;
|
||||
input_dev->phys = db9->phys[i];
|
||||
|
||||
@@ -761,7 +761,8 @@ static struct gc __init *gc_probe(int parport, int *pads, int n_pads)
|
||||
if (!pads[i])
|
||||
continue;
|
||||
|
||||
sprintf(gc->phys[i], "%s/input%d", gc->pd->port->name, i);
|
||||
snprintf(gc->phys[i], sizeof(gc->phys[i]),
|
||||
"%s/input%d", gc->pd->port->name, i);
|
||||
err = gc_setup_pad(gc, i, pads[i]);
|
||||
if (err)
|
||||
goto err_unreg_devs;
|
||||
|
||||
@@ -298,7 +298,7 @@ static int gf2k_connect(struct gameport *gameport, struct gameport_driver *drv)
|
||||
gameport_set_poll_handler(gameport, gf2k_poll);
|
||||
gameport_set_poll_interval(gameport, 20);
|
||||
|
||||
sprintf(gf2k->phys, "%s/input0", gameport->phys);
|
||||
snprintf(gf2k->phys, sizeof(gf2k->phys), "%s/input0", gameport->phys);
|
||||
|
||||
gf2k->length = gf2k_lens[gf2k->id];
|
||||
|
||||
|
||||
@@ -354,7 +354,8 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv)
|
||||
goto fail3;
|
||||
}
|
||||
|
||||
sprintf(grip->phys[i], "%s/input%d", gameport->phys, i);
|
||||
snprintf(grip->phys[i], sizeof(grip->phys[i]),
|
||||
"%s/input%d", gameport->phys, i);
|
||||
|
||||
input_dev->name = grip_name[grip->mode[i]];
|
||||
input_dev->phys = grip->phys[i];
|
||||
|
||||
@@ -222,7 +222,7 @@ static int guillemot_connect(struct gameport *gameport, struct gameport_driver *
|
||||
gameport_set_poll_handler(gameport, guillemot_poll);
|
||||
gameport_set_poll_interval(gameport, 20);
|
||||
|
||||
sprintf(guillemot->phys, "%s/input0", gameport->phys);
|
||||
snprintf(guillemot->phys, sizeof(guillemot->phys), "%s/input0", gameport->phys);
|
||||
guillemot->type = guillemot_type + i;
|
||||
|
||||
input_dev->name = guillemot_type[i].name;
|
||||
|
||||
@@ -47,7 +47,7 @@ static int make_magnitude_modifier(struct iforce* iforce,
|
||||
iforce->device_memory.start, iforce->device_memory.end, 2L,
|
||||
NULL, NULL)) {
|
||||
mutex_unlock(&iforce->mem_mutex);
|
||||
return -ENOMEM;
|
||||
return -ENOSPC;
|
||||
}
|
||||
mutex_unlock(&iforce->mem_mutex);
|
||||
}
|
||||
@@ -80,7 +80,7 @@ static int make_period_modifier(struct iforce* iforce,
|
||||
iforce->device_memory.start, iforce->device_memory.end, 2L,
|
||||
NULL, NULL)) {
|
||||
mutex_unlock(&iforce->mem_mutex);
|
||||
return -ENOMEM;
|
||||
return -ENOSPC;
|
||||
}
|
||||
mutex_unlock(&iforce->mem_mutex);
|
||||
}
|
||||
@@ -120,7 +120,7 @@ static int make_envelope_modifier(struct iforce* iforce,
|
||||
iforce->device_memory.start, iforce->device_memory.end, 2L,
|
||||
NULL, NULL)) {
|
||||
mutex_unlock(&iforce->mem_mutex);
|
||||
return -ENOMEM;
|
||||
return -ENOSPC;
|
||||
}
|
||||
mutex_unlock(&iforce->mem_mutex);
|
||||
}
|
||||
@@ -157,7 +157,7 @@ static int make_condition_modifier(struct iforce* iforce,
|
||||
iforce->device_memory.start, iforce->device_memory.end, 2L,
|
||||
NULL, NULL)) {
|
||||
mutex_unlock(&iforce->mem_mutex);
|
||||
return -ENOMEM;
|
||||
return -ENOSPC;
|
||||
}
|
||||
mutex_unlock(&iforce->mem_mutex);
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ static struct iforce_device iforce_device[] = {
|
||||
|
||||
static int iforce_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
|
||||
{
|
||||
struct iforce* iforce = (struct iforce*)(dev->private);
|
||||
struct iforce* iforce = dev->private;
|
||||
unsigned char data[3];
|
||||
|
||||
if (type != EV_FF)
|
||||
@@ -138,7 +138,7 @@ static int iforce_input_event(struct input_dev *dev, unsigned int type, unsigned
|
||||
*/
|
||||
static int iforce_upload_effect(struct input_dev *dev, struct ff_effect *effect)
|
||||
{
|
||||
struct iforce* iforce = (struct iforce*)(dev->private);
|
||||
struct iforce* iforce = dev->private;
|
||||
int id;
|
||||
int ret;
|
||||
int is_update;
|
||||
@@ -218,7 +218,7 @@ static int iforce_upload_effect(struct input_dev *dev, struct ff_effect *effect)
|
||||
*/
|
||||
static int iforce_erase_effect(struct input_dev *dev, int effect_id)
|
||||
{
|
||||
struct iforce* iforce = (struct iforce*)(dev->private);
|
||||
struct iforce* iforce = dev->private;
|
||||
int err = 0;
|
||||
struct iforce_core_effect* core_effect;
|
||||
|
||||
|
||||
@@ -251,7 +251,7 @@ static int interact_connect(struct gameport *gameport, struct gameport_driver *d
|
||||
gameport_set_poll_handler(gameport, interact_poll);
|
||||
gameport_set_poll_interval(gameport, 20);
|
||||
|
||||
sprintf(interact->phys, "%s/input0", gameport->phys);
|
||||
snprintf(interact->phys, sizeof(interact->phys), "%s/input0", gameport->phys);
|
||||
|
||||
interact->type = i;
|
||||
interact->length = interact_type[i].length;
|
||||
|
||||
@@ -162,7 +162,7 @@ static int magellan_connect(struct serio *serio, struct serio_driver *drv)
|
||||
goto fail;
|
||||
|
||||
magellan->dev = input_dev;
|
||||
sprintf(magellan->phys, "%s/input0", serio->phys);
|
||||
snprintf(magellan->phys, sizeof(magellan->phys), "%s/input0", serio->phys);
|
||||
|
||||
input_dev->name = "LogiCad3D Magellan / SpaceMouse";
|
||||
input_dev->phys = magellan->phys;
|
||||
|
||||
@@ -541,7 +541,7 @@ static void sw_print_packet(char *name, int length, unsigned char *buf, char bit
|
||||
* Unfortunately I don't know how to do this for the other SW types.
|
||||
*/
|
||||
|
||||
static void sw_3dp_id(unsigned char *buf, char *comment)
|
||||
static void sw_3dp_id(unsigned char *buf, char *comment, size_t size)
|
||||
{
|
||||
int i;
|
||||
char pnp[8], rev[9];
|
||||
@@ -554,7 +554,7 @@ static void sw_3dp_id(unsigned char *buf, char *comment)
|
||||
|
||||
pnp[7] = rev[8] = 0;
|
||||
|
||||
sprintf(comment, " [PnP %d.%02d id %s rev %s]",
|
||||
snprintf(comment, size, " [PnP %d.%02d id %s rev %s]",
|
||||
(int) ((sw_get_bits(buf, 8, 6, 1) << 6) | /* Two 6-bit values */
|
||||
sw_get_bits(buf, 16, 6, 1)) / 100,
|
||||
(int) ((sw_get_bits(buf, 8, 6, 1) << 6) |
|
||||
@@ -695,7 +695,7 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
|
||||
sw->type = SW_ID_FFP;
|
||||
sprintf(comment, " [AC %s]", sw_get_bits(idbuf,38,1,3) ? "off" : "on");
|
||||
} else
|
||||
sw->type = SW_ID_PP;
|
||||
sw->type = SW_ID_PP;
|
||||
break;
|
||||
case 66:
|
||||
sw->bits = 3;
|
||||
@@ -703,7 +703,8 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
|
||||
sw->length = 22;
|
||||
case 64:
|
||||
sw->type = SW_ID_3DP;
|
||||
if (j == 160) sw_3dp_id(idbuf, comment);
|
||||
if (j == 160)
|
||||
sw_3dp_id(idbuf, comment, sizeof(comment));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -733,8 +734,10 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
|
||||
for (i = 0; i < sw->number; i++) {
|
||||
int bits, code;
|
||||
|
||||
sprintf(sw->name, "Microsoft SideWinder %s", sw_name[sw->type]);
|
||||
sprintf(sw->phys[i], "%s/input%d", gameport->phys, i);
|
||||
snprintf(sw->name, sizeof(sw->name),
|
||||
"Microsoft SideWinder %s", sw_name[sw->type]);
|
||||
snprintf(sw->phys[i], sizeof(sw->phys[i]),
|
||||
"%s/input%d", gameport->phys, i);
|
||||
|
||||
sw->dev[i] = input_dev = input_allocate_device();
|
||||
if (!input_dev) {
|
||||
|
||||
@@ -220,7 +220,7 @@ static int spaceball_connect(struct serio *serio, struct serio_driver *drv)
|
||||
goto fail;
|
||||
|
||||
spaceball->dev = input_dev;
|
||||
sprintf(spaceball->phys, "%s/input0", serio->phys);
|
||||
snprintf(spaceball->phys, sizeof(spaceball->phys), "%s/input0", serio->phys);
|
||||
|
||||
input_dev->name = spaceball_names[id];
|
||||
input_dev->phys = spaceball->phys;
|
||||
|
||||
@@ -177,7 +177,7 @@ static int spaceorb_connect(struct serio *serio, struct serio_driver *drv)
|
||||
goto fail;
|
||||
|
||||
spaceorb->dev = input_dev;
|
||||
sprintf(spaceorb->phys, "%s/input0", serio->phys);
|
||||
snprintf(spaceorb->phys, sizeof(spaceorb->phys), "%s/input0", serio->phys);
|
||||
|
||||
input_dev->name = "SpaceTec SpaceOrb 360 / Avenger";
|
||||
input_dev->phys = spaceorb->phys;
|
||||
|
||||
Loaded 20 of 45 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user