linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH RFC 0/4] Improve support for Logitech MX Anywhere 2
@ 2017-03-25 22:49 Mauro Carvalho Chehab
  2017-03-25 22:49 ` [PATCH RFC 1/4] input: add an EV_REL event for high-res vertical wheel Mauro Carvalho Chehab
  0 siblings, 1 reply; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2017-03-25 22:49 UTC (permalink / raw)
  To: linux-input
  Cc: Mauro Carvalho Chehab, Dmitry Torokhov, Peter Hutterer,
	Benjamin Tissoires, Hans Verkuil, Jiri Kosina, Greg Kroah-Hartman,
	Stuart Yoder, Ingo Tuchscherer, Douglas Anderson,
	Martin Schwidefsky, Kamil Debski, Ping Cheng,
	Mauro Carvalho Chehab

Logitech MX Anywhere 2 and MX Master have a high res wheel, with
is currently supported only in legacy low-resolution mode.

Add the needed bits to support it.

Note: The approach taken here were to add a new EV_REL event
when the device generates output in high-resolution mode, as it
would not require any changes on userspace for low resolution.

Implementing support for high resolution mode should also be simple.

Mauro Carvalho Chehab (4):
  input: add an EV_REL event for high-res vertical wheel
  hid-logitech-hidpp: add support for high res wheel
  input: add a EV_SW event for ratchet switch
  hid-logitech-hidpp: add support for ratchet switch

 drivers/hid/hid-logitech-hidpp.c       | 216 +++++++++++++++++++++++++++++++++
 include/linux/mod_devicetable.h        |   2 +-
 include/uapi/linux/input-event-codes.h |   5 +-
 3 files changed, 221 insertions(+), 2 deletions(-)

-- 
2.9.3



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH RFC 1/4] input: add an EV_REL event for high-res vertical wheel
  2017-03-25 22:49 [PATCH RFC 0/4] Improve support for Logitech MX Anywhere 2 Mauro Carvalho Chehab
@ 2017-03-25 22:49 ` Mauro Carvalho Chehab
  2017-03-25 22:49   ` [PATCH RFC 2/4] hid-logitech-hidpp: add support for high res wheel Mauro Carvalho Chehab
  2017-03-27  1:40   ` [PATCH RFC 1/4] input: add an EV_REL event for high-res vertical wheel Peter Hutterer
  0 siblings, 2 replies; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2017-03-25 22:49 UTC (permalink / raw)
  To: linux-input
  Cc: Mauro Carvalho Chehab, Dmitry Torokhov, Peter Hutterer,
	Benjamin Tissoires, Hans Verkuil, Mauro Carvalho Chehab,
	Douglas Anderson, Kamil Debski, Ping Cheng

As some devices can produce either low-res or high-res
vertical wheel EV_REL events, add a new event to allow
userspace to distinguish between them.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
---
 include/uapi/linux/input-event-codes.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
index 3af60ee69053..23b2d377af59 100644
--- a/include/uapi/linux/input-event-codes.h
+++ b/include/uapi/linux/input-event-codes.h
@@ -703,6 +703,7 @@
 #define REL_DIAL		0x07
 #define REL_WHEEL		0x08
 #define REL_MISC		0x09
+#define REL_HIRES_WHEEL		0x0a
 #define REL_MAX			0x0f
 #define REL_CNT			(REL_MAX+1)
 
-- 
2.9.3



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH RFC 2/4] hid-logitech-hidpp: add support for high res wheel
  2017-03-25 22:49 ` [PATCH RFC 1/4] input: add an EV_REL event for high-res vertical wheel Mauro Carvalho Chehab
@ 2017-03-25 22:49   ` Mauro Carvalho Chehab
  2017-03-25 22:49     ` [PATCH RFC 3/4] input: add a EV_SW event for ratchet switch Mauro Carvalho Chehab
  2017-03-27  1:40   ` [PATCH RFC 1/4] input: add an EV_REL event for high-res vertical wheel Peter Hutterer
  1 sibling, 1 reply; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2017-03-25 22:49 UTC (permalink / raw)
  To: linux-input
  Cc: Mauro Carvalho Chehab, Dmitry Torokhov, Peter Hutterer,
	Benjamin Tissoires, Jiri Kosina

Some Logitech mouses (MX Anyware 2 and MX Master) have support
for a high-resolution wheel.

This wheel can work in backward-compatible mode, generating
wheel events via HID normal events, or it can use new
HID++ events that report not only the wheel movement, but also
the resolution.

Add support for it.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
---
 drivers/hid/hid-logitech-hidpp.c | 197 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 197 insertions(+)

diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
index 2e2515a4c070..ee3f544bda4f 100644
--- a/drivers/hid/hid-logitech-hidpp.c
+++ b/drivers/hid/hid-logitech-hidpp.c
@@ -62,6 +62,7 @@ MODULE_PARM_DESC(disable_tap_to_click,
 #define HIDPP_QUIRK_WTP_PHYSICAL_BUTTONS	BIT(22)
 #define HIDPP_QUIRK_NO_HIDINPUT			BIT(23)
 #define HIDPP_QUIRK_FORCE_OUTPUT_REPORTS	BIT(24)
+#define HIDPP_QUIRK_HIRES_SCROLL		BIT(25)
 
 #define HIDPP_QUIRK_DELAYED_INIT		(HIDPP_QUIRK_NO_HIDINPUT | \
 						 HIDPP_QUIRK_CONNECT_EVENTS)
@@ -1361,6 +1362,67 @@ static int hidpp_ff_deinit(struct hid_device *hid)
 	return 0;
 }
 
+/* -------------------------------------------------------------------------- */
+/* 0x2121: High Resolution Wheel                                              */
+/* -------------------------------------------------------------------------- */
+
+#define HIDPP_HIGH_RES_WHEEL		0x2121
+
+#define CMD_MOUSE_SET_WHEEL_MODE	0x20
+#define CMD_MOUSE_GET_WHEEL_RATCHET	0x30
+
+struct high_res_wheel_data {
+	u8 feature_index;
+	struct input_dev *input;
+	bool ratchet;
+};
+
+/**
+ * hidpp_mouse_set_wheel_mode - Sets high resolution wheel mode
+ *
+ * @invert:	if true, inverts wheel movement
+ * @high_res:	if true, wheel is in high-resolution mode. Otherwise, low res
+ * @hidpp:	if true, report wheel events via HID++ notification. If false,
+ *		use standard HID events
+ */
+static int hidpp_mouse_set_wheel_mode(struct hidpp_device *hidpp,
+				      bool invert,
+				      bool high_res,
+				      bool hidpp_mode)
+{
+	struct high_res_wheel_data *hrd = hidpp->private_data;
+	u8 feature_type;
+	struct hidpp_report response;
+	int ret;
+	u8 params[16] = { 0 };
+
+	if (!hrd->feature_index) {
+		ret = hidpp_root_get_feature(hidpp,
+					    HIDPP_HIGH_RES_WHEEL,
+					    &hrd->feature_index,
+					    &feature_type);
+		if (ret)
+			/* means that the device is not powered up */
+			return ret;
+	}
+
+	params[0] = invert     ? 0x4 : 0  |
+		    high_res   ? 0x2 : 0  |
+		    hidpp_mode ? 0x1 : 0;
+
+	ret = hidpp_send_fap_command_sync(hidpp, hrd->feature_index,
+					  CMD_MOUSE_SET_WHEEL_MODE,
+					  params, 16, &response);
+	if (ret > 0) {
+		hid_err(hidpp->hid_dev, "%s: received protocol error 0x%02x\n",
+			__func__, ret);
+		return -EPROTO;
+	}
+	if (ret)
+		return ret;
+
+	return 0;
+}
 
 /* ************************************************************************** */
 /*                                                                            */
@@ -1816,6 +1878,119 @@ static int m560_input_mapping(struct hid_device *hdev, struct hid_input *hi,
 }
 
 /* ------------------------------------------------------------------------- */
+/* Logitech mouse devices with high resolution wheel                         */
+/* ------------------------------------------------------------------------- */
+
+static int high_res_raw_event(struct hid_device *hdev, u8 *data, int size)
+{
+	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
+	struct high_res_wheel_data *hrd = hidpp->private_data;
+
+	/* Don't handle special raw events before setting feature_index */
+	if (!hrd || !hrd->feature_index)
+		return 0;
+
+	if (data[0] != REPORT_ID_HIDPP_LONG ||
+	    data[2] != hrd->feature_index)
+		return 1;
+
+	if (size < 8) {
+		hid_err(hdev, "error in report: size = %d: %*ph\n", size,
+			size, data);
+		return 0;
+	}
+
+	/*
+	 * high res wheel mouse events
+	 *
+	 * Wheel movement events are like:
+	 *
+	 * 11 03 0b 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
+	 *
+	 * data[0] = 0x11
+	 * data[1] = device-id
+	 * data[2] = feature index (0b)
+	 * data[3] = event type: 0x00 - wheel movement
+	 * data[4] = bitmask:
+	 *		bits 0-3: number of sampling periods combined
+	 *		bit 4:
+	 *			0 = low resolution
+	 *			1 = high resolution
+	 * data[5] - deltaV MSB
+	 * data[6] = deltaV LSB
+	 * Remaining payload is reserved
+	 *
+	 * Ratchet events are like:
+	 * 11 03 0b 10 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+	 *
+	 * data[0] = 0x11
+	 * data[1] = device-id
+	 * data[2] = feature index
+	 * data[3] = event type: 0x10 - ratchet state
+	 * data[4] = bit 0:
+	 *		1 = ratchet
+	 *		0 = free wheel
+	 * Remaining payload is reserved
+	 */
+
+	if (data[3] == 0) {
+		s16 delta = data[6] | data[5] << 8;
+		bool res = data[4] & 0x10;
+
+		/*
+		 * Report high-resolution events as REL_HWHEEL and
+		 * low-resolution events as REL_WHEEL.
+		 */
+		if (res)
+			input_report_rel(hrd->input, REL_HIRES_WHEEL, delta);
+		else
+			input_report_rel(hrd->input, REL_WHEEL, delta);
+	}
+
+	/* FIXME: also report ratchet events to userspace */
+
+	return 1;
+}
+
+static void high_res_populate_input(struct hidpp_device *hidpp,
+		struct input_dev *input_dev, bool origin_is_hid_core)
+{
+	struct high_res_wheel_data *hrd = hidpp->private_data;
+
+	hrd->input = input_dev;
+
+	__set_bit(REL_WHEEL, hrd->input->relbit);
+	__set_bit(REL_HIRES_WHEEL, hrd->input->relbit);
+}
+
+
+static int high_res_allocate(struct hid_device *hdev)
+{
+	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
+	struct high_res_wheel_data *hrd;
+
+	hrd = devm_kzalloc(&hdev->dev, sizeof(struct high_res_wheel_data),
+			GFP_KERNEL);
+	if (!hrd)
+		return -ENOMEM;
+
+	hidpp->private_data = hrd;
+
+	return 0;
+};
+
+static int high_res_connect(struct hid_device *hdev, bool connected)
+{
+	struct hidpp_device *hidpp = hid_get_drvdata(hdev);
+
+	if (!connected)
+		return 0;
+
+	/* Enable HID++ wheel event output mode */
+	return hidpp_mouse_set_wheel_mode(hidpp, false, false, true);
+}
+
+/* ------------------------------------------------------------------------- */
 /* Logitech K400 devices                                                     */
 /* ------------------------------------------------------------------------- */
 
@@ -1955,6 +2130,9 @@ static void hidpp_populate_input(struct hidpp_device *hidpp,
 		wtp_populate_input(hidpp, input, origin_is_hid_core);
 	else if (hidpp->quirks & HIDPP_QUIRK_CLASS_M560)
 		m560_populate_input(hidpp, input, origin_is_hid_core);
+	else if (hidpp->quirks & HIDPP_QUIRK_HIRES_SCROLL)
+		high_res_populate_input(hidpp, input, origin_is_hid_core);
+
 }
 
 static int hidpp_input_configured(struct hid_device *hdev,
@@ -2054,6 +2232,8 @@ static int hidpp_raw_event(struct hid_device *hdev, struct hid_report *report,
 		return wtp_raw_event(hdev, data, size);
 	else if (hidpp->quirks & HIDPP_QUIRK_CLASS_M560)
 		return m560_raw_event(hdev, data, size);
+	else if (hidpp->quirks & HIDPP_QUIRK_HIRES_SCROLL)
+		return high_res_raw_event(hdev, data, size);
 
 	return 0;
 }
@@ -2141,6 +2321,10 @@ static void hidpp_connect_event(struct hidpp_device *hidpp)
 		ret = k400_connect(hdev, connected);
 		if (ret)
 			return;
+	} else if (hidpp->quirks & HIDPP_QUIRK_HIRES_SCROLL) {
+		ret = high_res_connect(hdev, connected);
+		if (ret)
+			return;
 	}
 
 	if (!connected || hidpp->delayed_input)
@@ -2215,6 +2399,7 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
 		hidpp->quirks &= ~HIDPP_QUIRK_CLASS_WTP;
 		hidpp->quirks &= ~HIDPP_QUIRK_CONNECT_EVENTS;
 		hidpp->quirks &= ~HIDPP_QUIRK_NO_HIDINPUT;
+		hidpp->quirks &= ~HIDPP_QUIRK_HIRES_SCROLL;
 	}
 
 	if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP) {
@@ -2229,6 +2414,10 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
 		ret = k400_allocate(hdev);
 		if (ret)
 			goto allocate_fail;
+	} else if (hidpp->quirks & HIDPP_QUIRK_HIRES_SCROLL) {
+		ret = high_res_allocate(hdev);
+		if (ret)
+			goto allocate_fail;
 	}
 
 	INIT_WORK(&hidpp->work, delayed_work_cb);
