Commit 0ac5881a authored by Steven Toth's avatar Steven Toth Committed by Mauro Carvalho Chehab

V4L/DVB (7003): cx23885: Add support for device revision detection

Each version of the cx23885/7/8 silicon has different build revs.
We'll use this internal revision to work around bugs and known
issues in the video and encoder related patches.
Signed-off-by: default avatarSteven Toth <stoth@hauppauge.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent f234081b
...@@ -702,6 +702,44 @@ static int cx23885_init_tsport(struct cx23885_dev *dev, struct cx23885_tsport *p ...@@ -702,6 +702,44 @@ static int cx23885_init_tsport(struct cx23885_dev *dev, struct cx23885_tsport *p
return 0; return 0;
} }
static void cx23885_dev_checkrevision(struct cx23885_dev *dev)
{
switch (cx_read(RDR_CFG2) & 0xff) {
case 0x00:
/* cx23885 */
dev->hwrevision = 0xa0;
break;
case 0x01:
/* CX23885-12Z */
dev->hwrevision = 0xa1;
break;
case 0x02:
/* CX23885-13Z */
dev->hwrevision = 0xb0;
break;
case 0x03:
/* CX23888-22Z */
dev->hwrevision = 0xc0;
break;
case 0x0e:
/* CX23887-15Z */
dev->hwrevision = 0xc0;
case 0x0f:
/* CX23887-14Z */
dev->hwrevision = 0xb1;
break;
default:
printk(KERN_ERR "%s() New hardware revision found 0x%x\n",
__FUNCTION__, dev->hwrevision);
}
if (dev->hwrevision)
printk(KERN_INFO "%s() Hardware revision = 0x%02x\n",
__FUNCTION__, dev->hwrevision);
else
printk(KERN_ERR "%s() Hardware revision unknown 0x%x\n",
__FUNCTION__, dev->hwrevision);
}
static int cx23885_dev_setup(struct cx23885_dev *dev) static int cx23885_dev_setup(struct cx23885_dev *dev)
{ {
int i; int i;
...@@ -832,6 +870,8 @@ static int cx23885_dev_setup(struct cx23885_dev *dev) ...@@ -832,6 +870,8 @@ static int cx23885_dev_setup(struct cx23885_dev *dev)
} }
} }
cx23885_dev_checkrevision(dev);
return 0; return 0;
} }
......
...@@ -276,6 +276,7 @@ Channel manager Data Structure entry = 20 DWORD ...@@ -276,6 +276,7 @@ Channel manager Data Structure entry = 20 DWORD
#define RDR_CFG0 0x00050000 #define RDR_CFG0 0x00050000
#define RDR_CFG1 0x00050004 #define RDR_CFG1 0x00050004
#define RDR_CFG2 0x00050008
#define RDR_TLCTL0 0x00050318 #define RDR_TLCTL0 0x00050318
/* APB DMAC Current Buffer Pointer */ /* APB DMAC Current Buffer Pointer */
......
...@@ -191,6 +191,7 @@ struct cx23885_dev { ...@@ -191,6 +191,7 @@ struct cx23885_dev {
u32 __iomem *lmmio; u32 __iomem *lmmio;
u8 __iomem *bmmio; u8 __iomem *bmmio;
int pci_irqmask; int pci_irqmask;
int hwrevision;
/* I2C adapters: Master 1 & 2 (External) & Master 3 (Internal only) */ /* I2C adapters: Master 1 & 2 (External) & Master 3 (Internal only) */
struct cx23885_i2c i2c_bus[3]; struct cx23885_i2c i2c_bus[3];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment