Here is a small patch that allows you to set registers for the cx25480 which
can use the range from 0-0x1ffff. The old API used unsigned char as the
address, it's now a 32-bit number.
Hans
diff -ru iv/driver/cx25840-driver.c ivtv-0.3.7c/driver/cx25840-driver.c
--- iv/driver/cx25840-driver.c 2005-07-18 16:02:33.000000000 +0200
+++ ivtv-0.3.7c/driver/cx25840-driver.c 2005-08-14 17:41:02.000000000 +0200
@@ -437,14 +437,14 @@
{
struct decoder_reg *reg = arg;
- reg->val = cx25840_read(client, 0x400 | reg->reg);
+ reg->val = cx25840_read(client, reg->reg & 0x1fff);
break;
}
case DECODER_SET_REG:
{
struct decoder_reg *reg = arg;
- cx25840_write(client, 0x400 | reg->reg, reg->val);
+ cx25840_write(client, reg->reg & 0x1fff, reg->val & 0xff);
break;
}
case DECODER_GET_SETTING:
diff -ru iv/driver/decoder.h ivtv-0.3.7c/driver/decoder.h
--- iv/driver/decoder.h 2005-05-28 03:27:59.000000000 +0200
+++ ivtv-0.3.7c/driver/decoder.h 2005-08-14 17:41:02.000000000 +0200
@@ -38,8 +38,8 @@
};
struct decoder_reg {
- u8 reg;
- u8 val;
+ u32 reg;
+ u32 val;
};
/* Possible audio bit rates for DECODER_SET_AUDIO */
diff -ru iv/driver/ivtv.h ivtv-0.3.7c/driver/ivtv.h
--- iv/driver/ivtv.h 2005-07-09 17:23:09.000000000 +0200
+++ ivtv-0.3.7c/driver/ivtv.h 2005-08-14 17:41:02.000000000 +0200
@@ -352,8 +352,8 @@
};
struct ivtv_saa71xx_reg {
- unsigned char reg;
- unsigned char val;
+ uint32_t reg;
+ uint32_t val;
};
struct ivtv_itvc_reg {
diff -ru iv/driver/saa7115.c ivtv-0.3.7c/driver/saa7115.c
--- iv/driver/saa7115.c 2005-07-05 16:09:09.000000000 +0200
+++ ivtv-0.3.7c/driver/saa7115.c 2005-08-14 17:41:02.000000000 +0200
@@ -574,14 +574,14 @@
{
struct decoder_reg *reg = arg;
- reg->val = saa7115_read(client, reg->reg);
+ reg->val = saa7115_read(client, reg->reg & 0xff);
break;
}
case DECODER_SET_REG:
{
struct decoder_reg *reg = arg;
- saa7115_write(client, reg->reg, reg->val);
+ saa7115_write(client, reg->reg & 0xff, reg->val & 0xff);
break;
}
diff -ru iv/driver/saa7127.c ivtv-0.3.7c/driver/saa7127.c
--- iv/driver/saa7127.c 2005-07-18 16:02:33.000000000 +0200
+++ ivtv-0.3.7c/driver/saa7127.c 2005-08-14 17:41:22.000000000 +0200
@@ -667,13 +667,13 @@
case ENCODER_GET_REG:{
struct saa7127_reg *reg = arg;
- reg->val = saa7127_read(client, reg->reg);
+ reg->val = saa7127_read(client, reg->reg & 0xff);
break;
}
case ENCODER_SET_REG:{
struct saa7127_reg *reg = arg;
- saa7127_writereg(client, reg->reg, reg->val);
+ saa7127_writereg(client, reg->reg & 0xff, reg->val & 0xff);
break;
}
diff -ru iv/utils/ivtvctl.c ivtv-0.3.7c/utils/ivtvctl.c
--- iv/utils/ivtvctl.c 2005-06-06 18:17:56.000000000 +0200
+++ ivtv-0.3.7c/utils/ivtvctl.c 2005-08-14 17:41:02.000000000 +0200
@@ -1343,7 +1343,9 @@
printf("ioctl: IVTV_IOC_G_SAA7115_REG\n");
printf(" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");
for (i = 0; i < 256; i++) {
- saa7115_reg.reg = (unsigned char)i;
+ // 0x400 is a hack for the cx24580, the saa7115 only uses
+ // the lower 8 bits of the address.
+ saa7115_reg.reg = 0x400 | i;
if (ioctl(fd, IVTV_IOC_G_SAA7115_REG, &saa7115_reg) < 0)
fprintf(stderr,
"ioctl: IVTV_IOC_G_SAA7115_REG failed\n");