@@ -2354,6 +2543,14 @@ static const struct hid_device_id hidpp_devices[] = {
 	  HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE,
 		USB_VENDOR_ID_LOGITECH, 0x402d),
 	  .driver_data = HIDPP_QUIRK_DELAYED_INIT | HIDPP_QUIRK_CLASS_M560 },
+	{ /* Logitech MX Master with high resolution scroll */
+	  HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE,
+		USB_VENDOR_ID_LOGITECH, 0x4041),
+	  .driver_data = HIDPP_QUIRK_CONNECT_EVENTS | HIDPP_QUIRK_HIRES_SCROLL },
+	{ /* Logitech MX Anywhere 2r with high resolution scroll */
+	  HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE,
+		USB_VENDOR_ID_LOGITECH, 0x404a),
+	  .driver_data = HIDPP_QUIRK_CONNECT_EVENTS | HIDPP_QUIRK_HIRES_SCROLL },
 	{ /* Keyboard logitech K400 */
 	  HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE,
 		USB_VENDOR_ID_LOGITECH, 0x4024),
-- 
2.9.3



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH RFC 3/4] input: add a EV_SW event for ratchet switch
  2017-03-25 22:49   ` [PATCH RFC 2/4] hid-logitech-hidpp: add support for high res wheel Mauro Carvalho Chehab
@ 2017-03-25 22:49     ` Mauro Carvalho Chehab
  2017-03-25 22:49       ` [PATCH RFC 4/4] hid-logitech-hidpp: add support " Mauro Carvalho Chehab
  2017-03-27  1:53       ` [PATCH RFC 3/4] input: add a EV_SW event " Peter Hutterer
  0 siblings, 2 replies; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2017-03-25 22:49 UTC (permalink / raw)
  To: linux-input
  Cc: Mauro Carvalho Chehab, Dmitry Torokhov, Peter Hutterer,
	Benjamin Tissoires, Greg Kroah-Hartman, Martin Schwidefsky,
	Mauro Carvalho Chehab, Ingo Tuchscherer, Stuart Yoder,
	Hans Verkuil, Douglas Anderson, Ping Cheng, Kamil Debski

Some mouses have a switch on their wheel, allowing to switch
between ratchet or free wheel mode. Add support for it.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
---
 include/linux/mod_devicetable.h        | 2 +-
 include/uapi/linux/input-event-codes.h | 4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 8a57f0b1242d..73534c591b40 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -292,7 +292,7 @@ struct pcmcia_device_id {
 #define INPUT_DEVICE_ID_LED_MAX		0x0f
 #define INPUT_DEVICE_ID_SND_MAX		0x07
 #define INPUT_DEVICE_ID_FF_MAX		0x7f
-#define INPUT_DEVICE_ID_SW_MAX		0x0f
+#define INPUT_DEVICE_ID_SW_MAX		0x1f
 
 #define INPUT_DEVICE_ID_MATCH_BUS	1
 #define INPUT_DEVICE_ID_MATCH_VENDOR	2
diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
index 23b2d377af59..a3eafd0527f1 100644
--- a/include/uapi/linux/input-event-codes.h
+++ b/include/uapi/linux/input-event-codes.h
@@ -782,7 +782,9 @@
 #define SW_LINEIN_INSERT	0x0d  /* set = inserted */
 #define SW_MUTE_DEVICE		0x0e  /* set = device disabled */
 #define SW_PEN_INSERTED		0x0f  /* set = pen inserted */
-#define SW_MAX			0x0f
+#define SW_RATCHET		0x10  /* set = ratchet mode,
+					 unset: free wheel */
+#define SW_MAX			0x1f
 #define SW_CNT			(SW_MAX+1)
 
 /*
-- 
2.9.3



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH RFC 4/4] hid-logitech-hidpp: add support for ratchet switch
  2017-03-25 22:49     ` [PATCH RFC 3/4] input: add a EV_SW event for ratchet switch Mauro Carvalho Chehab
@ 2017-03-25 22:49       ` Mauro Carvalho Chehab
  2017-03-27  1:53       ` [PATCH RFC 3/4] input: add a EV_SW event " Peter Hutterer
  1 sibling, 0 replies; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2017-03-25 22:49 UTC (permalink / raw)
  To: linux-input
  Cc: Mauro Carvalho Chehab, Dmitry Torokhov, Peter Hutterer,
	Benjamin Tissoires, Jiri Kosina

Logitech Anywhere MX2 and MX master produce events for
the wheel ratchet/free wheel button. Add support for it.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
---
 drivers/hid/hid-logitech-hidpp.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
index ee3f544bda4f..72f80869633f 100644
--- a/drivers/hid/hid-logitech-hidpp.c
+++ b/drivers/hid/hid-logitech-hidpp.c
@@ -1406,6 +1406,19 @@ static int hidpp_mouse_set_wheel_mode(struct hidpp_device *hidpp,
 			return ret;
 	}
 
+	ret = hidpp_send_fap_command_sync(hidpp, hrd->feature_index,
+					  CMD_MOUSE_GET_WHEEL_RATCHET,
+					  params, 16, &response);
+	if (ret > 0) {
+		hid_err(hidpp->hid_dev, "%s: received protocol error 0x%02x\n",
+			__func__, ret);
+		return -EPROTO;
+	}
+	if (ret)
+		return ret;
+
+	hrd->ratchet = response.fap.params[0] & 0x01;
+
 	params[0] = invert     ? 0x4 : 0  |
 		    high_res   ? 0x2 : 0  |
 		    hidpp_mode ? 0x1 : 0;
@@ -1945,10 +1958,11 @@ static int high_res_raw_event(struct hid_device *hdev, u8 *data, int size)
 			input_report_rel(hrd->input, REL_HIRES_WHEEL, delta);
 		else
 			input_report_rel(hrd->input, REL_WHEEL, delta);
+	} else if (data[3] == 0x10) {
+		hrd->ratchet = data[4] & 0x01;
+		input_report_switch(hrd->input, SW_RATCHET, hrd->ratchet);
 	}
 
-	/* FIXME: also report ratchet events to userspace */
-
 	return 1;
 }
 
