Re: [PATCH v3] IR/mceusb: kill pinnacle-device-specific nonsense

2010-07-03 Thread Mauro Carvalho Chehab
Em 03-07-2010 01:02, Jarod Wilson escreveu:
 I have pinnacle hardware now. None of this pinnacle-specific crap is at
 all necessary (in fact, some of it needed to be removed to actually make
 it work). The only thing unique about this device is that it often
 transfers inbound data w/a header of 0x90, meaning 16 bytes of IR data
 following it, so I had to make adjustments for that, and now its working
 perfectly fine.
 
 v2: stillborn
 
 v3: remove completely unnecessary usb_reset_device() call that only served
 to piss off the pinnacle device regularly and unify/simplify some of the
 generation-specific device initialization code.
 
 post-mortem: it seems the pinnacle hardware actually still gets pissed off
 from time to time, but I can (try) to fix that later (if possible). The
 patch is still quite helpful from a code reduction standpoint.
 
 Signed-off-by: Jarod Wilson ja...@redhat.com

I've already applied a previous version of this patch:

http://git.linuxtv.org/v4l-dvb.git?a=commit;h=afd46362e573276e3fb0a44834ad320c97947233

Could you please rebase it against my tree?

 ---
  Makefile  |2 +-
  drivers/media/IR/mceusb.c |  110 
 +
  2 files changed, 22 insertions(+), 90 deletions(-)
 
 diff --git a/Makefile b/Makefile
 index 6e39ec7..0417c74 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -1,7 +1,7 @@
  VERSION = 2
  PATCHLEVEL = 6
  SUBLEVEL = 35
 -EXTRAVERSION = -rc1
 +EXTRAVERSION = -rc1-ir

Please, don't patch the upstream Makefile ;)

Cheers,
Mauro.
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3] IR/mceusb: kill pinnacle-device-specific nonsense

2010-07-02 Thread Jarod Wilson
I have pinnacle hardware now. None of this pinnacle-specific crap is at
all necessary (in fact, some of it needed to be removed to actually make
it work). The only thing unique about this device is that it often
transfers inbound data w/a header of 0x90, meaning 16 bytes of IR data
following it, so I had to make adjustments for that, and now its working
perfectly fine.

v2: stillborn

v3: remove completely unnecessary usb_reset_device() call that only served
to piss off the pinnacle device regularly and unify/simplify some of the
generation-specific device initialization code.

post-mortem: it seems the pinnacle hardware actually still gets pissed off
from time to time, but I can (try) to fix that later (if possible). The
patch is still quite helpful from a code reduction standpoint.

Signed-off-by: Jarod Wilson ja...@redhat.com
---
 Makefile  |2 +-
 drivers/media/IR/mceusb.c |  110 +
 2 files changed, 22 insertions(+), 90 deletions(-)

diff --git a/Makefile b/Makefile
index 6e39ec7..0417c74 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 35
-EXTRAVERSION = -rc1
+EXTRAVERSION = -rc1-ir
 NAME = Sheep on Meth
 
 # *DOCUMENTATION*
diff --git a/drivers/media/IR/mceusb.c b/drivers/media/IR/mceusb.c
index 756f718..640e2e6 100644
--- a/drivers/media/IR/mceusb.c
+++ b/drivers/media/IR/mceusb.c
@@ -68,7 +68,7 @@
 #define MCE_PULSE_BIT  0x80 /* Pulse bit, MSB set == PULSE else SPACE */
 #define MCE_PULSE_MASK 0x7F /* Pulse mask */
 #define MCE_MAX_PULSE_LENGTH 0x7F /* Longest transmittable pulse symbol */
-#define MCE_PACKET_LENGTH_MASK  0xF /* Packet length mask */
+#define MCE_PACKET_LENGTH_MASK  0x1F /* Packet length mask */
 
 
 /* module parameters */
@@ -209,11 +209,6 @@ static struct usb_device_id gen3_list[] = {
{}
 };
 
-static struct usb_device_id pinnacle_list[] = {
-   { USB_DEVICE(VENDOR_PINNACLE, 0x0225) },
-   {}
-};
-
 static struct usb_device_id microsoft_gen1_list[] = {
{ USB_DEVICE(VENDOR_MICROSOFT, 0x006d) },
{}
@@ -542,6 +537,7 @@ static void mceusb_process_ir_data(struct mceusb_dev *ir, 
int buf_len)
 {
struct ir_raw_event rawir = { .pulse = false, .duration = 0 };
int i, start_index = 0;
+   u8 hdr = MCE_CONTROL_HEADER;
 
/* skip meaningless 0xb1 0x60 header bytes on orig receiver */
if (ir-flags.microsoft_gen1)
@@ -551,15 +547,16 @@ static void mceusb_process_ir_data(struct mceusb_dev *ir, 
int buf_len)
if (ir-rem == 0) {
/* decode mce packets of the form (84),AA,BB,CC,DD */
/* IR data packets can span USB messages - rem */
-   ir-rem = (ir-buf_in[i]  MCE_PACKET_LENGTH_MASK);
-   ir-cmd = (ir-buf_in[i]  ~MCE_PACKET_LENGTH_MASK);
+   hdr = ir-buf_in[i];
+   ir-rem = (hdr  MCE_PACKET_LENGTH_MASK);
+   ir-cmd = (hdr  ~MCE_PACKET_LENGTH_MASK);
dev_dbg(ir-dev, New data. rem: 0x%02x, cmd: 0x%02x\n,
ir-rem, ir-cmd);
i++;
}
 
-   /* Only cmd 0x8bytes is IR data, don't process MCE commands */
-   if (ir-cmd != 0x80) {
+   /* don't process MCE commands */
+   if (hdr == MCE_CONTROL_HEADER || hdr == 0xff) {
ir-rem = 0;
return;
}
@@ -649,47 +646,18 @@ static void mceusb_gen1_init(struct mceusb_dev *ir)
int i, ret;
int partial = 0;
struct device *dev = ir-dev;
-   char *junk, *data;
-
-   junk = kmalloc(2 * USB_BUFLEN, GFP_KERNEL);
-   if (!junk) {
-   dev_err(dev, %s: memory allocation failed!\n, __func__);
-   return;
-   }
+   char *data;
 
data = kzalloc(USB_CTRL_MSG_SZ, GFP_KERNEL);
if (!data) {
dev_err(dev, %s: memory allocation failed!\n, __func__);
-   kfree(junk);
return;
}
 
/*
-* Clear off the first few messages. These look like calibration
-* or test data, I can't really tell. This also flushes in case
-* we have random ir data queued up.
-*/
-   for (i = 0; i  MCE_G1_INIT_MSGS; i++)
-   usb_bulk_msg(ir-usbdev,
-   usb_rcvbulkpipe(ir-usbdev,
-   ir-usb_ep_in-bEndpointAddress),
-   junk, sizeof(junk), partial, HZ * 10);
-
-   /* Get Status */
-   ret = usb_control_msg(ir-usbdev, usb_rcvctrlpipe(ir-usbdev, 0),
- USB_REQ_GET_STATUS, USB_DIR_IN,
- 0, 0, data, USB_CTRL_MSG_SZ, HZ * 3);
-
-   /*ret = usb_get_status( ir-usbdev, 0, 0, data ); */
-   dev_dbg(dev, %s - ret = %d status = 0x%x 0x%x\n, __func__,
-   ret,