V4L/DVB (12307): cx23885: Modify hardware revision detection for newer silicon
authorSteven Toth <stoth@kernellabs.com>
Mon, 20 Jul 2009 18:40:31 +0000 (15:40 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 12 Sep 2009 15:17:59 +0000 (12:17 -0300)
cx23885: Modify hardware revision detection for newer silicon

Signed-off-by: Steven Toth <stoth@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/cx23885/cx23885-core.c
drivers/media/video/cx23885/cx23885.h

index 554f085c55ebadc6bcd3a15da86db3dad054ec53..40d438d7234dda326ed9fd2ea7b2c5db1d698a4e 100644 (file)
@@ -713,12 +713,26 @@ static void cx23885_dev_checkrevision(struct cx23885_dev *dev)
                dev->hwrevision = 0xa1;
                break;
        case 0x02:
-               /* CX23885-13Z */
+               /* CX23885-13Z/14Z */
                dev->hwrevision = 0xb0;
                break;
        case 0x03:
-               /* CX23888-22Z */
-               dev->hwrevision = 0xc0;
+               if (dev->pci->device == 0x8880) {
+                       /* CX23888-21Z/22Z */
+                       dev->hwrevision = 0xc0;
+               } else {
+                       /* CX23885-14Z */
+                       dev->hwrevision = 0xa4;
+               }
+               break;
+       case 0x04:
+               if (dev->pci->device == 0x8880) {
+                       /* CX23888-31Z */
+                       dev->hwrevision = 0xd0;
+               } else {
+                       /* CX23885-15Z, CX23888-31Z */
+                       dev->hwrevision = 0xa5;
+               }
                break;
        case 0x0e:
                /* CX23887-15Z */
@@ -756,6 +770,7 @@ static int cx23885_dev_setup(struct cx23885_dev *dev)
 
        /* Configure the internal memory */
        if (dev->pci->device == 0x8880) {
+               /* Could be 887 or 888, assume a default */
                dev->bridge = CX23885_BRIDGE_887;
                /* Apply a sensible clock frequency for the PCIe bridge */
                dev->clk_freq = 25000000;
@@ -1258,6 +1273,7 @@ static int cx23885_start_dma(struct cx23885_tsport *port,
        switch (dev->bridge) {
        case CX23885_BRIDGE_885:
        case CX23885_BRIDGE_887:
+       case CX23885_BRIDGE_888:
                /* enable irqs */
                dprintk(1, "%s() enabling TS int's and DMA\n", __func__);
                cx_set(port->reg_ts_int_msk,  port->ts_int_msk_val);
index 963e6b17a43ec0c688a7a959586cf5301666cbe5..86f26947bb78ca5bce6fa8cc63c6b9b429c2e01f 100644 (file)
@@ -339,6 +339,7 @@ struct cx23885_dev {
                CX23885_BRIDGE_UNDEFINED = 0,
                CX23885_BRIDGE_885 = 885,
                CX23885_BRIDGE_887 = 887,
+               CX23885_BRIDGE_888 = 888,
        } bridge;
 
        /* Analog video */