@@ -1961,6 +1975,11 @@ static void high_res_populate_input(struct hidpp_device *hidpp,
 
 	__set_bit(REL_WHEEL, hrd->input->relbit);
 	__set_bit(REL_HIRES_WHEEL, hrd->input->relbit);
+	__set_bit(EV_SW, hrd->input->evbit);
+	__set_bit(SW_RATCHET, hrd->input->swbit);
+
+	/* Report current state of the ratchet switch */
+	input_report_switch(hrd->input, SW_RATCHET, hrd->ratchet);
 }
 
 
-- 
2.9.3



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 1/4] input: add an EV_REL event for high-res vertical wheel
  2017-03-25 22:49 ` [PATCH RFC 1/4] input: add an EV_REL event for high-res vertical wheel Mauro Carvalho Chehab
  2017-03-25 22:49   ` [PATCH RFC 2/4] hid-logitech-hidpp: add support for high res wheel Mauro Carvalho Chehab
@ 2017-03-27  1:40   ` Peter Hutterer
  1 sibling, 0 replies; 10+ messages in thread
From: Peter Hutterer @ 2017-03-27  1:40 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: linux-input, Dmitry Torokhov, Benjamin Tissoires, Hans Verkuil,
	Mauro Carvalho Chehab, Douglas Anderson, Kamil Debski, Ping Cheng

On Sat, Mar 25, 2017 at 07:49:39PM -0300, Mauro Carvalho Chehab wrote:
> As some devices can produce either low-res or high-res
> vertical wheel EV_REL events, add a new event to allow
> userspace to distinguish between them.
> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>

Just replied to the other email, but this one is a nak until we have the
Documentation/input/event-codes.txt patch with it explaining how this code
should be used, what these codes represent, what the interaction is with
other codes (e.g. can a device send wheel and hires wheel at the same time?)
etc. There are a lot of questions left to be answered.

Cheers,
   Peter

> ---
>  include/uapi/linux/input-event-codes.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
> index 3af60ee69053..23b2d377af59 100644
> --- a/include/uapi/linux/input-event-codes.h
> +++ b/include/uapi/linux/input-event-codes.h
> @@ -703,6 +703,7 @@
>  #define REL_DIAL		0x07
>  #define REL_WHEEL		0x08
>  #define REL_MISC		0x09
> +#define REL_HIRES_WHEEL		0x0a
>  #define REL_MAX			0x0f
>  #define REL_CNT			(REL_MAX+1)
>  
> -- 
> 2.9.3
> 
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 3/4] input: add a EV_SW event for ratchet switch
  2017-03-25 22:49     ` [PATCH RFC 3/4] input: add a EV_SW event for ratchet switch Mauro Carvalho Chehab
  2017-03-25 22:49       ` [PATCH RFC 4/4] hid-logitech-hidpp: add support " Mauro Carvalho Chehab
@ 2017-03-27  1:53       ` Peter Hutterer
  2017-03-27 12:27         ` Mauro Carvalho Chehab
  1 sibling, 1 reply; 10+ messages in thread
From: Peter Hutterer @ 2017-03-27  1:53 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: linux-input, Dmitry Torokhov, Benjamin Tissoires,
	Greg Kroah-Hartman, Martin Schwidefsky, Mauro Carvalho Chehab,
	Ingo Tuchscherer, Stuart Yoder, Hans Verkuil, Douglas Anderson,
	Ping Cheng, Kamil Debski

On Sat, Mar 25, 2017 at 07:49:41PM -0300, Mauro Carvalho Chehab wrote:
> Some mouses have a switch on their wheel, allowing to switch
> between ratchet or free wheel mode. Add support for it.

I understand the want to support it because it's there but what do you
expect this to be used for?

tbh, I wouldn't know what to do with this information, short of displaying
some OSD to inform the user. Which is rather superfluous since the physical
change will feel obvious anyway.

A Documentation/input/event-codes.txt hunk would be welcomed here too
btw.

Cheers,
   Peter

> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
> ---
>  include/linux/mod_devicetable.h        | 2 +-
>  include/uapi/linux/input-event-codes.h | 4 +++-
>  2 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> index 8a57f0b1242d..73534c591b40 100644
> --- a/include/linux/mod_devicetable.h
> +++ b/include/linux/mod_devicetable.h
> @@ -292,7 +292,7 @@ struct pcmcia_device_id {
>  #define INPUT_DEVICE_ID_LED_MAX		0x0f
>  #define INPUT_DEVICE_ID_SND_MAX		0x07
>  #define INPUT_DEVICE_ID_FF_MAX		0x7f
> -#define INPUT_DEVICE_ID_SW_MAX		0x0f
> +#define INPUT_DEVICE_ID_SW_MAX		0x1f
>  
>  #define INPUT_DEVICE_ID_MATCH_BUS	1
>  #define INPUT_DEVICE_ID_MATCH_VENDOR	2
> diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
> index 23b2d377af59..a3eafd0527f1 100644
> --- a/include/uapi/linux/input-event-codes.h
> +++ b/include/uapi/linux/input-event-codes.h
> @@ -782,7 +782,9 @@
>  #define SW_LINEIN_INSERT	0x0d  /* set = inserted */
>  #define SW_MUTE_DEVICE		0x0e  /* set = device disabled */
>  #define SW_PEN_INSERTED		0x0f  /* set = pen inserted */
> -#define SW_MAX			0x0f
> +#define SW_RATCHET		0x10  /* set = ratchet mode,
> +					 unset: free wheel */
> +#define SW_MAX			0x1f
>  #define SW_CNT			(SW_MAX+1)
>  
>  /*
> -- 
> 2.9.3
> 
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 3/4] input: add a EV_SW event for ratchet switch
  2017-03-27  1:53       ` [PATCH RFC 3/4] input: add a EV_SW event " Peter Hutterer
