On Wed, 2008-11-26 at 15:03 -0500, igloocentral hotmail wrote:
> > Has anyone managed to get the ir blaster working with the hvr-1600?
> 
> lirc_pvr150 works fine with the HVR-1600. I had it blasting no
> problem. However, it supports a limited number of set-top boxes. Check
> first if your codeset is supported, otherwise you'll need a blaster
> that supports the full set of codes, like the MCE remote. Good luck.
> 
> http://www.blushingpenguin.com/mark/lmilk/IRcodesets.html
> http://members.shaw.ca/paulsid/pages/knoppmyth+hvr-1600+asus-m3a.html
> http://www.blushingpenguin.com/mark/blog/?p=24

Glad to hear it works.  Others had reported that it didn't.

I've looked at Mark's latest code and have to warn you that it will make
an improper call to an ivtv driver function, ivtv_reset_ir_gpio(), with
a pointer to a cx18 data structure in the lirc_pvr150.c:write()
function, if the blaster chip stops responding.  This *could* have an
adverse effect on the operation of HVR-1600, odds are you'll never
notice what just happened that was wrong.

Attached is a patch I had worked up a while ago to avoid that situation.
Maybe it still applies cleanly to lirc_pvr150.c.

Regards,
Andy
--- 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