The patch number 12208 was added via Mauro Carvalho Chehab <mche...@redhat.com>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        Linux Media Mailing List <linux-me...@vger.kernel.org>

------

From: Mauro Carvalho Chehab  <mche...@redhat.com>
merge: http://linuxtv.org/hg/~awalls/v4l-dvb


Signed-off-by: Mauro Carvalho Chehab <mche...@redhat.com>


---

 linux/Documentation/dvb/get_dvb_firmware     |    3 -
 linux/drivers/media/video/cx18/cx18-cards.c  |    2 
 linux/drivers/media/video/cx18/cx18-driver.c |   41 ++++++++++++++++++-
 3 files changed, 42 insertions(+), 4 deletions(-)

diff -r 83656a73573d -r 29c1e81eaf1b linux/Documentation/dvb/get_dvb_firmware
--- a/linux/Documentation/dvb/get_dvb_firmware  Sun Jul 05 18:52:23 2009 -0300
+++ b/linux/Documentation/dvb/get_dvb_firmware  Sun Jul 05 18:58:38 2009 -0300
@@ -413,13 +413,14 @@ sub mpc718 {
 
        while (<IN>) {
            $currlen = length($_);
-           if ($prevlen == $currlen || $currlen <= 64) {
+           if ($prevlen == $currlen && $currlen <= 64) {
                chop; chop; # Get rid of "TUNER GO"
                s/^\0\0//;  # get rid of leading 00 00 if it's there
                printf OUT "$_";
                $found = 1;
                last;
            }
+           $prevlen = $currlen;
        }
     }
     close OUT;
diff -r 83656a73573d -r 29c1e81eaf1b linux/drivers/media/video/cx18/cx18-cards.c
--- a/linux/drivers/media/video/cx18/cx18-cards.c       Sun Jul 05 18:52:23 
2009 -0300
+++ b/linux/drivers/media/video/cx18/cx18-cards.c       Sun Jul 05 18:58:38 
2009 -0300
@@ -204,7 +204,7 @@ static const struct cx18_card cx18_card_
        .v4l2_capabilities = CX18_CAP_ENCODER,
        .hw_audio_ctrl = CX18_HW_418_AV,
        .hw_muxer = CX18_HW_GPIO_MUX,
-       .hw_all = CX18_HW_418_AV | CX18_HW_TUNER |
+       .hw_all = CX18_HW_TVEEPROM | CX18_HW_418_AV | CX18_HW_TUNER |
                  CX18_HW_GPIO_MUX | CX18_HW_DVB | CX18_HW_GPIO_RESET_CTRL,
        .video_inputs = {
                { CX18_CARD_INPUT_VID_TUNER,  0, CX18_AV_COMPOSITE2 },
diff -r 83656a73573d -r 29c1e81eaf1b 
linux/drivers/media/video/cx18/cx18-driver.c
--- a/linux/drivers/media/video/cx18/cx18-driver.c      Sun Jul 05 18:52:23 
2009 -0300
+++ b/linux/drivers/media/video/cx18/cx18-driver.c      Sun Jul 05 18:58:38 
2009 -0300
@@ -268,6 +268,20 @@ static void cx18_iounmap(struct cx18 *cx
        }
 }
 
+static void cx18_eeprom_dump(struct cx18 *cx, unsigned char *eedata, int len)
+{
+       int i;
+
+       CX18_INFO("eeprom dump:\n");
+       for (i = 0; i < len; i++) {
+               if (0 == (i % 16))
+                       CX18_INFO("eeprom %02x:", i);
+               printk(KERN_CONT " %02x", eedata[i]);
+               if (15 == (i % 16))
+                       printk(KERN_CONT "\n");
+       }
+}
+
 /* Hauppauge card? get values from tveeprom */
 void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv)
 {
@@ -279,8 +293,26 @@ void cx18_read_eeprom(struct cx18 *cx, s
        c.adapter = &cx->i2c_adap[0];
        c.addr = 0xA0 >> 1;
 
-       tveeprom_read(&c, eedata, sizeof(eedata));
-       tveeprom_hauppauge_analog(&c, tv, eedata);
+       memset(tv, 0, sizeof(*tv));
+       if (tveeprom_read(&c, eedata, sizeof(eedata)))
+               return;
+
+       switch (cx->card->type) {
+       case CX18_CARD_HVR_1600_ESMT:
+       case CX18_CARD_HVR_1600_SAMSUNG:
+               tveeprom_hauppauge_analog(&c, tv, eedata);
+               break;
+       case CX18_CARD_YUAN_MPC718:
+               tv->model = 0x718;
+               cx18_eeprom_dump(cx, eedata, sizeof(eedata));
+               CX18_INFO("eeprom PCI ID: %02x%02x:%02x%02x\n",
+                         eedata[2], eedata[1], eedata[4], eedata[3]);
+               break;
+       default:
+               tv->model = 0xffffffff;
+               cx18_eeprom_dump(cx, eedata, sizeof(eedata));
+               break;
+       }
 }
 
 static void cx18_process_eeprom(struct cx18 *cx)
@@ -298,6 +330,11 @@ static void cx18_process_eeprom(struct c
        case 74000 ... 74999:
                cx->card = cx18_get_card(CX18_CARD_HVR_1600_ESMT);
                break;
+       case 0x718:
+               return;
+       case 0xffffffff:
+               CX18_INFO("Unknown EEPROM encoding\n");
+               return;
        case 0:
                CX18_ERR("Invalid EEPROM\n");
                return;


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/29c1e81eaf1bb8777accfb40e5e3d553df1357a2

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to