--- Begin Message ---


Hi Manu,

Here is a bugfix for gpio_set_bits().
What do you think about this bugfix?

The bug is that the function is only able to turn the given
bit on, but it can never turn a bit off.

My patch fixes that issue.

With my patched version gpio_set_bits is able to turn a single bit
on or off.

I haven't verified that it actually does turn the device's power off when requested.
I tested only rmmod and insmod. It seems to work with this version:
I haven't seen a lost frontend.

Regards,
Marko Ristola
Index: linux/drivers/media/dvb/mantis/mantis_core.c
===================================================================
RCS file: /var/cvs/mantis/linux/drivers/media/dvb/mantis/mantis_core.c,v
retrieving revision 1.2.2.2
retrieving revision 1.2.2.2.2.1
diff -u -p -r1.2.2.2 -r1.2.2.2.2.1
--- linux/drivers/media/dvb/mantis/mantis_core.c	15 Feb 2007 17:25:59 -0000	1.2.2.2
+++ linux/drivers/media/dvb/mantis/mantis_core.c	24 Feb 2007 17:54:25 -0000	1.2.2.2.2.1
@@ -194,22 +194,22 @@ int mantis_core_exit(struct mantis_pci *
 	return 0;
 }
 
+// Turn the given bit on or off.
 void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value)
 {
-	u32 reg;
+	u32 currVal;
+	u32 newVal;
 
-	if (value)
-		reg = 0x0000;
+	currVal = mmread(MANTIS_GPIF_ADDR);
+	
+	if ( value )
+	  newVal = currVal | ( 1 << bitpos );
 	else
-		reg = 0xffff;
-
-	reg = (value << bitpos);
+	  newVal = currVal & ( ~ ( 1 << bitpos ) );
 
-	mmwrite(mmread(MANTIS_GPIF_ADDR) | reg, MANTIS_GPIF_ADDR);
+	mmwrite( newVal, MANTIS_GPIF_ADDR);
 	mmwrite(0x00, MANTIS_GPIF_DOUT);
 	udelay(100);
-	mmwrite(mmread(MANTIS_GPIF_ADDR) | reg, MANTIS_GPIF_ADDR);
-	mmwrite(0x00, MANTIS_GPIF_DOUT);
 }
 
 

--- End Message ---
_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

Reply via email to