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: Steven Toth <stoth@hauppauge.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
f234081bc5
commit
0ac5881aef
@@ -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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cx23885_dev_checkrevision(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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 {
|
|||||||
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];
|
||||||
|
Reference in New Issue
Block a user