linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/4] Input: walkera0701 - set up input device's parent
@ 2013-01-06  8:59 Dmitry Torokhov
  2013-01-06  8:59 ` [PATCH 2/4] Input: walkera0701 - switch to using pr_xxx() for messages Dmitry Torokhov
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Dmitry Torokhov @ 2013-01-06  8:59 UTC (permalink / raw)
  To: Peter Popovec; +Cc: linux-input

This will place the joystick's input device into propoer place in sysfs
hierarchy as long as th port has device assigned to it (i.e. it is not
legacy port).

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/joystick/walkera0701.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/input/joystick/walkera0701.c b/drivers/input/joystick/walkera0701.c
index f8f892b..38386ce 100644
--- a/drivers/input/joystick/walkera0701.c
+++ b/drivers/input/joystick/walkera0701.c
@@ -241,6 +241,7 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
 	w->input_dev->id.vendor = 0x0001;
 	w->input_dev->id.product = 0x0001;
 	w->input_dev->id.version = 0x0100;
+	w->input_dev->dev.parent = w->parport->dev;
 	w->input_dev->open = walkera0701_open;
 	w->input_dev->close = walkera0701_close;
 


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

* [PATCH 2/4] Input: walkera0701 - switch to using pr_xxx() for messages
  2013-01-06  8:59 [PATCH 1/4] Input: walkera0701 - set up input device's parent Dmitry Torokhov
@ 2013-01-06  8:59 ` Dmitry Torokhov
  2013-01-06  8:59 ` [PATCH 3/4] Input: walkera0701 - use proper error codes Dmitry Torokhov
  2013-01-06  8:59 ` [PATCH 4/4] Input: walkera0701 - claim parport when opening the device Dmitry Torokhov
  2 siblings, 0 replies; 4+ messages in thread
From: Dmitry Torokhov @ 2013-01-06  8:59 UTC (permalink / raw)
  To: Peter Popovec; +Cc: linux-input

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/joystick/walkera0701.c |   23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/drivers/input/joystick/walkera0701.c b/drivers/input/joystick/walkera0701.c
index 38386ce..da657e6 100644
--- a/drivers/input/joystick/walkera0701.c
+++ b/drivers/input/joystick/walkera0701.c
@@ -12,7 +12,7 @@
  * the Free Software Foundation.
 */
 
-/* #define WK0701_DEBUG */
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
 #define RESERVE 20000
 #define SYNC_PULSE 1306000
@@ -67,6 +67,7 @@ static inline void walkera0701_parse_frame(struct walkera_dev *w)
 {
 	int i;
 	int val1, val2, val3, val4, val5, val6, val7, val8;
+	int magic, magic_bit;
 	int crc1, crc2;
 
 	for (crc1 = crc2 = i = 0; i < 10; i++) {
@@ -102,17 +103,12 @@ static inline void walkera0701_parse_frame(struct walkera_dev *w)
 	val8 = (w->buf[18] & 1) << 8 | (w->buf[19] << 4) | w->buf[20];
 	val8 *= (w->buf[18] & 2) - 1;	/*sign */
 
-#ifdef WK0701_DEBUG
-	{
-		int magic, magic_bit;
-		magic = (w->buf[21] << 4) | w->buf[22];
-		magic_bit = (w->buf[24] & 8) >> 3;
-		printk(KERN_DEBUG
-		       "walkera0701: %4d %4d %4d %4d  %4d %4d %4d %4d (magic %2x %d)\n",
-		       val1, val2, val3, val4, val5, val6, val7, val8, magic,
-		       magic_bit);
-	}
-#endif
+	magic = (w->buf[21] << 4) | w->buf[22];
+	magic_bit = (w->buf[24] & 8) >> 3;
+	pr_debug("%4d %4d %4d %4d  %4d %4d %4d %4d (magic %2x %d)\n",
+		 val1, val2, val3, val4, val5, val6, val7, val8,
+		 magic, magic_bit);
+
 	input_report_abs(w->input_dev, ABS_X, val2);
 	input_report_abs(w->input_dev, ABS_Y, val1);
 	input_report_abs(w->input_dev, ABS_Z, val6);
@@ -208,7 +204,8 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
 		return -ENODEV;
 
 	if (w->parport->irq == -1) {
-		printk(KERN_ERR "walkera0701: parport without interrupt\n");
+		pr_err("parport %d does not have interrupt assigned\n",
+			parport);
 		goto init_err;
 	}
 


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

* [PATCH 3/4] Input: walkera0701 - use proper error codes
  2013-01-06  8:59 [PATCH 1/4] Input: walkera0701 - set up input device's parent Dmitry Torokhov
  2013-01-06  8:59 ` [PATCH 2/4] Input: walkera0701 - switch to using pr_xxx() for messages Dmitry Torokhov
@ 2013-01-06  8:59 ` Dmitry Torokhov
  2013-01-06  8:59 ` [PATCH 4/4] Input: walkera0701 - claim parport when opening the device Dmitry Torokhov
  2 siblings, 0 replies; 4+ messages in thread
From: Dmitry Torokhov @ 2013-01-06  8:59 UTC (permalink / raw)
  To: Peter Popovec; +Cc: linux-input

We have been using -EBUSY where we should have used -EIO or -ENOMEM,
so let's fix that and also add some diagnostic messages.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/joystick/walkera0701.c |   56 ++++++++++++++++++++++------------
 1 file changed, 36 insertions(+), 20 deletions(-)

diff --git a/drivers/input/joystick/walkera0701.c b/drivers/input/joystick/walkera0701.c
index da657e6..b86134c 100644
--- a/drivers/input/joystick/walkera0701.c
+++ b/drivers/input/joystick/walkera0701.c
@@ -197,37 +197,51 @@ static void walkera0701_close(struct input_dev *dev)
 
 static int walkera0701_connect(struct walkera_dev *w, int parport)
 {
-	int err = -ENODEV;
+	int error;
 
 	w->parport = parport_find_number(parport);
-	if (w->parport == NULL)
+	if (!w->parport) {
+		pr_err("parport %d does not exist\n", parport);
 		return -ENODEV;
+	}
 
 	if (w->parport->irq == -1) {
 		pr_err("parport %d does not have interrupt assigned\n",
 			parport);
-		goto init_err;
+		error = -EINVAL;
+		goto err_put_parport;
 	}
 
-	err = -EBUSY;
 	w->pardevice = parport_register_device(w->parport, "walkera0701",
 				    NULL, NULL, walkera0701_irq_handler,
 				    PARPORT_DEV_EXCL, w);
-	if (!w->pardevice)
-		goto init_err;
+	if (!w->pardevice) {
+		pr_err("failed to register parport device\n");
+		error = -EIO;
+		goto err_put_parport;
+	}
 
-	if (parport_negotiate(w->pardevice->port, IEEE1284_MODE_COMPAT))
-		goto init_err1;
+	if (parport_negotiate(w->pardevice->port, IEEE1284_MODE_COMPAT)) {
+		pr_err("failed to negotiate parport mode\n");
+		error = -EIO;
+		goto err_unregister_device;
+	}
 
-	if (parport_claim(w->pardevice))
-		goto init_err1;
+	if (parport_claim(w->pardevice)) {
+		pr_err("failed to claim parport\n");
+		error = -EBUSY;
+		goto err_unregister_device;
+	}
 
 	hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
 	w->timer.function = timer_handler;
 
 	w->input_dev = input_allocate_device();
-	if (!w->input_dev)
-		goto init_err2;
+	if (!w->input_dev) {
+		pr_err("failed to allocate input device\n");
+		error = -ENOMEM;
+		goto err_release_parport;
+	}
 
 	input_set_drvdata(w->input_dev, w);
 	w->input_dev->name = "Walkera WK-0701 TX";
@@ -252,21 +266,23 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
 	input_set_abs_params(w->input_dev, ABS_RUDDER, -512, 512, 0, 0);
 	input_set_abs_params(w->input_dev, ABS_MISC, -512, 512, 0, 0);
 
-	err = input_register_device(w->input_dev);
-	if (err)
-		goto init_err3;
+	error = input_register_device(w->input_dev);
+	if (error) {
+		pr_err("failed to register input device\n");
+		goto err_free_input_dev;
+	}
 
 	return 0;
 
- init_err3:
+err_free_input_dev:
 	input_free_device(w->input_dev);
- init_err2:
+err_release_parport:
 	parport_release(w->pardevice);
- init_err1:
+err_unregister_device:
 	parport_unregister_device(w->pardevice);
- init_err:
+err_put_parport:
 	parport_put_port(w->parport);
-	return err;
+	return error;
 }
 
 static void walkera0701_disconnect(struct walkera_dev *w)


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

* [PATCH 4/4] Input: walkera0701 - claim parport when opening the device
  2013-01-06  8:59 [PATCH 1/4] Input: walkera0701 - set up input device's parent Dmitry Torokhov
  2013-01-06  8:59 ` [PATCH 2/4] Input: walkera0701 - switch to using pr_xxx() for messages Dmitry Torokhov
  2013-01-06  8:59 ` [PATCH 3/4] Input: walkera0701 - use proper error codes Dmitry Torokhov
@ 2013-01-06  8:59 ` Dmitry Torokhov
  2 siblings, 0 replies; 4+ messages in thread
From: Dmitry Torokhov @ 2013-01-06  8:59 UTC (permalink / raw)
  To: Peter Popovec; +Cc: linux-input

Postpone claiming the port until the device is opened, instead of doing
that when the driver is loaded.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/joystick/walkera0701.c |   16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/drivers/input/joystick/walkera0701.c b/drivers/input/joystick/walkera0701.c
index b86134c..b76ac58 100644
--- a/drivers/input/joystick/walkera0701.c
+++ b/drivers/input/joystick/walkera0701.c
@@ -183,6 +183,9 @@ static int walkera0701_open(struct input_dev *dev)
 {
 	struct walkera_dev *w = input_get_drvdata(dev);
 
+	if (parport_claim(w->pardevice))
+		return -EBUSY;
+
 	parport_enable_irq(w->parport);
 	return 0;
 }
@@ -193,6 +196,8 @@ static void walkera0701_close(struct input_dev *dev)
 
 	parport_disable_irq(w->parport);
 	hrtimer_cancel(&w->timer);
+
+	parport_release(w->pardevice);
 }
 
 static int walkera0701_connect(struct walkera_dev *w, int parport)
@@ -227,12 +232,6 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
 		goto err_unregister_device;
 	}
 