@ 2017-03-27 12:27         ` Mauro Carvalho Chehab
  2017-03-28  0:25           ` Peter Hutterer
  0 siblings, 1 reply; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2017-03-27 12:27 UTC (permalink / raw)
  To: Peter Hutterer
  Cc: linux-input, Dmitry Torokhov, Benjamin Tissoires,
	Greg Kroah-Hartman, Martin Schwidefsky, Mauro Carvalho Chehab,
	Ingo Tuchscherer, Stuart Yoder, Hans Verkuil, Douglas Anderson,
	Ping Cheng, Kamil Debski

Em Mon, 27 Mar 2017 11:53:57 +1000
Peter Hutterer <peter.hutterer@who-t.net> escreveu:

> On Sat, Mar 25, 2017 at 07:49:41PM -0300, Mauro Carvalho Chehab wrote:
> > Some mouses have a switch on their wheel, allowing to switch
> > between ratchet or free wheel mode. Add support for it.  
> 
> I understand the want to support it because it's there but what do you
> expect this to be used for?
> 
> tbh, I wouldn't know what to do with this information, short of displaying
> some OSD to inform the user. Which is rather superfluous since the physical
> change will feel obvious anyway.

For this particular device, the main reason is because it is there :-)
As adding support for it is trivial, I don't see any reason why not
adding it.

Yet, applications could use it, in order to switch between a "discrete" 
mode, where one wheel position corresponds to one line of scroll, and
movements below a threshold would be ignored.


> 
> A Documentation/input/event-codes.txt hunk would be welcomed here too
> btw.

Sure. Will do on a next patch series, once we agree about the high
resolution wheel movements API.
> 
> Cheers,
>    Peter
> 
> > 
> > Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
> > ---
> >  include/linux/mod_devicetable.h        | 2 +-
> >  include/uapi/linux/input-event-codes.h | 4 +++-
> >  2 files changed, 4 insertions(+), 2 deletions(-)
> > 
> > diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> > index 8a57f0b1242d..73534c591b40 100644
> > --- a/include/linux/mod_devicetable.h
> > +++ b/include/linux/mod_devicetable.h
> > @@ -292,7 +292,7 @@ struct pcmcia_device_id {
> >  #define INPUT_DEVICE_ID_LED_MAX		0x0f
> >  #define INPUT_DEVICE_ID_SND_MAX		0x07
> >  #define INPUT_DEVICE_ID_FF_MAX		0x7f
> > -#define INPUT_DEVICE_ID_SW_MAX		0x0f
> > +#define INPUT_DEVICE_ID_SW_MAX		0x1f
> >  
> >  #define INPUT_DEVICE_ID_MATCH_BUS	1
> >  #define INPUT_DEVICE_ID_MATCH_VENDOR	2
> > diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
> > index 23b2d377af59..a3eafd0527f1 100644
> > --- a/include/uapi/linux/input-event-codes.h
> > +++ b/include/uapi/linux/input-event-codes.h
> > @@ -782,7 +782,9 @@
> >  #define SW_LINEIN_INSERT	0x0d  /* set = inserted */
> >  #define SW_MUTE_DEVICE		0x0e  /* set = device disabled */
> >  #define SW_PEN_INSERTED		0x0f  /* set = pen inserted */
> > -#define SW_MAX			0x0f
> > +#define SW_RATCHET		0x10  /* set = ratchet mode,
> > +					 unset: free wheel */
> > +#define SW_MAX			0x1f
> >  #define SW_CNT			(SW_MAX+1)
> >  
> >  /*
> > -- 
> > 2.9.3
> > 
> >   



Thanks,
Mauro

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 3/4] input: add a EV_SW event for ratchet switch
  2017-03-27 12:27         ` Mauro Carvalho Chehab
@ 2017-03-28  0:25           ` Peter Hutterer
  2017-03-28  9:36             ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 10+ messages in thread
From: Peter Hutterer @ 2017-03-28  0:25 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: linux-input, Dmitry Torokhov, Benjamin Tissoires,
	Greg Kroah-Hartman, Martin Schwidefsky, Mauro Carvalho Chehab,
	Ingo Tuchscherer, Stuart Yoder, Hans Verkuil, Douglas Anderson,
	Ping Cheng, Kamil Debski

On Mon, Mar 27, 2017 at 09:27:31AM -0300, Mauro Carvalho Chehab wrote:
> Em Mon, 27 Mar 2017 11:53:57 +1000
> Peter Hutterer <peter.hutterer@who-t.net> escreveu:
> 
> > On Sat, Mar 25, 2017 at 07:49:41PM -0300, Mauro Carvalho Chehab wrote:
> > > Some mouses have a switch on their wheel, allowing to switch
> > > between ratchet or free wheel mode. Add support for it.  
> > 
> > I understand the want to support it because it's there but what do you
> > expect this to be used for?
> > 
> > tbh, I wouldn't know what to do with this information, short of displaying
> > some OSD to inform the user. Which is rather superfluous since the physical
> > change will feel obvious anyway.
> 
> For this particular device, the main reason is because it is there :-)
> As adding support for it is trivial, I don't see any reason why not
> adding it.
> 
> Yet, applications could use it, in order to switch between a "discrete" 
> mode, where one wheel position corresponds to one line of scroll, and
> movements below a threshold would be ignored.

fwiw, that would more likely be the  result of receiving a different event
code (hires-wheel), more so than a ratchet switch - at least on this device.

the mice I have here don't change the behaviour of the wheel, so the
granularity is the same before and after. But they also don't send events
for the state, so there's that :)

Cheers,
   Peter
> 
> 
> > 
> > A Documentation/input/event-codes.txt hunk would be welcomed here too
> > btw.
> 
> Sure. Will do on a next patch series, once we agree about the high
> resolution wheel movements API.
> > 
> > Cheers,
> >    Peter
> > 
> > > 
> > > Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
> > > ---
> > >  include/linux/mod_devicetable.h        | 2 +-
> > >  include/uapi/linux/input-event-codes.h | 4 +++-
> > >  2 files changed, 4 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> > > index 8a57f0b1242d..73534c591b40 100644
> > > --- a/include/linux/mod_devicetable.h
> > > +++ b/include/linux/mod_devicetable.h
> > > @@ -292,7 +292,7 @@ struct pcmcia_device_id {
> > >  #define INPUT_DEVICE_ID_LED_MAX		0x0f
> > >  #define INPUT_DEVICE_ID_SND_MAX		0x07
> > >  #define INPUT_DEVICE_ID_FF_MAX		0x7f
> > > -#define INPUT_DEVICE_ID_SW_MAX		0x0f
> > > +#define INPUT_DEVICE_ID_SW_MAX		0x1f
> > >  
> > >  #define INPUT_DEVICE_ID_MATCH_BUS	1
> > >  #define INPUT_DEVICE_ID_MATCH_VENDOR	2
> > > diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
> > > index 23b2d377af59..a3eafd0527f1 100644
> > > --- a/include/uapi/linux/input-event-codes.h
> > > +++ b/include/uapi/linux/input-event-codes.h
> > > @@ -782,7 +782,9 @@
> > >  #define SW_LINEIN_INSERT	0x0d  /* set = inserted */
> > >  #define SW_MUTE_DEVICE		0x0e  /* set = device disabled */
> > >  #define SW_PEN_INSERTED		0x0f  /* set = pen inserted */
> > > -#define SW_MAX			0x0f
> > > +#define SW_RATCHET		0x10  /* set = ratchet mode,
> > > +					 unset: free wheel */
> > > +#define SW_MAX			0x1f
> > >  #define SW_CNT			(SW_MAX+1)
> > >  
> > >  /*
> > > -- 
> > > 2.9.3
> > > 
> > >   
> 
> 
> 
> Thanks,
> Mauro

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 3/4] input: add a EV_SW event for ratchet switch
  2017-03-28  0:25           ` Peter Hutterer
@ 2017-03-28  9:36             ` Mauro Carvalho Chehab
  0 siblings, 0 replies; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2017-03-28  9:36 UTC (permalink / raw)
  To: Peter Hutterer
  Cc: linux-input, Dmitry Torokhov, Benjamin Tissoires,
	Greg Kroah-Hartman, Martin Schwidefsky, Mauro Carvalho Chehab,
	Ingo Tuchscherer, Stuart Yoder, Hans Verkuil, Douglas Anderson,
	Ping Cheng, Kamil Debski

Em Tue, 28 Mar 2017 10:25:17 +1000
Peter Hutterer <peter.hutterer@who-t.net> escreveu:

> On Mon, Mar 27, 2017 at 09:27:31AM -0300, Mauro Carvalho Chehab wrote:
> > Em Mon, 27 Mar 2017 11:53:57 +1000
> > Peter Hutterer <peter.hutterer@who-t.net> escreveu:
> >   
> > > On Sat, Mar 25, 2017 at 07:49:41PM -0300, Mauro Carvalho Chehab wrote:  
> > > > Some mouses have a switch on their wheel, allowing to switch
> > > > between ratchet or free wheel mode. Add support for it.    
> > > 
> > > I understand the want to support it because it's there but what do you
> > > expect this to be used for?
> > > 
> > > tbh, I wouldn't know what to do with this information, short of displaying
> > > some OSD to inform the user. Which is rather superfluous since the physical
> > > change will feel obvious anyway.  
> > 
> > For this particular device, the main reason is because it is there :-)
> > As adding support for it is trivial, I don't see any reason why not
> > adding it.
> > 
> > Yet, applications could use it, in order to switch between a "discrete" 
> > mode, where one wheel position corresponds to one line of scroll, and
> > movements below a threshold would be ignored.  
> 
> fwiw, that would more likely be the  result of receiving a different event
> code (hires-wheel), more so than a ratchet switch - at least on this device.

Yeah, that would be another alternative.

> the mice I have here don't change the behaviour of the wheel, so the
> granularity is the same before and after. But they also don't send events
> for the state, so there's that :)

Another alternative would be that applications could be listening to
EV_SW SW_RATCHET event. When the switch changes to free wheel, it could
be enabling high-resolution mode.

Thanks,
Mauro

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-03-28  9:37 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-25 22:49 [PATCH RFC 0/4] Improve support for Logitech MX Anywhere 2 Mauro Carvalho Chehab
2017-03-25 22:49 ` [PATCH RFC 1/4] input: add an EV_REL event for high-res vertical wheel Mauro Carvalho Chehab
2017-03-25 22:49   ` [PATCH RFC 2/4] hid-logitech-hidpp: add support for high res wheel Mauro Carvalho Chehab
2017-03-25 22:49     ` [PATCH RFC 3/4] input: add a EV_SW event for ratchet switch Mauro Carvalho Chehab
2017-03-25 22:49       ` [PATCH RFC 4/4] hid-logitech-hidpp: add support " Mauro Carvalho Chehab
2017-03-27  1:53       ` [PATCH RFC 3/4] input: add a EV_SW event " Peter Hutterer
2017-03-27 12:27         ` Mauro Carvalho Chehab
2017-03-28  0:25           ` Peter Hutterer
2017-03-28  9:36             ` Mauro Carvalho Chehab
2017-03-27  1:40   ` [PATCH RFC 1/4] input: add an EV_REL event for high-res vertical wheel Peter Hutterer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).