Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (58 commits) Input: wacom_w8001 - support pen or touch only devices Input: wacom_w8001 - use __set_bit to set keybits Input: bu21013_ts - fix misuse of logical operation in place of bitop Input: i8042 - add Acer Aspire 5100 to the Dritek list Input: wacom - add support for digitizer in Lenovo W700 Input: psmouse - disable the synaptics extension on OLPC machines Input: psmouse - fix up Synaptics comment Input: synaptics - ignore bogus mt packet Input: synaptics - add multi-finger and semi-mt support Input: synaptics - report clickpad property input: mt: Document interface updates Input: fix double equality sign in uevent Input: introduce device properties hid: egalax: Add support for Wetab (726b) Input: include MT library as source for kerneldoc MAINTAINERS: Update input-mt entry hid: egalax: Add support for Samsung NB30 netbook hid: egalax: Document the new devices in Kconfig hid: egalax: Add support for Wetab hid: egalax: Convert to MT slots ... Fixed up trivial conflict in drivers/input/keyboard/Kconfig
This commit is contained in:
@@ -10,9 +10,11 @@
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_BASENAME ": " fmt
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/input/mt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/random.h>
|
||||
@@ -958,10 +960,8 @@ static int input_attach_handler(struct input_dev *dev, struct input_handler *han
|
||||
|
||||
error = handler->connect(handler, dev, id);
|
||||
if (error && error != -ENODEV)
|
||||
printk(KERN_ERR
|
||||
"input: failed to attach handler %s to device %s, "
|
||||
"error: %d\n",
|
||||
handler->name, kobject_name(&dev->dev.kobj), error);
|
||||
pr_err("failed to attach handler %s to device %s, error: %d\n",
|
||||
handler->name, kobject_name(&dev->dev.kobj), error);
|
||||
|
||||
return error;
|
||||
}
|
||||
@@ -1109,6 +1109,8 @@ static int input_devices_seq_show(struct seq_file *seq, void *v)
|
||||
seq_printf(seq, "%s ", handle->name);
|
||||
seq_putc(seq, '\n');
|
||||
|
||||
input_seq_print_bitmap(seq, "PROP", dev->propbit, INPUT_PROP_MAX);
|
||||
|
||||
input_seq_print_bitmap(seq, "EV", dev->evbit, EV_MAX);
|
||||
if (test_bit(EV_KEY, dev->evbit))
|
||||
input_seq_print_bitmap(seq, "KEY", dev->keybit, KEY_MAX);
|
||||
@@ -1332,11 +1334,26 @@ static ssize_t input_dev_show_modalias(struct device *dev,
|
||||
}
|
||||
static DEVICE_ATTR(modalias, S_IRUGO, input_dev_show_modalias, NULL);
|
||||
|
||||
static int input_print_bitmap(char *buf, int buf_size, unsigned long *bitmap,
|
||||
int max, int add_cr);
|
||||
|
||||
static ssize_t input_dev_show_properties(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct input_dev *input_dev = to_input_dev(dev);
|
||||
int len = input_print_bitmap(buf, PAGE_SIZE, input_dev->propbit,
|
||||
INPUT_PROP_MAX, true);
|
||||
return min_t(int, len, PAGE_SIZE);
|
||||
}
|
||||
static DEVICE_ATTR(properties, S_IRUGO, input_dev_show_properties, NULL);
|
||||
|
||||
static struct attribute *input_dev_attrs[] = {
|
||||
&dev_attr_name.attr,
|
||||
&dev_attr_phys.attr,
|
||||
&dev_attr_uniq.attr,
|
||||
&dev_attr_modalias.attr,
|
||||
&dev_attr_properties.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -1470,7 +1487,7 @@ static int input_add_uevent_bm_var(struct kobj_uevent_env *env,
|
||||
{
|
||||
int len;
|
||||
|
||||
if (add_uevent_var(env, "%s=", name))
|
||||
if (add_uevent_var(env, "%s", name))
|
||||
return -ENOMEM;
|
||||
|
||||
len = input_print_bitmap(&env->buf[env->buflen - 1],
|
||||
@@ -1536,6 +1553,8 @@ static int input_dev_uevent(struct device *device, struct kobj_uevent_env *env)
|
||||
if (dev->uniq)
|
||||
INPUT_ADD_HOTPLUG_VAR("UNIQ=\"%s\"", dev->uniq);
|
||||
|
||||
INPUT_ADD_HOTPLUG_BM_VAR("PROP=", dev->propbit, INPUT_PROP_MAX);
|
||||
|
||||
INPUT_ADD_HOTPLUG_BM_VAR("EV=", dev->evbit, EV_MAX);
|
||||
if (test_bit(EV_KEY, dev->evbit))
|
||||
INPUT_ADD_HOTPLUG_BM_VAR("KEY=", dev->keybit, KEY_MAX);
|
||||
@@ -1724,52 +1743,6 @@ void input_free_device(struct input_dev *dev)
|
||||
}
|
||||
EXPORT_SYMBOL(input_free_device);
|
||||
|
||||
/**
|
||||
* input_mt_create_slots() - create MT input slots
|
||||
* @dev: input device supporting MT events and finger tracking
|
||||
* @num_slots: number of slots used by the device
|
||||
*
|
||||
* This function allocates all necessary memory for MT slot handling in the
|
||||
* input device, and adds ABS_MT_SLOT to the device capabilities. All slots
|
||||
* are initially marked as unused by setting ABS_MT_TRACKING_ID to -1.
|
||||
*/
|
||||
int input_mt_create_slots(struct input_dev *dev, unsigned int num_slots)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!num_slots)
|
||||
return 0;
|
||||
|
||||
dev->mt = kcalloc(num_slots, sizeof(struct input_mt_slot), GFP_KERNEL);
|
||||
if (!dev->mt)
|
||||
return -ENOMEM;
|
||||
|
||||
dev->mtsize = num_slots;
|
||||
input_set_abs_params(dev, ABS_MT_SLOT, 0, num_slots - 1, 0, 0);
|
||||
|
||||
/* Mark slots as 'unused' */
|
||||
for (i = 0; i < num_slots; i++)
|
||||
dev->mt[i].abs[ABS_MT_TRACKING_ID - ABS_MT_FIRST] = -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(input_mt_create_slots);
|
||||
|
||||
/**
|
||||
* input_mt_destroy_slots() - frees the MT slots of the input device
|
||||
* @dev: input device with allocated MT slots
|
||||
*
|
||||
* This function is only needed in error path as the input core will
|
||||
* automatically free the MT slots when the device is destroyed.
|
||||
*/
|
||||
void input_mt_destroy_slots(struct input_dev *dev)
|
||||
{
|
||||
kfree(dev->mt);
|
||||
dev->mt = NULL;
|
||||
dev->mtsize = 0;
|
||||
}
|
||||
EXPORT_SYMBOL(input_mt_destroy_slots);
|
||||
|
||||
/**
|
||||
* input_set_capability - mark device as capable of a certain event
|
||||
* @dev: device that is capable of emitting or accepting event
|
||||
@@ -1819,9 +1792,8 @@ void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int
|
||||
break;
|
||||
|
||||
default:
|
||||
printk(KERN_ERR
|
||||
"input_set_capability: unknown type %u (code %u)\n",
|
||||
type, code);
|
||||
pr_err("input_set_capability: unknown type %u (code %u)\n",
|
||||
type, code);
|
||||
dump_stack();
|
||||
return;
|
||||
}
|
||||
@@ -1903,8 +1875,9 @@ int input_register_device(struct input_dev *dev)
|
||||
return error;
|
||||
|
||||
path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL);
|
||||
printk(KERN_INFO "input: %s as %s\n",
|
||||
dev->name ? dev->name : "Unspecified device", path ? path : "N/A");
|
||||
pr_info("%s as %s\n",
|
||||
dev->name ? dev->name : "Unspecified device",
|
||||
path ? path : "N/A");
|
||||
kfree(path);
|
||||
|
||||
error = mutex_lock_interruptible(&input_mutex);
|
||||
@@ -2186,7 +2159,7 @@ static int __init input_init(void)
|
||||
|
||||
err = class_register(&input_class);
|
||||
if (err) {
|
||||
printk(KERN_ERR "input: unable to register input_dev class\n");
|
||||
pr_err("unable to register input_dev class\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -2196,7 +2169,7 @@ static int __init input_init(void)
|
||||
|
||||
err = register_chrdev(INPUT_MAJOR, "input", &input_fops);
|
||||
if (err) {
|
||||
printk(KERN_ERR "input: unable to register char major %d", INPUT_MAJOR);
|
||||
pr_err("unable to register char major %d", INPUT_MAJOR);
|
||||
goto fail2;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user