All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad
@ 2011-01-13 18:56 Nikolai Kondrashov
  2011-01-13 18:56 ` [PATCH 1/3] Input: split hid-drff into general and ff parts Nikolai Kondrashov
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Nikolai Kondrashov @ 2011-01-13 18:56 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, Vladislav Naumov, Nikolai Kondrashov

These patches add support for a DragonRise Inc. gamepad with USB PID 0x0011.

The patches are made against 2.6.37. I'm almost sure it is wrong, but I wasn't
able to figure out for certain which branch of which repository to use.

Please tell me which one I should use, if I'm wrong. Thanks.

Sincerely,
Nick

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

* [PATCH 1/3] Input: split hid-drff into general and ff parts
  2011-01-13 18:56 [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad Nikolai Kondrashov
@ 2011-01-13 18:56 ` Nikolai Kondrashov
  2011-01-13 18:56 ` [PATCH 2/3] Input: add support for DragonRise PID 0011 gamepad Nikolai Kondrashov
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 10+ messages in thread
From: Nikolai Kondrashov @ 2011-01-13 18:56 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, Vladislav Naumov, Nikolai Kondrashov

Split DragonRise Inc. HID gamepad driver (hid-drff.c) into a general
(hid-dr.[hc]) and a force feedback part (hid-drff.c).

Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
---
 drivers/hid/Makefile   |    7 ++++-
 drivers/hid/hid-dr.c   |   71 ++++++++++++++++++++++++++++++++++++++++++++++++
 drivers/hid/hid-dr.h   |   13 +++++++++
 drivers/hid/hid-drff.c |   63 +-----------------------------------------
 4 files changed, 92 insertions(+), 62 deletions(-)
 create mode 100644 drivers/hid/hid-dr.c
 create mode 100644 drivers/hid/hid-dr.h

diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
index c335605..3e18fdd 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
@@ -25,6 +25,11 @@ ifdef CONFIG_LOGIWII_FF
 	hid-logitech-objs	+= hid-lg4ff.o
 endif
 
+hid-dragonrise-objs		:= hid-dr.o
+ifdef CONFIG_DRAGONRISE_FF
+	hid-dragonrise-objs	+= hid-drff.o
+endif
+
 obj-$(CONFIG_HID_3M_PCT)	+= hid-3m-pct.o
 obj-$(CONFIG_HID_A4TECH)	+= hid-a4tech.o
 obj-$(CONFIG_HID_ACRUX_FF)	+= hid-axff.o
@@ -34,7 +39,7 @@ obj-$(CONFIG_HID_CANDO)		+= hid-cando.o
 obj-$(CONFIG_HID_CHERRY)	+= hid-cherry.o
 obj-$(CONFIG_HID_CHICONY)	+= hid-chicony.o
 obj-$(CONFIG_HID_CYPRESS)	+= hid-cypress.o
-obj-$(CONFIG_HID_DRAGONRISE)	+= hid-drff.o
+obj-$(CONFIG_HID_DRAGONRISE)	+= hid-dragonrise.o
 obj-$(CONFIG_HID_EGALAX)	+= hid-egalax.o
 obj-$(CONFIG_HID_ELECOM)	+= hid-elecom.o
 obj-$(CONFIG_HID_EZKEY)		+= hid-ezkey.o
diff --git a/drivers/hid/hid-dr.c b/drivers/hid/hid-dr.c
new file mode 100644
index 0000000..bafd530
--- /dev/null
+++ b/drivers/hid/hid-dr.c
@@ -0,0 +1,71 @@
+/*
+ *  HID driver for DragonRise Inc. devices not fully compliant with HID standard
+ *
+ *  Copyright (c) 2010 Nikolai Kondrashov <spbnick@gmail.com>
+ *  Copyright (c) 2009 Richard Walmsley <richwalm@gmail.com>
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/hid.h>
+
+#include "hid-ids.h"
+#include "hid-dr.h"
+
+static int dr_probe(struct hid_device *hdev, const struct hid_device_id *id)
+{
+	int ret;
+
+	dev_dbg(&hdev->dev, "DragonRise Inc. HID hardware probe...");
+
+	ret = hid_parse(hdev);
+	if (ret) {
+		dev_err(&hdev->dev, "parse failed\n");
+		goto err;
+	}
+
+	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT & ~HID_CONNECT_FF);
+	if (ret) {
+		dev_err(&hdev->dev, "hw start failed\n");
+		goto err;
+	}
+
+	drff_init(hdev);
+
+	return 0;
+err:
+	return ret;
+}
+
+static const struct hid_device_id dr_devices[] = {
+	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006),  },
+	{ }
+};
+MODULE_DEVICE_TABLE(hid, dr_devices);
+
+static struct hid_driver dr_driver = {
+	.name = "dragonrise",
+	.id_table = dr_devices,
+	.probe = dr_probe,
+};
+
+static int __init dr_init(void)
+{
+	return hid_register_driver(&dr_driver);
+}
+
+static void __exit dr_exit(void)
+{
+	hid_unregister_driver(&dr_driver);
+}
+
+module_init(dr_init);
+module_exit(dr_exit);
+MODULE_LICENSE("GPL");
diff --git a/drivers/hid/hid-dr.h b/drivers/hid/hid-dr.h
new file mode 100644
index 0000000..43eb631
--- /dev/null
+++ b/drivers/hid/hid-dr.h
@@ -0,0 +1,13 @@
+#ifndef __HID_DR_H
+#define __HID_DR_H
+
+#ifdef CONFIG_DRAGONRISE_FF
+extern int drff_init(struct hid_device *hid);
+#else
+static inline int drff_init(struct hid_device *hid)
+{
+	return 0;
+}
+#endif
+
+#endif
diff --git a/drivers/hid/hid-drff.c b/drivers/hid/hid-drff.c
index 968b04f..89adafe 100644
--- a/drivers/hid/hid-drff.c
+++ b/drivers/hid/hid-drff.c
@@ -32,10 +32,8 @@
 #include <linux/usb.h>
 #include <linux/hid.h>
 
-#include "hid-ids.h"
-
-#ifdef CONFIG_DRAGONRISE_FF
 #include "usbhid/usbhid.h"
+#include "hid-dr.h"
 
 struct drff_device {
 	struct hid_report *report;
@@ -84,7 +82,7 @@ static int drff_play(struct input_dev *dev, void *data,
 	return 0;
 }
 
-static int drff_init(struct hid_device *hid)
+int drff_init(struct hid_device *hid)
 {
 	struct drff_device *drff;
 	struct hid_report *report;
@@ -138,60 +136,3 @@ static int drff_init(struct hid_device *hid)
 
 	return 0;
 }
-#else
-static inline int drff_init(struct hid_device *hid)
-{
-	return 0;
-}
-#endif
-
-static int dr_probe(struct hid_device *hdev, const struct hid_device_id *id)
-{
-	int ret;
-
-	dev_dbg(&hdev->dev, "DragonRise Inc. HID hardware probe...");
-
-	ret = hid_parse(hdev);
-	if (ret) {
-		dev_err(&hdev->dev, "parse failed\n");
-		goto err;
-	}
-
-	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT & ~HID_CONNECT_FF);
-	if (ret) {
-		dev_err(&hdev->dev, "hw start failed\n");
-		goto err;
-	}
-
-	drff_init(hdev);
-
-	return 0;
-err:
-	return ret;
-}
-
-static const struct hid_device_id dr_devices[] = {
-	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006),  },
-	{ }
-};
-MODULE_DEVICE_TABLE(hid, dr_devices);
-
-static struct hid_driver dr_driver = {
-	.name = "dragonrise",
-	.id_table = dr_devices,
-	.probe = dr_probe,
-};
-
-static int __init dr_init(void)
-{
-	return hid_register_driver(&dr_driver);
-}
-
-static void __exit dr_exit(void)
-{
-	hid_unregister_driver(&dr_driver);
-}
-
-module_init(dr_init);
-module_exit(dr_exit);
-MODULE_LICENSE("GPL");
-- 
1.7.2.3


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

* [PATCH 2/3] Input: add support for DragonRise PID 0011 gamepad
  2011-01-13 18:56 [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad Nikolai Kondrashov
  2011-01-13 18:56 ` [PATCH 1/3] Input: split hid-drff into general and ff parts Nikolai Kondrashov
@ 2011-01-13 18:56 ` Nikolai Kondrashov
  2011-01-13 18:56 ` [PATCH 3/3] Input: update dragonrise Kconfig description Nikolai Kondrashov
  2011-01-18 13:14 ` [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad Jiri Kosina
  3 siblings, 0 replies; 10+ messages in thread
From: Nikolai Kondrashov @ 2011-01-13 18:56 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, Vladislav Naumov, Nikolai Kondrashov

Add support for DragonRise Inc. gamepad with USB PID 0x0011 by fixing its report
descriptor. This mainly removes spurious axis.

Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
Tested-by: Vladislav Naumov <vnaum@vnaum.com>
---
 drivers/hid/hid-core.c |    1 +
 drivers/hid/hid-dr.c   |  117 +++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 117 insertions(+), 1 deletions(-)

diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 88cb04e..bae1c09 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1298,6 +1298,7 @@ static const struct hid_device_id hid_blacklist[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_3) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0011) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
diff --git a/drivers/hid/hid-dr.c b/drivers/hid/hid-dr.c
index bafd530..21c9f6b 100644
--- a/drivers/hid/hid-dr.c
+++ b/drivers/hid/hid-dr.c
@@ -19,6 +19,110 @@
 #include "hid-ids.h"
 #include "hid-dr.h"
 
+/*
+ * The original descriptor of joystick with PID 0x0011, represented by DVTech PC
+ * JS19. It seems both copied from another device and a result of confusion
+ * either about the specification or about the program used to create the
+ * descriptor. In any case, it's a wonder it works on Windows.
+ *
+ *  Usage Page (Desktop),             ; Generic desktop controls (01h)
+ *  Usage (Joystik),                  ; Joystik (04h, application collection)
+ *  Collection (Application),
+ *    Collection (Logical),
+ *      Report Size (8),
+ *      Report Count (5),
+ *      Logical Minimum (0),
+ *      Logical Maximum (255),
+ *      Physical Minimum (0),
+ *      Physical Maximum (255),
+ *      Usage (X),                    ; X (30h, dynamic value)
+ *      Usage (X),                    ; X (30h, dynamic value)
+ *      Usage (X),                    ; X (30h, dynamic value)
+ *      Usage (X),                    ; X (30h, dynamic value)
+ *      Usage (Y),                    ; Y (31h, dynamic value)
+ *      Input (Variable),
+ *      Report Size (4),
+ *      Report Count (1),
+ *      Logical Maximum (7),
+ *      Physical Maximum (315),
+ *      Unit (Degrees),
+ *      Usage (00h),
+ *      Input (Variable, Null State),
+ *      Unit,
+ *      Report Size (1),
+ *      Report Count (10),
+ *      Logical Maximum (1),
+ *      Physical Maximum (1),
+ *      Usage Page (Button),          ; Button (09h)
+ *      Usage Minimum (01h),
+ *      Usage Maximum (0Ah),
+ *      Input (Variable),
+ *      Usage Page (FF00h),           ; FF00h, vendor-defined
+ *      Report Size (1),
+ *      Report Count (10),
+ *      Logical Maximum (1),
+ *      Physical Maximum (1),
+ *      Usage (01h),
+ *      Input (Variable),
+ *    End Collection,
+ *    Collection (Logical),
+ *      Report Size (8),
+ *      Report Count (4),
+ *      Physical Maximum (255),
+ *      Logical Maximum (255),
+ *      Usage (02h),
+ *      Output (Variable),
+ *    End Collection,
+ *  End Collection
+ */
+
+/* Size of the original descriptor of the PID 0x0011 joystick */
+#define PID0011_RDESC_ORIG_SIZE	101
+
+/* Fixed report descriptor for PID 0x011 joystick */
+static __u8 pid0011_rdesc_fixed[] = {
+	0x05, 0x01,         /*  Usage Page (Desktop),           */
+	0x09, 0x04,         /*  Usage (Joystik),                */
+	0xA1, 0x01,         /*  Collection (Application),       */
+	0xA1, 0x02,         /*      Collection (Logical),       */
+	0x14,               /*          Logical Minimum (0),    */
+	0x75, 0x08,         /*          Report Size (8),        */
+	0x95, 0x03,         /*          Report Count (3),       */
+	0x81, 0x01,         /*          Input (Constant),       */
+	0x26, 0xFF, 0x00,   /*          Logical Maximum (255),  */
+	0x95, 0x02,         /*          Report Count (2),       */
+	0x09, 0x30,         /*          Usage (X),              */
+	0x09, 0x31,         /*          Usage (Y),              */
+	0x81, 0x02,         /*          Input (Variable),       */
+	0x75, 0x01,         /*          Report Size (1),        */
+	0x95, 0x04,         /*          Report Count (4),       */
+	0x81, 0x01,         /*          Input (Constant),       */
+	0x25, 0x01,         /*          Logical Maximum (1),    */
+	0x95, 0x0A,         /*          Report Count (10),      */
+	0x05, 0x09,         /*          Usage Page (Button),    */
+	0x19, 0x01,         /*          Usage Minimum (01h),    */
+	0x29, 0x0A,         /*          Usage Maximum (0Ah),    */
+	0x81, 0x02,         /*          Input (Variable),       */
+	0x95, 0x0A,         /*          Report Count (10),      */
+	0x81, 0x01,         /*          Input (Constant),       */
+	0xC0,               /*      End Collection,             */
+	0xC0                /*  End Collection                  */
+};
+
+static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc,
+				unsigned int *rsize)
+{
+	switch (hdev->product) {
+	case 0x0011:
+		if (*rsize == PID0011_RDESC_ORIG_SIZE) {
+			rdesc = pid0011_rdesc_fixed;
+			*rsize = sizeof(pid0011_rdesc_fixed);
+		}
+		break;
+	}
+	return rdesc;
+}
+
 static int dr_probe(struct hid_device *hdev, const struct hid_device_id *id)
 {
 	int ret;
@@ -37,7 +141,16 @@ static int dr_probe(struct hid_device *hdev, const struct hid_device_id *id)
 		goto err;
 	}
 
-	drff_init(hdev);
+	switch (hdev->product) {
+	case 0x0006:
+		ret = drff_init(hdev);
+		if (ret) {
+			dev_err(&hdev->dev, "force feedback init failed\n");
+			hid_hw_stop(hdev);
+			goto err;
+		}
+		break;
+	}
 
 	return 0;
 err:
@@ -46,6 +159,7 @@ err:
 
 static const struct hid_device_id dr_devices[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006),  },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0011),  },
 	{ }
 };
 MODULE_DEVICE_TABLE(hid, dr_devices);
@@ -53,6 +167,7 @@ MODULE_DEVICE_TABLE(hid, dr_devices);
 static struct hid_driver dr_driver = {
 	.name = "dragonrise",
 	.id_table = dr_devices,
+	.report_fixup = dr_report_fixup,
 	.probe = dr_probe,
 };
 
-- 
1.7.2.3


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

* [PATCH 3/3] Input: update dragonrise Kconfig description
  2011-01-13 18:56 [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad Nikolai Kondrashov
  2011-01-13 18:56 ` [PATCH 1/3] Input: split hid-drff into general and ff parts Nikolai Kondrashov
  2011-01-13 18:56 ` [PATCH 2/3] Input: add support for DragonRise PID 0011 gamepad Nikolai Kondrashov
@ 2011-01-13 18:56 ` Nikolai Kondrashov
  2011-01-18 13:14 ` [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad Jiri Kosina
  3 siblings, 0 replies; 10+ messages in thread
From: Nikolai Kondrashov @ 2011-01-13 18:56 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, Vladislav Naumov, Nikolai Kondrashov

Add list of (supposedly) supported gamepads to dragonrise driver Kconfig
description.

Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
---
 drivers/hid/Kconfig |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 3052e29..c1c5dc0 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -140,7 +140,12 @@ config HID_DRAGONRISE
 	tristate "DragonRise Inc. game controller"
 	depends on USB_HID
 	---help---
-	Say Y here if you have DragonRise Inc.game controllers.
+	Say Y here if you have DragonRise Inc. game controllers.
+	These might be branded as:
+	- Tesun USB-703
+	- Media-tech MT1504 "Rogue"
+	- DVTech JS19 "Gear"
+	- Defender Game Master
 
 config DRAGONRISE_FF
 	bool "DragonRise Inc. force feedback"
-- 
1.7.2.3


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

* Re: [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad
  2011-01-13 18:56 [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad Nikolai Kondrashov
                   ` (2 preceding siblings ...)
  2011-01-13 18:56 ` [PATCH 3/3] Input: update dragonrise Kconfig description Nikolai Kondrashov
@ 2011-01-18 13:14 ` Jiri Kosina
  2011-01-21  9:32   ` Nikolai Kondrashov
  3 siblings, 1 reply; 10+ messages in thread
From: Jiri Kosina @ 2011-01-18 13:14 UTC (permalink / raw)
  To: Nikolai Kondrashov; +Cc: Dmitry Torokhov, linux-input, Vladislav Naumov

On Thu, 13 Jan 2011, Nikolai Kondrashov wrote:

> These patches add support for a DragonRise Inc. gamepad with USB PID 0x0011.
> 
> The patches are made against 2.6.37. I'm almost sure it is wrong, but I wasn't
> able to figure out for certain which branch of which repository to use.
> 
> Please tell me which one I should use, if I'm wrong. Thanks.

Hi Nikolai,

two comments:

1) please always CC me on patches against drivers/hid/*, as can be guessed 
from MAINTAINERS file
2) please send me the patch based on more-or-less current Linus' tree, as 
that's what development is happening on top of.

Otherwise, the series looks fine and I am willing to apply it. Thanks,

-- 
Jiri Kosina
SUSE Labs, Novell Inc.

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

* Re: [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad
  2011-01-18 13:14 ` [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad Jiri Kosina
@ 2011-01-21  9:32   ` Nikolai Kondrashov
  0 siblings, 0 replies; 10+ messages in thread
From: Nikolai Kondrashov @ 2011-01-21  9:32 UTC (permalink / raw)
  To: Jiri Kosina; +Cc: Dmitry Torokhov, linux-input, Vladislav Naumov

Hi Jiri,

On 01/18/2011 04:14 PM, Jiri Kosina wrote:
> 1) please always CC me on patches against drivers/hid/*, as can be guessed
> from MAINTAINERS file
I'm sorry. I'm still a bit confused about who does what.

> 2) please send me the patch based on more-or-less current Linus' tree, as
> that's what development is happening on top of.
Done.

> Otherwise, the series looks fine and I am willing to apply it. Thanks,
Great, thanks :)

Sincerely,
Nick

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

* Re: [PATCH 1/3] Input: split hid-drff into general and ff parts
  2011-01-24 15:28     ` Jiri Kosina
@ 2011-01-24 15:45       ` Nikolai Kondrashov
  0 siblings, 0 replies; 10+ messages in thread
From: Nikolai Kondrashov @ 2011-01-24 15:45 UTC (permalink / raw)
  To: Jiri Kosina; +Cc: Dmitry Torokhov, linux-input, Vladislav Naumov

On 01/24/2011 06:28 PM, Jiri Kosina wrote:
> On Fri, 21 Jan 2011, Dmitry Torokhov wrote:
>> Or maybe fold them into one?
>
> Yeah, folding into one looks sane to me.
>
> Nikolai, could you please respin the patches and resend? Otherwise I have
> no objections.
Sure, that was my original idea, but I thought this way it would be less
diruptive.

Yet, I'll still have to read about Kbuild makefiles to understand completely
what Dmitry was talking about :)

Sincerely,
Nick

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

* Re: [PATCH 1/3] Input: split hid-drff into general and ff parts
  2011-01-21  9:52   ` Dmitry Torokhov
@ 2011-01-24 15:28     ` Jiri Kosina
  2011-01-24 15:45       ` Nikolai Kondrashov
  0 siblings, 1 reply; 10+ messages in thread
From: Jiri Kosina @ 2011-01-24 15:28 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: Nikolai Kondrashov, linux-input, Vladislav Naumov

On Fri, 21 Jan 2011, Dmitry Torokhov wrote:

> > Split DragonRise Inc. HID gamepad driver (hid-drff.c) into a general
> > (hid-dr.[hc]) and a force feedback part (hid-drff.c).
> > 
> > Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
> > ---
> >  drivers/hid/Makefile   |    7 ++++-
> >  drivers/hid/hid-dr.c   |   71 ++++++++++++++++++++++++++++++++++++++++++++++++
> >  drivers/hid/hid-dr.h   |   13 +++++++++
> >  drivers/hid/hid-drff.c |   63 +-----------------------------------------
> >  4 files changed, 92 insertions(+), 62 deletions(-)
> >  create mode 100644 drivers/hid/hid-dr.c
> >  create mode 100644 drivers/hid/hid-dr.h
> > 
> > diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
> > index 6efc2a0..ea58795 100644
> > --- a/drivers/hid/Makefile
> > +++ b/drivers/hid/Makefile
> > @@ -25,6 +25,11 @@ ifdef CONFIG_LOGIWII_FF
> >  	hid-logitech-y	+= hid-lg4ff.o
> >  endif
> >  
> > +hid-dragonrise-objs		:= hid-dr.o
> > +ifdef CONFIG_DRAGONRISE_FF
> > +	hid-dragonrise-objs	+= hid-drff.o
> > +endif
> 
> If you want to keep the 2 source files then I think you should write this as:
> 
> hid-dragonrise-y			:= hid-dr.o
> hid-dragonrise-$(CONFIG_DRAGONRISE_FF)	+= hid-drff.o
> 
> Or maybe fold them into one?

Yeah, folding into one looks sane to me.

Nikolai, could you please respin the patches and resend? Otherwise I have 
no objections.

Thanks,

-- 
Jiri Kosina
SUSE Labs, Novell Inc.

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

* Re: [PATCH 1/3] Input: split hid-drff into general and ff parts
  2011-01-21  9:30 ` [PATCH 1/3] Input: split hid-drff into general and ff parts Nikolai Kondrashov
@ 2011-01-21  9:52   ` Dmitry Torokhov
  2011-01-24 15:28     ` Jiri Kosina
  0 siblings, 1 reply; 10+ messages in thread
From: Dmitry Torokhov @ 2011-01-21  9:52 UTC (permalink / raw)
  To: Nikolai Kondrashov; +Cc: Jiri Kosina, linux-input, Vladislav Naumov

On Fri, Jan 21, 2011 at 12:30:13PM +0300, Nikolai Kondrashov wrote:
> Split DragonRise Inc. HID gamepad driver (hid-drff.c) into a general
> (hid-dr.[hc]) and a force feedback part (hid-drff.c).
> 
> Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
> ---
>  drivers/hid/Makefile   |    7 ++++-
>  drivers/hid/hid-dr.c   |   71 ++++++++++++++++++++++++++++++++++++++++++++++++
>  drivers/hid/hid-dr.h   |   13 +++++++++
>  drivers/hid/hid-drff.c |   63 +-----------------------------------------
>  4 files changed, 92 insertions(+), 62 deletions(-)
>  create mode 100644 drivers/hid/hid-dr.c
>  create mode 100644 drivers/hid/hid-dr.h
> 
> diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
> index 6efc2a0..ea58795 100644
> --- a/drivers/hid/Makefile
> +++ b/drivers/hid/Makefile
> @@ -25,6 +25,11 @@ ifdef CONFIG_LOGIWII_FF
>  	hid-logitech-y	+= hid-lg4ff.o
>  endif
>  
> +hid-dragonrise-objs		:= hid-dr.o
> +ifdef CONFIG_DRAGONRISE_FF
> +	hid-dragonrise-objs	+= hid-drff.o
> +endif

If you want to keep the 2 source files then I think you should write this as:

hid-dragonrise-y			:= hid-dr.o
hid-dragonrise-$(CONFIG_DRAGONRISE_FF)	+= hid-drff.o

Or maybe fold them into one?

-- 
Dmitry

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

* [PATCH 1/3] Input: split hid-drff into general and ff parts
  2011-01-21  9:30 [PATCH v2] " Nikolai Kondrashov
@ 2011-01-21  9:30 ` Nikolai Kondrashov
  2011-01-21  9:52   ` Dmitry Torokhov
  0 siblings, 1 reply; 10+ messages in thread
From: Nikolai Kondrashov @ 2011-01-21  9:30 UTC (permalink / raw)
  To: Jiri Kosina
  Cc: Dmitry Torokhov, linux-input, Vladislav Naumov, Nikolai Kondrashov

Split DragonRise Inc. HID gamepad driver (hid-drff.c) into a general
(hid-dr.[hc]) and a force feedback part (hid-drff.c).

Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
---
 drivers/hid/Makefile   |    7 ++++-
 drivers/hid/hid-dr.c   |   71 ++++++++++++++++++++++++++++++++++++++++++++++++
 drivers/hid/hid-dr.h   |   13 +++++++++
 drivers/hid/hid-drff.c |   63 +-----------------------------------------
 4 files changed, 92 insertions(+), 62 deletions(-)
 create mode 100644 drivers/hid/hid-dr.c
 create mode 100644 drivers/hid/hid-dr.h

diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
index 6efc2a0..ea58795 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
@@ -25,6 +25,11 @@ ifdef CONFIG_LOGIWII_FF
 	hid-logitech-y	+= hid-lg4ff.o
 endif
 
+hid-dragonrise-objs		:= hid-dr.o
+ifdef CONFIG_DRAGONRISE_FF
+	hid-dragonrise-objs	+= hid-drff.o
+endif
+
 obj-$(CONFIG_HID_3M_PCT)	+= hid-3m-pct.o
 obj-$(CONFIG_HID_A4TECH)	+= hid-a4tech.o
 obj-$(CONFIG_HID_ACRUX_FF)	+= hid-axff.o
@@ -34,7 +39,7 @@ obj-$(CONFIG_HID_CANDO)		+= hid-cando.o
 obj-$(CONFIG_HID_CHERRY)	+= hid-cherry.o
 obj-$(CONFIG_HID_CHICONY)	+= hid-chicony.o
 obj-$(CONFIG_HID_CYPRESS)	+= hid-cypress.o
-obj-$(CONFIG_HID_DRAGONRISE)	+= hid-drff.o
+obj-$(CONFIG_HID_DRAGONRISE)	+= hid-dragonrise.o
 obj-$(CONFIG_HID_EMS_FF)	+= hid-emsff.o
 obj-$(CONFIG_HID_EGALAX)	+= hid-egalax.o
 obj-$(CONFIG_HID_ELECOM)	+= hid-elecom.o
diff --git a/drivers/hid/hid-dr.c b/drivers/hid/hid-dr.c
new file mode 100644
index 0000000..2a4e1ec
--- /dev/null
+++ b/drivers/hid/hid-dr.c
@@ -0,0 +1,71 @@
+/*
+ *  HID driver for DragonRise Inc. devices not fully compliant with HID standard
+ *
+ *  Copyright (c) 2010 Nikolai Kondrashov <spbnick@gmail.com>
+ *  Copyright (c) 2009 Richard Walmsley <richwalm@gmail.com>
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <linux/input.h>
+#include <linux/usb.h>
+#include <linux/hid.h>
+
+#include "hid-ids.h"
+#include "hid-dr.h"
+
+static int dr_probe(struct hid_device *hdev, const struct hid_device_id *id)
+{
+	int ret;
+
+	dev_dbg(&hdev->dev, "DragonRise Inc. HID hardware probe...");
+
+	ret = hid_parse(hdev);
+	if (ret) {
+		hid_err(hdev, "parse failed\n");
+		goto err;
+	}
+
+	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT & ~HID_CONNECT_FF);
+	if (ret) {
+		hid_err(hdev, "hw start failed\n");
+		goto err;
+	}
+
+	drff_init(hdev);
+
+	return 0;
+err:
+	return ret;
+}
+
+static const struct hid_device_id dr_devices[] = {
+	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006),  },
+	{ }
+};
+MODULE_DEVICE_TABLE(hid, dr_devices);
+
+static struct hid_driver dr_driver = {
+	.name = "dragonrise",
+	.id_table = dr_devices,
+	.probe = dr_probe,
+};
+
+static int __init dr_init(void)
+{
+	return hid_register_driver(&dr_driver);
+}
+
+static void __exit dr_exit(void)
+{
+	hid_unregister_driver(&dr_driver);
+}
+
+module_init(dr_init);
+module_exit(dr_exit);
+MODULE_LICENSE("GPL");
diff --git a/drivers/hid/hid-dr.h b/drivers/hid/hid-dr.h
new file mode 100644
index 0000000..43eb631
--- /dev/null
+++ b/drivers/hid/hid-dr.h
@@ -0,0 +1,13 @@
+#ifndef __HID_DR_H
+#define __HID_DR_H
+
+#ifdef CONFIG_DRAGONRISE_FF
+extern int drff_init(struct hid_device *hid);
+#else
+static inline int drff_init(struct hid_device *hid)
+{
+	return 0;
+}
+#endif
+
+#endif
diff --git a/drivers/hid/hid-drff.c b/drivers/hid/hid-drff.c
index afcf3d6..529cda9 100644
--- a/drivers/hid/hid-drff.c
+++ b/drivers/hid/hid-drff.c
@@ -32,10 +32,8 @@
 #include <linux/usb.h>
 #include <linux/hid.h>
 
-#include "hid-ids.h"
-
-#ifdef CONFIG_DRAGONRISE_FF
 #include "usbhid/usbhid.h"
+#include "hid-dr.h"
 
 struct drff_device {
 	struct hid_report *report;
@@ -84,7 +82,7 @@ static int drff_play(struct input_dev *dev, void *data,
 	return 0;
 }
 
-static int drff_init(struct hid_device *hid)
+int drff_init(struct hid_device *hid)
 {
 	struct drff_device *drff;
 	struct hid_report *report;
@@ -138,60 +136,3 @@ static int drff_init(struct hid_device *hid)
 
 	return 0;
 }
-#else
-static inline int drff_init(struct hid_device *hid)
-{
-	return 0;
-}
-#endif
-
-static int dr_probe(struct hid_device *hdev, const struct hid_device_id *id)
-{
-	int ret;
-
-	dev_dbg(&hdev->dev, "DragonRise Inc. HID hardware probe...");
-
-	ret = hid_parse(hdev);
-	if (ret) {
-		hid_err(hdev, "parse failed\n");
-		goto err;
-	}
-
-	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT & ~HID_CONNECT_FF);
-	if (ret) {
-		hid_err(hdev, "hw start failed\n");
-		goto err;
-	}
-
-	drff_init(hdev);
-
-	return 0;
-err:
-	return ret;
-}
-
-static const struct hid_device_id dr_devices[] = {
-	{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006),  },
-	{ }
-};
-MODULE_DEVICE_TABLE(hid, dr_devices);
-
-static struct hid_driver dr_driver = {
-	.name = "dragonrise",
-	.id_table = dr_devices,
-	.probe = dr_probe,
-};
-
-static int __init dr_init(void)
-{
-	return hid_register_driver(&dr_driver);
-}
-
-static void __exit dr_exit(void)
-{
-	hid_unregister_driver(&dr_driver);
-}
-
-module_init(dr_init);
-module_exit(dr_exit);
-MODULE_LICENSE("GPL");
-- 
1.7.2.3


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

end of thread, other threads:[~2011-01-24 15:45 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-13 18:56 [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad Nikolai Kondrashov
2011-01-13 18:56 ` [PATCH 1/3] Input: split hid-drff into general and ff parts Nikolai Kondrashov
2011-01-13 18:56 ` [PATCH 2/3] Input: add support for DragonRise PID 0011 gamepad Nikolai Kondrashov
2011-01-13 18:56 ` [PATCH 3/3] Input: update dragonrise Kconfig description Nikolai Kondrashov
2011-01-18 13:14 ` [PATCH 0/3] Input: add support for DragonRise PID 0011 gamepad Jiri Kosina
2011-01-21  9:32   ` Nikolai Kondrashov
2011-01-21  9:30 [PATCH v2] " Nikolai Kondrashov
2011-01-21  9:30 ` [PATCH 1/3] Input: split hid-drff into general and ff parts Nikolai Kondrashov
2011-01-21  9:52   ` Dmitry Torokhov
2011-01-24 15:28     ` Jiri Kosina
2011-01-24 15:45       ` Nikolai Kondrashov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.