-	if (parport_claim(w->pardevice)) {
-		pr_err("failed to claim parport\n");
-		error = -EBUSY;
-		goto err_unregister_device;
-	}
-
 	hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
 	w->timer.function = timer_handler;
 
@@ -240,7 +239,7 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
 	if (!w->input_dev) {
 		pr_err("failed to allocate input device\n");
 		error = -ENOMEM;
-		goto err_release_parport;
+		goto err_unregister_device;
 	}
 
 	input_set_drvdata(w->input_dev, w);
@@ -276,8 +275,6 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
 
 err_free_input_dev:
 	input_free_device(w->input_dev);
-err_release_parport:
-	parport_release(w->pardevice);
 err_unregister_device:
 	parport_unregister_device(w->pardevice);
 err_put_parport:
@@ -288,7 +285,6 @@ err_put_parport:
 static void walkera0701_disconnect(struct walkera_dev *w)
 {
 	input_unregister_device(w->input_dev);
-	parport_release(w->pardevice);
 	parport_unregister_device(w->pardevice);
 	parport_put_port(w->parport);
 }


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

end of thread, other threads:[~2013-01-06  8:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-06  8:59 [PATCH 1/4] Input: walkera0701 - set up input device's parent Dmitry Torokhov
2013-01-06  8:59 ` [PATCH 2/4] Input: walkera0701 - switch to using pr_xxx() for messages Dmitry Torokhov
2013-01-06  8:59 ` [PATCH 3/4] Input: walkera0701 - use proper error codes Dmitry Torokhov
2013-01-06  8:59 ` [PATCH 4/4] Input: walkera0701 - claim parport when opening the device Dmitry Torokhov

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).