Linux Input/HID development
 help / color / mirror / Atom feed
* [PATCH] input - input.h: Add a new switch event
From: Ping Cheng @ 2013-10-03 22:31 UTC (permalink / raw)
  To: linux-input
  Cc: dmitry.torokhov, rydberg, benjamin.tissoires, linux-kernel,
	Ping Cheng

One of Wacom's pen and touch capable models added a switch for
users to turn on/off touch events. We need to report the state of
this switch to userland. But, there is no existing switch event
defined for this purpose. Luckily enough, there is a room for a
new switch event.

Signed-off-by: Ping Cheng <pingc@wacom.com>
---
 include/uapi/linux/input.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h
index d08abf9..d4097b0 100644
--- a/include/uapi/linux/input.h
+++ b/include/uapi/linux/input.h
@@ -855,6 +855,7 @@ struct input_keymap_entry {
 #define SW_FRONT_PROXIMITY	0x0b  /* set = front proximity sensor active */
 #define SW_ROTATE_LOCK		0x0c  /* set = rotate locked/disabled */
 #define SW_LINEIN_INSERT	0x0d  /* set = inserted */
+#define SW_TOUCH_ENABLED	0x0e  /* set = touch switch turned on (touch events off) */
 #define SW_MAX			0x0f
 #define SW_CNT			(SW_MAX+1)
 
-- 
1.8.1.2


^ permalink raw reply related

* Re: [RFC] Input: introduce ABS_MAX2/CNT2 and friends
From: Peter Hutterer @ 2013-10-03 23:32 UTC (permalink / raw)
  To: David Herrmann
  Cc: linux-input, Dmitry Torokhov, Henrik Rydberg, Benjamin Tissoires,
	Jiri Kosina, linux-kernel
In-Reply-To: <1380751836-10829-1-git-send-email-dh.herrmann@gmail.com>

On Thu, Oct 03, 2013 at 12:10:36AM +0200, David Herrmann wrote:
> As we painfully noticed during the 3.12 merge-window our
> EVIOCGABS/EVIOCSABS API is limited to ABS_MAX<=0x3f. We tried several
> hacks to work around it but if we ever decide to increase ABS_MAX, the
> EVIOCSABS ioctl ABI might overflow into the next byte causing horrible
> misinterpretations in the kernel that we cannot catch.
> 
> Therefore, we decided to go with ABS_MAX2/CNT2 and introduce two new
> ioctls to get/set abs-params. They no longer encode the ABS code in the
> ioctl number and thus allow up to 4 billion ABS codes.
> 
> Unfortunately, the uinput API also hard-coded the ABS_CNT value in its
> ABI. To avoid any hacks in uinput, we simply introduce a new
> uinput_user_dev2 to replace the old one. The new API allows growing
> ABS_CNT2 values without any API changes.
> 
> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
> ---
> Hi
> 
> This is only compile-tested but I wanted to get a first revision out to let
> people know what we're working on. Unfortunately, the ABS API has this horribly
> low ABS_MAX limit and we couldn't figure out a way to increase it while keeping
> ABI compatibility.
> 
> Any feedback and review is welcome. And if anyone spots ABI breakage by this
> patch, please let me know. If nothing comes up I will patch libevdev to use the
> new API, write some extensive test-cases and push this forward.
> 
> As a sidenote: I didn't modify joydev to use the new values. Fortunately, the
> joydev API would allow switching to ABS_CNT2 without breaking API, but it would
> limit the new ABS_CNT2 to 16k. This is quite high but nothing compared to the
>  2^32 that we can theoretically support now. If you think 16k ought to be enough
> (probably?) I can adjust the joydev API, too.
> All other kernel users were converted to the new values. Nothing left behind..


just a comment from skimming the patch:
if you need a new uinput abi anyway, can we add the resolution here? it's
sorely needed for some tests. see also the patch Benjamin sent a while ago
("input/uinput: support abs resolution", July 15 2013)

Cheers,
   Peter
 
>  drivers/hid/hid-debug.c                  |   2 +-
>  drivers/hid/hid-input.c                  |   2 +-
>  drivers/input/evdev.c                    |  63 ++++++++++++++-
>  drivers/input/input.c                    |  14 ++--
>  drivers/input/keyboard/goldfish_events.c |   6 +-
>  drivers/input/keyboard/hil_kbd.c         |   2 +-
>  drivers/input/misc/uinput.c              | 128 ++++++++++++++++++++++---------
>  include/linux/hid.h                      |   2 +-
>  include/linux/input.h                    |   6 +-
>  include/linux/mod_devicetable.h          |   2 +-
>  include/uapi/linux/input.h               |  31 +++++++-
>  include/uapi/linux/uinput.h              |  13 ++++
>  12 files changed, 213 insertions(+), 58 deletions(-)
> 
> diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c
> index 8453214..d32fa30 100644
> --- a/drivers/hid/hid-debug.c
> +++ b/drivers/hid/hid-debug.c
> @@ -862,7 +862,7 @@ static const char *relatives[REL_MAX + 1] = {
>  	[REL_WHEEL] = "Wheel",		[REL_MISC] = "Misc",
>  };
>  
> -static const char *absolutes[ABS_CNT] = {
> +static const char *absolutes[ABS_CNT2] = {
>  	[ABS_X] = "X",			[ABS_Y] = "Y",
>  	[ABS_Z] = "Z",			[ABS_RX] = "Rx",
>  	[ABS_RY] = "Ry",		[ABS_RZ] = "Rz",
> diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
> index 8741d95..3e879bf 100644
> --- a/drivers/hid/hid-input.c
> +++ b/drivers/hid/hid-input.c
> @@ -1305,7 +1305,7 @@ static bool hidinput_has_been_populated(struct hid_input *hidinput)
>  	for (i = 0; i < BITS_TO_LONGS(REL_CNT); i++)
>  		r |= hidinput->input->relbit[i];
>  
> -	for (i = 0; i < BITS_TO_LONGS(ABS_CNT); i++)
> +	for (i = 0; i < BITS_TO_LONGS(ABS_CNT2); i++)
>  		r |= hidinput->input->absbit[i];
>  
>  	for (i = 0; i < BITS_TO_LONGS(MSC_CNT); i++)
> diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
> index b6ded17..c76b87e 100644
> --- a/drivers/input/evdev.c
> +++ b/drivers/input/evdev.c
> @@ -635,7 +635,7 @@ static int handle_eviocgbit(struct input_dev *dev,
>  	case      0: bits = dev->evbit;  len = EV_MAX;  break;
>  	case EV_KEY: bits = dev->keybit; len = KEY_MAX; break;
>  	case EV_REL: bits = dev->relbit; len = REL_MAX; break;
> -	case EV_ABS: bits = dev->absbit; len = ABS_MAX; break;
> +	case EV_ABS: bits = dev->absbit; len = ABS_MAX2; break;
>  	case EV_MSC: bits = dev->mscbit; len = MSC_MAX; break;
>  	case EV_LED: bits = dev->ledbit; len = LED_MAX; break;
>  	case EV_SND: bits = dev->sndbit; len = SND_MAX; break;
> @@ -663,6 +663,61 @@ static int handle_eviocgbit(struct input_dev *dev,
>  }
>  #undef OLD_KEY_MAX
>  
> +static int evdev_handle_get_abs2(struct input_dev *dev, void __user *p)
> +{
> +	u32 code;
> +	struct input_absinfo2 __user *pinfo = p;
> +	struct input_absinfo abs;
> +
> +	if (!dev->absinfo)
> +		return -EINVAL;
> +
> +	if (copy_from_user(&code, &pinfo->code, sizeof(code)))
> +		return -EFAULT;
> +
> +	if (code >= ABS_CNT2)
> +		return -EINVAL;
> +
> +	/*
> +	 * Take event lock to ensure that we are not
> +	 * copying data while EVIOCSABS2 changes it.
> +	 * Might be inconsistent, otherwise.
> +	 */
> +	spin_lock_irq(&dev->event_lock);
> +	abs = dev->absinfo[code];
> +	spin_unlock_irq(&dev->event_lock);
> +
> +	if (copy_to_user(&pinfo->info, &abs, sizeof(abs)))
> +		return -EFAULT;
> +
> +	return 0;
> +}
> +
> +static int evdev_handle_set_abs2(struct input_dev *dev, void __user *p)
> +{
> +	struct input_absinfo2 info;
> +
> +	if (!dev->absinfo)
> +		return -EINVAL;
> +
> +	if (copy_from_user(&info, p, sizeof(info)))
> +		return -EFAULT;
> +
> +	if (info.code == ABS_MT_SLOT || info.code >= ABS_CNT2)
> +		return -EINVAL;
> +
> +	/*
> +	 * Take event lock to ensure that we are not
> +	 * changing device parameters in the middle
> +	 * of event.
> +	 */
> +	spin_lock_irq(&dev->event_lock);
> +	dev->absinfo[info.code] = info.info;
> +	spin_unlock_irq(&dev->event_lock);
> +
> +	return 0;
> +}
> +
>  static int evdev_handle_get_keycode(struct input_dev *dev, void __user *p)
>  {
>  	struct input_keymap_entry ke = {
> @@ -890,6 +945,12 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd,
>  		client->clkid = i;
>  		return 0;
>  
> +	case EVIOCGABS2:
> +		return evdev_handle_get_abs2(dev, p);
> +
> +	case EVIOCSABS2:
> +		return evdev_handle_set_abs2(dev, p);
> +
>  	case EVIOCGKEYCODE:
>  		return evdev_handle_get_keycode(dev, p);
>  
> diff --git a/drivers/input/input.c b/drivers/input/input.c
> index c044699..bc88f17 100644
> --- a/drivers/input/input.c
> +++ b/drivers/input/input.c
> @@ -305,7 +305,7 @@ static int input_get_disposition(struct input_dev *dev,
>  		break;
>  
>  	case EV_ABS:
> -		if (is_event_supported(code, dev->absbit, ABS_MAX))
> +		if (is_event_supported(code, dev->absbit, ABS_MAX2))
>  			disposition = input_handle_abs_event(dev, code, &value);
>  
>  		break;
> @@ -474,7 +474,7 @@ EXPORT_SYMBOL(input_inject_event);
>  void input_alloc_absinfo(struct input_dev *dev)
>  {
>  	if (!dev->absinfo)
> -		dev->absinfo = kcalloc(ABS_CNT, sizeof(struct input_absinfo),
> +		dev->absinfo = kcalloc(ABS_CNT2, sizeof(struct input_absinfo),
>  					GFP_KERNEL);
>  
>  	WARN(!dev->absinfo, "%s(): kcalloc() failed?\n", __func__);
> @@ -954,7 +954,7 @@ static const struct input_device_id *input_match_device(struct input_handler *ha
>  		if (!bitmap_subset(id->relbit, dev->relbit, REL_MAX))
>  			continue;
>  
> -		if (!bitmap_subset(id->absbit, dev->absbit, ABS_MAX))
> +		if (!bitmap_subset(id->absbit, dev->absbit, ABS_MAX2))
>  			continue;
>  
>  		if (!bitmap_subset(id->mscbit, dev->mscbit, MSC_MAX))
> @@ -1147,7 +1147,7 @@ static int input_devices_seq_show(struct seq_file *seq, void *v)
>  	if (test_bit(EV_REL, dev->evbit))
>  		input_seq_print_bitmap(seq, "REL", dev->relbit, REL_MAX);
>  	if (test_bit(EV_ABS, dev->evbit))
> -		input_seq_print_bitmap(seq, "ABS", dev->absbit, ABS_MAX);
> +		input_seq_print_bitmap(seq, "ABS", dev->absbit, ABS_MAX2);
>  	if (test_bit(EV_MSC, dev->evbit))
>  		input_seq_print_bitmap(seq, "MSC", dev->mscbit, MSC_MAX);
>  	if (test_bit(EV_LED, dev->evbit))
> @@ -1333,7 +1333,7 @@ static int input_print_modalias(char *buf, int size, struct input_dev *id,
>  	len += input_print_modalias_bits(buf + len, size - len,
>  				'r', id->relbit, 0, REL_MAX);
>  	len += input_print_modalias_bits(buf + len, size - len,
> -				'a', id->absbit, 0, ABS_MAX);
> +				'a', id->absbit, 0, ABS_MAX2);
>  	len += input_print_modalias_bits(buf + len, size - len,
>  				'm', id->mscbit, 0, MSC_MAX);
>  	len += input_print_modalias_bits(buf + len, size - len,
> @@ -1592,7 +1592,7 @@ static int input_dev_uevent(struct device *device, struct kobj_uevent_env *env)
>  	if (test_bit(EV_REL, dev->evbit))
>  		INPUT_ADD_HOTPLUG_BM_VAR("REL=", dev->relbit, REL_MAX);
>  	if (test_bit(EV_ABS, dev->evbit))
> -		INPUT_ADD_HOTPLUG_BM_VAR("ABS=", dev->absbit, ABS_MAX);
> +		INPUT_ADD_HOTPLUG_BM_VAR("ABS=", dev->absbit, ABS_MAX2);
>  	if (test_bit(EV_MSC, dev->evbit))
>  		INPUT_ADD_HOTPLUG_BM_VAR("MSC=", dev->mscbit, MSC_MAX);
>  	if (test_bit(EV_LED, dev->evbit))
> @@ -1924,7 +1924,7 @@ static unsigned int input_estimate_events_per_packet(struct input_dev *dev)
>  
>  	events = mt_slots + 1; /* count SYN_MT_REPORT and SYN_REPORT */
>  
> -	for (i = 0; i < ABS_CNT; i++) {
> +	for (i = 0; i < ABS_CNT2; i++) {
>  		if (test_bit(i, dev->absbit)) {
>  			if (input_is_mt_axis(i))
>  				events += mt_slots;
> diff --git a/drivers/input/keyboard/goldfish_events.c b/drivers/input/keyboard/goldfish_events.c
> index 9f60a2e..9999cea 100644
> --- a/drivers/input/keyboard/goldfish_events.c
> +++ b/drivers/input/keyboard/goldfish_events.c
> @@ -90,8 +90,8 @@ static void events_import_abs_params(struct event_dev *edev)
>  	__raw_writel(PAGE_ABSDATA, addr + REG_SET_PAGE);
>  
>  	count = __raw_readl(addr + REG_LEN) / sizeof(val);
> -	if (count > ABS_MAX)
> -		count = ABS_MAX;
> +	if (count > ABS_MAX2)
> +		count = ABS_MAX2;
>  
>  	for (i = 0; i < count; i++) {
>  		if (!test_bit(i, input_dev->absbit))
> @@ -158,7 +158,7 @@ static int events_probe(struct platform_device *pdev)
>  	events_import_bits(edev, input_dev->evbit, EV_SYN, EV_MAX);
>  	events_import_bits(edev, input_dev->keybit, EV_KEY, KEY_MAX);
>  	events_import_bits(edev, input_dev->relbit, EV_REL, REL_MAX);
> -	events_import_bits(edev, input_dev->absbit, EV_ABS, ABS_MAX);
> +	events_import_bits(edev, input_dev->absbit, EV_ABS, ABS_MAX2);
>  	events_import_bits(edev, input_dev->mscbit, EV_MSC, MSC_MAX);
>  	events_import_bits(edev, input_dev->ledbit, EV_LED, LED_MAX);
>  	events_import_bits(edev, input_dev->sndbit, EV_SND, SND_MAX);
> diff --git a/drivers/input/keyboard/hil_kbd.c b/drivers/input/keyboard/hil_kbd.c
> index 589e3c2..4e4e010 100644
> --- a/drivers/input/keyboard/hil_kbd.c
> +++ b/drivers/input/keyboard/hil_kbd.c
> @@ -387,7 +387,7 @@ static void hil_dev_pointer_setup(struct hil_dev *ptr)
>  					0, HIL_IDD_AXIS_MAX(idd, i - 3), 0, 0);
>  
>  #ifdef TABLET_AUTOADJUST
> -		for (i = 0; i < ABS_MAX; i++) {
> +		for (i = 0; i < ABS_MAX2; i++) {
>  			int diff = input_abs_get_max(input_dev, ABS_X + i) / 10;
>  			input_abs_set_min(input_dev, ABS_X + i,
>  				input_abs_get_min(input_dev, ABS_X + i) + diff);
> diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
> index a0a4bba..72029d6 100644
> --- a/drivers/input/misc/uinput.c
> +++ b/drivers/input/misc/uinput.c
> @@ -311,7 +311,7 @@ static int uinput_validate_absbits(struct input_dev *dev)
>  	unsigned int cnt;
>  	int retval = 0;
>  
> -	for (cnt = 0; cnt < ABS_CNT; cnt++) {
> +	for (cnt = 0; cnt < ABS_CNT2; cnt++) {
>  		int min, max;
>  		if (!test_bit(cnt, dev->absbit))
>  			continue;
> @@ -358,14 +358,15 @@ static int uinput_allocate_device(struct uinput_device *udev)
>  }
>  
>  static int uinput_setup_device(struct uinput_device *udev,
> -			       const char __user *buffer, size_t count)
> +			       struct uinput_user_dev2 *user_dev2,
> +			       size_t abscnt)
>  {
> -	struct uinput_user_dev	*user_dev;
>  	struct input_dev	*dev;
>  	int			i;
>  	int			retval;
>  
> -	if (count != sizeof(struct uinput_user_dev))
> +	/* Ensure name is filled in */
> +	if (!user_dev2->name[0])
>  		return -EINVAL;
>  
>  	if (!udev->dev) {
> @@ -375,37 +376,24 @@ static int uinput_setup_device(struct uinput_device *udev,
>  	}
>  
>  	dev = udev->dev;
> -
> -	user_dev = memdup_user(buffer, sizeof(struct uinput_user_dev));
> -	if (IS_ERR(user_dev))
> -		return PTR_ERR(user_dev);
> -
> -	udev->ff_effects_max = user_dev->ff_effects_max;
> -
> -	/* Ensure name is filled in */
> -	if (!user_dev->name[0]) {
> -		retval = -EINVAL;
> -		goto exit;
> -	}
> +	udev->ff_effects_max = user_dev2->ff_effects_max;
>  
>  	kfree(dev->name);
> -	dev->name = kstrndup(user_dev->name, UINPUT_MAX_NAME_SIZE,
> +	dev->name = kstrndup(user_dev2->name, UINPUT_MAX_NAME_SIZE,
>  			     GFP_KERNEL);
> -	if (!dev->name) {
> -		retval = -ENOMEM;
> -		goto exit;
> -	}
> +	if (!dev->name)
> +		return -ENOMEM;
>  
> -	dev->id.bustype	= user_dev->id.bustype;
> -	dev->id.vendor	= user_dev->id.vendor;
> -	dev->id.product	= user_dev->id.product;
> -	dev->id.version	= user_dev->id.version;
> +	dev->id.bustype = user_dev2->id.bustype;
> +	dev->id.vendor = user_dev2->id.vendor;
> +	dev->id.product = user_dev2->id.product;
> +	dev->id.version = user_dev2->id.version;
>  
> -	for (i = 0; i < ABS_CNT; i++) {
> -		input_abs_set_max(dev, i, user_dev->absmax[i]);
> -		input_abs_set_min(dev, i, user_dev->absmin[i]);
> -		input_abs_set_fuzz(dev, i, user_dev->absfuzz[i]);
> -		input_abs_set_flat(dev, i, user_dev->absflat[i]);
> +	for (i = 0; i < abscnt; i++) {
> +		input_abs_set_max(dev, i, user_dev2->abs[i].max);
> +		input_abs_set_min(dev, i, user_dev2->abs[i].min);
> +		input_abs_set_fuzz(dev, i, user_dev2->abs[i].fuzz);
> +		input_abs_set_flat(dev, i, user_dev2->abs[i].flat);
>  	}
>  
>  	/* check if absmin/absmax/absfuzz/absflat are filled as
> @@ -413,7 +401,7 @@ static int uinput_setup_device(struct uinput_device *udev,
>  	if (test_bit(EV_ABS, dev->evbit)) {
>  		retval = uinput_validate_absbits(dev);
>  		if (retval < 0)
> -			goto exit;
> +			return retval;
>  		if (test_bit(ABS_MT_SLOT, dev->absbit)) {
>  			int nslot = input_abs_get_max(dev, ABS_MT_SLOT) + 1;
>  			input_mt_init_slots(dev, nslot, 0);
> @@ -423,11 +411,72 @@ static int uinput_setup_device(struct uinput_device *udev,
>  	}
>  
>  	udev->state = UIST_SETUP_COMPLETE;
> -	retval = count;
> +	return 0;
> +}
> +
> +static int uinput_setup_device1(struct uinput_device *udev,
> +				const char __user *buffer, size_t count)
> +{
> +	struct uinput_user_dev	*user_dev;
> +	struct uinput_user_dev2	*user_dev2;
> +	int			i;
> +	int			retval;
> +
> +	if (count != sizeof(struct uinput_user_dev))
> +		return -EINVAL;
> +
> +	user_dev = memdup_user(buffer, sizeof(struct uinput_user_dev));
> +	if (IS_ERR(user_dev))
> +		return PTR_ERR(user_dev);
> +
> +	user_dev2 = kmalloc(sizeof(*user_dev2), GFP_KERNEL);
> +	if (!user_dev2) {
> +		kfree(user_dev);
> +		return -ENOMEM;
> +	}
> +
> +	memcpy(user_dev2->name, user_dev->name, UINPUT_MAX_NAME_SIZE);
> +	memcpy(&user_dev2->id, &user_dev->id, sizeof(struct input_id));
> +	user_dev2->ff_effects_max = user_dev->ff_effects_max;
> +
> +	for (i = 0; i < ABS_CNT; ++i) {
> +		user_dev2->abs[i].max = user_dev->absmax[i];
> +		user_dev2->abs[i].min = user_dev->absmin[i];
> +		user_dev2->abs[i].fuzz = user_dev->absfuzz[i];
> +		user_dev2->abs[i].flat = user_dev->absflat[i];
> +	}
> +
> +	retval = uinput_setup_device(udev, user_dev2, ABS_CNT);
>  
> - exit:
>  	kfree(user_dev);
> -	return retval;
> +	kfree(user_dev2);
> +
> +	return retval ? retval : count;
> +}
> +
> +static int uinput_setup_device2(struct uinput_device *udev,
> +			       const char __user *buffer, size_t count)
> +{
> +	struct uinput_user_dev2	*user_dev2;
> +	int			retval;
> +	size_t			off, abscnt;
> +
> +	/* The first revision of "uinput_user_dev2" is bigger than
> +	 * "uinput_user_dev" and growing. Disallow any smaller payloads. */
> +	if (count <= sizeof(struct uinput_user_dev))
> +		return -EINVAL;
> +
> +	user_dev2 = memdup_user(buffer, count);
> +	if (IS_ERR(user_dev2))
> +		return PTR_ERR(user_dev2);
> +
> +	off = offsetof(struct uinput_user_dev2, abs);
> +	abscnt = (count - off) / sizeof(struct uinput_user_absinfo);
> +	retval = uinput_setup_device(udev, user_dev2, abscnt);
> +
> +	kfree(user_dev2);
> +
> +	return retval ? retval : count;
>  }
>  
>  static ssize_t uinput_inject_event(struct uinput_device *udev,
> @@ -459,9 +508,12 @@ static ssize_t uinput_write(struct file *file, const char __user *buffer,
>  	if (retval)
>  		return retval;
>  
> -	retval = udev->state == UIST_CREATED ?
> -			uinput_inject_event(udev, buffer, count) :
> -			uinput_setup_device(udev, buffer, count);
> +	if (udev->state == UIST_CREATED)
> +		retval = uinput_inject_event(udev, buffer, count);
> +	else if (count <= sizeof(struct uinput_user_dev))
> +		retval = uinput_setup_device1(udev, buffer, count);
> +	else
> +		retval = uinput_setup_device2(udev, buffer, count);
>  
>  	mutex_unlock(&udev->mutex);
>  
> @@ -702,7 +754,7 @@ static long uinput_ioctl_handler(struct file *file, unsigned int cmd,
>  			break;
>  
>  		case UI_SET_ABSBIT:
> -			retval = uinput_set_bit(arg, absbit, ABS_MAX);
> +			retval = uinput_set_bit(arg, absbit, ABS_MAX2);
>  			break;
>  
>  		case UI_SET_MSCBIT:
> diff --git a/include/linux/hid.h b/include/linux/hid.h
> index 31b9d29..c21d8bb 100644
> --- a/include/linux/hid.h
> +++ b/include/linux/hid.h
> @@ -828,7 +828,7 @@ static inline void hid_map_usage(struct hid_input *hidinput,
>  	switch (type) {
>  	case EV_ABS:
>  		*bit = input->absbit;
> -		*max = ABS_MAX;
> +		*max = ABS_MAX2;
>  		break;
>  	case EV_REL:
>  		*bit = input->relbit;
> diff --git a/include/linux/input.h b/include/linux/input.h
> index 82ce323..c6add6f 100644
> --- a/include/linux/input.h
> +++ b/include/linux/input.h
> @@ -129,7 +129,7 @@ struct input_dev {
>  	unsigned long evbit[BITS_TO_LONGS(EV_CNT)];
>  	unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
>  	unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
> -	unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
> +	unsigned long absbit[BITS_TO_LONGS(ABS_CNT2)];
>  	unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
>  	unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
>  	unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
> @@ -210,8 +210,8 @@ struct input_dev {
>  #error "REL_MAX and INPUT_DEVICE_ID_REL_MAX do not match"
>  #endif
>  
> -#if ABS_MAX != INPUT_DEVICE_ID_ABS_MAX
> -#error "ABS_MAX and INPUT_DEVICE_ID_ABS_MAX do not match"
> +#if ABS_MAX2 != INPUT_DEVICE_ID_ABS_MAX
> +#error "ABS_MAX2 and INPUT_DEVICE_ID_ABS_MAX do not match"
>  #endif
>  
>  #if MSC_MAX != INPUT_DEVICE_ID_MSC_MAX
>lt  diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> index 45e9214..329aa30 100644
> --- a/include/linux/mod_devicetable.h
> +++ b/include/linux/mod_devicetable.h
> @@ -277,7 +277,7 @@ struct pcmcia_device_id {
>  #define INPUT_DEVICE_ID_KEY_MIN_INTERESTING	0x71
>  #define INPUT_DEVICE_ID_KEY_MAX		0x2ff
>  #define INPUT_DEVICE_ID_REL_MAX		0x0f
> -#define INPUT_DEVICE_ID_ABS_MAX		0x3f
> +#define INPUT_DEVICE_ID_ABS_MAX		0x4f
>  #define INPUT_DEVICE_ID_MSC_MAX		0x07
>  #define INPUT_DEVICE_ID_LED_MAX		0x0f
>  #define INPUT_DEVICE_ID_SND_MAX		0x07
> diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h
> index a372627..4a6082a 100644
> --- a/include/uapi/linux/input.h
> +++ b/include/uapi/linux/input.h
> @@ -74,6 +74,21 @@ struct input_absinfo {
>  };
>  
>  /**
> + * struct input_absinfo2 - used by EVIOC[G/S]ABS2 ioctls
> + * @code: ABS code to query
> + * @info: absinfo structure to get/set abs parameters for @code
> + *
> + * This structure is used by the new EVIOC[G/S]ABS2 ioctls which
> + * do the same as the old EVIOC[G/S]ABS ioctls but avoid encoding
> + * the ABS code in the ioctl number. This allows a much wider
> + * range of ABS codes.
> + */
> +struct input_absinfo2 {
> +	__u32 code;
> +	struct input_absinfo info;
> +};
> +
> +/**
>   * struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls
>   * @scancode: scancode represented in machine-endian form.
>   * @len: length of the scancode that resides in @scancode buffer.
> @@ -153,6 +168,8 @@ struct input_keymap_entry {
>  
>  #define EVIOCGRAB		_IOW('E', 0x90, int)			/* Grab/Release device */
>  #define EVIOCREVOKE		_IOW('E', 0x91, int)			/* Revoke device access */
> +#define EVIOCGABS2		_IOR('E', 0x92, struct input_absinfo2)	/* get abs value/limits */
> +#define EVIOCSABS2		_IOW('E', 0x93, struct input_absinfo2)	/* set abs value/limits */
>  
>  #define EVIOCSCLOCKID		_IOW('E', 0xa0, int)			/* Set clockid to be used for timestamps */
>  
> @@ -832,11 +849,23 @@ struct input_keymap_entry {
>  #define ABS_MT_TOOL_X		0x3c	/* Center X tool position */
>  #define ABS_MT_TOOL_Y		0x3d	/* Center Y tool position */
>  
> -
> +/*
> + * ABS_MAX/CNT is limited to a maximum of 0x3f due to the design of EVIOCGABS
> + * and EVIOCSABS ioctls. Other kernel APIs like uinput also hardcoded it. Do
> + * not modify this value and instead use the extended ABS_MAX2/CNT2 API.
> + */
>  #define ABS_MAX			0x3f
>  #define ABS_CNT			(ABS_MAX+1)
>  
>  /*
> + * Due to API restrictions the legacy evdev API only supports ABS values up to
> + * ABS_MAX/CNT. Use the extended *ABS2 ioctls to operate on any ABS values in
> + * between ABS_MAX and ABS_MAX2.
> + */
> +#define ABS_MAX2		0x4f
> +#define ABS_CNT2		(ABS_MAX2+1)
> +
> +/*
>   * Switch events
>   */
>  
> diff --git a/include/uapi/linux/uinput.h b/include/uapi/linux/uinput.h
> index fe46431..124e20c 100644
> --- a/include/uapi/linux/uinput.h
> +++ b/include/uapi/linux/uinput.h
> @@ -134,4 +134,17 @@ struct uinput_user_dev {
>  	__s32 absfuzz[ABS_CNT];
 >  	__s32 absflat[ABS_CNT];
>  };
> +
> +struct uinput_user_dev2 {
> +	char name[UINPUT_MAX_NAME_SIZE];
> +	struct input_id id;
> +	__u32 ff_effects_max;
> +	struct uinput_user_absinfo {
> +		__s32 max;
> +		__s32 min;
> +		__s32 fuzz;
> +		__s32 flat;
> +	} abs[ABS_CNT2];
> +};
> +
>  #endif /* _UAPI__UINPUT_H_ */
> -- 
> 1.8.4
> 

^ permalink raw reply

* Re: [PATCH] input - input.h: Add a new switch event
From: Peter Hutterer @ 2013-10-03 23:33 UTC (permalink / raw)
  To: Ping Cheng
  Cc: linux-input, dmitry.torokhov, rydberg, benjamin.tissoires,
	linux-kernel, Ping Cheng
In-Reply-To: <1380839467-27264-1-git-send-email-pingc@wacom.com>

On Thu, Oct 03, 2013 at 03:31:07PM -0700, Ping Cheng wrote:
> One of Wacom's pen and touch capable models added a switch for
> users to turn on/off touch events. We need to report the state of
> this switch to userland. But, there is no existing switch event
> defined for this purpose. Luckily enough, there is a room for a
> new switch event.
> 
> Signed-off-by: Ping Cheng <pingc@wacom.com>
> ---
>  include/uapi/linux/input.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h
> index d08abf9..d4097b0 100644
> --- a/include/uapi/linux/input.h
> +++ b/include/uapi/linux/input.h
> @@ -855,6 +855,7 @@ struct input_keymap_entry {
>  #define SW_FRONT_PROXIMITY	0x0b  /* set = front proximity sensor active */
>  #define SW_ROTATE_LOCK		0x0c  /* set = rotate locked/disabled */
>  #define SW_LINEIN_INSERT	0x0d  /* set = inserted */
> +#define SW_TOUCH_ENABLED	0x0e  /* set = touch switch turned on (touch events off) */
>  #define SW_MAX			0x0f
>  #define SW_CNT			(SW_MAX+1)
>  
> -- 
> 1.8.1.2

Acked-by: Peter Hutterer <peter.hutterer@who-t.net> for the principle,
though I think SW_TOUCH would be enough, given that the switch already
communicates on/off.

Cheers,
   Peter



^ permalink raw reply

* Re: [PATCH] input - input.h: Add a new switch event
From: Chris Bagwell @ 2013-10-04  2:48 UTC (permalink / raw)
  To: Ping Cheng
  Cc: linux-input@vger.kernel.org, Dmitry Torokhov, Henrik Rydberg,
	Benjamin Tissoires, linux-kernel@vger.kernel.org, Ping Cheng
In-Reply-To: <1380839467-27264-1-git-send-email-pingc@wacom.com>

On Thu, Oct 3, 2013 at 5:31 PM, Ping Cheng <pinglinux@gmail.com> wrote:
> One of Wacom's pen and touch capable models added a switch for
> users to turn on/off touch events. We need to report the state of
> this switch to userland. But, there is no existing switch event
> defined for this purpose. Luckily enough, there is a room for a
> new switch event.

It is a switch so hard to argue against adding it this way... but I
also want to point out existing feature to consider.

Touchpads on several laptops have either a single touchpad toggle
button or a touchpad switch that serve same basic purpose.  Most of
these switches are hooked up as keys and controlled by platform/x86
driver or udev.

Most platform/x86 drivers map these "keys" to KEY_TOUCHPAD_TOGGLE,
KEY_TOUCHPAD_ON, and KEY_TOUCHPAD_OFF.  Since those don't make it to
X, most udev keymaps instead use f21, f22, and f23 for same purpose.

As long as this is a touch+tablet that looks like a touchpad then
using those keys will cause gnome-settings-daemon to give a nice OSD
touchpad status when switch is moved and will also enable/disable the
touchpad using "Device Enabled" X property.

On the down side, I think these keys are treated as system wide
disable of all touchpads.  Having a Switch reported against the device
its controlling (as apposed to above which is reported over different
input then touchpad) would allow user land an easy way to know to only
disable the single device.

Chris

>
> Signed-off-by: Ping Cheng <pingc@wacom.com>
> ---
>  include/uapi/linux/input.h | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h
> index d08abf9..d4097b0 100644
> --- a/include/uapi/linux/input.h
> +++ b/include/uapi/linux/input.h
> @@ -855,6 +855,7 @@ struct input_keymap_entry {
>  #define SW_FRONT_PROXIMITY     0x0b  /* set = front proximity sensor active */
>  #define SW_ROTATE_LOCK         0x0c  /* set = rotate locked/disabled */
>  #define SW_LINEIN_INSERT       0x0d  /* set = inserted */
> +#define SW_TOUCH_ENABLED       0x0e  /* set = touch switch turned on (touch events off) */
>  #define SW_MAX                 0x0f
>  #define SW_CNT                 (SW_MAX+1)
>
> --
> 1.8.1.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [PATCH] input: i8042 - add PNP modaliases
From: Tom Gundersen @ 2013-10-04 12:26 UTC (permalink / raw)
  To: linux-input@vger.kernel.org
  Cc: LKML, Tom Gundersen, Matthew Garrett, Dmitry Torokhov
In-Reply-To: <1378286856-6384-1-git-send-email-teg@jklm.no>

On Wed, Sep 4, 2013 at 11:27 AM, Tom Gundersen <teg@jklm.no> wrote:
> This allows the module to be autoloaded in the common case.
>
> In order to work on non-PnP systems the module should be compiled in or loaded
> unconditionally at boot (c.f. modules-load.d(5)), as before.
>
> Cc: Matthew Garrett <mjg59@srcf.ucam.org>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Signed-off-by: Tom Gundersen <teg@jklm.no>
> --


Hi Dmitry,

Any comments on this? Any chance of having this (and the two patches
dropping EXPERT=y requirements) included for 3.13 (or even 3.12 if it
is not too late for this kind of stuff)? Let me know if I should
resend the three patches.

Cheers,

Tom

> This appears to work for me (though I don't have the real hardware to test), I get the following aliases:
> alias:          acpi*:CPQA0D7:*
> alias:          pnp:dCPQA0D7*
> alias:          acpi*:PNP0345:*
> alias:          pnp:dPNP0345*
> alias:          acpi*:PNP0344:*
> alias:          pnp:dPNP0344*
> alias:          acpi*:PNP0343:*
> alias:          pnp:dPNP0343*
> alias:          acpi*:PNP0320:*
> alias:          pnp:dPNP0320*
> alias:          acpi*:PNP030B:*
> alias:          pnp:dPNP030b*
> alias:          acpi*:PNP030A:*
> alias:          pnp:dPNP030a*
> alias:          acpi*:PNP0309:*
> alias:          pnp:dPNP0309*
> alias:          acpi*:PNP0306:*
> alias:          pnp:dPNP0306*
> alias:          acpi*:PNP0305:*
> alias:          pnp:dPNP0305*
> alias:          acpi*:PNP0304:*
> alias:          pnp:dPNP0304*
> alias:          acpi*:PNP0303:*
> alias:          pnp:dPNP0303*
> alias:          acpi*:PNP0302:*
> alias:          pnp:dPNP0302*
> alias:          acpi*:PNP0301:*
> alias:          pnp:dPNP0301*
> alias:          acpi*:PNP0300:*
> alias:          pnp:dPNP0300*
>
>  drivers/input/serio/i8042-x86ia64io.h | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
> index 5f306f7..0ec9abb 100644
> --- a/drivers/input/serio/i8042-x86ia64io.h
> +++ b/drivers/input/serio/i8042-x86ia64io.h
> @@ -765,6 +765,7 @@ static struct pnp_device_id pnp_kbd_devids[] = {
>         { .id = "CPQA0D7", .driver_data = 0 },
>         { .id = "", },
>  };
> +MODULE_DEVICE_TABLE(pnp, pnp_kbd_devids);
>
>  static struct pnp_driver i8042_pnp_kbd_driver = {
>         .name           = "i8042 kbd",
> @@ -786,6 +787,7 @@ static struct pnp_device_id pnp_aux_devids[] = {
>         { .id = "SYN0801", .driver_data = 0 },
>         { .id = "", },
>  };
> +MODULE_DEVICE_TABLE(pnp, pnp_aux_devids);
>
>  static struct pnp_driver i8042_pnp_aux_driver = {
>         .name           = "i8042 aux",
> --
> 1.8.4
>

^ permalink raw reply

* [PATCH v2 0/2] rotary-encoder: Add new interruption handler
From: Ezequiel Garcia @ 2013-10-04 12:53 UTC (permalink / raw)
  To: linux-kernel, linux-input; +Cc: Ezequiel Garcia, Daniel Mack, Dmitry Torokhov

Some rotary-encoder devices (such as those with detents) are capable
of producing a stable event on each step. This simple patch adds support
for this case, by implementing a new interruption handler.

The handler needs only detect the direction of the turn and generate
an event according to this detection.

We encode the previous and the current state, and then use the sum of them
to decide on the direction of the turn, according to the following simple
table:

Previous state + currrent state	| Movement
==========================================
	0b1101			| clockwise
	0b0100			|   ..
	0b0010			|   ..
	0b1011			|   ..
==========================================
	0b1110			| counter-clockwise
	0b0111			|   ..
	0b0001			|   ..
	0b1000			|   ..

(The other sumed values are considered illegal)

This calculation is based on some previous work found at this blog:

  http://bildr.org/2012/08/rotary-encoder-arduino/

The result is a seemingly very robust behavior, with a truly simple
implementation, that produces an event on each turn of the device.

Thanks!

Ezequiel Garcia (2):
  Input: rotary-encoder: Add 'stepped' irq handler
  input: rotary-encoder: Add 'on-each-step' to binding documentation

 .../devicetree/bindings/input/rotary-encoder.txt   |  1 +
 drivers/input/misc/rotary_encoder.c                | 41 ++++++++++++++++++++++
 include/linux/rotary_encoder.h                     |  1 +
 3 files changed, 43 insertions(+)

-- 
1.8.1.5

^ permalink raw reply

* [PATCH v2 1/2] Input: rotary-encoder: Add 'stepped' irq handler
From: Ezequiel Garcia @ 2013-10-04 12:53 UTC (permalink / raw)
  To: linux-kernel, linux-input; +Cc: Ezequiel Garcia, Daniel Mack, Dmitry Torokhov
In-Reply-To: <1380891203-17617-1-git-send-email-ezequiel@vanguardiasur.com.ar>

Some rotary-encoder devices (such as those with detents) are capable
of producing a stable event on each step. This commit adds support
for this case, by implementing a new interruption handler.

The handler needs only detect the direction of the turn and generate
an event according to this detection.

Cc: Daniel Mack <zonque@gmail.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
---
v1->v2:
  * Add DT property handling
  * Replace binary representation by hexa-decimal in the sum encoding

 drivers/input/misc/rotary_encoder.c | 41 +++++++++++++++++++++++++++++++++++++
 include/linux/rotary_encoder.h      |  1 +
 2 files changed, 42 insertions(+)

diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c
index 5b1aff8..6c7a554 100644
--- a/drivers/input/misc/rotary_encoder.c
+++ b/drivers/input/misc/rotary_encoder.c
@@ -117,6 +117,42 @@ static irqreturn_t rotary_encoder_irq(int irq, void *dev_id)
 	return IRQ_HANDLED;
 }
 
+static irqreturn_t rotary_encoder_stepped_irq(int irq, void *dev_id)
+{
+	struct rotary_encoder *encoder = dev_id;
+	int state;
+	unsigned char sum;
+
+	state = rotary_encoder_get_state(encoder->pdata);
+
+	/*
+	 * We encode the previous and the current state using a byte.
+	 * The previous state in the MSB nibble, the current state in the LSB
+	 * nibble. Then use a table to decide the direction of the turn.
+	 */
+	sum = (encoder->last_stable << 4) + state;
+	switch (sum) {
+	case 0x31:
+	case 0x10:
+	case 0x02:
+	case 0x23:
+		encoder->dir = 0; /* clockwise */
+		break;
+	/*
+	 * TODO: Add the other case, and the illegal values should
+	 * say a WARN (it's a BUG, but we won't stop the kernel for it :)
+	 */
+	default:
+		encoder->dir = 1;
+	}
+
+	rotary_encoder_report_event(encoder);
+
+	encoder->last_stable = state;
+
+	return IRQ_HANDLED;
+}
+
 static irqreturn_t rotary_encoder_half_period_irq(int irq, void *dev_id)
 {
 	struct rotary_encoder *encoder = dev_id;
@@ -180,6 +216,8 @@ static struct rotary_encoder_platform_data *rotary_encoder_parse_dt(struct devic
 					"rotary-encoder,rollover", NULL);
 	pdata->half_period = !!of_get_property(np,
 					"rotary-encoder,half-period", NULL);
+	pdata->on_each_step = !!of_get_property(np,
+					"rotary-encoder,on-each-step", NULL);
 
 	return pdata;
 }
@@ -254,6 +292,9 @@ static int rotary_encoder_probe(struct platform_device *pdev)
 	if (pdata->half_period) {
 		handler = &rotary_encoder_half_period_irq;
 		encoder->last_stable = rotary_encoder_get_state(pdata);
+	} else if (pdata->on_each_step) {
+		handler = &rotary_encoder_stepped_irq;
+		encoder->last_stable = rotary_encoder_get_state(pdata);
 	} else {
 		handler = &rotary_encoder_irq;
 	}
diff --git a/include/linux/rotary_encoder.h b/include/linux/rotary_encoder.h
index 3f594dc..499f6f7 100644
--- a/include/linux/rotary_encoder.h
+++ b/include/linux/rotary_encoder.h
@@ -11,6 +11,7 @@ struct rotary_encoder_platform_data {
 	bool relative_axis;
 	bool rollover;
 	bool half_period;
+	bool on_each_step;
 };
 
 #endif /* __ROTARY_ENCODER_H__ */
-- 
1.8.1.5

^ permalink raw reply related

* [PATCH v2 2/2] input: rotary-encoder: Add 'on-each-step' to binding documentation
From: Ezequiel Garcia @ 2013-10-04 12:53 UTC (permalink / raw)
  To: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-input-u79uwXL29TY76Z2rM5mHXA
  Cc: Ezequiel Garcia, Daniel Mack, Dmitry Torokhov, Rob Herring,
	devicetree-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1380891203-17617-1-git-send-email-ezequiel-30ULvvUtt6G51wMPkGsGjgyUoB5FGQPZ@public.gmane.org>

The driver now supports a new mode to handle the interruptions generated
by the device: on this new mode an input event is generated on each step
(i.e. on each IRQ). Therefore, add a new DT property, to select the
mode: 'rotary-encoder,on-each-step'.

Cc: Daniel Mack <zonque-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Dmitry Torokhov <dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Signed-off-by: Ezequiel Garcia <ezequiel-30ULvvUtt6G51wMPkGsGjgyUoB5FGQPZ@public.gmane.org>
---
I'm not at all happy with this DT binding as it's way to customized
for the current driver. For instance, if we want to support mapping
key events (or better arbitrary linux-input event types) it seems
there's no easy way to fix the binding.

Maybe a better way of handling the different 'modes' is through
compatible strings?

I'm not really sure, so I hope the DT guys have some comment on this.

 Documentation/devicetree/bindings/input/rotary-encoder.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/input/rotary-encoder.txt b/Documentation/devicetree/bindings/input/rotary-encoder.txt
index 3315495..b89e38d 100644
--- a/Documentation/devicetree/bindings/input/rotary-encoder.txt
+++ b/Documentation/devicetree/bindings/input/rotary-encoder.txt
@@ -15,6 +15,7 @@ Optional properties:
 - rotary-encoder,rollover: Automatic rollove when the rotary value becomes
   greater than the specified steps or smaller than 0. For absolute axis only.
 - rotary-encoder,half-period: Makes the driver work on half-period mode.
+- rotary-encoder,on-each-step: Makes the driver send an event on each step.
 
 See Documentation/input/rotary-encoder.txt for more information.
 
-- 
1.8.1.5

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related

* Re: [PATCH v2 1/2] Input: rotary-encoder: Add 'stepped' irq handler
From: Daniel Mack @ 2013-10-04 13:18 UTC (permalink / raw)
  To: Ezequiel Garcia; +Cc: linux-kernel, linux-input, Dmitry Torokhov
In-Reply-To: <1380891203-17617-2-git-send-email-ezequiel@vanguardiasur.com.ar>

On 04.10.2013 14:53, Ezequiel Garcia wrote:
> Some rotary-encoder devices (such as those with detents) are capable
> of producing a stable event on each step. This commit adds support
> for this case, by implementing a new interruption handler.
> 
> The handler needs only detect the direction of the turn and generate
> an event according to this detection.

I think you can squash patch 2/2 into this one. It doesn't make much
sense to have a one-liner patch to just update the documenation separately.

Other than that, the code looks fine to me.

  Acked-by: Daniel Mack <zonque@gmail.com>


Thanks,
Daniel


> 
> Cc: Daniel Mack <zonque@gmail.com>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
> ---
> v1->v2:
>   * Add DT property handling
>   * Replace binary representation by hexa-decimal in the sum encoding
> 
>  drivers/input/misc/rotary_encoder.c | 41 +++++++++++++++++++++++++++++++++++++
>  include/linux/rotary_encoder.h      |  1 +
>  2 files changed, 42 insertions(+)
> 
> diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c
> index 5b1aff8..6c7a554 100644
> --- a/drivers/input/misc/rotary_encoder.c
> +++ b/drivers/input/misc/rotary_encoder.c
> @@ -117,6 +117,42 @@ static irqreturn_t rotary_encoder_irq(int irq, void *dev_id)
>  	return IRQ_HANDLED;
>  }
>  
> +static irqreturn_t rotary_encoder_stepped_irq(int irq, void *dev_id)
> +{
> +	struct rotary_encoder *encoder = dev_id;
> +	int state;
> +	unsigned char sum;
> +
> +	state = rotary_encoder_get_state(encoder->pdata);
> +
> +	/*
> +	 * We encode the previous and the current state using a byte.
> +	 * The previous state in the MSB nibble, the current state in the LSB
> +	 * nibble. Then use a table to decide the direction of the turn.
> +	 */
> +	sum = (encoder->last_stable << 4) + state;
> +	switch (sum) {
> +	case 0x31:
> +	case 0x10:
> +	case 0x02:
> +	case 0x23:
> +		encoder->dir = 0; /* clockwise */
> +		break;
> +	/*
> +	 * TODO: Add the other case, and the illegal values should
> +	 * say a WARN (it's a BUG, but we won't stop the kernel for it :)
> +	 */
> +	default:
> +		encoder->dir = 1;
> +	}
> +
> +	rotary_encoder_report_event(encoder);
> +
> +	encoder->last_stable = state;
> +
> +	return IRQ_HANDLED;
> +}
> +
>  static irqreturn_t rotary_encoder_half_period_irq(int irq, void *dev_id)
>  {
>  	struct rotary_encoder *encoder = dev_id;
> @@ -180,6 +216,8 @@ static struct rotary_encoder_platform_data *rotary_encoder_parse_dt(struct devic
>  					"rotary-encoder,rollover", NULL);
>  	pdata->half_period = !!of_get_property(np,
>  					"rotary-encoder,half-period", NULL);
> +	pdata->on_each_step = !!of_get_property(np,
> +					"rotary-encoder,on-each-step", NULL);
>  
>  	return pdata;
>  }
> @@ -254,6 +292,9 @@ static int rotary_encoder_probe(struct platform_device *pdev)
>  	if (pdata->half_period) {
>  		handler = &rotary_encoder_half_period_irq;
>  		encoder->last_stable = rotary_encoder_get_state(pdata);
> +	} else if (pdata->on_each_step) {
> +		handler = &rotary_encoder_stepped_irq;
> +		encoder->last_stable = rotary_encoder_get_state(pdata);
>  	} else {
>  		handler = &rotary_encoder_irq;
>  	}
> diff --git a/include/linux/rotary_encoder.h b/include/linux/rotary_encoder.h
> index 3f594dc..499f6f7 100644
> --- a/include/linux/rotary_encoder.h
> +++ b/include/linux/rotary_encoder.h
> @@ -11,6 +11,7 @@ struct rotary_encoder_platform_data {
>  	bool relative_axis;
>  	bool rollover;
>  	bool half_period;
> +	bool on_each_step;
>  };
>  
>  #endif /* __ROTARY_ENCODER_H__ */
> 


^ permalink raw reply

* Re: [PATCH v2 2/2] input: rotary-encoder: Add 'on-each-step' to binding documentation
From: Mark Rutland @ 2013-10-04 13:19 UTC (permalink / raw)
  To: Ezequiel Garcia
  Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org,
	Daniel Mack, Dmitry Torokhov, rob.herring@calxeda.com,
	devicetree@vger.kernel.org
In-Reply-To: <1380891203-17617-3-git-send-email-ezequiel@vanguardiasur.com.ar>

On Fri, Oct 04, 2013 at 01:53:23PM +0100, Ezequiel Garcia wrote:
> The driver now supports a new mode to handle the interruptions generated
> by the device: on this new mode an input event is generated on each step
> (i.e. on each IRQ). Therefore, add a new DT property, to select the
> mode: 'rotary-encoder,on-each-step'.
> 
> Cc: Daniel Mack <zonque@gmail.com>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Rob Herring <rob.herring@calxeda.com>
> Cc: devicetree@vger.kernel.org
> Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
> ---
> I'm not at all happy with this DT binding as it's way to customized
> for the current driver. For instance, if we want to support mapping
> key events (or better arbitrary linux-input event types) it seems
> there's no easy way to fix the binding.
> 
> Maybe a better way of handling the different 'modes' is through
> compatible strings?

I'd prefer not to have more pseudo-devices in DT, and would prefer not
to have compatible strings that boil down to driver options. We end up
just embedding a tonne of Linux-specific driver configuration in the DT
rather than describing hardware.

That said, I'm not sure what the best solution is here.

> 
> I'm not really sure, so I hope the DT guys have some comment on this.
> 
>  Documentation/devicetree/bindings/input/rotary-encoder.txt | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/Documentation/devicetree/bindings/input/rotary-encoder.txt b/Documentation/devicetree/bindings/input/rotary-encoder.txt
> index 3315495..b89e38d 100644
> --- a/Documentation/devicetree/bindings/input/rotary-encoder.txt
> +++ b/Documentation/devicetree/bindings/input/rotary-encoder.txt
> @@ -15,6 +15,7 @@ Optional properties:
>  - rotary-encoder,rollover: Automatic rollove when the rotary value becomes
>    greater than the specified steps or smaller than 0. For absolute axis only.
>  - rotary-encoder,half-period: Makes the driver work on half-period mode.
> +- rotary-encoder,on-each-step: Makes the driver send an event on each step.

Could this not be something requested at runtime?

Could you explain what you want to achieve with this? -- what events do
you want to occur when, to be handled in what way?

Cheers,
Mark.

^ permalink raw reply

* Re: [PATCH v2 2/2] input: rotary-encoder: Add 'on-each-step' to binding documentation
From: Ezequiel Garcia @ 2013-10-04 14:09 UTC (permalink / raw)
  To: Mark Rutland
  Cc: Ezequiel Garcia, linux-kernel@vger.kernel.org,
	linux-input@vger.kernel.org, Daniel Mack, Dmitry Torokhov,
	rob.herring@calxeda.com, devicetree
In-Reply-To: <20131004131956.GE6999@e106331-lin.cambridge.arm.com>

On Fri, Oct 04, 2013 at 02:19:56PM +0100, Mark Rutland wrote:
> On Fri, Oct 04, 2013 at 01:53:23PM +0100, Ezequiel Garcia wrote:
> > The driver now supports a new mode to handle the interruptions generated
> > by the device: on this new mode an input event is generated on each step
> > (i.e. on each IRQ). Therefore, add a new DT property, to select the
> > mode: 'rotary-encoder,on-each-step'.
> > 
> > Cc: Daniel Mack <zonque@gmail.com>
> > Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > Cc: Rob Herring <rob.herring@calxeda.com>
> > Cc: devicetree@vger.kernel.org
> > Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
> > ---
> > I'm not at all happy with this DT binding as it's way to customized
> > for the current driver. For instance, if we want to support mapping
> > key events (or better arbitrary linux-input event types) it seems
> > there's no easy way to fix the binding.
> > 
> > Maybe a better way of handling the different 'modes' is through
> > compatible strings?
> 
> I'd prefer not to have more pseudo-devices in DT, and would prefer not
> to have compatible strings that boil down to driver options. We end up
> just embedding a tonne of Linux-specific driver configuration in the DT
> rather than describing hardware.
> 
> That said, I'm not sure what the best solution is here.
> 
> > 
> > I'm not really sure, so I hope the DT guys have some comment on this.
> > 
> >  Documentation/devicetree/bindings/input/rotary-encoder.txt | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/input/rotary-encoder.txt b/Documentation/devicetree/bindings/input/rotary-encoder.txt
> > index 3315495..b89e38d 100644
> > --- a/Documentation/devicetree/bindings/input/rotary-encoder.txt
> > +++ b/Documentation/devicetree/bindings/input/rotary-encoder.txt
> > @@ -15,6 +15,7 @@ Optional properties:
> >  - rotary-encoder,rollover: Automatic rollove when the rotary value becomes
> >    greater than the specified steps or smaller than 0. For absolute axis only.
> >  - rotary-encoder,half-period: Makes the driver work on half-period mode.
> > +- rotary-encoder,on-each-step: Makes the driver send an event on each step.
> 
> Could this not be something requested at runtime?
> 

Sure. The different modes:

* default (no option)
* rotary-encoder,half-period
* rotary-encoder,on-each-step

Just map to different interruption handlers. I don't have any other
rotary-encoder device, so I'm not at all sure what's the use of the
other two cases.
My particular device is detented, and produces a 'stable' event on each
step (i.e on each IRQ).

Regarding the runtime specification: you mean as a module parameter?
That should be trivial to add, no?

> Could you explain what you want to achieve with this? -- what events do
> you want to occur when, to be handled in what way?
> 

Hm.. maybe I should have added the binding to the 1/2 patch and CCed
everybody involved for better context.

Anyway, I hope the above is clearer, I'm not really sure how to specify
the details in the DT binding, since it's a specific interruption handler
for this class of encoder devices (stable on each step).

That said, I really hope I'm crafting a generic solution and not some
tailor-made implementation that just happens to match my use case.

The input maintainer's opinion on this would be valuable.
-- 
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [PATCH 2/2] Input: wacom - add support for three new Intuos devices
From: Jason Gerecke @ 2013-10-04 16:47 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: Ping Cheng, Linux Input, Chris Bagwell, Ping Cheng
In-Reply-To: <2980943.RVh73cvMGD@dtor-d630.eng.vmware.com>

On Thu, Oct 3, 2013 at 2:54 PM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> On Thursday, October 03, 2013 01:53:10 PM Ping Cheng wrote:
>> This series of models added a hardware switch to turn touch
>> data on/off. To report the state of the switch, SW_TOUCH_ENABLED
>> is added in include/uapi/linux/input.h.
>
>
> Hmm, should we just postpone creating of input device until touch is enabled
> instead?
>
> --
> Dmitry
> --

The idea of SW_TOUCH_ENABLED is to allow userspace to be a bit more
helpful and display a "disabled" message rather than disappearing the
device entirely when the switch is 'off'. In theory this could also be
achieved through the libwacom support library (by scanning the list of
event devices to see if any of the expected interfaces are missing),
but the approach is somewhat fragile and I'm not convinced that
linking the switch to device creation/removal is correct.

Jason
---
Now instead of four in the eights place /
you’ve got three, ‘Cause you added one  /
(That is to say, eight) to the two,     /
But you can’t take seven from three,    /
So you look at the sixty-fours....
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* [PATCH 2/2] Input: wacom - add support for three new Intuos devices
From: Ping Cheng @ 2013-10-04 18:15 UTC (permalink / raw)
  To: linux-input

On Fri, Oct 4, 2013 at 9:47 AM, Jason Gerecke <killertofu@gmail.com> wrote:
>
> On Thu, Oct 3, 2013 at 2:54 PM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> > On Thursday, October 03, 2013 01:53:10 PM Ping Cheng wrote:
> >> This series of models added a hardware switch to turn touch
> >> data on/off. To report the state of the switch, SW_TOUCH_ENABLED
> >> is added in include/uapi/linux/input.h.
> >
> >
> > Hmm, should we just postpone creating of input device until touch is enabled
> > instead?
> >
> > --
> > Dmitry
> > --
>
> The idea of SW_TOUCH_ENABLED is to allow userspace to be a bit more
> helpful and display a "disabled" message rather than disappearing the
> device entirely when the switch is 'off'. In theory this could also be
> achieved through the libwacom support library (by scanning the list of
> event devices to see if any of the expected interfaces are missing),
> but the approach is somewhat fragile and I'm not convinced that
> linking the switch to device creation/removal is correct.


Good point, Jason. I thought Dmitry suggested to have SW_TOUCH_ENABLED
accepted before adding new devices. My misunderstanding did bring nice
feedbacks from Chris and Peter. Thank you guys.

Dmitry,

If you meant to check the status of the touch switch before creating
touch interface, that would also mean we need to delete the interface
if the switch is turned off. Otherwise, we are not supporting it
consistently. However, the switch is only an indicator of whether
tablet will post touch events or not. The actual touch device is not
removed. It is always there and connected to the system no matter what
state the switch is in. So, dynamically creating and removal of touch
interface can complicate user land support.

Does this make sense to you?

Ping

^ permalink raw reply

* [Review PATCH 5/7] si4713 : HID blacklist Si4713 USB development board
From: Dinesh Ram @ 2013-10-05 20:58 UTC (permalink / raw)
  To: dinesh.superman2006; +Cc: Dinesh Ram, Jiri Kosina, linux-input
In-Reply-To: <89ec888fdb63c693bd8cea96ae5ad008391e866b.1381006700.git.dinesh.ram@cern.ch>

From: Dinesh Ram <dinram@cisco.com>

The Si4713 development board contains a Si4713 FM transmitter chip
and is handled by the radio-usb-si4713 driver.
The board reports itself as (10c4:8244) Cygnal Integrated Products, Inc.
and misidentifies itself as a HID device in its USB interface descriptor.
This patch ignores this device as an HID device and hence loads the custom driver.

Signed-off-by: Dinesh Ram <dinram@cisco.com>

Cc: Jiri Kosina <jkosina@suse.cz>
Cc: linux-input@vger.kernel.org
---
 drivers/hid/hid-core.c |    1 +
 drivers/hid/hid-ids.h  |    2 ++
 2 files changed, 3 insertions(+)

diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index b8470b1..81b9b44 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2106,6 +2106,7 @@ static const struct hid_device_id hid_ignore_list[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI4713) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CMEDIA, USB_DEVICE_ID_CM109) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_HIDCOM) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_ULTRAMOUSE) },
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index e60e8d5..1cdd34a 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -241,6 +241,8 @@
 #define USB_VENDOR_ID_CYGNAL		0x10c4
 #define USB_DEVICE_ID_CYGNAL_RADIO_SI470X	0x818a
 
+#define USB_DEVICE_ID_CYGNAL_RADIO_SI4713       0x8244
+
 #define USB_VENDOR_ID_CYPRESS		0x04b4
 #define USB_DEVICE_ID_CYPRESS_MOUSE	0x0001
 #define USB_DEVICE_ID_CYPRESS_HIDCOM	0x5500
-- 
1.7.9.5


^ permalink raw reply related

* Re: [RFC] Input: introduce ABS_MAX2/CNT2 and friends
From: Dmitry Torokhov @ 2013-10-06  7:47 UTC (permalink / raw)
  To: Peter Hutterer
  Cc: David Herrmann, linux-input, Henrik Rydberg, Benjamin Tissoires,
	Jiri Kosina, linux-kernel
In-Reply-To: <20131003233223.GA21255@yabbi.bne.redhat.com>

On Fri, Oct 04, 2013 at 09:32:23AM +1000, Peter Hutterer wrote:
> On Thu, Oct 03, 2013 at 12:10:36AM +0200, David Herrmann wrote:
> > As we painfully noticed during the 3.12 merge-window our
> > EVIOCGABS/EVIOCSABS API is limited to ABS_MAX<=0x3f. We tried several
> > hacks to work around it but if we ever decide to increase ABS_MAX, the
> > EVIOCSABS ioctl ABI might overflow into the next byte causing horrible
> > misinterpretations in the kernel that we cannot catch.
> > 
> > Therefore, we decided to go with ABS_MAX2/CNT2 and introduce two new
> > ioctls to get/set abs-params. They no longer encode the ABS code in the
> > ioctl number and thus allow up to 4 billion ABS codes.
> > 
> > Unfortunately, the uinput API also hard-coded the ABS_CNT value in its
> > ABI. To avoid any hacks in uinput, we simply introduce a new
> > uinput_user_dev2 to replace the old one. The new API allows growing
> > ABS_CNT2 values without any API changes.
> > 
> > Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
> > ---
> > Hi
> > 
> > This is only compile-tested but I wanted to get a first revision out to let
> > people know what we're working on. Unfortunately, the ABS API has this horribly
> > low ABS_MAX limit and we couldn't figure out a way to increase it while keeping
> > ABI compatibility.
> > 
> > Any feedback and review is welcome. And if anyone spots ABI breakage by this
> > patch, please let me know. If nothing comes up I will patch libevdev to use the
> > new API, write some extensive test-cases and push this forward.
> > 
> > As a sidenote: I didn't modify joydev to use the new values. Fortunately, the
> > joydev API would allow switching to ABS_CNT2 without breaking API, but it would
> > limit the new ABS_CNT2 to 16k. This is quite high but nothing compared to the
> >  2^32 that we can theoretically support now. If you think 16k ought to be enough
> > (probably?) I can adjust the joydev API, too.
> > All other kernel users were converted to the new values. Nothing left behind..
> 
> 
> just a comment from skimming the patch:
> if you need a new uinput abi anyway, can we add the resolution here? it's
> sorely needed for some tests. see also the patch Benjamin sent a while ago
> ("input/uinput: support abs resolution", July 15 2013)

Indeed. Also, while we are at it, would it make sense to allow
requesting a range of ABS infos at once?

-- 
Dmitry

^ permalink raw reply

* [PATCH 1/1] HID: wiimote: invert Y-Axis and add automatic calibration for Wii U Pro Controller
From: Rafael Brune @ 2013-10-06 18:44 UTC (permalink / raw)
  To: linux-input; +Cc: Rafael Brune

With these changes the Wii U Pro Controller fully complies
to the gamepad-API and with the calibration is fully usable
out-of-the-box without any user-space tools. This potentially
breaks compatibility with software that relies on the two
inverted Y-Axis but since current bluez 4.x and 5.x versions
don't even support pairing with the controller yet the amount
of people affected should be rather small.

Signed-off-by: Rafael Brune <mail@rbrune.de>
---
 drivers/hid/hid-wiimote-modules.c | 45 +++++++++++++++++++++++++++++++++++----
 1 file changed, 41 insertions(+), 4 deletions(-)

diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c
index 2e7d644..1422b0b 100644
--- a/drivers/hid/hid-wiimote-modules.c
+++ b/drivers/hid/hid-wiimote-modules.c
@@ -1640,10 +1640,41 @@ static void wiimod_pro_in_ext(struct wiimote_data *wdata, const __u8 *ext)
 	ly = (ext[4] & 0xff) | ((ext[5] & 0x0f) << 8);
 	ry = (ext[6] & 0xff) | ((ext[7] & 0x0f) << 8);
 
-	input_report_abs(wdata->extension.input, ABS_X, lx - 0x800);
-	input_report_abs(wdata->extension.input, ABS_Y, ly - 0x800);
-	input_report_abs(wdata->extension.input, ABS_RX, rx - 0x800);
-	input_report_abs(wdata->extension.input, ABS_RY, ry - 0x800);
+	/* Calibrating the sticks by saving the global min/max per axis */
+	if (lx < wdata->state.calib_bboard[0][0])
+		wdata->state.calib_bboard[0][0] = lx;
+	if (lx > wdata->state.calib_bboard[0][1])
+		wdata->state.calib_bboard[0][1] = lx;
+
+	if (ly < wdata->state.calib_bboard[1][0])
+		wdata->state.calib_bboard[1][0] = ly;
+	if (ly > wdata->state.calib_bboard[1][1])
+		wdata->state.calib_bboard[1][1] = ly;
+
+	if (rx < wdata->state.calib_bboard[2][0])
+		wdata->state.calib_bboard[2][0] = rx;
+	if (rx > wdata->state.calib_bboard[2][1])
+		wdata->state.calib_bboard[2][1] = rx;
+
+	if (ry < wdata->state.calib_bboard[3][0])
+		wdata->state.calib_bboard[3][0] = ry;
+	if (ry > wdata->state.calib_bboard[3][1])
+		wdata->state.calib_bboard[3][1] = ry;
+
+	/* Normalize using int math to prevent conversion to/from float */
+	lx = -2048 + (((__s32)(lx - wdata->state.calib_bboard[0][0]) * 4096)/
+	   (wdata->state.calib_bboard[0][1]-wdata->state.calib_bboard[0][0]));
+	ly = -2048 + (((__s32)(ly - wdata->state.calib_bboard[1][0]) * 4096)/
+	   (wdata->state.calib_bboard[1][1]-wdata->state.calib_bboard[1][0]));
+	rx = -2048 + (((__s32)(rx - wdata->state.calib_bboard[2][0]) * 4096)/
+	   (wdata->state.calib_bboard[2][1]-wdata->state.calib_bboard[2][0]));
+	ry = -2048 + (((__s32)(ry - wdata->state.calib_bboard[3][0]) * 4096)/
+	   (wdata->state.calib_bboard[3][1]-wdata->state.calib_bboard[3][0]));
+
+	input_report_abs(wdata->extension.input, ABS_X,  lx);
+	input_report_abs(wdata->extension.input, ABS_Y, -ly);
+	input_report_abs(wdata->extension.input, ABS_RX,  rx);
+	input_report_abs(wdata->extension.input, ABS_RY, -ry);
 
 	input_report_key(wdata->extension.input,
 			 wiimod_pro_map[WIIMOD_PRO_KEY_RIGHT],
@@ -1760,6 +1791,12 @@ static int wiimod_pro_probe(const struct wiimod_ops *ops,
 	if (!wdata->extension.input)
 		return -ENOMEM;
 
+	/* Initialize min/max values for all Axis with reasonable values */
+	for (i = 0; i < 4; ++i) {
+		wdata->state.calib_bboard[i][0] = 0x780;
+		wdata->state.calib_bboard[i][1] = 0x880;
+	}
+
 	set_bit(FF_RUMBLE, wdata->extension.input->ffbit);
 	input_set_drvdata(wdata->extension.input, wdata);
 
-- 
1.8.3.2


^ permalink raw reply related

* Re: [RFC] Input: introduce ABS_MAX2/CNT2 and friends
From: Peter Hutterer @ 2013-10-06 23:19 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: David Herrmann, linux-input, Henrik Rydberg, Benjamin Tissoires,
	Jiri Kosina, linux-kernel
In-Reply-To: <20131006074700.GA19155@core.coreip.homeip.net>

On Sun, Oct 06, 2013 at 12:47:00AM -0700, Dmitry Torokhov wrote:
> On Fri, Oct 04, 2013 at 09:32:23AM +1000, Peter Hutterer wrote:
> > On Thu, Oct 03, 2013 at 12:10:36AM +0200, David Herrmann wrote:
> > > As we painfully noticed during the 3.12 merge-window our
> > > EVIOCGABS/EVIOCSABS API is limited to ABS_MAX<=0x3f. We tried several
> > > hacks to work around it but if we ever decide to increase ABS_MAX, the
> > > EVIOCSABS ioctl ABI might overflow into the next byte causing horrible
> > > misinterpretations in the kernel that we cannot catch.
> > > 
> > > Therefore, we decided to go with ABS_MAX2/CNT2 and introduce two new
> > > ioctls to get/set abs-params. They no longer encode the ABS code in the
> > > ioctl number and thus allow up to 4 billion ABS codes.
> > > 
> > > Unfortunately, the uinput API also hard-coded the ABS_CNT value in its
> > > ABI. To avoid any hacks in uinput, we simply introduce a new
> > > uinput_user_dev2 to replace the old one. The new API allows growing
> > > ABS_CNT2 values without any API changes.
> > > 
> > > Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
> > > ---
> > > Hi
> > > 
> > > This is only compile-tested but I wanted to get a first revision out to let
> > > people know what we're working on. Unfortunately, the ABS API has this horribly
> > > low ABS_MAX limit and we couldn't figure out a way to increase it while keeping
> > > ABI compatibility.
> > > 
> > > Any feedback and review is welcome. And if anyone spots ABI breakage by this
> > > patch, please let me know. If nothing comes up I will patch libevdev to use the
> > > new API, write some extensive test-cases and push this forward.
> > > 
> > > As a sidenote: I didn't modify joydev to use the new values. Fortunately, the
> > > joydev API would allow switching to ABS_CNT2 without breaking API, but it would
> > > limit the new ABS_CNT2 to 16k. This is quite high but nothing compared to the
> > >  2^32 that we can theoretically support now. If you think 16k ought to be enough
> > > (probably?) I can adjust the joydev API, too.
> > > All other kernel users were converted to the new values. Nothing left behind..
> > 
> > 
> > just a comment from skimming the patch:
> > if you need a new uinput abi anyway, can we add the resolution here? it's
> > sorely needed for some tests. see also the patch Benjamin sent a while ago
> > ("input/uinput: support abs resolution", July 15 2013)
> 
> Indeed. Also, while we are at it, would it make sense to allow
> requesting a range of ABS infos at once?

yes, but what API did you have in mind?

Cheers,
   Peter

^ permalink raw reply

* Re: [RFC] Input: introduce ABS_MAX2/CNT2 and friends
From: Dmitry Torokhov @ 2013-10-07  0:04 UTC (permalink / raw)
  To: Peter Hutterer
  Cc: David Herrmann, linux-input, Henrik Rydberg, Benjamin Tissoires,
	Jiri Kosina, linux-kernel
In-Reply-To: <20131006231955.GA26952@yabbi.redhat.com>

Peter Hutterer <peter.hutterer@who-t.net> wrote:
>On Sun, Oct 06, 2013 at 12:47:00AM -0700, Dmitry Torokhov wrote:
>> On Fri, Oct 04, 2013 at 09:32:23AM +1000, Peter Hutterer wrote:
>> > On Thu, Oct 03, 2013 at 12:10:36AM +0200, David Herrmann wrote:
>> > > As we painfully noticed during the 3.12 merge-window our
>> > > EVIOCGABS/EVIOCSABS API is limited to ABS_MAX<=0x3f. We tried
>several
>> > > hacks to work around it but if we ever decide to increase
>ABS_MAX, the
>> > > EVIOCSABS ioctl ABI might overflow into the next byte causing
>horrible
>> > > misinterpretations in the kernel that we cannot catch.
>> > > 
>> > > Therefore, we decided to go with ABS_MAX2/CNT2 and introduce two
>new
>> > > ioctls to get/set abs-params. They no longer encode the ABS code
>in the
>> > > ioctl number and thus allow up to 4 billion ABS codes.
>> > > 
>> > > Unfortunately, the uinput API also hard-coded the ABS_CNT value
>in its
>> > > ABI. To avoid any hacks in uinput, we simply introduce a new
>> > > uinput_user_dev2 to replace the old one. The new API allows
>growing
>> > > ABS_CNT2 values without any API changes.
>> > > 
>> > > Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
>> > > ---
>> > > Hi
>> > > 
>> > > This is only compile-tested but I wanted to get a first revision
>out to let
>> > > people know what we're working on. Unfortunately, the ABS API has
>this horribly
>> > > low ABS_MAX limit and we couldn't figure out a way to increase it
>while keeping
>> > > ABI compatibility.
>> > > 
>> > > Any feedback and review is welcome. And if anyone spots ABI
>breakage by this
>> > > patch, please let me know. If nothing comes up I will patch
>libevdev to use the
>> > > new API, write some extensive test-cases and push this forward.
>> > > 
>> > > As a sidenote: I didn't modify joydev to use the new values.
>Fortunately, the
>> > > joydev API would allow switching to ABS_CNT2 without breaking
>API, but it would
>> > > limit the new ABS_CNT2 to 16k. This is quite high but nothing
>compared to the
>> > >  2^32 that we can theoretically support now. If you think 16k
>ought to be enough
>> > > (probably?) I can adjust the joydev API, too.
>> > > All other kernel users were converted to the new values. Nothing
>left behind..
>> > 
>> > 
>> > just a comment from skimming the patch:
>> > if you need a new uinput abi anyway, can we add the resolution
>here? it's
>> > sorely needed for some tests. see also the patch Benjamin sent a
>while ago
>> > ("input/uinput: support abs resolution", July 15 2013)
>> 
>> Indeed. Also, while we are at it, would it make sense to allow
>> requesting a range of ABS infos at once?
>
>yes, but what API did you have in mind?
>

I was thinking about specifying the start ABS but and the count and array of absinfo structures to be filled.


Thanks.

-- 
Dmitry

^ permalink raw reply

* Re: [RFC] Input: introduce ABS_MAX2/CNT2 and friends
From: Peter Hutterer @ 2013-10-07  1:30 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: David Herrmann, linux-input, Henrik Rydberg, Benjamin Tissoires,
	Jiri Kosina, linux-kernel
In-Reply-To: <f37ea673-a597-4dd2-88b4-bf190d8eeff5@email.android.com>

On Sun, Oct 06, 2013 at 05:04:36PM -0700, Dmitry Torokhov wrote:
> Peter Hutterer <peter.hutterer@who-t.net> wrote:
> >On Sun, Oct 06, 2013 at 12:47:00AM -0700, Dmitry Torokhov wrote:
> >> On Fri, Oct 04, 2013 at 09:32:23AM +1000, Peter Hutterer wrote:
> >> > On Thu, Oct 03, 2013 at 12:10:36AM +0200, David Herrmann wrote:
> >> > > As we painfully noticed during the 3.12 merge-window our
> >> > > EVIOCGABS/EVIOCSABS API is limited to ABS_MAX<=0x3f. We tried
> >several
> >> > > hacks to work around it but if we ever decide to increase
> >ABS_MAX, the
> >> > > EVIOCSABS ioctl ABI might overflow into the next byte causing
> >horrible
> >> > > misinterpretations in the kernel that we cannot catch.
> >> > > 
> >> > > Therefore, we decided to go with ABS_MAX2/CNT2 and introduce two
> >new
> >> > > ioctls to get/set abs-params. They no longer encode the ABS code
> >in the
> >> > > ioctl number and thus allow up to 4 billion ABS codes.
> >> > > 
> >> > > Unfortunately, the uinput API also hard-coded the ABS_CNT value
> >in its
> >> > > ABI. To avoid any hacks in uinput, we simply introduce a new
> >> > > uinput_user_dev2 to replace the old one. The new API allows
> >growing
> >> > > ABS_CNT2 values without any API changes.
> >> > > 
> >> > > Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
> >> > > ---
> >> > > Hi
> >> > > 
> >> > > This is only compile-tested but I wanted to get a first revision
> >out to let
> >> > > people know what we're working on. Unfortunately, the ABS API has
> >this horribly
> >> > > low ABS_MAX limit and we couldn't figure out a way to increase it
> >while keeping
> >> > > ABI compatibility.
> >> > > 
> >> > > Any feedback and review is welcome. And if anyone spots ABI
> >breakage by this
> >> > > patch, please let me know. If nothing comes up I will patch
> >libevdev to use the
> >> > > new API, write some extensive test-cases and push this forward.
> >> > > 
> >> > > As a sidenote: I didn't modify joydev to use the new values.
> >Fortunately, the
> >> > > joydev API would allow switching to ABS_CNT2 without breaking
> >API, but it would
> >> > > limit the new ABS_CNT2 to 16k. This is quite high but nothing
> >compared to the
> >> > >  2^32 that we can theoretically support now. If you think 16k
> >ought to be enough
> >> > > (probably?) I can adjust the joydev API, too.
> >> > > All other kernel users were converted to the new values. Nothing
> >left behind..
> >> > 
> >> > 
> >> > just a comment from skimming the patch:
> >> > if you need a new uinput abi anyway, can we add the resolution
> >here? it's
> >> > sorely needed for some tests. see also the patch Benjamin sent a
> >while ago
> >> > ("input/uinput: support abs resolution", July 15 2013)
> >> 
> >> Indeed. Also, while we are at it, would it make sense to allow
> >> requesting a range of ABS infos at once?
> >
> >yes, but what API did you have in mind?
> >
> 
> I was thinking about specifying the start ABS but and the count and array of absinfo structures to be filled.

yeah, that works for me (I suspect 90% of users will use ABS_MAX anyway :)

Cheers,
   Peter


^ permalink raw reply

* PROBLEM: XPS 12-9Q33 touchpad not recognized, problem with i2c_hid module
From: Wouter van der Graaf @ 2013-10-07  8:46 UTC (permalink / raw)
  To: linux-input

Dear Maintainers,

[1.] One line summary of the problem:

Dell XPS 12-9Q33 touchpad is not recognized, works when i2c_hid (needed 
for touchscreen) is blacklisted


[2.] Full description of the problem/report:

Problem exists in kernels 3.10, 3.11 and 3.12rc3 (latest mainline kernel 
release as of this writing).

The Dell XPS 12, 2013 Haswell version, comes with both multitouch 
touchscreen and touchpad, of which only the touchscreen functions 
correctly. The touchpad is not correctly detected and acts like a 
generic pointing device without any touchpad (multitouch, scrolling, 
etc.) features.

Below I've included environment and device information as well as Xorg 
log, xinput list and dmesg output.

The device named "DLL05E3:01 06CB:2734" is the touchpad.

When i2c_hid module is blacklisted, the touchpad *does* work and is 
detected by the psmouse module as a Synaptics touchpad. However, the 
touchscreen needs the i2c_hid module.

With i2c_hid module enabled, both touchpad and touchscreen are detected 
by i2c_hid, but maybe this causes a conflict and the psmouse module is 
not able to detect the touchpad anymore.


[3.] Keywords (i.e., modules, networking, kernel):


[4.] Kernel version (from /proc/version):

Linux version 3.12.0-031200rc3-generic (apw@gomeisa) (gcc version 4.6.3 
(Ubuntu/Linaro 4.6.3-1ubuntu5) ) #201309291835 SMP Sun Sep 29 22:37:02 
UTC 2013


[5.] Output of Oops.. message (if applicable) with symbolic information
      resolved (see Documentation/oops-tracing.txt)

N/A


[6.] A small shell script or example program which triggers the
      problem (if possible)

N/A


[7.] Environment

Description:    Ubuntu Saucy Salamander (development branch)
Release:    13.10


[7.1.] Software (add the output of the ver_linux script here)

Linux wouter-xps12 3.12.0-031200rc3-generic #201309291835 SMP Sun Sep 29 
22:37:02 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Gnu C                  4.8
Gnu make               3.81
binutils               2.23.52.20130913
util-linux             2.20.1
mount                  support
module-init-tools      9
e2fsprogs              1.42.8
pcmciautils            018
PPP                    2.4.5
Linux C Library        2.17
Dynamic linker (ldd)   2.17
Procps                 3.3.3
Net-tools              1.60
Kbd                    1.15.5
Sh-utils               8.20
wireless-tools         30
Modules Loaded         dm_crypt x86_pkg_temp_thermal coretemp kvm_intel 
kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel 
aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd joydev pn544_mei 
mei_phy pn544 hci snd_hda_codec_realtek nfc snd_hda_codec_hdmi 
hid_sensor_magn_3d hid_sensor_accel_3d hid_sensor_gyro_3d 
hid_sensor_trigger industrialio_triggered_buffer kfifo_buf industrialio 
arc4 snd_hda_intel hid_sensor_iio_common snd_hda_codec snd_hwdep 
hid_multitouch snd_pcm hid_generic dell_wmi sparse_keymap snd_page_alloc 
snd_seq_midi snd_seq_midi_event snd_rawmidi dell_laptop parport_pc 
dcdbas ppdev snd_seq mei_me uvcvideo hid_sensor_hub iwlmvm microcode 
videobuf2_vmalloc videobuf2_memops mac80211 videobuf2_core mei videodev 
usb_storage rfcomm bnep psmouse iwlwifi serio_raw snd_seq_device btusb 
bluetooth cfg80211 snd_timer lpc_ich snd soundcore i2c_hid 
i2c_designware_platform i2c_designware_core mac_hid intel_smartconnect 
tpm_tis nls_iso8859_1 lp parport usbhid hid i915 i2c_algo_bit 
drm_kms_helper ahci drm libahci wmi video


[7.2.] Processor information (from /proc/cpuinfo):

processor    : 0
vendor_id    : GenuineIntel
cpu family    : 6
model        : 69
model name    : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode    : 0x14
cpu MHz        : 1800.000
cache size    : 4096 KB
physical id    : 0
siblings    : 4
core id        : 0
cpu cores    : 2
apicid        : 0
initial apicid    : 0
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca 
cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall 
nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl 
xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor 
ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe 
popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat 
epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid 
fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 4788.86
clflush size    : 64
cache_alignment    : 64
address sizes    : 39 bits physical, 48 bits virtual
power management:

processor    : 1
vendor_id    : GenuineIntel
cpu family    : 6
model        : 69
model name    : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode    : 0x14
cpu MHz        : 1800.000
cache size    : 4096 KB
physical id    : 0
siblings    : 4
core id        : 1
cpu cores    : 2
apicid        : 2
initial apicid    : 2
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca 
cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall 
nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl 
xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor 
ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe 
popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat 
epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid 
fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 4788.86
clflush size    : 64
cache_alignment    : 64
address sizes    : 39 bits physical, 48 bits virtual
power management:

processor    : 2
vendor_id    : GenuineIntel
cpu family    : 6
model        : 69
model name    : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode    : 0x14
cpu MHz        : 1800.000
cache size    : 4096 KB
physical id    : 0
siblings    : 4
core id        : 0
cpu cores    : 2
apicid        : 1
initial apicid    : 1
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca 
cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall 
nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl 
xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor 
ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe 
popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat 
epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid 
fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 4788.86
clflush size    : 64
cache_alignment    : 64
address sizes    : 39 bits physical, 48 bits virtual
power management:

processor    : 3
vendor_id    : GenuineIntel
cpu family    : 6
model        : 69
model name    : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode    : 0x14
cpu MHz        : 1800.000
cache size    : 4096 KB
physical id    : 0
siblings    : 4
core id        : 1
cpu cores    : 2
apicid        : 3
initial apicid    : 3
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca 
cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall 
nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl 
xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor 
ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe 
popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat 
epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid 
fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 4788.86
clflush size    : 64
cache_alignment    : 64
address sizes    : 39 bits physical, 48 bits virtual
power management:


[7.3.] Module information (from /proc/modules):

dm_crypt 23012 1 - Live 0x0000000000000000
x86_pkg_temp_thermal 14269 0 - Live 0x0000000000000000
coretemp 17728 0 - Live 0x0000000000000000
kvm_intel 144049 0 - Live 0x0000000000000000
kvm 457676 1 kvm_intel, Live 0x0000000000000000
crct10dif_pclmul 14250 0 - Live 0x0000000000000000
crc32_pclmul 13160 0 - Live 0x0000000000000000
ghash_clmulni_intel 13259 0 - Live 0x0000000000000000
aesni_intel 55720 268 - Live 0x0000000000000000
aes_x86_64 17131 1 aesni_intel, Live 0x0000000000000000
lrw 13294 1 aesni_intel, Live 0x0000000000000000
gf128mul 14951 1 lrw, Live 0x0000000000000000
glue_helper 14095 1 aesni_intel, Live 0x0000000000000000
ablk_helper 13597 1 aesni_intel, Live 0x0000000000000000
cryptd 20501 136 ghash_clmulni_intel,aesni_intel,ablk_helper, Live 
0x0000000000000000
joydev 17575 0 - Live 0x0000000000000000
pn544_mei 12787 0 - Live 0x0000000000000000
mei_phy 13929 1 pn544_mei, Live 0x0000000000000000
pn544 17995 1 pn544_mei, Live 0x0000000000000000
hci 44774 2 mei_phy,pn544, Live 0x0000000000000000
snd_hda_codec_realtek 56695 1 - Live 0x0000000000000000
nfc 99413 2 pn544,hci, Live 0x0000000000000000
snd_hda_codec_hdmi 41684 1 - Live 0x0000000000000000
hid_sensor_magn_3d 13266 0 - Live 0x0000000000000000
hid_sensor_accel_3d 13279 0 - Live 0x0000000000000000
hid_sensor_gyro_3d 13266 0 - Live 0x0000000000000000
hid_sensor_trigger 12916 3 
hid_sensor_magn_3d,hid_sensor_accel_3d,hid_sensor_gyro_3d, Live 
0x0000000000000000
industrialio_triggered_buffer 12882 3 
hid_sensor_magn_3d,hid_sensor_accel_3d,hid_sensor_gyro_3d, Live 
0x0000000000000000
kfifo_buf 13294 1 industrialio_triggered_buffer, Live 0x0000000000000000
industrialio 54016 6 
hid_sensor_magn_3d,hid_sensor_accel_3d,hid_sensor_gyro_3d,hid_sensor_trigger,industrialio_triggered_buffer,kfifo_buf, 
Live 0x0000000000000000
arc4 12573 2 - Live 0x0000000000000000
snd_hda_intel 57183 5 - Live 0x0000000000000000
hid_sensor_iio_common 13807 3 
hid_sensor_magn_3d,hid_sensor_accel_3d,hid_sensor_gyro_3d, Live 
0x0000000000000000
snd_hda_codec 194881 3 
snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_intel, Live 
0x0000000000000000
snd_hwdep 13613 1 snd_hda_codec, Live 0x0000000000000000
hid_multitouch 17645 0 - Live 0x0000000000000000
snd_pcm 107140 3 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec, Live 
0x0000000000000000
hid_generic 12548 0 - Live 0x0000000000000000
dell_wmi 12681 0 - Live 0x0000000000000000
sparse_keymap 13890 1 dell_wmi, Live 0x0000000000000000
snd_page_alloc 18798 2 snd_hda_intel,snd_pcm, Live 0x0000000000000000
snd_seq_midi 13324 0 - Live 0x0000000000000000
snd_seq_midi_event 14899 1 snd_seq_midi, Live 0x0000000000000000
snd_rawmidi 30465 1 snd_seq_midi, Live 0x0000000000000000
dell_laptop 17425 0 - Live 0x0000000000000000
parport_pc 32866 0 - Live 0x0000000000000000
dcdbas 14977 1 dell_laptop, Live 0x0000000000000000
ppdev 17711 0 - Live 0x0000000000000000
snd_seq 66061 2 snd_seq_midi,snd_seq_midi_event, Live 0x0000000000000000
mei_me 18418 0 - Live 0x0000000000000000
uvcvideo 82247 0 - Live 0x0000000000000000
hid_sensor_hub 19096 5 
hid_sensor_magn_3d,hid_sensor_accel_3d,hid_sensor_gyro_3d,hid_sensor_trigger,hid_sensor_iio_common, 
Live 0x0000000000000000
iwlmvm 176559 0 - Live 0x0000000000000000
microcode 23650 0 - Live 0x0000000000000000
videobuf2_vmalloc 13216 1 uvcvideo, Live 0x0000000000000000
videobuf2_memops 13362 1 videobuf2_vmalloc, Live 0x0000000000000000
mac80211 634661 1 iwlmvm, Live 0x0000000000000000
videobuf2_core 40903 1 uvcvideo, Live 0x0000000000000000
mei 78609 3 pn544_mei,mei_phy,mei_me, Live 0x0000000000000000
videodev 139144 2 uvcvideo,videobuf2_core, Live 0x0000000000000000
usb_storage 66714 0 - Live 0x0000000000000000
rfcomm 74658 12 - Live 0x0000000000000000
bnep 23966 2 - Live 0x0000000000000000
psmouse 104113 0 - Live 0x0000000000000000
iwlwifi 171124 1 iwlmvm, Live 0x0000000000000000
serio_raw 13462 0 - Live 0x0000000000000000
snd_seq_device 14497 3 snd_seq_midi,snd_rawmidi,snd_seq, Live 
0x0000000000000000
btusb 28326 0 - Live 0x0000000000000000
bluetooth 391597 22 rfcomm,bnep,btusb, Live 0x0000000000000000
cfg80211 504229 3 iwlmvm,mac80211,iwlwifi, Live 0x0000000000000000
snd_timer 30038 2 snd_pcm,snd_seq, Live 0x0000000000000000
lpc_ich 21163 0 - Live 0x0000000000000000
snd 73802 21 
snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_seq_midi,snd_rawmidi,snd_seq,snd_seq_device,snd_timer, 
Live 0x0000000000000000
soundcore 12680 1 snd, Live 0x0000000000000000
i2c_hid 19067 0 - Live 0x0000000000000000
i2c_designware_platform 13006 0 - Live 0x0000000000000000
i2c_designware_core 14990 1 i2c_designware_platform, Live 0x0000000000000000
mac_hid 13253 0 - Live 0x0000000000000000
intel_smartconnect 12619 0 - Live 0x0000000000000000
tpm_tis 19116 0 - Live 0x0000000000000000
nls_iso8859_1 12713 1 - Live 0x0000000000000000
lp 17799 0 - Live 0x0000000000000000
parport 42481 3 parport_pc,ppdev,lp, Live 0x0000000000000000
usbhid 53067 0 - Live 0x0000000000000000
hid 106254 5 hid_multitouch,hid_generic,hid_sensor_hub,i2c_hid,usbhid, 
Live 0x0000000000000000
i915 733800 5 - Live 0x0000000000000000
i2c_algo_bit 13564 1 i915, Live 0x0000000000000000
drm_kms_helper 53165 1 i915, Live 0x0000000000000000
ahci 30063 3 - Live 0x0000000000000000
drm 303133 4 i915,drm_kms_helper, Live 0x0000000000000000
libahci 32088 1 ahci, Live 0x0000000000000000
wmi 19363 1 dell_wmi, Live 0x0000000000000000
video 19574 1 i915, Live 0x0000000000000000


[7.4.] Loaded driver and hardware information (/proc/ioports, /proc/iomem)

0000-0cf7 : PCI Bus 0000:00
   0000-001f : dma1
   0020-0021 : pic1
   0040-0043 : timer0
   0050-0053 : timer1
   0060-0060 : keyboard
   0062-0062 : EC data
   0064-0064 : keyboard
   0066-0066 : EC cmd
   0070-0077 : rtc0
   0080-008f : dma page reg
   00a0-00a1 : pic2
   00c0-00df : dma2
   00f0-00ff : fpu
   04d0-04d1 : pnp 00:06
   0680-069f : pnp 00:03
0cf8-0cff : PCI conf1
0d00-ffff : PCI Bus 0000:00
   164e-164f : pnp 00:03
   1800-1803 : ACPI PM1a_EVT_BLK
   1804-1805 : ACPI PM1a_CNT_BLK
   1808-180b : ACPI PM_TMR
   1810-1815 : ACPI CPU throttle
   1830-1833 : iTCO_wdt
   1850-1850 : ACPI PM2_CNT_BLK
   1854-1857 : pnp 00:05
   1860-187f : iTCO_wdt
   1880-189f : ACPI GPE0_BLK
   1c00-1fff : INT33C7:00
     1c00-1fff : lp-gpio
   2000-2fff : PCI Bus 0000:04
   f000-f03f : 0000:00:02.0
   f040-f05f : 0000:00:1f.3
   f060-f07f : 0000:00:1f.2
     f060-f07f : ahci
   f080-f083 : 0000:00:1f.2
     f080-f083 : ahci
   f090-f097 : 0000:00:1f.2
     f090-f097 : ahci
   f0a0-f0a3 : 0000:00:1f.2
     f0a0-f0a3 : ahci
   f0b0-f0b7 : 0000:00:1f.2
     f0b0-f0b7 : ahci
   ffff-ffff : pnp 00:03
     ffff-ffff : pnp 00:03
       ffff-ffff : pnp 00:03

00000000-00000fff : reserved
00001000-00057fff : System RAM
00058000-00058fff : reserved
00059000-0009efff : System RAM
0009f000-0009ffff : reserved
000a0000-000bffff : PCI Bus 0000:00
000c0000-000ce9ff : Video ROM
000d0000-000d3fff : PCI Bus 0000:00
000d4000-000d7fff : PCI Bus 0000:00
000d8000-000dbfff : PCI Bus 0000:00
000dc000-000dffff : PCI Bus 0000:00
000f0000-000fffff : System ROM
00100000-c98d3fff : System RAM
   02000000-02762924 : Kernel code
   02762925-02d18c7f : Kernel data
   02e72000-02fe4fff : Kernel bss
c98d4000-c98dafff : ACPI Non-volatile Storage
c98db000-c9d18fff : System RAM
c9d19000-ca2b4fff : reserved
ca2b5000-da96efff : System RAM
da96f000-dae4bfff : reserved
dae4c000-dae65fff : ACPI Tables
dae66000-db764fff : ACPI Non-volatile Storage
db765000-dbffefff : reserved
dbfff000-dbffffff : System RAM
dd000000-df1fffff : reserved
   dd200000-df1fffff : Graphics Stolen Memory
df200000-feafffff : PCI Bus 0000:00
   df200000-df3fffff : PCI Bus 0000:04
   df400000-df5fffff : PCI Bus 0000:04
   e0000000-efffffff : 0000:00:02.0
   f7800000-f7bfffff : 0000:00:02.0
   f7c00000-f7cfffff : PCI Bus 0000:06
     f7c00000-f7c01fff : 0000:06:00.0
       f7c00000-f7c01fff : iwlwifi
   f7d00000-f7d0ffff : 0000:00:14.0
     f7d00000-f7d0ffff : xhci_hcd
   f7d10000-f7d13fff : 0000:00:1b.0
     f7d10000-f7d13fff : ICH HD audio
   f7d14000-f7d17fff : 0000:00:03.0
     f7d14000-f7d17fff : ICH HD audio
   f7d19000-f7d190ff : 0000:00:1f.3
   f7d1a000-f7d1a7ff : 0000:00:1f.2
     f7d1a000-f7d1a7ff : ahci
   f7d1b000-f7d1b3ff : 0000:00:1d.0
     f7d1b000-f7d1b3ff : ehci_hcd
   f7d1d000-f7d1d01f : 0000:00:16.0
     f7d1d000-f7d1d01f : mei_me
   f7fef000-f7feffff : pnp 00:0c
   f7ff0000-f7ff0fff : pnp 00:0c
   f8000000-fbffffff : PCI MMCONFIG 0000 [bus 00-3f]
     f8000000-fbffffff : reserved
       f8000000-fbffffff : pnp 00:0c
   fe102000-fe102fff : pnp 00:09
   fe104000-fe104fff : pnp 00:09
   fe105000-fe105fff : INT33C3:00
     fe105000-fe105fff : INT33C3:00
   fe106000-fe106fff : pnp 00:09
   fe108000-fe108fff : pnp 00:09
   fe10a000-fe10afff : pnp 00:09
   fe10c000-fe10cfff : pnp 00:09
   fe10e000-fe10efff : pnp 00:09
   fe111000-fe111007 : pnp 00:09
   fe111014-fe111fff : pnp 00:09
   fe112000-fe112fff : pnp 00:09
fec00000-fec00fff : reserved
   fec00000-fec003ff : IOAPIC 0
fed00000-fed03fff : reserved
   fed00000-fed003ff : HPET 0
fed10000-fed17fff : pnp 00:0c
fed18000-fed18fff : pnp 00:0c
fed19000-fed19fff : pnp 00:0c
fed1c000-fed1ffff : reserved
   fed1c000-fed1ffff : pnp 00:0c
     fed1f410-fed1f414 : iTCO_wdt
fed20000-fed3ffff : pnp 00:0c
fed45000-fed8ffff : pnp 00:0c
fed90000-fed93fff : pnp 00:0c
fee00000-fee00fff : Local APIC
   fee00000-fee00fff : reserved
ff000000-ffffffff : reserved
   ff000000-ffffffff : pnp 00:0c
100000000-21fdfffff : System RAM
21fe00000-21fffffff : RAM buffer


[7.5.] PCI information ('lspci -vvv' as root)

00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 09)
     Subsystem: Dell Device 05e3
     Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx-
     Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort+ >SERR- <PERR- INTx-
     Latency: 0
     Capabilities: [e0] Vendor Specific Information: Len=0c <?>

00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT 
Integrated Graphics Controller (rev 09) (prog-if 00 [VGA controller])
     Subsystem: Dell Device 05e3
     Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx+
     Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0
     Interrupt: pin A routed to IRQ 58
     Region 0: Memory at f7800000 (64-bit, non-prefetchable) [size=4M]
     Region 2: Memory at e0000000 (64-bit, prefetchable) [size=256M]
     Region 4: I/O ports at f000 [size=64]
     Expansion ROM at <unassigned> [disabled]
     Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
         Address: fee0f00c  Data: 41b1
     Capabilities: [d0] Power Management version 2
         Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA 
PME(D0-,D1-,D2-,D3hot-,D3cold-)
         Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
     Capabilities: [a4] PCI Advanced Features
         AFCap: TP+ FLR+
         AFCtrl: FLR-
         AFStatus: TP-
     Kernel driver in use: i915

00:03.0 Audio device: Intel Corporation Device 0a0c (rev 09)
     Subsystem: Intel Corporation Device 2010
     Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx+
     Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0, Cache Line Size: 64 bytes
     Interrupt: pin A routed to IRQ 61
     Region 0: Memory at f7d14000 (64-bit, non-prefetchable) [size=16K]
     Capabilities: [50] Power Management version 2
         Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA 
PME(D0-,D1-,D2-,D3hot-,D3cold-)
         Status: D3 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
     Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit-
         Address: fee0f00c  Data: 4142
     Capabilities: [70] Express (v1) Root Complex Integrated Endpoint, 
MSI 00
         DevCap:    MaxPayload 128 bytes, PhantFunc 0, Latency L0s 
unlimited, L1 unlimited
             ExtTag- RBE- FLReset+
         DevCtl:    Report errors: Correctable- Non-Fatal- Fatal- 
Unsupported-
             RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
             MaxPayload 128 bytes, MaxReadReq 128 bytes
         DevSta:    CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- 
TransPend-
         LnkCap:    Port #0, Speed unknown, Width x0, ASPM unknown, 
Latency L0 <64ns, L1 <1us
             ClockPM- Surprise- LLActRep- BwNot-
         LnkCtl:    ASPM Disabled; Disabled- Retrain- CommClk-
             ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
         LnkSta:    Speed unknown, Width x0, TrErr- Train- SlotClk- 
DLActive- BWMgmt- ABWMgmt-
     Kernel driver in use: snd_hda_intel

00:14.0 USB controller: Intel Corporation Lynx Point-LP USB xHCI HC (rev 
04) (prog-if 30 [XHCI])
     Subsystem: Dell Device 05e3
     Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx+
     Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0
     Interrupt: pin A routed to IRQ 56
     Region 0: Memory at f7d00000 (64-bit, non-prefetchable) [size=64K]
     Capabilities: [70] Power Management version 2
         Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA 
PME(D0-,D1-,D2-,D3hot+,D3cold+)
         Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
     Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+
         Address: 00000000fee0a00c  Data: 4181
     Kernel driver in use: xhci_hcd

00:16.0 Communication controller: Intel Corporation Lynx Point-LP HECI 
#0 (rev 04)
     Subsystem: Dell Device 05e3
     Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx+
     Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0
     Interrupt: pin A routed to IRQ 60
     Region 0: Memory at f7d1d000 (64-bit, non-prefetchable) [size=32]
     Capabilities: [50] Power Management version 3
         Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA 
PME(D0+,D1-,D2-,D3hot+,D3cold+)
         Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
     Capabilities: [8c] MSI: Enable+ Count=1/1 Maskable- 64bit+
         Address: 00000000fee0f00c  Data: 4122
     Kernel driver in use: mei_me

00:1b.0 Audio device: Intel Corporation Lynx Point-LP HD Audio 
Controller (rev 04)
     Subsystem: Dell Device 05e3
     Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx+
     Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0, Cache Line Size: 64 bytes
     Interrupt: pin A routed to IRQ 62
     Region 0: Memory at f7d10000 (64-bit, non-prefetchable) [size=16K]
     Capabilities: [50] Power Management version 3
         Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA 
PME(D0+,D1-,D2-,D3hot+,D3cold+)
         Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
     Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
         Address: 00000000fee0f00c  Data: 4162
     Capabilities: [70] Express (v1) Root Complex Integrated Endpoint, 
MSI 00
         DevCap:    MaxPayload 128 bytes, PhantFunc 0, Latency L0s 
<64ns, L1 <1us
             ExtTag- RBE- FLReset+
         DevCtl:    Report errors: Correctable- Non-Fatal- Fatal- 
Unsupported-
             RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
             MaxPayload 128 bytes, MaxReadReq 128 bytes
         DevSta:    CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ 
TransPend-
         LnkCap:    Port #0, Speed unknown, Width x0, ASPM unknown, 
Latency L0 <64ns, L1 <1us
             ClockPM- Surprise- LLActRep- BwNot-
         LnkCtl:    ASPM Disabled; Disabled- Retrain- CommClk-
             ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
         LnkSta:    Speed unknown, Width x0, TrErr- Train- SlotClk- 
DLActive- BWMgmt- ABWMgmt-
     Capabilities: [100 v1] Virtual Channel
         Caps:    LPEVC=0 RefClk=100ns PATEntryBits=1
         Arb:    Fixed- WRR32- WRR64- WRR128-
         Ctrl:    ArbSelect=Fixed
         Status:    InProgress-
         VC0:    Caps:    PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
             Arb:    Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
             Ctrl:    Enable+ ID=0 ArbSelect=Fixed TC/VC=01
             Status:    NegoPending- InProgress-
         VC1:    Caps:    PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
             Arb:    Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
             Ctrl:    Enable- ID=2 ArbSelect=Fixed TC/VC=04
             Status:    NegoPending- InProgress-
     Kernel driver in use: snd_hda_intel

00:1c.0 PCI bridge: Intel Corporation Lynx Point-LP PCI Express Root 
Port 1 (rev e4) (prog-if 00 [Normal decode])
     Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx-
     Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0, Cache Line Size: 64 bytes
     Bus: primary=00, secondary=04, subordinate=05, sec-latency=0
     I/O behind bridge: 00002000-00002fff
     Memory behind bridge: df200000-df3fffff
     Prefetchable memory behind bridge: 00000000df400000-00000000df5fffff
     Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- <SERR- <PERR-
     BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
         PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
     Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
         DevCap:    MaxPayload 128 bytes, PhantFunc 0, Latency L0s 
<64ns, L1 <1us
             ExtTag- RBE+ FLReset-
         DevCtl:    Report errors: Correctable- Non-Fatal- Fatal- 
Unsupported-
             RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
             MaxPayload 128 bytes, MaxReadReq 128 bytes
         DevSta:    CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ 
TransPend-
         LnkCap:    Port #1, Speed 5GT/s, Width x1, ASPM L0s L1, Latency 
L0 <1us, L1 <4us
             ClockPM- Surprise- LLActRep+ BwNot+
         LnkCtl:    ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain- 
CommClk-
             ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
         LnkSta:    Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+ 
DLActive- BWMgmt- ABWMgmt-
         SltCap:    AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug+ 
Surprise+
             Slot #0, PowerLimit 0.000W; Interlock- NoCompl+
         SltCtl:    Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- 
HPIrq- LinkChg-
             Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
         SltSta:    Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet- 
Interlock-
             Changed: MRL- PresDet- LinkState-
         RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- 
CRSVisible-
         RootCap: CRSVisible-
         RootSta: PME ReqID 0000, PMEStatus- PMEPending-
         DevCap2: Completion Timeout: Range ABC, TimeoutDis+ ARIFwd-
         DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- ARIFwd-
         LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-, 
Selectable De-emphasis: -6dB
              Transmit Margin: Normal Operating Range, 
EnterModifiedCompliance- ComplianceSOS-
              Compliance De-emphasis: -6dB
         LnkSta2: Current De-emphasis Level: -3.5dB, 
EqualizationComplete-, EqualizationPhase1-
              EqualizationPhase2-, EqualizationPhase3-, 
LinkEqualizationRequest-
     Capabilities: [80] MSI: Enable- Count=1/1 Maskable- 64bit-
         Address: 00000000  Data: 0000
     Capabilities: [90] Subsystem: Dell Device 05e3
     Capabilities: [a0] Power Management version 3
         Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA 
PME(D0+,D1-,D2-,D3hot+,D3cold+)
         Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
     Kernel driver in use: pcieport

00:1c.2 PCI bridge: Intel Corporation Lynx Point-LP PCI Express Root 
Port 3 (rev e4) (prog-if 00 [Normal decode])
     Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx-
     Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0, Cache Line Size: 64 bytes
     Bus: primary=00, secondary=06, subordinate=06, sec-latency=0
     I/O behind bridge: 0000f000-00000fff
     Memory behind bridge: f7c00000-f7cfffff
     Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
     Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- <SERR- <PERR-
     BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
         PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
     Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
         DevCap:    MaxPayload 128 bytes, PhantFunc 0, Latency L0s 
<64ns, L1 <1us
             ExtTag- RBE+ FLReset-
         DevCtl:    Report errors: Correctable- Non-Fatal- Fatal- 
Unsupported-
             RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
             MaxPayload 128 bytes, MaxReadReq 128 bytes
         DevSta:    CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ 
TransPend-
         LnkCap:    Port #3, Speed 5GT/s, Width x1, ASPM L0s L1, Latency 
L0 <512ns, L1 <16us
             ClockPM- Surprise- LLActRep+ BwNot+
         LnkCtl:    ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
             ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
         LnkSta:    Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ 
DLActive+ BWMgmt+ ABWMgmt-
         SltCap:    AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug- 
Surprise-
             Slot #2, PowerLimit 10.000W; Interlock- NoCompl+
         SltCtl:    Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- 
HPIrq- LinkChg-
             Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
         SltSta:    Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+ 
Interlock-
             Changed: MRL- PresDet- LinkState-
         RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- 
CRSVisible-
         RootCap: CRSVisible-
         RootSta: PME ReqID 0000, PMEStatus- PMEPending-
         DevCap2: Completion Timeout: Range ABC, TimeoutDis+ ARIFwd-
         DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- ARIFwd-
         LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-, 
Selectable De-emphasis: -6dB
              Transmit Margin: Normal Operating Range, 
EnterModifiedCompliance- ComplianceSOS-
              Compliance De-emphasis: -6dB
         LnkSta2: Current De-emphasis Level: -3.5dB, 
EqualizationComplete-, EqualizationPhase1-
              EqualizationPhase2-, EqualizationPhase3-, 
LinkEqualizationRequest-
     Capabilities: [80] MSI: Enable- Count=1/1 Maskable- 64bit-
         Address: 00000000  Data: 0000
     Capabilities: [90] Subsystem: Dell Device 05e3
     Capabilities: [a0] Power Management version 3
         Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA 
PME(D0+,D1-,D2-,D3hot+,D3cold+)
         Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
     Capabilities: [100 v0] #00
     Capabilities: [200 v1] #1e
     Kernel driver in use: pcieport

00:1d.0 USB controller: Intel Corporation Lynx Point-LP USB EHCI #1 (rev 
04) (prog-if 20 [EHCI])
     Subsystem: Dell Device 05e3
     Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx-
     Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0
     Interrupt: pin A routed to IRQ 23
     Region 0: Memory at f7d1b000 (32-bit, non-prefetchable) [size=1K]
     Capabilities: [50] Power Management version 3
         Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA 
PME(D0+,D1-,D2-,D3hot+,D3cold+)
         Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
     Capabilities: [58] Debug port: BAR=1 offset=00a0
     Capabilities: [98] PCI Advanced Features
         AFCap: TP+ FLR+
         AFCtrl: FLR-
         AFStatus: TP-
     Kernel driver in use: ehci-pci

00:1f.0 ISA bridge: Intel Corporation Lynx Point-LP LPC Controller (rev 04)
     Subsystem: Dell Device 05e3
     Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx-
     Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0
     Capabilities: [e0] Vendor Specific Information: Len=0c <?>
     Kernel driver in use: lpc_ich

00:1f.2 SATA controller: Intel Corporation Lynx Point-LP SATA Controller 
1 [AHCI mode] (rev 04) (prog-if 01 [AHCI 1.0])
     Subsystem: Dell Device 05e3
     Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx+
     Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0
     Interrupt: pin B routed to IRQ 57
     Region 0: I/O ports at f0b0 [size=8]
     Region 1: I/O ports at f0a0 [size=4]
     Region 2: I/O ports at f090 [size=8]
     Region 3: I/O ports at f080 [size=4]
     Region 4: I/O ports at f060 [size=32]
     Region 5: Memory at f7d1a000 (32-bit, non-prefetchable) [size=2K]
     Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
         Address: fee0a00c  Data: 41a1
     Capabilities: [70] Power Management version 3
         Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA 
PME(D0-,D1-,D2-,D3hot+,D3cold-)
         Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
     Capabilities: [a8] SATA HBA v1.0 BAR4 Offset=00000004
     Kernel driver in use: ahci

00:1f.3 SMBus: Intel Corporation Lynx Point-LP SMBus Controller (rev 04)
     Subsystem: Dell Device 05e3
     Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx-
     Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Interrupt: pin C routed to IRQ 3
     Region 0: Memory at f7d19000 (64-bit, non-prefetchable) [size=256]
     Region 4: I/O ports at f040 [size=32]

06:00.0 Network controller: Intel Corporation Wireless 7260 (rev 6b)
     Subsystem: Intel Corporation Dual Band Wireless-AC 7260
     Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx+
     Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
     Latency: 0, Cache Line Size: 64 bytes
     Interrupt: pin A routed to IRQ 59
     Region 0: Memory at f7c00000 (64-bit, non-prefetchable) [size=8K]
     Capabilities: [c8] Power Management version 3
         Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA 
PME(D0+,D1-,D2-,D3hot+,D3cold+)
         Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
     Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
         Address: 00000000fee0100c  Data: 41e1
     Capabilities: [40] Express (v2) Endpoint, MSI 00
         DevCap:    MaxPayload 128 bytes, PhantFunc 0, Latency L0s 
<512ns, L1 unlimited
             ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+
         DevCtl:    Report errors: Correctable- Non-Fatal- Fatal- 
Unsupported-
             RlxdOrd- ExtTag- PhantFunc- AuxPwr+ NoSnoop+ FLReset-
             MaxPayload 128 bytes, MaxReadReq 128 bytes
         DevSta:    CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ 
TransPend-
         LnkCap:    Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, 
Latency L0 <4us, L1 <32us
             ClockPM+ Surprise- LLActRep- BwNot-
         LnkCtl:    ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
             ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
         LnkSta:    Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ 
DLActive- BWMgmt- ABWMgmt-
         DevCap2: Completion Timeout: Range B, TimeoutDis+
         DevCtl2: Completion Timeout: 16ms to 55ms, TimeoutDis-
         LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- 
SpeedDis-, Selectable De-emphasis: -6dB
              Transmit Margin: Normal Operating Range, 
EnterModifiedCompliance- ComplianceSOS-
              Compliance De-emphasis: -6dB
         LnkSta2: Current De-emphasis Level: -3.5dB, 
EqualizationComplete-, EqualizationPhase1-
              EqualizationPhase2-, EqualizationPhase3-, 
LinkEqualizationRequest-
     Capabilities: [100 v1] Advanced Error Reporting
         UESta:    DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- 
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
         UEMsk:    DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- 
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
         UESvrt:    DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- 
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
         CESta:    RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
         CEMsk:    RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
         AERCap:    First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
     Capabilities: [140 v1] Device Serial Number 5c-51-4f-ff-ff-11-a5-9e
     Capabilities: [14c v1] Latency Tolerance Reporting
         Max snoop latency: 3145728ns
         Max no snoop latency: 3145728ns
     Capabilities: [154 v1] Vendor Specific Information: ID=cafe Rev=1 
Len=014 <?>
     Kernel driver in use: iwlwifi


[7.6.] SCSI information (from /proc/scsi/scsi)

Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
   Vendor: ATA      Model: LITEONIT LMT-256 Rev: DM81
   Type:   Direct-Access                    ANSI  SCSI revision: 05


[7.7.] Other information that might be relevant to the problem (please 
look in /proc and include all information that you think to be relevant):

Relevant info from /proc/bus/input/devices

I: Bus=0018 Vendor=06cb Product=2734 Version=0100
N: Name="DLL05E3:01 06CB:2734"
P: Phys=
S: Sysfs=/devices/pci0000:00/INT33C3:00/i2c-8/8-002c/input/input7
U: Uniq=
H: Handlers=mouse0 event7
B: PROP=0
B: EV=17
B: KEY=30000 0 0 0 0
B: REL=3
B: MSC=10

I: Bus=0018 Vendor=03eb Product=842f Version=0100
N: Name="ATML1000:00 03EB:842F"
P: Phys=
S: Sysfs=/devices/pci0000:00/INT33C3:00/i2c-8/8-004b/input/input8
U: Uniq=
H: Handlers=mouse1 event8
B: PROP=2
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=260800000000003


/var/log/Xorg.0.log

[    11.411] X.Org X Server 1.14.2.901 (1.14.3 RC 1) Release Date: 
2013-07-25
[    11.411] X Protocol Version 11, Revision 0
[    11.411] Build Operating System: Linux 3.2.0-37-generic x86_64 Ubuntu
[    11.411] Current Operating System: Linux wouter-xps12 
3.12.0-031200rc3-generic #201309291835 SMP Sun Sep 29 22:37:02 UTC 2013 
x86_64
[    11.411] Kernel command line: 
BOOT_IMAGE=/boot/vmlinuz-3.12.0-031200rc3-generic 
root=UUID=8e4879ce-4777-4c48-b6d7-5b3b4b116ad3 ro quiet splash vt.handoff=7
[    11.411] Build Date: 26 September 2013  05:25:08PM
[    11.411] xorg-server 2:1.14.2.901-2ubuntu6 (For technical support 
please see http://www.ubuntu.com/support)
[    11.411] Current version of pixman: 0.30.2
[    11.411]     Before reporting problems, check http://wiki.x.org to 
make sure that you have the latest version.
[    11.411] Markers: (--) probed, (**) from config file, (==) default 
setting, (++) from command line, (!!) notice, (II) informational, (WW) 
warning, (EE) error, (NI) not implemented, (??) unknown.
[    11.411] (==) Log file: "/var/log/Xorg.0.log", Time: Sun Oct  6 
21:24:45 2013
[    11.412] (==) Using config file: "/etc/X11/xorg.conf"
[    11.412] (==) Using system config directory "/usr/share/X11/xorg.conf.d"
[    11.414] (==) No Layout section.  Using the first Screen section.
[    11.414] (==) No screen section available. Using defaults.
[    11.414] (**) |-->Screen "Default Screen Section" (0)
[    11.414] (**) |   |-->Monitor "<default monitor>"
[    11.414] (==) No monitor specified for screen "Default Screen Section".
     Using a default monitor configuration.
[    11.414] (==) Automatically adding devices
[    11.414] (==) Automatically enabling devices
[    11.414] (==) Automatically adding GPU devices
[    11.416] (WW) The directory "/usr/share/fonts/X11/cyrillic" does not 
exist.
[    11.416]     Entry deleted from font path.
[    11.416] (WW) The directory "/usr/share/fonts/X11/100dpi/" does not 
exist.
[    11.416]     Entry deleted from font path.
[    11.416] (WW) The directory "/usr/share/fonts/X11/75dpi/" does not 
exist.
[    11.416]     Entry deleted from font path.
[    11.416] (WW) The directory "/usr/share/fonts/X11/100dpi" does not 
exist.
[    11.416]     Entry deleted from font path.
[    11.416] (WW) The directory "/usr/share/fonts/X11/75dpi" does not exist.
[    11.416]     Entry deleted from font path.
[    11.416] (WW) The directory 
"/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" does not exist.
[    11.416]     Entry deleted from font path.
[    11.416] (==) FontPath set to:
     /usr/share/fonts/X11/misc,
     /usr/share/fonts/X11/Type1,
     built-ins
[    11.416] (==) ModulePath set to 
"/usr/lib/x86_64-linux-gnu/xorg/extra-modules,/usr/lib/xorg/extra-modules,/usr/lib/xorg/modules"
[    11.416] (II) The server relies on udev to provide the list of input 
devices.
     If no devices become available, reconfigure udev or disable 
AutoAddDevices.
[    11.416] (II) Loader magic: 0x7fe40c4a1d20
[    11.416] (II) Module ABI versions:
[    11.416]     X.Org ANSI C Emulation: 0.4
[    11.416]     X.Org Video Driver: 14.1
[    11.416]     X.Org XInput driver : 19.1
[    11.416]     X.Org Server Extension : 7.0
[    11.417] (II) xfree86: Adding drm device (/dev/dri/card0)
[    11.417] (--) PCI:*(0:0:2:0) 8086:0a16:1028:05e3 rev 9, Mem @ 
0xf7800000/4194304, 0xe0000000/268435456, I/O @ 0x0000f000/64
[    11.417] (II) Open ACPI successful (/var/run/acpid.socket)
[    11.418] Initializing built-in extension Generic Event Extension
[    11.418] Initializing built-in extension SHAPE
[    11.418] Initializing built-in extension MIT-SHM
[    11.418] Initializing built-in extension XInputExtension
[    11.418] Initializing built-in extension XTEST
[    11.418] Initializing built-in extension BIG-REQUESTS
[    11.418] Initializing built-in extension SYNC
[    11.418] Initializing built-in extension XKEYBOARD
[    11.418] Initializing built-in extension XC-MISC
[    11.418] Initializing built-in extension SECURITY
[    11.418] Initializing built-in extension XINERAMA
[    11.418] Initializing built-in extension XFIXES
[    11.418] Initializing built-in extension RENDER
[    11.418] Initializing built-in extension RANDR
[    11.418] Initializing built-in extension COMPOSITE
[    11.418] Initializing built-in extension DAMAGE
[    11.418] Initializing built-in extension MIT-SCREEN-SAVER
[    11.418] Initializing built-in extension DOUBLE-BUFFER
[    11.418] Initializing built-in extension RECORD
[    11.418] Initializing built-in extension DPMS
[    11.418] Initializing built-in extension X-Resource
[    11.418] Initializing built-in extension XVideo
[    11.418] Initializing built-in extension XVideo-MotionCompensation
[    11.418] Initializing built-in extension SELinux
[    11.418] Initializing built-in extension XFree86-VidModeExtension
[    11.418] Initializing built-in extension XFree86-DGA
[    11.418] Initializing built-in extension XFree86-DRI
[    11.418] Initializing built-in extension DRI2
[    11.418] (II) "glx" will be loaded by default.
[    11.418] (WW) "xmir" is not to be loaded by default. Skipping.
[    11.418] (II) LoadModule: "dri2"
[    11.418] (II) Module "dri2" already built-in
[    11.418] (II) LoadModule: "glamoregl"
[    11.419] (II) Loading /usr/lib/xorg/modules/libglamoregl.so
[    11.431] (II) Module glamoregl: vendor="X.Org Foundation"
[    11.431]     compiled for 1.14.2.901, module version = 0.5.1
[    11.432]     ABI class: X.Org ANSI C Emulation, version 0.4
[    11.432] (II) LoadModule: "glx"
[    11.432] (II) Loading /usr/lib/xorg/modules/extensions/libglx.so
[    11.434] (II) Module glx: vendor="X.Org Foundation"
[    11.434]     compiled for 1.14.2.901, module version = 1.0.0
[    11.434]     ABI class: X.Org Server Extension, version 7.0
[    11.434] (==) AIGLX enabled
[    11.434] Loading extension GLX
[    11.434] (==) Matched intel as autoconfigured driver 0
[    11.434] (==) Matched intel as autoconfigured driver 1
[    11.434] (==) Matched vesa as autoconfigured driver 2
[    11.434] (==) Matched modesetting as autoconfigured driver 3
[    11.434] (==) Matched fbdev as autoconfigured driver 4
[    11.434] (==) Assigned the driver to the xf86ConfigLayout
[    11.434] (II) LoadModule: "intel"
[    11.434] (II) Loading /usr/lib/xorg/modules/drivers/intel_drv.so
[    11.437] (II) Module intel: vendor="X.Org Foundation"
[    11.437]     compiled for 1.14.2.901, module version = 2.21.14
[    11.437]     Module class: X.Org Video Driver
[    11.437]     ABI class: X.Org Video Driver, version 14.1
[    11.437] (II) LoadModule: "vesa"
[    11.437] (II) Loading /usr/lib/xorg/modules/drivers/vesa_drv.so
[    11.437] (II) Module vesa: vendor="X.Org Foundation"
[    11.437]     compiled for 1.14.1, module version = 2.3.2
[    11.438]     Module class: X.Org Video Driver
[    11.438]     ABI class: X.Org Video Driver, version 14.1
[    11.438] (II) LoadModule: "modesetting"
[    11.438] (II) Loading /usr/lib/xorg/modules/drivers/modesetting_drv.so
[    11.438] (II) Module modesetting: vendor="X.Org Foundation"
[    11.438]     compiled for 1.14.1, module version = 0.8.0
[    11.438]     Module class: X.Org Video Driver
[    11.438]     ABI class: X.Org Video Driver, version 14.1
[    11.438] (II) LoadModule: "fbdev"
[    11.438] (II) Loading /usr/lib/xorg/modules/drivers/fbdev_drv.so
[    11.439] (II) Module fbdev: vendor="X.Org Foundation"
[    11.439]     compiled for 1.14.1, module version = 0.4.3
[    11.439]     Module class: X.Org Video Driver
[    11.439]     ABI class: X.Org Video Driver, version 14.1
[    11.439] (II) intel: Driver for Intel(R) Integrated Graphics Chipsets:
     i810, i810-dc100, i810e, i815, i830M, 845G, 854, 852GM/855GM, 865G,
     915G, E7221 (i915), 915GM, 945G, 945GM, 945GME, Pineview GM,
     Pineview G, 965G, G35, 965Q, 946GZ, 965GM, 965GME/GLE, G33, Q35, Q33,
     GM45, 4 Series, G45/G43, Q45/Q43, G41, B43, HD Graphics,
     HD Graphics 2000, HD Graphics 3000, HD Graphics 2500,
     HD Graphics 4000, HD Graphics P4000, HD Graphics 4600,
     HD Graphics 5000, HD Graphics P4600/P4700, Iris(TM) Graphics 5100,
     HD Graphics 4400, HD Graphics 4200, Iris(TM) Pro Graphics 5200
[    11.439] (II) VESA: driver for VESA chipsets: vesa
[    11.439] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
[    11.439] (II) FBDEV: driver for framebuffer: fbdev
[    11.439] (++) using VT number 7

[    11.440] (II) intel(0): SNA compiled: xserver-xorg-video-intel 
2:2.21.14-4ubuntu4 (Christopher James Halse Rogers <raof@ubuntu.com>)
[    11.441] (WW) Falling back to old probe method for vesa
[    11.441] (WW) Falling back to old probe method for modesetting
[    11.441] (WW) Falling back to old probe method for fbdev
[    11.441] (II) Loading sub module "fbdevhw"
[    11.441] (II) LoadModule: "fbdevhw"
[    11.442] (II) Loading /usr/lib/xorg/modules/libfbdevhw.so
[    11.442] (II) Module fbdevhw: vendor="X.Org Foundation"
[    11.442]     compiled for 1.14.2.901, module version = 0.0.2
[    11.442]     ABI class: X.Org Video Driver, version 14.1
[    11.443] (II) intel(0): Creating default Display subsection in 
Screen section
     "Default Screen Section" for depth/fbbpp 24/32
[    11.443] (==) intel(0): Depth 24, (--) framebuffer bpp 32
[    11.443] (==) intel(0): RGB weight 888
[    11.443] (==) intel(0): Default visual is TrueColor
[    11.443] (--) intel(0): Integrated Graphics Chipset: Intel(R) HD 
Graphics 4400
[    11.443] (--) intel(0): CPU: x86-64, sse2, sse3, ssse3, sse4.1, 
sse4.2, avx, avx2
[    11.443] (**) intel(0): Framebuffer tiled
[    11.443] (**) intel(0): Pixmaps tiled
[    11.443] (**) intel(0): "Tear free" disabled
[    11.443] (**) intel(0): Forcing per-crtc-pixmaps? no
[    11.443] (II) intel(0): Output eDP1 has no monitor section
[    11.443] (--) intel(0): found backlight control interface 
acpi_video0 (type 'firmware')
[    11.443] (II) intel(0): Output DP1 has no monitor section
[    11.443] (II) intel(0): Output HDMI1 has no monitor section
[    11.443] (--) intel(0): Output eDP1 using initial mode 1920x1080 on 
pipe 0
[    11.443] (==) intel(0): DPI set to (96, 96)
[    11.443] (II) Loading sub module "dri2"
[    11.443] (II) LoadModule: "dri2"
[    11.443] (II) Module "dri2" already built-in
[    11.443] (II) UnloadModule: "vesa"
[    11.443] (II) Unloading vesa
[    11.443] (II) UnloadModule: "modesetting"
[    11.443] (II) Unloading modesetting
[    11.443] (II) UnloadModule: "fbdev"
[    11.443] (II) Unloading fbdev
[    11.443] (II) UnloadSubModule: "fbdevhw"
[    11.443] (II) Unloading fbdevhw
[    11.443] (==) Depth 24 pixmap format is 32 bpp
[    11.446] (II) intel(0): SNA initialized with Haswell (gen7.5, gt2) 
backend
[    11.446] (==) intel(0): Backing store disabled
[    11.446] (==) intel(0): Silken mouse enabled
[    11.446] (II) intel(0): HW Cursor enabled
[    11.446] (II) intel(0): RandR 1.2 enabled, ignore the following 
RandR disabled message.
[    11.447] (==) intel(0): DPMS enabled
[    11.447] (II) intel(0): [DRI2] Setup complete
[    11.447] (II) intel(0): [DRI2]   DRI driver: i965
[    11.447] (II) intel(0): direct rendering: DRI2 Enabled
[    11.447] (==) intel(0): hotplug detection: "enabled"
[    11.447] (--) RandR disabled
[    11.452] (II) SELinux: Disabled on system
[    11.467] (II) AIGLX: enabled GLX_MESA_copy_sub_buffer
[    11.467] (II) AIGLX: enabled GLX_INTEL_swap_event
[    11.467] (II) AIGLX: enabled GLX_ARB_create_context
[    11.467] (II) AIGLX: enabled GLX_ARB_create_context_profile
[    11.467] (II) AIGLX: enabled GLX_EXT_create_context_es2_profile
[    11.467] (II) AIGLX: enabled GLX_SGI_swap_control and 
GLX_MESA_swap_control
[    11.467] (II) AIGLX: GLX_EXT_texture_from_pixmap backed by buffer 
objects
[    11.467] (II) AIGLX: Loaded and initialized i965
[    11.467] (II) GLX: Initialized DRI2 GL provider for screen 0
[    11.470] (II) intel(0): switch to mode 1920x1080@59.9 on pipe 0 
using eDP1, position (0, 0), rotation normal
[    11.488] (II) intel(0): Setting screen physical size to 508 x 285
[    11.497] (II) XKB: reuse xkmfile 
/var/lib/xkb/server-B20D7FC79C7F597315E3E501AEF10E0D866E8E92.xkm
[    11.499] (II) config/udev: Adding input device Power Button 
(/dev/input/event2)
[    11.499] (**) Power Button: Applying InputClass "evdev keyboard 
catchall"
[    11.499] (II) LoadModule: "evdev"
[    11.499] (II) Loading /usr/lib/xorg/modules/input/evdev_drv.so
[    11.500] (II) Module evdev: vendor="X.Org Foundation"
[    11.500]     compiled for 1.14.1, module version = 2.7.3
[    11.500]     Module class: X.Org XInput Driver
[    11.500]     ABI class: X.Org XInput driver, version 19.1
[    11.500] (II) Using input driver 'evdev' for 'Power Button'
[    11.500] (**) Power Button: always reports core events
[    11.500] (**) evdev: Power Button: Device: "/dev/input/event2"
[    11.500] (--) evdev: Power Button: Vendor 0 Product 0x1
[    11.500] (--) evdev: Power Button: Found keys
[    11.500] (II) evdev: Power Button: Configuring as keyboard
[    11.500] (**) Option "config_info" 
"udev:/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2/event2"
[    11.500] (II) XINPUT: Adding extended input device "Power Button" 
(type: KEYBOARD, id 6)
[    11.500] (**) Option "xkb_rules" "evdev"
[    11.500] (**) Option "xkb_model" "pc105"
[    11.500] (**) Option "xkb_layout" "us"
[    11.500] (**) Option "xkb_variant" "intl"
[    11.502] (II) XKB: reuse xkmfile 
/var/lib/xkb/server-A5431D4A34463C892C9E905E2E421B30A3CC30DD.xkm
[    11.503] (II) config/udev: Adding input device Video Bus 
(/dev/input/event4)
[    11.503] (**) Video Bus: Applying InputClass "evdev keyboard catchall"
[    11.503] (II) Using input driver 'evdev' for 'Video Bus'
[    11.503] (**) Video Bus: always reports core events
[    11.503] (**) evdev: Video Bus: Device: "/dev/input/event4"
[    11.503] (--) evdev: Video Bus: Vendor 0 Product 0x6
[    11.503] (--) evdev: Video Bus: Found keys
[    11.503] (II) evdev: Video Bus: Configuring as keyboard
[    11.503] (**) Option "config_info" 
"udev:/sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:00/input/input4/event4"
[    11.503] (II) XINPUT: Adding extended input device "Video Bus" 
(type: KEYBOARD, id 7)
[    11.503] (**) Option "xkb_rules" "evdev"
[    11.503] (**) Option "xkb_model" "pc105"
[    11.503] (**) Option "xkb_layout" "us"
[    11.503] (**) Option "xkb_variant" "intl"
[    11.504] (II) config/udev: Adding input device Power Button 
(/dev/input/event0)
[    11.504] (**) Power Button: Applying InputClass "evdev keyboard 
catchall"
[    11.504] (II) Using input driver 'evdev' for 'Power Button'
[    11.504] (**) Power Button: always reports core events
[    11.504] (**) evdev: Power Button: Device: "/dev/input/event0"
[    11.504] (--) evdev: Power Button: Vendor 0 Product 0x1
[    11.504] (--) evdev: Power Button: Found keys
[    11.504] (II) evdev: Power Button: Configuring as keyboard
[    11.504] (**) Option "config_info" 
"udev:/sys/devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input0/event0"
[    11.504] (II) XINPUT: Adding extended input device "Power Button" 
(type: KEYBOARD, id 8)
[    11.504] (**) Option "xkb_rules" "evdev"
[    11.504] (**) Option "xkb_model" "pc105"
[    11.504] (**) Option "xkb_layout" "us"
[    11.504] (**) Option "xkb_variant" "intl"
[    11.504] (II) config/udev: Adding input device Lid Switch 
(/dev/input/event1)
[    11.504] (II) No input driver specified, ignoring this device.
[    11.504] (II) This device may have been added with another device file.
[    11.504] (II) config/udev: Adding drm device (/dev/dri/card0)
[    11.504] (II) config/udev: Ignoring already known drm device 
(/dev/dri/card0)
[    11.504] (II) config/udev: Adding input device HDA Intel MID 
HDMI/DP,pcm=7 (/dev/input/event10)
[    11.504] (II) No input driver specified, ignoring this device.
[    11.504] (II) This device may have been added with another device file.
[    11.504] (II) config/udev: Adding input device HDA Intel MID 
HDMI/DP,pcm=3 (/dev/input/event11)
[    11.504] (II) No input driver specified, ignoring this device.
[    11.504] (II) This device may have been added with another device file.
[    11.505] (II) config/udev: Adding input device HDA Intel MID 
HDMI/DP,pcm=8 (/dev/input/event9)
[    11.505] (II) No input driver specified, ignoring this device.
[    11.505] (II) This device may have been added with another device file.
[    11.505] (II) config/udev: Adding input device Integrated Webcam 
(/dev/input/event5)
[    11.505] (**) Integrated Webcam: Applying InputClass "evdev keyboard 
catchall"
[    11.505] (II) Using input driver 'evdev' for 'Integrated Webcam'
[    11.505] (**) Integrated Webcam: always reports core events
[    11.505] (**) evdev: Integrated Webcam: Device: "/dev/input/event5"
[    11.505] (--) evdev: Integrated Webcam: Vendor 0xbda Product 0x5602
[    11.505] (--) evdev: Integrated Webcam: Found keys
[    11.505] (II) evdev: Integrated Webcam: Configuring as keyboard
[    11.505] (**) Option "config_info" 
"udev:/sys/devices/pci0000:00/0000:00:14.0/usb2/2-5/2-5:1.0/input/input5/event5"
[    11.505] (II) XINPUT: Adding extended input device "Integrated 
Webcam" (type: KEYBOARD, id 9)
[    11.505] (**) Option "xkb_rules" "evdev"
[    11.505] (**) Option "xkb_model" "pc105"
[    11.505] (**) Option "xkb_layout" "us"
[    11.505] (**) Option "xkb_variant" "intl"
[    11.505] (II) config/udev: Adding input device HDA Intel PCH 
Headphone (/dev/input/event12)
[    11.505] (II) No input driver specified, ignoring this device.
[    11.505] (II) This device may have been added with another device file.
[    11.505] (II) config/udev: Adding input device DLL05E3:01 06CB:2734 
(/dev/input/event7)
[    11.505] (**) DLL05E3:01 06CB:2734: Applying InputClass "evdev 
pointer catchall"
[    11.505] (II) Using input driver 'evdev' for 'DLL05E3:01 06CB:2734'
[    11.505] (**) DLL05E3:01 06CB:2734: always reports core events
[    11.505] (**) evdev: DLL05E3:01 06CB:2734: Device: "/dev/input/event7"
[    11.512] (--) evdev: DLL05E3:01 06CB:2734: Vendor 0x6cb Product 0x2734
[    11.512] (--) evdev: DLL05E3:01 06CB:2734: Found 3 mouse buttons
[    11.512] (--) evdev: DLL05E3:01 06CB:2734: Found relative axes
[    11.512] (--) evdev: DLL05E3:01 06CB:2734: Found x and y relative axes
[    11.512] (II) evdev: DLL05E3:01 06CB:2734: Configuring as mouse
[    11.512] (**) evdev: DLL05E3:01 06CB:2734: YAxisMapping: buttons 4 and 5
[    11.512] (**) evdev: DLL05E3:01 06CB:2734: EmulateWheelButton: 4, 
EmulateWheelInertia: 10, EmulateWheelTimeout: 200
[    11.512] (**) Option "config_info" 
"udev:/sys/devices/pci0000:00/INT33C3:00/i2c-8/8-002c/input/input7/event7"
[    11.512] (II) XINPUT: Adding extended input device "DLL05E3:01 
06CB:2734" (type: MOUSE, id 10)
[    11.512] (II) evdev: DLL05E3:01 06CB:2734: initialized for relative 
axes.
[    11.513] (**) DLL05E3:01 06CB:2734: (accel) keeping acceleration 
scheme 1
[    11.513] (**) DLL05E3:01 06CB:2734: (accel) acceleration profile 0
[    11.513] (**) DLL05E3:01 06CB:2734: (accel) acceleration factor: 2.000
[    11.513] (**) DLL05E3:01 06CB:2734: (accel) acceleration threshold: 4
[    11.513] (II) config/udev: Adding input device DLL05E3:01 06CB:2734 
(/dev/input/mouse0)
[    11.513] (II) No input driver specified, ignoring this device.
[    11.513] (II) This device may have been added with another device file.
[    11.513] (II) config/udev: Adding input device ATML1000:00 03EB:842F 
(/dev/input/event8)
[    11.513] (**) ATML1000:00 03EB:842F: Applying InputClass "evdev 
touchscreen catchall"
[    11.513] (II) Using input driver 'evdev' for 'ATML1000:00 03EB:842F'
[    11.513] (**) ATML1000:00 03EB:842F: always reports core events
[    11.513] (**) evdev: ATML1000:00 03EB:842F: Device: "/dev/input/event8"
[    11.514] (--) evdev: ATML1000:00 03EB:842F: Vendor 0x3eb Product 0x842f
[    11.514] (--) evdev: ATML1000:00 03EB:842F: Found absolute axes
[    11.514] (--) evdev: ATML1000:00 03EB:842F: Found absolute 
multitouch axes
[    11.514] (--) evdev: ATML1000:00 03EB:842F: Found x and y absolute axes
[    11.514] (--) evdev: ATML1000:00 03EB:842F: Found absolute touchscreen
[    11.514] (II) evdev: ATML1000:00 03EB:842F: Configuring as touchscreen
[    11.514] (**) evdev: ATML1000:00 03EB:842F: YAxisMapping: buttons 4 
and 5
[    11.514] (**) evdev: ATML1000:00 03EB:842F: EmulateWheelButton: 4, 
EmulateWheelInertia: 10, EmulateWheelTimeout: 200
[    11.514] (**) Option "config_info" 
"udev:/sys/devices/pci0000:00/INT33C3:00/i2c-8/8-004b/input/input8/event8"
[    11.514] (II) XINPUT: Adding extended input device "ATML1000:00 
03EB:842F" (type: TOUCHSCREEN, id 11)
[    11.514] (II) evdev: ATML1000:00 03EB:842F: initialized for absolute 
axes.
[    11.514] (**) ATML1000:00 03EB:842F: (accel) keeping acceleration 
scheme 1
[    11.514] (**) ATML1000:00 03EB:842F: (accel) acceleration profile 0
[    11.514] (**) ATML1000:00 03EB:842F: (accel) acceleration factor: 2.000
[    11.514] (**) ATML1000:00 03EB:842F: (accel) acceleration threshold: 4
[    11.515] (II) config/udev: Adding input device ATML1000:00 03EB:842F 
(/dev/input/mouse1)
[    11.515] (II) No input driver specified, ignoring this device.
[    11.515] (II) This device may have been added with another device file.
[    11.515] (II) config/udev: Adding input device AT Translated Set 2 
keyboard (/dev/input/event3)
[    11.515] (**) AT Translated Set 2 keyboard: Applying InputClass 
"evdev keyboard catchall"
[    11.515] (II) Using input driver 'evdev' for 'AT Translated Set 2 
keyboard'
[    11.515] (**) AT Translated Set 2 keyboard: always reports core events
[    11.515] (**) evdev: AT Translated Set 2 keyboard: Device: 
"/dev/input/event3"
[    11.515] (--) evdev: AT Translated Set 2 keyboard: Vendor 0x1 
Product 0x1
[    11.515] (--) evdev: AT Translated Set 2 keyboard: Found keys
[    11.515] (II) evdev: AT Translated Set 2 keyboard: Configuring as 
keyboard
[    11.515] (**) Option "config_info" 
"udev:/sys/devices/platform/i8042/serio0/input/input3/event3"
[    11.515] (II) XINPUT: Adding extended input device "AT Translated 
Set 2 keyboard" (type: KEYBOARD, id 12)
[    11.515] (**) Option "xkb_rules" "evdev"
[    11.515] (**) Option "xkb_model" "pc105"
[    11.515] (**) Option "xkb_layout" "us"
[    11.515] (**) Option "xkb_variant" "intl"
[    11.516] (II) config/udev: Adding input device Dell WMI hotkeys 
(/dev/input/event6)
[    11.516] (**) Dell WMI hotkeys: Applying InputClass "evdev keyboard 
catchall"
[    11.516] (II) Using input driver 'evdev' for 'Dell WMI hotkeys'
[    11.516] (**) Dell WMI hotkeys: always reports core events
[    11.516] (**) evdev: Dell WMI hotkeys: Device: "/dev/input/event6"
[    11.516] (--) evdev: Dell WMI hotkeys: Vendor 0 Product 0
[    11.516] (--) evdev: Dell WMI hotkeys: Found keys
[    11.516] (II) evdev: Dell WMI hotkeys: Configuring as keyboard
[    11.516] (**) Option "config_info" 
"udev:/sys/devices/virtual/input/input6/event6"
[    11.516] (II) XINPUT: Adding extended input device "Dell WMI 
hotkeys" (type: KEYBOARD, id 13)
[    11.516] (**) Option "xkb_rules" "evdev"
[    11.516] (**) Option "xkb_model" "pc105"
[    11.516] (**) Option "xkb_layout" "us"
[    11.516] (**) Option "xkb_variant" "intl"
[    11.793] (II) intel(0): EDID vendor "LGD", prod id 1021
[    11.793] (II) intel(0): Printing DDC gathered Modelines:
[    11.793] (II) intel(0): Modeline "1920x1080"x0.0  138.50  1920 1968 
2000 2080  1080 1083 1088 1111 +hsync -vsync (66.6 kHz eP)
[    17.641] (II) XKB: reuse xkmfile 
/var/lib/xkb/server-8CD2763E246F7107805A70A0C7DBAC594B3523D9.xkm
[    18.165] (II) XKB: reuse xkmfile 
/var/lib/xkb/server-657D1E36EA86B8E7C9DA9E3D0CE267494DF7D894.xkm
[    18.168] (II) XKB: reuse xkmfile 
/var/lib/xkb/server-657D1E36EA86B8E7C9DA9E3D0CE267494DF7D894.xkm
[    18.381] (II) XKB: reuse xkmfile 
/var/lib/xkb/server-280C0FB5E1610579A23BBD0FBA8EB1281D867EEF.xkm
[    18.722] (II) XKB: reuse xkmfile 
/var/lib/xkb/server-8CD2763E246F7107805A70A0C7DBAC594B3523D9.xkm
[    18.727] (II) XKB: reuse xkmfile 
/var/lib/xkb/server-657D1E36EA86B8E7C9DA9E3D0CE267494DF7D894.xkm


xinput --list

⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave 
pointer  (2)]
⎜   ↳ DLL05E3:01 06CB:2734                        id=10    [slave 
pointer  (2)]
⎜   ↳ ATML1000:00 03EB:842F                       id=11    [slave 
pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
     ↳ Virtual core XTEST keyboard                 id=5    [slave 
keyboard (3)]
     ↳ Power Button                                id=6    [slave 
keyboard (3)]
     ↳ Video Bus                                   id=7    [slave 
keyboard (3)]
     ↳ Power Button                                id=8    [slave 
keyboard (3)]
     ↳ Integrated Webcam                           id=9    [slave 
keyboard (3)]
     ↳ AT Translated Set 2 keyboard                id=12    [slave 
keyboard (3)]
     ↳ Dell WMI hotkeys                            id=13    [slave 
keyboard (3)]


Relevant lines from dmesg

[    0.000000] Linux version 3.12.0-031200rc3-generic (apw@gomeisa) (gcc 
version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #201309291835 SMP Sun Sep 
29 22:37:02 UTC 2013
[    0.000000] Command line: 
BOOT_IMAGE=/boot/vmlinuz-3.12.0-031200rc3-generic 
root=UUID=8e4879ce-4777-4c48-b6d7-5b3b4b116ad3 ro quiet splash vt.handoff=7
[    0.000000] DMI: Dell Inc. XPS 12-9Q33/XPS 12-9Q33, BIOS A02 07/26/2013

[    1.145083] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] 
at 0x60,0x64 irq 1,12
[    1.169878] serio: i8042 KBD port at 0x60,0x64 irq 1
[    1.169882] serio: i8042 AUX port at 0x60,0x64 irq 12
[    1.170063] mousedev: PS/2 mouse device common for all mice

[    8.636649] ACPI Warning: 0x0000000000001828-0x000000000000182f 
SystemIO conflicts with Region \PMIO 1 (20130725/utaddress-251)
[    8.636656] ACPI: If an ACPI driver is available for this device, you 
should use it instead of the native driver
[    8.636660] ACPI Warning: 0x0000000000001c30-0x0000000000001c3f 
SystemIO conflicts with Region \GPRL 1 (20130725/utaddress-251)
[    8.636664] ACPI Warning: 0x0000000000001c30-0x0000000000001c3f 
SystemIO conflicts with Region \GPR_ 2 (20130725/utaddress-251)
[    8.636667] ACPI: If an ACPI driver is available for this device, you 
should use it instead of the native driver
[    8.636669] ACPI Warning: 0x0000000000001c00-0x0000000000001c2f 
SystemIO conflicts with Region \GPRL 1 (20130725/utaddress-251)
[    8.636672] ACPI Warning: 0x0000000000001c00-0x0000000000001c2f 
SystemIO conflicts with Region \GPR_ 2 (20130725/utaddress-251)
[    8.636675] ACPI: If an ACPI driver is available for this device, you 
should use it instead of the native driver
[    8.636677] lpc_ich: Resource conflict(s) found affecting gpio_ich

[    8.915773] i2c_hid 8-002c: failed to retrieve report from device.
[    8.918200] i2c_hid 8-002c: failed to retrieve report from device.
[    8.918897] i2c_hid 8-002c: failed to retrieve report from device.
[    8.924053] i2c_hid 8-002c: failed to retrieve report from device.
[    8.924118] input: DLL05E3:01 06CB:2734 as 
/devices/pci0000:00/INT33C3:00/i2c-8/8-002c/input/input7
[    8.924297] hid-generic 0018:06CB:2734.0003: input,hidraw0: <UNKNOWN> 
HID v1.00 Pointer [DLL05E3:01 06CB:2734] on
[    8.928162] i2c_hid 8-004b: error in i2c_hid_init_report size:20 / 
ret_size:0
[    8.930894] i2c_hid 8-004b: error in i2c_hid_init_report size:20 / 
ret_size:0
[    8.933598] i2c_hid 8-004b: error in i2c_hid_init_report size:13 / 
ret_size:0

[    8.946226] input: ATML1000:00 03EB:842F as 
/devices/pci0000:00/INT33C3:00/i2c-8/8-004b/input/input8
[    8.946815] hid-multitouch 0018:03EB:842F.0002: input,hidraw1: 
<UNKNOWN> HID v1.00 Device [ATML1000:00 03EB:842F] on


ls /proc

1     1353  1671  1794  1995  23    304  485  56   922          iomem 
    sched_debug
10    14    1673  18    2     2334  31   490  57   928          ioports 
        schedstat
1005  140   1681  1807  20    24    33   493  579  93           irq    scsi
1016  141   1683  1821  2002  2456  330  495  629  acpi         kallsyms 
       self
1027  1413  1686  1844  2005  2480  338  496  637  asound       kcore 
    slabinfo
1044  142   1690  1851  2011  2486  34   498  69   buddyinfo key-users 
    softirqs
1058  143   1692  1853  2021  2487  35   499  7    bus          kmsg 
  stat
1094  15    17    19    2028  25    36   5    718  cgroups kpagecount 
swaps
11    1522  1701  192   2029  2557  37   507  73   cmdline kpageflags   sys
1142  1566  1720  1920  2034  2562  38   51   765  consoles 
latency_stats  sysrq-trigger
1155  1568  1738  1922  2044  26    39   510  795  cpuinfo      loadavg 
        sysvipc
1156  16    1748  1924  2048  2668  41   511  8    crypto       locks 
    timer_list
1157  1617  1760  1925  2052  2683  42   513  800  devices      mdstat 
      timer_stats
1158  1619  1761  1928  21    2716  43   514  822  diskstats    meminfo 
        tty
1189  1633  1762  193   2186  2738  44   52   832  dma          misc 
  uptime
12    1639  1763  1931  2194  2765  45   528  834  driver       modules 
        version
1200  1645  1765  194   2201  2767  457  529  9    execdomains  mounts 
      vmallocinfo
1214  1658  1781  1945  2207  28    46   53   900  fb           mtrr 
  vmstat
1261  1661  1785  1948  2215  29    467  531  908  filesystems  net 
zoneinfo
1292  1664  1786  1965  2232  3     47   54   919  fs           pagetypeinfo
13    1666  1787  1976  2284  30    483  55   92   interrupts   partitions


[X.] Other notes, patches, fixes, workarounds:

Downstream Launchpad bug report:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1218973

After blacklisting i2c_hid this is my xinput list:

⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave 
pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                  id=11    [slave 
pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
     ↳ Virtual core XTEST keyboard                 id=5    [slave 
keyboard (3)]
     ↳ Power Button                                id=6    [slave 
keyboard (3)]
     ↳ Video Bus                                   id=7    [slave 
keyboard (3)]
     ↳ Power Button                                id=8    [slave 
keyboard (3)]
     ↳ Integrated Webcam                           id=9    [slave 
keyboard (3)]
     ↳ AT Translated Set 2 keyboard                id=10    [slave 
keyboard (3)]
     ↳ Dell WMI hotkeys                            id=12    [slave 
keyboard (3)]

As you can see, the touchpad is no longer called "DLL05E3:01 06CB:2734". 
However, touchscreen "ATML1000:00 03EB:842F" is missing now.

Thank you for your time.

--
Wouter van der Graaf
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [RFC] Input: introduce ABS_MAX2/CNT2 and friends
From: David Herrmann @ 2013-10-07 10:58 UTC (permalink / raw)
  To: Peter Hutterer
  Cc: Dmitry Torokhov, open list:HID CORE LAYER, Henrik Rydberg,
	Benjamin Tissoires, Jiri Kosina, linux-kernel
In-Reply-To: <20131007013058.GA20549@yabbi.redhat.com>

Hi

On Mon, Oct 7, 2013 at 3:30 AM, Peter Hutterer <peter.hutterer@who-t.net> wrote:
> On Sun, Oct 06, 2013 at 05:04:36PM -0700, Dmitry Torokhov wrote:
>> Peter Hutterer <peter.hutterer@who-t.net> wrote:
>> >On Sun, Oct 06, 2013 at 12:47:00AM -0700, Dmitry Torokhov wrote:
>> >> On Fri, Oct 04, 2013 at 09:32:23AM +1000, Peter Hutterer wrote:
>> >> > On Thu, Oct 03, 2013 at 12:10:36AM +0200, David Herrmann wrote:
>> >> > > As we painfully noticed during the 3.12 merge-window our
>> >> > > EVIOCGABS/EVIOCSABS API is limited to ABS_MAX<=0x3f. We tried
>> >several
>> >> > > hacks to work around it but if we ever decide to increase
>> >ABS_MAX, the
>> >> > > EVIOCSABS ioctl ABI might overflow into the next byte causing
>> >horrible
>> >> > > misinterpretations in the kernel that we cannot catch.
>> >> > >
>> >> > > Therefore, we decided to go with ABS_MAX2/CNT2 and introduce two
>> >new
>> >> > > ioctls to get/set abs-params. They no longer encode the ABS code
>> >in the
>> >> > > ioctl number and thus allow up to 4 billion ABS codes.
>> >> > >
>> >> > > Unfortunately, the uinput API also hard-coded the ABS_CNT value
>> >in its
>> >> > > ABI. To avoid any hacks in uinput, we simply introduce a new
>> >> > > uinput_user_dev2 to replace the old one. The new API allows
>> >growing
>> >> > > ABS_CNT2 values without any API changes.
>> >> > >
>> >> > > Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
>> >> > > ---
>> >> > > Hi
>> >> > >
>> >> > > This is only compile-tested but I wanted to get a first revision
>> >out to let
>> >> > > people know what we're working on. Unfortunately, the ABS API has
>> >this horribly
>> >> > > low ABS_MAX limit and we couldn't figure out a way to increase it
>> >while keeping
>> >> > > ABI compatibility.
>> >> > >
>> >> > > Any feedback and review is welcome. And if anyone spots ABI
>> >breakage by this
>> >> > > patch, please let me know. If nothing comes up I will patch
>> >libevdev to use the
>> >> > > new API, write some extensive test-cases and push this forward.
>> >> > >
>> >> > > As a sidenote: I didn't modify joydev to use the new values.
>> >Fortunately, the
>> >> > > joydev API would allow switching to ABS_CNT2 without breaking
>> >API, but it would
>> >> > > limit the new ABS_CNT2 to 16k. This is quite high but nothing
>> >compared to the
>> >> > >  2^32 that we can theoretically support now. If you think 16k
>> >ought to be enough
>> >> > > (probably?) I can adjust the joydev API, too.
>> >> > > All other kernel users were converted to the new values. Nothing
>> >left behind..
>> >> >
>> >> >
>> >> > just a comment from skimming the patch:
>> >> > if you need a new uinput abi anyway, can we add the resolution
>> >here? it's
>> >> > sorely needed for some tests. see also the patch Benjamin sent a
>> >while ago
>> >> > ("input/uinput: support abs resolution", July 15 2013)
>> >>
>> >> Indeed. Also, while we are at it, would it make sense to allow
>> >> requesting a range of ABS infos at once?
>> >
>> >yes, but what API did you have in mind?
>> >
>>
>> I was thinking about specifying the start ABS but and the count and array of absinfo structures to be filled.
>
> yeah, that works for me (I suspect 90% of users will use ABS_MAX anyway :)

And how exactly should this look like? Like this:

#define EVIOCGABS2(cnt)             _IOR('E', 0x92, struct
input_absinfo2 * (cnt))

Or like this:

struct input_absinfo3 {
  size_t cnt;
  struct input_absinfo2[];
};

#define EVIOCGABS2             _IOR('E', 0x92, struct input_absinfo3)

btw., resolution added and uinput changes split off into separate patch.

Thanks
David

^ permalink raw reply

* Re: [PATCH v2] Input: add driver for Neonode zForce based touchscreens
From: Heiko Stübner @ 2013-10-07 11:17 UTC (permalink / raw)
  To: Dmitry Torokhov, Henrik Rydberg; +Cc: linux-kernel, linux-input
In-Reply-To: <201309231550.27313.heiko@sntech.de>

Hi,

Am Montag, 23. September 2013, 15:50:26 schrieb Heiko Stübner:
> Am Samstag, 7. September 2013, 01:33:11 schrieb Heiko Stübner:
> > This adds a driver for touchscreens using the zforce infrared
> > technology from Neonode connected via i2c to the host system.
> > 
> > It supports multitouch with up to two fingers and tracking of the
> > contacts in hardware.
> > 
> > Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> > ---
> > changes since v1:
> > - address comments from Dmitry Torokhov
> > 
> >   but I kept the access_mutex due to the possible race I described in the
> > 
> > mail:
> >   - touch -> interrupt
> >   - isr reads first packet
> >   - user closes device -> stop command sent
> >   - isr reads payload
> > 
> > - address comments from Henrik Rydberg, letting the input system collect
> > 
> >   singletouch from the multitouch data using the appropriate functions
> 
> ping?
> 

is the driver ok in this form or is more work needed?


Thanks
Heiko
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Testing ti_am335x_adc continuous mode (WAS: Re: [PATCH 2/2]
From: Sebastian Andrzej Siewior @ 2013-10-07 11:53 UTC (permalink / raw)
  To: Zubair Lutfullah
  Cc: jic23-KWPb1pKIrIJaa/9Udqfwiw,
	dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w,
	linux-iio-u79uwXL29TY76Z2rM5mHXA,
	linux-input-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, Felipe Balbi
In-Reply-To: <1379503383-17086-3-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Hi Zubair,

I have here am335x-evm board. The output of voltage4 (via `cat
/sys/bus/iio/devices/iio\:device0/in_voltage4_raw´) returns values in
the range 570…580. I tested the continuous sampling mdoe by executing
the following commands:

|echo 1 > /sys/bus/iio/devices/iio\:device0/scan_elements/in_voltage4_en
|echo 25 > /sys/bus/iio/devices/iio\:device0/buffer/length
|echo 1 > /sys/bus/iio/devices/iio\:device0/buffer/enable
|sleep 1
|echo 0 > /sys/bus/iio/devices/iio\:device0/buffer/enable
|cat /dev/iio\:device0 > iio
|hexdump -C iio

and the output is:
|00000000  37 02 92 02 1f 07 0a 06  20 06 31 06 2f 07 2a 07
|00000010  2b 07 2d 07 2c 07 28 07  2c 07 2b 07 2b 07 0c 06
|00000020  21 06 32 06 2e 07 2c 07  2a 07 2a 07 2c 07 2b 07
|00000030  29 07 27 07 28 07 29 07  2a 07 0d 06 21 06 35 06

The first entry is in the range that I would expect. The second is
slitghly higher. The third and following entries are out of range. Have
you observed something like that? Is my testing close to what you have
done or did I make an mistake here?

Sebastian

^ permalink raw reply

* Re: Testing ti_am335x_adc continuous mode (WAS: Re: [PATCH 2/2]
From: Zubair Lutfullah : @ 2013-10-07 12:50 UTC (permalink / raw)
  To: Sebastian Andrzej Siewior
  Cc: Zubair Lutfullah, jic23, dmitry.torokhov, linux-iio, linux-input,
	linux-kernel, gregkh, Felipe Balbi
In-Reply-To: <20131007115317.GA6135@linutronix.de>

On Mon, Oct 07, 2013 at 01:53:17PM +0200, Sebastian Andrzej Siewior wrote:
> Hi Zubair,
> 
> I have here am335x-evm board. The output of voltage4 (via `cat
> /sys/bus/iio/devices/iio\:device0/in_voltage4_raw´) returns values in
> the range 570…580. I tested the continuous sampling mdoe by executing
> the following commands:
> 
> |echo 1 > /sys/bus/iio/devices/iio\:device0/scan_elements/in_voltage4_en
> |echo 25 > /sys/bus/iio/devices/iio\:device0/buffer/length
> |echo 1 > /sys/bus/iio/devices/iio\:device0/buffer/enable
> |sleep 1
> |echo 0 > /sys/bus/iio/devices/iio\:device0/buffer/enable
> |cat /dev/iio\:device0 > iio
> |hexdump -C iio
> 
> and the output is:
> |00000000  37 02 92 02 1f 07 0a 06  20 06 31 06 2f 07 2a 07
> |00000010  2b 07 2d 07 2c 07 28 07  2c 07 2b 07 2b 07 0c 06
> |00000020  21 06 32 06 2e 07 2c 07  2a 07 2a 07 2c 07 2b 07
> |00000030  29 07 27 07 28 07 29 07  2a 07 0d 06 21 06 35 06
> 
> The first entry is in the range that I would expect. The second is
> slitghly higher. The third and following entries are out of range. Have
> you observed something like that? Is my testing close to what you have
> done or did I make an mistake here?

I can't read the hex dump easily..

Keep in mind that the driver now uses 16 bit storage. 

Also, I used generic_buffer.c after removing the trigger checks.

The driver would report stable values for 1.8V on one channel and gnd
on another channel.

Hope this helps
ZubairLK

> 
> Sebastian
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* [PATCH] Input: evdev: Fall back to vmalloc for client event buffer
From: Daniel Stone @ 2013-10-07 13:06 UTC (permalink / raw)
  To: linux-input; +Cc: Henrik Rydberg

evdev always tries to allocate the event buffer for clients using
kzalloc rather than vmalloc, presumably to avoid mapping overhead where
possible.  However, drivers like bcm5974, which claims support for
reporting 16 fingers simultaneously, can have an extraordinarily large
buffer.  The resultant contiguous order-4 allocation attempt fails due
to fragmentation, and the device is thus unusable until reboot.

Try kzalloc if we can to avoid the mapping overhead, but if that fails,
fall back to vzalloc.

Signed-off-by: Daniel Stone <daniels@collabora.com>
---
 drivers/input/evdev.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index f0f8928..edfca4a 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -18,6 +18,7 @@
 #include <linux/poll.h>
 #include <linux/sched.h>
 #include <linux/slab.h>
+#include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/input/mt.h>
@@ -289,7 +290,11 @@ static int evdev_release(struct inode *inode, struct file *file)
 	mutex_unlock(&evdev->mutex);
 
 	evdev_detach_client(evdev, client);
-	kfree(client);
+
+	if (is_vmalloc_addr(client))
+		vfree(client);
+	else
+		kfree(client);
 
 	evdev_close_device(evdev);
 
@@ -311,10 +316,12 @@ static int evdev_open(struct inode *inode, struct file *file)
 	unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev);
 	struct evdev_client *client;
 	int error;
+	int size =
+		sizeof(struct evdev_client) + bufsize * sizeof(struct input_event);
 
-	client = kzalloc(sizeof(struct evdev_client) +
-				bufsize * sizeof(struct input_event),
-			 GFP_KERNEL);
+	client = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
+	if (!client)
+		client = vzalloc(size);
 	if (!client)
 		return -ENOMEM;
 
-- 
1.8.3.1


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox