Re: [PATCH 2/2] HID: documentation additions and elimination of legacy filenames for Roccat Kone driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 This patch adds more documentation and renames sysfs attributes to eliminate my legacy naming.
 Signed-off-by: Stefan Achatz <erazor_de@xxxxxxxxxxxxxxxxxxxxx>

---
 drivers/hid/hid-roccat-kone.c |  265 +++++++++++++++++++++++++++--------------
 drivers/hid/hid-roccat-kone.h |    7 +-
 2 files changed, 178 insertions(+), 94 deletions(-)

diff --git a/drivers/hid/hid-roccat-kone.c b/drivers/hid/hid-roccat-kone.c
index 94a2fb9..941f5b3 100644
--- a/drivers/hid/hid-roccat-kone.c
+++ b/drivers/hid/hid-roccat-kone.c
@@ -54,6 +54,11 @@ static void kone_set_profile_checksum(struct kone_profile *profile)
 	profile->checksum = cpu_to_le16(kone_calc_profile_checksum(profile));
 }
 
+/*
+ * Checks success after writing data to mouse
+ * On success returns 0
+ * On failure returns errno
+ */
 static int kone_check_write(struct usb_device *usb_dev)
 {
 	int len;
@@ -95,6 +100,11 @@ static int kone_check_write(struct usb_device *usb_dev)
 	}
 }
 
+/*
+ * Reads settings data from mouse and stores it in @buf
+ * On success returns 0
+ * On failure returns errno
+ */
 static int kone_get_settings(struct usb_device *usb_dev,
 		struct kone_settings *buf)
 {
@@ -112,6 +122,13 @@ static int kone_get_settings(struct usb_device *usb_dev,
 	return 0;
 }
 
+/*
+ * Write settings to mouse
+ * Reads and compares stored data with new data to prevent needless write
+ * Sets checksum of supplied data
+ * On success returns 0
+ * On failure returns errno
+ */
 static int kone_set_settings(struct usb_device *usb_dev,
 		struct kone_settings const *buf)
 {
@@ -167,6 +184,11 @@ static int kone_set_settings(struct usb_device *usb_dev,
 	return 0;
 }
 
+/*
+ * Stores number of startup profile in @result
+ * On success returns 0
+ * On failure returns errno
+ */
 static int kone_get_startup_profile(struct usb_device *usb_dev, int *result)
 {
 	struct kone_settings *buf;
@@ -187,6 +209,12 @@ static int kone_get_startup_profile(struct usb_device *usb_dev, int *result)
 	return 0;
 }
 
+/*
+ * Reads profile data from mouse and stores it in @buf
+ * @number: profile number to read
+ * On success returns 0
+ * On failure returns errno
+ */
 static int kone_get_profile(struct usb_device *usb_dev,
 		struct kone_profile *buf, int number)
 {
@@ -195,6 +223,11 @@ static int kone_get_profile(struct usb_device *usb_dev,
 	if (number < 1 || number > 5)
 		return -EINVAL;
 
+	/*
+	 * The manufacturer uses a control message of type class with interface
+	 * as recipient and provides the profile number as index parameter.
+	 * This is prevented in userspace by function check_ctrlrecip.
+	 */
 	len = usb_control_msg(usb_dev, usb_rcvctrlpipe(usb_dev, 0),
 			USB_REQ_CLEAR_FEATURE, USB_TYPE_CLASS
 					| USB_RECIP_INTERFACE | USB_DIR_IN,
@@ -209,6 +242,15 @@ static int kone_get_profile(struct usb_device *usb_dev,
 	return 0;
 }
 
+/*
+ * Writes profile data to mouse
+ * Reads and compares stored data with new one to reduce unnecessary writes.
+ * Sets profile number and checksum of data, so one can copy profile data
+ * from one profile to another without usage of a userland tool.
+ * @number: profile number to write
+ * On success returns 0
+ * On failure returns errno
+ */
 static int kone_set_profile(struct usb_device *usb_dev, char const *buf,
 		int number)
 {
@@ -272,6 +314,11 @@ static int kone_set_profile(struct usb_device *usb_dev, char const *buf,
 	return 0;
 }
 
+/*
+ * Reads dpi setting from startup profile and stores it in @result
+ * On success returns 0
+ * On failure returns errno
+ */
 static int kone_get_profile_startup_dpi(struct usb_device *usb_dev, int number,
 		int *result)
 {
@@ -293,6 +340,11 @@ static int kone_get_profile_startup_dpi(struct usb_device *usb_dev, int number,
 	return 0;
 }
 
+/*
+ * Reads value of "fast-clip-weight" and stores it in @result
+ * On success returns 0
+ * On failure returns errno
+ */
 static int kone_get_weight(struct usb_device *usb_dev, int *result)
 {
 	int len;
@@ -315,6 +367,11 @@ static int kone_get_weight(struct usb_device *usb_dev, int *result)
 	return 0;
 }
 
+/*
+ * Reads firmware_version of mouse and stores it in @result
+ * On success returns 0
+ * On failure returns errno
+ */
 static int kone_get_firmware_version(struct usb_device *usb_dev, int *result)
 {
 	int len;
@@ -338,7 +395,7 @@ static int kone_get_firmware_version(struct usb_device *usb_dev, int *result)
 	return 0;
 }
 
-static ssize_t kone_set_settings_raw(struct device *dev,
+static ssize_t kone_sysfs_set_settings(struct device *dev,
 		struct device_attribute *attr, char const *buf, size_t size)
 {
 	struct hid_device *hdev = dev_get_drvdata(dev);
@@ -365,7 +422,7 @@ static ssize_t kone_set_settings_raw(struct device *dev,
 	return sizeof(struct kone_settings);
 }
 
-static ssize_t kone_show_settings_raw(struct device *dev,
+static ssize_t kone_sysfs_show_settings(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
 	struct usb_interface *intf = to_usb_interface(dev);
@@ -378,7 +435,7 @@ static ssize_t kone_show_settings_raw(struct device *dev,
 	return sizeof(struct kone_settings);
 }
 
-static ssize_t kone_get_profile_raw(struct device *dev, char *buf, int number)
+static ssize_t kone_sysfs_get_profile(struct device *dev, char *buf, int number)
 {
 	struct usb_interface *intf = to_usb_interface(dev);
 	struct usb_device *usb_dev = interface_to_usbdev(intf);
@@ -389,7 +446,7 @@ static ssize_t kone_get_profile_raw(struct device *dev, char *buf, int number)
 	return sizeof(struct kone_profile);
 }
 
-static ssize_t kone_set_profile_raw(struct device *dev, char const *buf,
+static ssize_t kone_sysfs_set_profile(struct device *dev, char const *buf,
 		size_t size, int number)
 {
 	struct usb_interface *intf = to_usb_interface(dev);
@@ -407,69 +464,70 @@ static ssize_t kone_set_profile_raw(struct device *dev, char const *buf,
 	return sizeof(struct kone_profile);
 }
 
-static ssize_t kone_show_profile_1_raw(struct device *dev,
+static ssize_t kone_sysfs_show_profile_1(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
-	return kone_get_profile_raw(dev, buf, 1);
+	return kone_sysfs_get_profile(dev, buf, 1);
 }
 
-static ssize_t kone_set_profile_1_raw(struct device *dev,
+static ssize_t kone_sysfs_set_profile_1(struct device *dev,
 		struct device_attribute *attr, char const *buf, size_t size)
 {
-	return kone_set_profile_raw(dev, buf, size, 1);
+	return kone_sysfs_set_profile(dev, buf, size, 1);
 }
 
-static ssize_t kone_show_profile_2_raw(struct device *dev,
+static ssize_t kone_sysfs_show_profile_2(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
-	return kone_get_profile_raw(dev, buf, 2);
+	return kone_sysfs_get_profile(dev, buf, 2);
 }
 
-static ssize_t kone_set_profile_2_raw(struct device *dev,
+static ssize_t kone_sysfs_set_profile_2(struct device *dev,
 		struct device_attribute *attr, char const *buf, size_t size)
 {
-	return kone_set_profile_raw(dev, buf, size, 2);
+	return kone_sysfs_set_profile(dev, buf, size, 2);
 }
 
-static ssize_t kone_show_profile_3_raw(struct device *dev,
+static ssize_t kone_sysfs_show_profile_3(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
-	return kone_get_profile_raw(dev, buf, 3);
+	return kone_sysfs_get_profile(dev, buf, 3);
 }
 
-static ssize_t kone_set_profile_3_raw(struct device *dev,
+static ssize_t kone_sysfs_set_profile_3(struct device *dev,
 		struct device_attribute *attr, char const *buf, size_t size)
 {
-	return kone_set_profile_raw(dev, buf, size, 3);
+	return kone_sysfs_set_profile(dev, buf, size, 3);
 }
 
-static ssize_t kone_show_profile_4_raw(struct device *dev,
+static ssize_t kone_sysfs_show_profile_4(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
-	return kone_get_profile_raw(dev, buf, 4);
+	return kone_sysfs_get_profile(dev, buf, 4);
 }
 
-static ssize_t kone_set_profile_4_raw(struct device *dev,
+static ssize_t kone_sysfs_set_profile_4(struct device *dev,
 		struct device_attribute *attr, char const *buf, size_t size)
 {
-	return kone_set_profile_raw(dev, buf, size, 4);
+	return kone_sysfs_set_profile(dev, buf, size, 4);
 }
 
-static ssize_t kone_show_profile_5_raw(struct device *dev,
+static ssize_t kone_sysfs_show_profile_5(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
-	return kone_get_profile_raw(dev, buf, 5);
+	return kone_sysfs_get_profile(dev, buf, 5);
 }
 
-static ssize_t kone_set_profile_5_raw(struct device *dev,
+static ssize_t kone_sysfs_set_profile_5(struct device *dev,
 		struct device_attribute *attr, char const *buf, size_t size)
 {
-	return kone_set_profile_raw(dev, buf, size, 5);
+	return kone_sysfs_set_profile(dev, buf, size, 5);
 }
 
 /*
- * helper to fill kone_device structure with actual values
- * returns 0 on success or error
+ * Helper to fill kone_device structure with actual values
+ * On success returns 0
+ * On failure returns errno
  */
 static int kone_device_set_actual_values(struct kone_device *kone,
 		struct device *dev, int both)
@@ -498,7 +556,7 @@ static int kone_device_set_actual_values(struct kone_device *kone,
 	return 0;
 }
 
-static ssize_t kone_show_actual_profile(struct device *dev,
+static ssize_t kone_sysfs_show_actual_profile(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
 	struct hid_device *hdev = dev_get_drvdata(dev);
@@ -511,7 +569,7 @@ static ssize_t kone_show_actual_profile(struct device *dev,
 	return snprintf(buf, PAGE_SIZE, "%d\n", kone->act_profile);
 }
 
-static ssize_t kone_show_actual_dpi_raw(struct device *dev,
+static ssize_t kone_sysfs_show_actual_dpi(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
 	struct hid_device *hdev = dev_get_drvdata(dev);
@@ -525,31 +583,7 @@ static ssize_t kone_show_actual_dpi_raw(struct device *dev,
 	return snprintf(buf, PAGE_SIZE, "%d\n", kone->act_dpi);
 }
 
-static ssize_t kone_show_actual_dpi(struct device *dev,
-		struct device_attribute *attr, char *buf)
-{
-	struct hid_device *hdev = dev_get_drvdata(dev);
-	struct kone_device *kone = hid_get_drvdata(hdev);
-	int err, dpi;
-	err = kone_device_set_actual_values(kone, dev, 1);
-	if (err)
-		return err;
-
-	dpi = kone->act_dpi;
-	switch (dpi) {
-	case 0:
-		break;
-	case 6:
-		dpi = 3200;
-		break;
-	default:
-		dpi = dpi * 400;
-	}
-
-	return snprintf(buf, PAGE_SIZE, "%ddpi\n", dpi);
-}
-
-static ssize_t kone_show_weight_raw(struct device *dev,
+static ssize_t kone_sysfs_show_weight(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
 	struct usb_interface *intf = to_usb_interface(dev);
@@ -562,7 +596,7 @@ static ssize_t kone_show_weight_raw(struct device *dev,
 	return snprintf(buf, PAGE_SIZE, "%d\n", weight);
 }
 
-static ssize_t kone_show_firmware_version_raw(struct device *dev,
+static ssize_t kone_sysfs_show_firmware_version(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
 	struct usb_interface *intf = to_usb_interface(dev);
@@ -575,8 +609,8 @@ static ssize_t kone_show_firmware_version_raw(struct device *dev,
 	return snprintf(buf, PAGE_SIZE, "%d\n", firmware_version);
 }
 
-static ssize_t kone_show_tcu(struct device *dev, struct device_attribute *attr,
-		char *buf)
+static ssize_t kone_sysfs_show_tcu(struct device *dev,
+		struct device_attribute *attr, char *buf)
 {
 	struct usb_interface *intf = to_usb_interface(dev);
 	struct usb_device *usb_dev = interface_to_usbdev(intf);
@@ -624,9 +658,8 @@ static int kone_tcu_command(struct usb_device *usb_dev, int number)
 	return 0;
 }
 
-/* integer of 0 deactivates tcu, 1 activates it */
-static ssize_t kone_set_tcu(struct device *dev, struct device_attribute *attr,
-		char const *buf, size_t size)
+static ssize_t kone_sysfs_set_tcu(struct device *dev,
+		struct device_attribute *attr, char const *buf, size_t size)
 {
 	struct usb_interface *intf = to_usb_interface(dev);
 	struct usb_device *usb_dev = interface_to_usbdev(intf);
@@ -692,7 +725,7 @@ static ssize_t kone_set_tcu(struct device *dev, struct device_attribute *attr,
 	return size;
 }
 
-static ssize_t kone_show_startup_profile(struct device *dev,
+static ssize_t kone_sysfs_show_startup_profile(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
 	struct usb_device *usb_dev = interface_to_usbdev(to_usb_interface(dev));
@@ -703,7 +736,7 @@ static ssize_t kone_show_startup_profile(struct device *dev,
 	return snprintf(buf, PAGE_SIZE, "%d\n", result);
 }
 
-static ssize_t kone_set_startup_profile(struct device *dev,
+static ssize_t kone_sysfs_set_startup_profile(struct device *dev,
 		struct device_attribute *attr, char const *buf, size_t size)
 {
 	struct hid_device *hdev = dev_get_drvdata(dev);
@@ -747,48 +780,85 @@ static ssize_t kone_set_startup_profile(struct device *dev,
 	return size;
 }
 
-static ssize_t kone_show_driver_version(struct device *dev,
+/*
+ * This file is used by userland software to find devices that are handled by
+ * this driver. This provides a consistent way for actual and older kernels
+ * where this driver replaced usbhid instead of generic-usb.
+ * Driver capabilities are determined by version number.
+ */
+static ssize_t kone_sysfs_show_driver_version(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
 	return snprintf(buf, PAGE_SIZE, DRIVER_VERSION "\n");
 }
 
-static DEVICE_ATTR(actual_dpi_raw, S_IRUGO, kone_show_actual_dpi_raw, NULL);
-static DEVICE_ATTR(actual_dpi, S_IRUGO, kone_show_actual_dpi, NULL);
-static DEVICE_ATTR(actual_profile, S_IRUGO, kone_show_actual_profile, NULL);
-static DEVICE_ATTR(weight_raw, S_IRUGO, kone_show_weight_raw, NULL);
-static DEVICE_ATTR(profile1_raw, S_IRUGO | S_IWUGO,
-		kone_show_profile_1_raw, kone_set_profile_1_raw);
-static DEVICE_ATTR(profile2_raw, S_IRUGO | S_IWUGO,
-		kone_show_profile_2_raw, kone_set_profile_2_raw);
-static DEVICE_ATTR(profile3_raw, S_IRUGO | S_IWUGO,
-		kone_show_profile_3_raw, kone_set_profile_3_raw);
-static DEVICE_ATTR(profile4_raw, S_IRUGO | S_IWUGO,
-		kone_show_profile_4_raw, kone_set_profile_4_raw);
-static DEVICE_ATTR(profile5_raw, S_IRUGO | S_IWUGO,
-		kone_show_profile_5_raw, kone_set_profile_5_raw);
-static DEVICE_ATTR(settings_raw, S_IRUGO | S_IWUGO,
-		kone_show_settings_raw, kone_set_settings_raw);
-static DEVICE_ATTR(firmware_version_raw, S_IRUGO,
-		kone_show_firmware_version_raw, NULL);
-static DEVICE_ATTR(tcu, S_IRUGO | S_IWUGO, kone_show_tcu, kone_set_tcu);
+/*
+ * Read actual dpi settings.
+ * Returns raw value for further processing. Refer to enum kone_polling_rates to
+ * get real value.
+ */
+static DEVICE_ATTR(actual_dpi, S_IRUGO, kone_sysfs_show_actual_dpi, NULL);
+
+static DEVICE_ATTR(actual_profile, S_IRUGO, kone_sysfs_show_actual_profile,
+		NULL);
+
+/*
+ * The mouse can be equipped with one of four supplied weights from 5 to 20
+ * grams which are recognized and its value can be read out.
+ * This returns the raw value reported by the mouse for easy evaluation by
+ * software. Refer to enum kone_weights to get corresponding real weight.
+ */
+static DEVICE_ATTR(weight, S_IRUGO, kone_sysfs_show_weight, NULL);
+
+static DEVICE_ATTR(profile1, S_IRUGO | S_IWUGO,
+		kone_sysfs_show_profile_1, kone_sysfs_set_profile_1);
+static DEVICE_ATTR(profile2, S_IRUGO | S_IWUGO,
+		kone_sysfs_show_profile_2, kone_sysfs_set_profile_2);
+static DEVICE_ATTR(profile3, S_IRUGO | S_IWUGO,
+		kone_sysfs_show_profile_3, kone_sysfs_set_profile_3);
+static DEVICE_ATTR(profile4, S_IRUGO | S_IWUGO,
+		kone_sysfs_show_profile_4, kone_sysfs_set_profile_4);
+static DEVICE_ATTR(profile5, S_IRUGO | S_IWUGO,
+		kone_sysfs_show_profile_5, kone_sysfs_set_profile_5);
+
+static DEVICE_ATTR(settings, S_IRUGO | S_IWUGO,
+		kone_sysfs_show_settings, kone_sysfs_set_settings);
+
+/*
+ * Prints firmware version stored in mouse as integer.
+ * The raw value reported by the mouse is returned for easy evaluation, to get
+ * the real version number the decimal point has to be shifted 2 positions to
+ * the left. E.g. a value of 138 means 1.38.
+ */
+static DEVICE_ATTR(firmware_version, S_IRUGO,
+		kone_sysfs_show_firmware_version, NULL);
+
+/*
+ * Prints state of Tracking Control Unit as number where 0 = off and 1 = on
+ * Writing 0 deactivates tcu and writing 1 calibrates and activates the tcu
+ */
+static DEVICE_ATTR(tcu, S_IRUGO | S_IWUGO, kone_sysfs_show_tcu,
+		kone_sysfs_set_tcu);
+
+/* Prints and takes the number of the profile the mouse starts with */
 static DEVICE_ATTR(startup_profile, S_IRUGO | S_IWUGO,
-		kone_show_startup_profile, kone_set_startup_profile);
+		kone_sysfs_show_startup_profile,
+		kone_sysfs_set_startup_profile);
+
 static DEVICE_ATTR(kone_driver_version, S_IRUGO,
-		kone_show_driver_version, NULL);
+		kone_sysfs_show_driver_version, NULL);
 
 static struct attribute *kone_attributes[] = {
-		&dev_attr_actual_dpi_raw.attr,
 		&dev_attr_actual_dpi.attr,
 		&dev_attr_actual_profile.attr,
-		&dev_attr_weight_raw.attr,
-		&dev_attr_profile1_raw.attr,
-		&dev_attr_profile2_raw.attr,
-		&dev_attr_profile3_raw.attr,
-		&dev_attr_profile4_raw.attr,
-		&dev_attr_profile5_raw.attr,
-		&dev_attr_settings_raw.attr,
-		&dev_attr_firmware_version_raw.attr,
+		&dev_attr_weight.attr,
+		&dev_attr_profile1.attr,
+		&dev_attr_profile2.attr,
+		&dev_attr_profile3.attr,
+		&dev_attr_profile4.attr,
+		&dev_attr_profile5.attr,
+		&dev_attr_settings.attr,
+		&dev_attr_firmware_version.attr,
 		&dev_attr_tcu.attr,
 		&dev_attr_startup_profile.attr,
 		&dev_attr_kone_driver_version.attr,
@@ -801,6 +871,13 @@ static struct attribute_group kone_attribute_group = {
 
 static int kone_create_files(struct usb_interface *intf)
 {
+	/*
+	 * Kone consists of a mouse and a keyboard part.
+	 * Adding sysfs files only to mousepart as information about
+	 * profile and dpi change is reported only in mouseevent.
+	 * There is no way to bind only to mousepart since IGNORE_MOUSE quirk
+	 * moved to hid-apple
+	 */
 	if (intf->cur_altsetting->desc.bInterfaceProtocol
 			== USB_INTERFACE_PROTOCOL_MOUSE)
 		return sysfs_create_group(&intf->dev.kobj,
@@ -882,6 +959,10 @@ static int kone_raw_event(struct hid_device *hdev, struct hid_report *report,
 	else
 		kone->last_tilt_state = event->tilt;
 
+	/*
+	 * handle special events and keep actual profile and dpi values
+	 * up to date
+	 */
 	switch (event->event) {
 	case kone_mouse_event_osd_dpi:
 		kone->act_dpi = event->value;
diff --git a/drivers/hid/hid-roccat-kone.h b/drivers/hid/hid-roccat-kone.h
index 14f5ebf..35a5806 100644
--- a/drivers/hid/hid-roccat-kone.h
+++ b/drivers/hid/hid-roccat-kone.h
@@ -21,11 +21,12 @@
 
 struct kone_device {
 	/*
-	 * Actual values might not get called that much so I store them when
-	 * they are at hand or get them only when needed.
+	 * Storing actual values since there is no way of getting this
+	 * information from the device.
 	 */
 	int act_profile, act_profile_valid;
 	int act_dpi, act_dpi_valid;
+	/* used for neutralizing abnormal tilt button behaviour */
 	int last_tilt_state;
 };
 
@@ -163,11 +164,13 @@ struct kone_mouse_event {
 };
 
 enum kone_mouse_events {
+	/* osd events are thought to be display on screen */
 	kone_mouse_event_osd_dpi = 0xa0,
 	kone_mouse_event_osd_profile = 0xb0,
 	/* TODO clarify meaning and occurence of kone_mouse_event_calibration */
 	kone_mouse_event_calibration = 0xc0,
 	kone_mouse_event_call_overlong_macro = 0xe0,
+	/* switch events notify if user changed values wiht mousebutton click */
 	kone_mouse_event_switch_dpi = 0xf0,
 	kone_mouse_event_switch_profile = 0xf1
 };
-- 
1.6.6

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

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux