All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Mauro Carvalho Chehab <mchehab@redhat.com>
Cc: "Frank Schäfer" <fschaefer.oss@googlemail.com>,
	"Antti Palosaari" <crope@iki.fi>,
	"Devin Heitmueller" <dheitmueller@kernellabs.com>,
	"Matthew Gyurgyik" <matthew@pyther.net>,
	"Linux Media Mailing List" <linux-media@vger.kernel.org>,
	"David Härdeman" <david@hardeman.nu>
Subject: Re: em28xx: msi Digivox ATSC board id [0db0:8810]
Date: Fri, 14 Dec 2012 22:26:31 -0200	[thread overview]
Message-ID: <20121214222631.1f191d6e@redhat.com> (raw)
In-Reply-To: <20121214173950.79bb963e@redhat.com>

Em Fri, 14 Dec 2012 17:39:50 -0200
Mauro Carvalho Chehab <mchehab@redhat.com> escreveu:

> > Anyway, first we have to GET the bytes from the hardware. That's our
> > current problem !
> > And the hardware seems to need a different setup for reg 0x50 for the
> > different NEC sub protocols.
> > Which means that the we need to know the sub protocol BEFORE we get any
> > bytes from the device.
> 
> No. All em28xx needs is to make sure that the NEC protocol will return
> the full 32 bits scancode.

It seems a way easier/quicker to just add the proper support there at the
driver than keep answering to this thread ;)

Tested here with a Terratec HTC stick, and using two different IR's:
	- a Terratec IR (address code 0x14 - standard NEC);
	- a Pixelview IR (address code 0x866b - 24 bits NEC).

