On Wed, 2008-09-17 at 20:21 -0400, Rick wrote:
> Hi,
> 
> Since I can't pick up any more pvr-150's, I thought I'd purchase an
> HVR-1600.  Is there a way, yet, to activate the IR blaster on the
> HVR-1600?  Would the method used for the pvr-150 work with this card?

Rick,

The IR chip and interface is in many ways the same between a PVR-150 and
an HVR-1600: a Zilog Z8 Encore family microcontroller responding to I2C
addresses 0x70-x073

I have attached a patch to the lirc_pvr150 driver, but not the lirc
build system nor the lirc_pvr150 "firmware".

Last reports on the lists (check the ivtv-user ivtv-devel, linux-dvb and
video4linux lists) is that this didn't work.  Likely because the real
firmware inside the Z8F0811 has changed.  This requires someone with a
Windows setup and the ability to set some debug variables in the windows
utilities to capture the traffic the Windows driver sends to the Z8
chip, and run Mark's scripts to build a new "firmware" file for the
lirc_pvr150 driver.  The lirc_pvr150 driver actually works by using a
"replay attack" on the Z8F0811 sending it the same codes as the Windows
driver does.


It's my long term plan to get this working (I need it myself circa Feb
2009).

It's my even longer term plan to replace the real firmware in the
Z8F0811 with some home grown open source stuff and liberate myself (and
others) from Zilog's proprietary API,

Regards,
Andy


> Thanks,
> Rick


--- lirc/drivers/lirc_pvr150/lirc_pvr150.c.orig	2008-06-22 20:04:23.000000000 -0400
+++ lirc/drivers/lirc_pvr150/lirc_pvr150.c	2008-06-22 20:25:49.000000000 -0400
@@ -67,6 +67,7 @@
 /* We need to be able to reset the crappy IR chip by talking to the ivtv driver */
 struct ivtv;
 void ivtv_reset_ir_gpio(struct ivtv *itv);
+void cx18_reset_ir_gpio(void *data);
 
 struct IR 
 {
@@ -197,7 +198,12 @@ static int add_to_buf(struct IR *ir)
 			printk(KERN_ERR "lirc_pvr150: polling the IR receiver "
 			                "chip failed, trying reset\n");
 			
-			ivtv_reset_ir_gpio(i2c_get_adapdata(ir->c_rx.adapter));
+			if (strncmp(ir->c_rx.name, "cx18", 4)) 
+				ivtv_reset_ir_gpio(
+					i2c_get_adapdata(ir->c_rx.adapter));
+			else
+				cx18_reset_ir_gpio(
+					i2c_get_adapdata(ir->c_rx.adapter));
 			set_current_state(TASK_UNINTERRUPTIBLE);
 			schedule_timeout((100 * HZ + 999) / 1000);
 			ir->need_boot = 1;
@@ -983,7 +989,12 @@ static ssize_t write(struct file *filep,
 				up(&ir->lock);
 				return ret;
 			}
-			ivtv_reset_ir_gpio(i2c_get_adapdata(ir->c_tx.adapter));
+			if (strncmp(ir->c_tx.name, "cx18", 4)) 
+				ivtv_reset_ir_gpio(
+					i2c_get_adapdata(ir->c_tx.adapter));
+			else
+				cx18_reset_ir_gpio(
+					i2c_get_adapdata(ir->c_tx.adapter));
 			set_current_state(TASK_UNINTERRUPTIBLE);
 			schedule_timeout((100 * HZ + 999) / 1000);
 			ir->need_boot = 1;
@@ -1434,6 +1445,7 @@ int init_module(void)
 {
 	init_MUTEX(&tx_data_lock);
 	request_module("ivtv");
+	request_module("cx18");
 	request_module("firmware_class");
 	i2c_add_driver(&driver);
 	return 0;
_______________________________________________
ivtv-users mailing list
[email protected]
http://ivtvdriver.org/mailman/listinfo/ivtv-users

Reply via email to