All tests were done with the very latest version of ir-keytable, found at
v4l-utils.git tree (http://git.linuxtv.org/v4l-utils.git).

See the results, with the Terratec table loaded (default when the
driver is loaded):

	# ir-keytable -t 
	Testing events. Please, press CTRL-C to abort.
		# Terratec IR
	1355529698.198046: event type EV_MSC(0x04): scancode = 0x1402
	1355529698.198046: event type EV_KEY(0x01) key_down: KEY_1(0x0001)
	1355529698.198046: event type EV_SYN(0x00).
	11355529698.298170: event type EV_MSC(0x04): scancode = 0x1402
	1355529698.298170: event type EV_SYN(0x00).
	1355529698.547998: event type EV_KEY(0x01) key_up: KEY_1(0x0001)
	1355529698.547998: event type EV_SYN(0x00).
		# Pixelview IR
	1355530261.416415: event type EV_MSC(0x04): scancode = 0x866b01
	1355530261.416415: event type EV_SYN(0x00).
	1355530262.216301: event type EV_MSC(0x04): scancode = 0x866b0b
	1355530262.216301: event type EV_SYN(0x00).

Replacing the keytable to the Pixelview's one:

	# ir-keytable -w /etc/rc_keymaps/pixelview_002t -c
	Read pixelview_002t table
	Old keytable cleared
	Wrote 26 keycode(s) to driver
	Protocols changed to NEC 

	# ir-keytable -t 
	Testing events. Please, press CTRL-C to abort.
	1355530569.420398: event type EV_MSC(0x04): scancode = 0x1402
	1355530569.420398: event type EV_SYN(0x00).
	1355530588.120409: event type EV_MSC(0x04): scancode = 0x866b01
	1355530588.120409: event type EV_KEY(0x01) key_down: KEY_1(0x0001)
	1355530591.670077: event type EV_SYN(0x00).

And, finally, keeping both keytables active at the same time:

	# ir-keytable -c -w /etc/rc_keymaps/pixelview_002t -w /etc/rc_keymaps/nec_terratec_cinergy_xs 
	Read pixelview_002t table
	Read nec_terratec_cinergy_xs table
	Old keytable cleared
	Wrote 74 keycode(s) to driver
	Protocols changed to NEC 

	# sudo ir-keytable  -t 
	Testing events. Please, press CTRL-C to abort.
	1355530856.325201: event type EV_MSC(0x04): scancode = 0x866b01
	1355530856.325201: event type EV_KEY(0x01) key_down: KEY_1(0x0001)
	1355530856.325201: event type EV_SYN(0x00).
	11355530856.575070: event type EV_KEY(0x01) key_up: KEY_1(0x0001)
	1355530856.575070: event type EV_SYN(0x00).
	1355530869.125226: event type EV_MSC(0x04): scancode = 0x1402
	1355530869.125226: event type EV_KEY(0x01) key_down: KEY_1(0x0001)
	1355530869.125226: event type EV_SYN(0x00).
	11355530869.225216: event type EV_MSC(0x04): scancode = 0x1402
	1355530869.225216: event type EV_SYN(0x00).
	1355530869.475075: event type EV_KEY(0x01) key_up: KEY_1(0x0001)
	1355530869.475075: event type EV_SYN(0x00).

-

em28xx: add support for 24bits/32 bits NEC variants on em2874 and upper

By disabling the NEC parity check, it is possible to handle all 3 NEC
protocol variants (32, 24 or 16 bits).

Change the driver in order to handle all of them.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

diff --git a/drivers/media/usb/em28xx/em28xx-input.c b/drivers/media/usb/em28xx/em28xx-input.c
index 97d36b4..c84e4c8 100644
--- a/drivers/media/usb/em28xx/em28xx-input.c
+++ b/drivers/media/usb/em28xx/em28xx-input.c
@@ -57,8 +57,8 @@ MODULE_PARM_DESC(ir_debug, "enable debug messages [IR]");
 struct em28xx_ir_poll_result {
 	unsigned int toggle_bit:1;
 	unsigned int read_count:7;
-	u8 rc_address;
-	u8 rc_data[4]; /* 1 byte on em2860/2880, 4 on em2874 */
+
+	u32 scancode;
 };
 
 struct em28xx_IR {
@@ -72,6 +72,7 @@ struct em28xx_IR {
 	struct delayed_work work;
 	unsigned int full_code:1;
 	unsigned int last_readcount;
+	u64 rc_type;
 
 	int  (*get_key)(struct em28xx_IR *, struct em28xx_ir_poll_result *);
 };
@@ -236,11 +237,8 @@ static int default_polling_getkey(struct em28xx_IR *ir,
 	/* Infrared read count (Reg 0x45[6:0] */
 	poll_result->read_count = (msg[0] & 0x7f);
 
-	/* Remote Control Address (Reg 0x46) */
-	poll_result->rc_address = msg[1];
-
-	/* Remote Control Data (Reg 0x47) */
-	poll_result->rc_data[0] = msg[2];
+	/* Remote Control Address/Data (Regs 0x46/0x47) */
+	poll_result->scancode = msg[1] << 8 | msg[2];
 
 	return 0;
 }
@@ -266,13 +264,30 @@ static int em2874_polling_getkey(struct em28xx_IR *ir,
 	/* Infrared read count (Reg 0x51[6:0] */
 	poll_result->read_count = (msg[0] & 0x7f);
 
-	/* Remote Control Address (Reg 0x52) */
-	poll_result->rc_address = msg[1];
-
-	/* Remote Control Data (Reg 0x53-55) */
-	poll_result->rc_data[0] = msg[2];
-	poll_result->rc_data[1] = msg[3];
-	poll_result->rc_data[2] = msg[4];
+		/* Remote Control Address (Reg 0x52) */
+		/* Remote Control Data (Reg 0x53-0x55) */
+	switch (ir->rc_type) {
+	case RC_TYPE_RC5:
+		poll_result->scancode = msg[1] << 8 | msg[2];
+		break;
+	case RC_TYPE_NEC:
+		if ((msg[3] ^ msg[4]) != 0xff) 		/* 32 bits NEC */
+			poll_result->scancode = (msg[1] << 24) |
+						(msg[2] << 16) |
+						(msg[3] << 8)  |
+						 msg[4];
+		else if ((msg[1] ^ msg[2]) != 0xff)	/* 24 bits NEC */
+			poll_result->scancode = (msg[1] << 16) |
+						(msg[3] << 8)  |
+						 msg[4];
+		else					/* Normal NEC */
+			poll_result->scancode = msg[1] << 8 | msg[3];
+		break;
+	default:
+		poll_result->scancode = (msg[1] << 24) | (msg[2] << 16) |
+					(msg[3] << 8)  | msg[4];
+		break;
+	}
 
 	return 0;
 }
@@ -294,17 +309,16 @@ static void em28xx_ir_handle_key(struct em28xx_IR *ir)
 	}
 
 	if (unlikely(poll_result.read_count != ir->last_readcount)) {
-		dprintk("%s: toggle: %d, count: %d, key 0x%02x%02x\n", __func__,
+		dprintk("%s: toggle: %d, count: %d, key 0x%04x\n", __func__,
 			poll_result.toggle_bit, poll_result.read_count,
-			poll_result.rc_address, poll_result.rc_data[0]);
+			poll_result.scancode);
 		if (ir->full_code)
 			rc_keydown(ir->rc,
-				   poll_result.rc_address << 8 |
-				   poll_result.rc_data[0],
+				   poll_result.scancode,
 				   poll_result.toggle_bit);
 		else
 			rc_keydown(ir->rc,
-				   poll_result.rc_data[0],
+				   poll_result.scancode & 0xff,
 				   poll_result.toggle_bit);
 
 		if (ir->dev->chip_id == CHIP_ID_EM2874 ||
@@ -359,11 +373,13 @@ static int em28xx_ir_change_protocol(struct rc_dev *rc_dev, u64 rc_type)
 		ir->full_code = 1;
 	} else if (rc_type == RC_TYPE_NEC) {
 		dev->board.xclk &= ~EM28XX_XCLK_IR_RC5_MODE;
-		ir_config = EM2874_IR_NEC;
+		ir_config = EM2874_IR_NEC | EM2874_IR_NEC_NO_PARITY;
 		ir->full_code = 1;
 	} else if (rc_type != RC_TYPE_UNKNOWN)
 		rc = -EINVAL;
 
+	ir->rc_type = rc_type;
+
 	em28xx_write_reg_bits(dev, EM28XX_R0F_XCLK, dev->board.xclk,
 			      EM28XX_XCLK_IR_RC5_MODE);
 
diff --git a/drivers/media/usb/em28xx/em28xx-reg.h b/drivers/media/usb/em28xx/em28xx-reg.h
index 6ff3682..2ad3573 100644
--- a/drivers/media/usb/em28xx/em28xx-reg.h
+++ b/drivers/media/usb/em28xx/em28xx-reg.h
@@ -177,6 +177,7 @@
 
 /* em2874 IR config register (0x50) */
 #define EM2874_IR_NEC           0x00
+#define EM2874_IR_NEC_NO_PARITY 0x01
 #define EM2874_IR_RC5           0x04
 #define EM2874_IR_RC6_MODE_0    0x08
 #define EM2874_IR_RC6_MODE_6A   0x0b


  reply	other threads:[~2012-12-15  0:27 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-28  2:31 em28xx: msi Digivox ATSC board id [0db0:8810] Matthew Gyurgyik
2012-11-28 20:47 ` Frank Schäfer
2012-11-28 22:29   ` Matthew Gyurgyik
2012-11-28 22:55     ` Antti Palosaari
2012-11-29  2:05       ` Matthew Gyurgyik
2012-11-29  2:15         ` Antti Palosaari
2012-11-29 19:28           ` Frank Schäfer
2012-11-29 19:46             ` Antti Palosaari
2012-11-30  1:45             ` Matthew Gyurgyik
2012-12-02 11:44               ` Frank Schäfer
2012-12-02 14:23                 ` Antti Palosaari
2012-12-02 17:18                   ` Frank Schäfer
2012-12-03 18:16                     ` Frank Schäfer
2012-12-04  2:15                       ` Matthew Gyurgyik
2012-12-04  2:29                         ` Devin Heitmueller
2012-12-04  2:42                           ` Matthew Gyurgyik
2012-12-04  2:58                             ` Devin Heitmueller
2012-12-04 21:06                               ` Frank Schäfer
2012-12-05  3:41                                 ` Matthew Gyurgyik
2012-12-05 12:35                                   ` Antti Palosaari
2012-12-05 21:35                                     ` Matthew Gyurgyik
2012-12-05 22:01                                       ` Antti Palosaari
2012-12-05 22:33                                         ` Matthew Gyurgyik
2012-12-06  0:55                                           ` Antti Palosaari
2012-12-06  2:16                                             ` Matthew Gyurgyik
2012-12-06 21:49                                               ` Frank Schäfer
2012-12-06 21:57                                                 ` Devin Heitmueller
2012-12-06 22:01                                                   ` Frank Schäfer
2012-12-06 22:03                                                     ` Devin Heitmueller
2012-12-06 22:12                                                       ` Frank Schäfer
2012-12-06 22:41                                                 ` Matthew Gyurgyik
2012-12-06 22:58                                                 ` Matthew Gyurgyik
2012-12-07  1:40                                                   ` Matthew Gyurgyik
2012-12-07  3:21                                                     ` Devin Heitmueller
2012-12-07 11:49                                                       ` Matthew Gyurgyik
2012-12-08 13:52                                                   ` Frank Schäfer
2012-12-08 14:10                                                     ` Matthew Gyurgyik
2012-12-08 15:20                                                       ` Frank Schäfer
     [not found]                                                         ` <50C3701D.9000700@pyther .net>
     [not found]                                                           ` <50C37DA8.4080608@googlemai l.com>
     [not found]                                                             ` <50C3B3EB.40606@pyther .net>
     [not found]                                                               ` <50C3B567.3070300@i ki.fi>
2012-12-08 16:51                                                         ` Matthew Gyurgyik
2012-12-08 17:49                                                           ` Frank Schäfer
2012-12-08 21:40                                                             ` Matthew Gyurgyik
2012-12-08 21:47                                                               ` Antti Palosaari
2012-12-08 22:04                                                                 ` Matthew Gyurgyik
2012-12-09 12:48                                                                   ` Frank Schäfer
2012-12-09 14:50                                                                     ` Matthew Gyurgyik
2012-12-09 15:46                                                                       ` Devin Heitmueller
2012-12-09 16:19                                                                         ` Frank Schäfer
2012-12-09 16:23                                                                           ` Frank Schäfer
2012-12-09 17:06                                                                             ` Frank Schäfer
2012-12-09 17:53                                                                               ` Matthew Gyurgyik
2012-12-10 15:39                                                                                 ` Frank Schäfer
2012-12-10 15:46                                                                                   ` Devin Heitmueller
2012-12-10 16:01                                                                                     ` Frank Schäfer
2012-12-10 16:13                                                                                       ` Devin Heitmueller
2012-12-10 17:57                                                                                         ` Antti Palosaari
2012-12-10 19:24                                                                                           ` Frank Schäfer
2012-12-10 20:48                                                                                             ` Antti Palosaari
2012-12-11 20:51                                                                                               ` Frank Schäfer
2012-12-11 20:59                                                                                                 ` Antti Palosaari
2012-12-12 21:25                                                                                                   ` Frank Schäfer
2012-12-12 21:34                                                                                                     ` Frank Schäfer
2012-12-13 15:09                                                                                                       ` Antti Palosaari
2012-12-13 16:02                                                                                                         ` Frank Schäfer
2012-12-13 20:23                                                                                                   ` Mauro Carvalho Chehab
2012-12-14 15:33                                                                                                     ` Frank Schäfer
2012-12-14 16:32                                                                                                       ` Antti Palosaari
2012-12-14 16:40                                                                                                         ` Antti Palosaari
2012-12-14 19:39                                                                                                       ` Mauro Carvalho Chehab
2012-12-15  0:26                                                                                                         ` Mauro Carvalho Chehab [this message]
2012-12-15  0:34                                                                                                           ` Mauro Carvalho Chehab
2012-12-15  0:56                                                                                                           ` Antti Palosaari
2012-12-15  1:03                                                                                                             ` Mauro Carvalho Chehab
2012-12-15  1:12                                                                                                               ` Antti Palosaari
2012-12-15  1:39                                                                                                                 ` Mauro Carvalho Chehab
2012-12-15  1:54                                                                                                             ` Mauro Carvalho Chehab
2012-12-15 13:11                                                                                                               ` Frank Schäfer
2012-12-15 13:34                                                                                                                 ` Mauro Carvalho Chehab
2012-12-15 13:38                                                                                                                 ` Antti Palosaari
2012-12-15 16:21                                                                                                                   ` Frank Schäfer
2012-12-15 16:51                                                                                                                     ` Antti Palosaari
2012-12-16 18:15                                                                                                                       ` Frank Schäfer
2012-12-17  1:09                                                                                                                       ` Matthew Gyurgyik
2012-12-17  1:26                                                                                                                         ` Antti Palosaari
2012-12-17  1:37                                                                                                                           ` Matthew Gyurgyik
2012-12-17  9:33                                                                                                                             ` Antti Palosaari
2012-12-17 11:08                                                                                                                               ` Antti Palosaari
2012-12-17 11:17                                                                                                                                 ` Matthew Gyurgyik
2012-12-17 12:30                                                                                                                                   ` Antti Palosaari
2012-12-17 15:53                                                                                                                                     ` Mauro Carvalho Chehab
2012-12-17 16:14                                                                                                                                   ` Mauro Carvalho Chehab
2012-12-18  2:27                                                                                                                                     ` Matthew Gyurgyik
2012-12-18  3:08                                                                                                                                     ` Matthew Gyurgyik
2013-01-02 20:59                                                                                                                                       ` Antti Palosaari
2013-01-03  2:53                                                                                                                                         ` Matthew Gyurgyik
2013-01-20 14:40                                                                                                                                           ` Matthew Gyurgyik
2013-01-20 17:46                                                                                                                                             ` Antti Palosaari
2013-02-16 23:38                                                                                                                                               ` Matthew Gyurgyik
2013-02-24 22:23                                                                                                                                                 ` Antti Palosaari
2013-02-25  1:58                                                                                                                                                   ` Matthew Gyurgyik
2013-01-03  0:18                                                                                                   ` David Härdeman
2012-12-13 20:07                                                                                                 ` Mauro Carvalho Chehab
2012-12-13 20:36                                                                                                   ` Mauro Carvalho Chehab
2012-12-13 19:57                                                                                             ` Mauro Carvalho Chehab
2012-12-13 20:04                                                                                         ` Mauro Carvalho Chehab
2012-12-10 16:01                                                                                   ` Matthew Gyurgyik
2012-12-06  2:32                                 ` Matthew Gyurgyik
2012-12-06 21:52                                   ` Frank Schäfer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121214222631.1f191d6e@redhat.com \
    --to=mchehab@redhat.com \
    --cc=crope@iki.fi \
    --cc=david@hardeman.nu \
    --cc=dheitmueller@kernellabs.com \
    --cc=fschaefer.oss@googlemail.com \
    --cc=linux-media@vger.kernel.org \
    --cc=matthew@pyther.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.