|
@@ -21,6 +21,8 @@
|
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
*/
|
|
|
|
|
|
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
|
|
+
|
|
|
#include <linux/i2c.h>
|
|
|
#include <linux/slab.h>
|
|
|
#include "cx25821.h"
|
|
@@ -332,7 +334,7 @@ struct cx25821_dmaqueue mpegq;
|
|
|
|
|
|
static int cx25821_risc_decode(u32 risc)
|
|
|
{
|
|
|
- static char *instr[16] = {
|
|
|
+ static const char * const instr[16] = {
|
|
|
[RISC_SYNC >> 28] = "sync",
|
|
|
[RISC_WRITE >> 28] = "write",
|
|
|
[RISC_WRITEC >> 28] = "writec",
|
|
@@ -344,7 +346,7 @@ static int cx25821_risc_decode(u32 risc)
|
|
|
[RISC_WRITECM >> 28] = "writecm",
|
|
|
[RISC_WRITECR >> 28] = "writecr",
|
|
|
};
|
|
|
- static int incr[16] = {
|
|
|
+ static const int incr[16] = {
|
|
|
[RISC_WRITE >> 28] = 3,
|
|
|
[RISC_JUMP >> 28] = 3,
|
|
|
[RISC_SKIP >> 28] = 1,
|
|
@@ -353,7 +355,7 @@ static int cx25821_risc_decode(u32 risc)
|
|
|
[RISC_WRITECM >> 28] = 3,
|
|
|
[RISC_WRITECR >> 28] = 4,
|
|
|
};
|
|
|
- static char *bits[] = {
|
|
|
+ static const char * const bits[] = {
|
|
|
"12", "13", "14", "resync",
|
|
|
"cnt0", "cnt1", "18", "19",
|
|
|
"20", "21", "22", "23",
|
|
@@ -361,13 +363,13 @@ static int cx25821_risc_decode(u32 risc)
|
|
|
};
|
|
|
int i;
|
|
|
|
|
|
- printk("0x%08x [ %s", risc,
|
|
|
- instr[risc >> 28] ? instr[risc >> 28] : "INVALID");
|
|
|
+ pr_cont("0x%08x [ %s",
|
|
|
+ risc, instr[risc >> 28] ? instr[risc >> 28] : "INVALID");
|
|
|
for (i = ARRAY_SIZE(bits) - 1; i >= 0; i--) {
|
|
|
if (risc & (1 << (i + 12)))
|
|
|
- printk(" %s", bits[i]);
|
|
|
+ pr_cont(" %s", bits[i]);
|
|
|
}
|
|
|
- printk(" count=%d ]\n", risc & 0xfff);
|
|
|
+ pr_cont(" count=%d ]\n", risc & 0xfff);
|
|
|
return incr[risc >> 28] ? incr[risc >> 28] : 1;
|
|
|
}
|
|
|
|
|
@@ -620,16 +622,15 @@ void cx25821_sram_channel_dump(struct cx25821_dev *dev, struct sram_channel *ch)
|
|
|
u32 risc;
|
|
|
unsigned int i, j, n;
|
|
|
|
|
|
- printk(KERN_WARNING "%s: %s - dma channel status dump\n", dev->name,
|
|
|
- ch->name);
|
|
|
+ pr_warn("%s: %s - dma channel status dump\n", dev->name, ch->name);
|
|
|
for (i = 0; i < ARRAY_SIZE(name); i++)
|
|
|
- printk(KERN_WARNING "cmds + 0x%2x: %-15s: 0x%08x\n", i * 4,
|
|
|
- name[i], cx_read(ch->cmds_start + 4 * i));
|
|
|
+ pr_warn("cmds + 0x%2x: %-15s: 0x%08x\n",
|
|
|
+ i * 4, name[i], cx_read(ch->cmds_start + 4 * i));
|
|
|
|
|
|
j = i * 4;
|
|
|
for (i = 0; i < 4;) {
|
|
|
risc = cx_read(ch->cmds_start + 4 * (i + 14));
|
|
|
- printk(KERN_WARNING "cmds + 0x%2x: risc%d: ", j + i * 4, i);
|
|
|
+ pr_warn("cmds + 0x%2x: risc%d: ", j + i * 4, i);
|
|
|
i += cx25821_risc_decode(risc);
|
|
|
}
|
|
|
|
|
@@ -637,36 +638,35 @@ void cx25821_sram_channel_dump(struct cx25821_dev *dev, struct sram_channel *ch)
|
|
|
risc = cx_read(ch->ctrl_start + 4 * i);
|
|
|
/* No consideration for bits 63-32 */
|
|
|
|
|
|
- printk(KERN_WARNING "ctrl + 0x%2x (0x%08x): iq %x: ", i * 4,
|
|
|
- ch->ctrl_start + 4 * i, i);
|
|
|
+ pr_warn("ctrl + 0x%2x (0x%08x): iq %x: ",
|
|
|
+ i * 4, ch->ctrl_start + 4 * i, i);
|
|
|
n = cx25821_risc_decode(risc);
|
|
|
for (j = 1; j < n; j++) {
|
|
|
risc = cx_read(ch->ctrl_start + 4 * (i + j));
|
|
|
- printk(KERN_WARNING
|
|
|
- "ctrl + 0x%2x : iq %x: 0x%08x [ arg #%d ]\n",
|
|
|
- 4 * (i + j), i + j, risc, j);
|
|
|
+ pr_warn("ctrl + 0x%2x : iq %x: 0x%08x [ arg #%d ]\n",
|
|
|
+ 4 * (i + j), i + j, risc, j);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- printk(KERN_WARNING " : fifo: 0x%08x -> 0x%x\n",
|
|
|
- ch->fifo_start, ch->fifo_start + ch->fifo_size);
|
|
|
- printk(KERN_WARNING " : ctrl: 0x%08x -> 0x%x\n",
|
|
|
- ch->ctrl_start, ch->ctrl_start + 6 * 16);
|
|
|
- printk(KERN_WARNING " : ptr1_reg: 0x%08x\n",
|
|
|
- cx_read(ch->ptr1_reg));
|
|
|
- printk(KERN_WARNING " : ptr2_reg: 0x%08x\n",
|
|
|
- cx_read(ch->ptr2_reg));
|
|
|
- printk(KERN_WARNING " : cnt1_reg: 0x%08x\n",
|
|
|
- cx_read(ch->cnt1_reg));
|
|
|
- printk(KERN_WARNING " : cnt2_reg: 0x%08x\n",
|
|
|
- cx_read(ch->cnt2_reg));
|
|
|
+ pr_warn(" : fifo: 0x%08x -> 0x%x\n",
|
|
|
+ ch->fifo_start, ch->fifo_start + ch->fifo_size);
|
|
|
+ pr_warn(" : ctrl: 0x%08x -> 0x%x\n",
|
|
|
+ ch->ctrl_start, ch->ctrl_start + 6 * 16);
|
|
|
+ pr_warn(" : ptr1_reg: 0x%08x\n",
|
|
|
+ cx_read(ch->ptr1_reg));
|
|
|
+ pr_warn(" : ptr2_reg: 0x%08x\n",
|
|
|
+ cx_read(ch->ptr2_reg));
|
|
|
+ pr_warn(" : cnt1_reg: 0x%08x\n",
|
|
|
+ cx_read(ch->cnt1_reg));
|
|
|
+ pr_warn(" : cnt2_reg: 0x%08x\n",
|
|
|
+ cx_read(ch->cnt2_reg));
|
|
|
}
|
|
|
EXPORT_SYMBOL(cx25821_sram_channel_dump);
|
|
|
|
|
|
void cx25821_sram_channel_dump_audio(struct cx25821_dev *dev,
|
|
|
struct sram_channel *ch)
|
|
|
{
|
|
|
- static char *name[] = {
|
|
|
+ static const char * const name[] = {
|
|
|
"init risc lo",
|
|
|
"init risc hi",
|
|
|
"cdt base",
|
|
@@ -686,18 +686,18 @@ void cx25821_sram_channel_dump_audio(struct cx25821_dev *dev,
|
|
|
u32 risc, value, tmp;
|
|
|
unsigned int i, j, n;
|
|
|
|
|
|
- printk(KERN_INFO "\n%s: %s - dma Audio channel status dump\n",
|
|
|
- dev->name, ch->name);
|
|
|
+ pr_info("\n%s: %s - dma Audio channel status dump\n",
|
|
|
+ dev->name, ch->name);
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(name); i++)
|
|
|
- printk(KERN_INFO "%s: cmds + 0x%2x: %-15s: 0x%08x\n",
|
|
|
- dev->name, i * 4, name[i],
|
|
|
- cx_read(ch->cmds_start + 4 * i));
|
|
|
+ pr_info("%s: cmds + 0x%2x: %-15s: 0x%08x\n",
|
|
|
+ dev->name, i * 4, name[i],
|
|
|
+ cx_read(ch->cmds_start + 4 * i));
|
|
|
|
|
|
j = i * 4;
|
|
|
for (i = 0; i < 4;) {
|
|
|
risc = cx_read(ch->cmds_start + 4 * (i + 14));
|
|
|
- printk(KERN_WARNING "cmds + 0x%2x: risc%d: ", j + i * 4, i);
|
|
|
+ pr_warn("cmds + 0x%2x: risc%d: ", j + i * 4, i);
|
|
|
i += cx25821_risc_decode(risc);
|
|
|
}
|
|
|
|
|
@@ -705,44 +705,43 @@ void cx25821_sram_channel_dump_audio(struct cx25821_dev *dev,
|
|
|
risc = cx_read(ch->ctrl_start + 4 * i);
|
|
|
/* No consideration for bits 63-32 */
|
|
|
|
|
|
- printk(KERN_WARNING "ctrl + 0x%2x (0x%08x): iq %x: ", i * 4,
|
|
|
- ch->ctrl_start + 4 * i, i);
|
|
|
+ pr_warn("ctrl + 0x%2x (0x%08x): iq %x: ",
|
|
|
+ i * 4, ch->ctrl_start + 4 * i, i);
|
|
|
n = cx25821_risc_decode(risc);
|
|
|
|
|
|
for (j = 1; j < n; j++) {
|
|
|
risc = cx_read(ch->ctrl_start + 4 * (i + j));
|
|
|
- printk(KERN_WARNING
|
|
|
- "ctrl + 0x%2x : iq %x: 0x%08x [ arg #%d ]\n",
|
|
|
- 4 * (i + j), i + j, risc, j);
|
|
|
+ pr_warn("ctrl + 0x%2x : iq %x: 0x%08x [ arg #%d ]\n",
|
|
|
+ 4 * (i + j), i + j, risc, j);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- printk(KERN_WARNING " : fifo: 0x%08x -> 0x%x\n",
|
|
|
- ch->fifo_start, ch->fifo_start + ch->fifo_size);
|
|
|
- printk(KERN_WARNING " : ctrl: 0x%08x -> 0x%x\n",
|
|
|
- ch->ctrl_start, ch->ctrl_start + 6 * 16);
|
|
|
- printk(KERN_WARNING " : ptr1_reg: 0x%08x\n",
|
|
|
- cx_read(ch->ptr1_reg));
|
|
|
- printk(KERN_WARNING " : ptr2_reg: 0x%08x\n",
|
|
|
- cx_read(ch->ptr2_reg));
|
|
|
- printk(KERN_WARNING " : cnt1_reg: 0x%08x\n",
|
|
|
- cx_read(ch->cnt1_reg));
|
|
|
- printk(KERN_WARNING " : cnt2_reg: 0x%08x\n",
|
|
|
- cx_read(ch->cnt2_reg));
|
|
|
+ pr_warn(" : fifo: 0x%08x -> 0x%x\n",
|
|
|
+ ch->fifo_start, ch->fifo_start + ch->fifo_size);
|
|
|
+ pr_warn(" : ctrl: 0x%08x -> 0x%x\n",
|
|
|
+ ch->ctrl_start, ch->ctrl_start + 6 * 16);
|
|
|
+ pr_warn(" : ptr1_reg: 0x%08x\n",
|
|
|
+ cx_read(ch->ptr1_reg));
|
|
|
+ pr_warn(" : ptr2_reg: 0x%08x\n",
|
|
|
+ cx_read(ch->ptr2_reg));
|
|
|
+ pr_warn(" : cnt1_reg: 0x%08x\n",
|
|
|
+ cx_read(ch->cnt1_reg));
|
|
|
+ pr_warn(" : cnt2_reg: 0x%08x\n",
|
|
|
+ cx_read(ch->cnt2_reg));
|
|
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
|
risc = cx_read(ch->cmds_start + 56 + (i * 4));
|
|
|
- printk(KERN_WARNING "instruction %d = 0x%x\n", i, risc);
|
|
|
+ pr_warn("instruction %d = 0x%x\n", i, risc);
|
|
|
}
|
|
|
|
|
|
/* read data from the first cdt buffer */
|
|
|
risc = cx_read(AUD_A_CDT);
|
|
|
- printk(KERN_WARNING "\nread cdt loc=0x%x\n", risc);
|
|
|
+ pr_warn("\nread cdt loc=0x%x\n", risc);
|
|
|
for (i = 0; i < 8; i++) {
|
|
|
n = cx_read(risc + i * 4);
|
|
|
- printk(KERN_WARNING "0x%x ", n);
|
|
|
+ pr_cont("0x%x ", n);
|
|
|
}
|
|
|
- printk(KERN_WARNING "\n\n");
|
|
|
+ pr_cont("\n\n");
|
|
|
|
|
|
value = cx_read(CLK_RST);
|
|
|
CX25821_INFO(" CLK_RST = 0x%x\n\n", value);
|
|
@@ -870,7 +869,7 @@ static int cx25821_get_resources(struct cx25821_dev *dev)
|
|
|
dev->name))
|
|
|
return 0;
|
|
|
|
|
|
- printk(KERN_ERR "%s: can't get MMIO memory @ 0x%llx\n",
|
|
|
+ pr_err("%s: can't get MMIO memory @ 0x%llx\n",
|
|
|
dev->name, (unsigned long long)pci_resource_start(dev->pci, 0));
|
|
|
|
|
|
return -EBUSY;
|
|
@@ -880,8 +879,8 @@ static void cx25821_dev_checkrevision(struct cx25821_dev *dev)
|
|
|
{
|
|
|
dev->hwrevision = cx_read(RDR_CFG2) & 0xff;
|
|
|
|
|
|
- printk(KERN_INFO "%s() Hardware revision = 0x%02x\n", __func__,
|
|
|
- dev->hwrevision);
|
|
|
+ pr_info("%s(): Hardware revision = 0x%02x\n",
|
|
|
+ __func__, dev->hwrevision);
|
|
|
}
|
|
|
|
|
|
static void cx25821_iounmap(struct cx25821_dev *dev)
|
|
@@ -901,9 +900,9 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
|
|
|
{
|
|
|
int io_size = 0, i;
|
|
|
|
|
|
- printk(KERN_INFO "\n***********************************\n");
|
|
|
- printk(KERN_INFO "cx25821 set up\n");
|
|
|
- printk(KERN_INFO "***********************************\n\n");
|
|
|
+ pr_info("\n***********************************\n");
|
|
|
+ pr_info("cx25821 set up\n");
|
|
|
+ pr_info("***********************************\n\n");
|
|
|
|
|
|
mutex_init(&dev->lock);
|
|
|
|
|
@@ -920,13 +919,11 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
|
|
|
strcpy(cx25821_boards[CX25821_BOARD].name, "cx25821");
|
|
|
|
|
|
if (dev->pci->device != 0x8210) {
|
|
|
- printk(KERN_INFO
|
|
|
- "%s() Exiting. Incorrect Hardware device = 0x%02x\n",
|
|
|
- __func__, dev->pci->device);
|
|
|
+ pr_info("%s(): Exiting. Incorrect Hardware device = 0x%02x\n",
|
|
|
+ __func__, dev->pci->device);
|
|
|
return -1;
|
|
|
} else {
|
|
|
- printk(KERN_INFO "Athena Hardware device = 0x%02x\n",
|
|
|
- dev->pci->device);
|
|
|
+ pr_info("Athena Hardware device = 0x%02x\n", dev->pci->device);
|
|
|
}
|
|
|
|
|
|
/* Apply a sensible clock frequency for the PCIe bridge */
|
|
@@ -956,8 +953,7 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
|
|
|
dev->i2c_bus[0].i2c_period = (0x07 << 24); /* 1.95MHz */
|
|
|
|
|
|
if (cx25821_get_resources(dev) < 0) {
|
|
|
- printk(KERN_ERR "%s No more PCIe resources for "
|
|
|
- "subsystem: %04x:%04x\n",
|
|
|
+ pr_err("%s: No more PCIe resources for subsystem: %04x:%04x\n",
|
|
|
dev->name, dev->pci->subsystem_vendor,
|
|
|
dev->pci->subsystem_device);
|
|
|
|
|
@@ -985,11 +981,11 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
|
|
|
|
|
|
dev->bmmio = (u8 __iomem *) dev->lmmio;
|
|
|
|
|
|
- printk(KERN_INFO "%s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n",
|
|
|
- dev->name, dev->pci->subsystem_vendor,
|
|
|
- dev->pci->subsystem_device, cx25821_boards[dev->board].name,
|
|
|
- dev->board, card[dev->nr] == dev->board ?
|
|
|
- "insmod option" : "autodetected");
|
|
|
+ pr_info("%s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n",
|
|
|
+ dev->name, dev->pci->subsystem_vendor,
|
|
|
+ dev->pci->subsystem_device, cx25821_boards[dev->board].name,
|
|
|
+ dev->board, card[dev->nr] == dev->board ?
|
|
|
+ "insmod option" : "autodetected");
|
|
|
|
|
|
/* init hardware */
|
|
|
cx25821_initialize(dev);
|
|
@@ -1004,8 +1000,7 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
|
|
|
cx25821_card_setup(dev);
|
|
|
|
|
|
if (medusa_video_init(dev) < 0)
|
|
|
- CX25821_ERR("%s() Failed to initialize medusa!\n"
|
|
|
- , __func__);
|
|
|
+ CX25821_ERR("%s(): Failed to initialize medusa!\n", __func__);
|
|
|
|
|
|
cx25821_video_register(dev);
|
|
|
|
|
@@ -1017,13 +1012,12 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
|
|
|
if (video_register_device
|
|
|
(dev->ioctl_dev, VFL_TYPE_GRABBER, VIDEO_IOCTL_CH) < 0) {
|
|
|
cx25821_videoioctl_unregister(dev);
|
|
|
- printk(KERN_ERR
|
|
|
- "%s() Failed to register video adapter for IOCTL, so \
|
|
|
- unregistering videoioctl device.\n", __func__);
|
|
|
+ pr_err("%s(): Failed to register video adapter for IOCTL, so unregistering videoioctl device\n",
|
|
|
+ __func__);
|
|
|
}
|
|
|
|
|
|
cx25821_dev_checkrevision(dev);
|
|
|
- CX25821_INFO("cx25821 setup done!\n");
|
|
|
+ CX25821_INFO("setup done!\n");
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -1362,20 +1356,20 @@ void cx25821_print_irqbits(char *name, char *tag, char **strings,
|
|
|
{
|
|
|
unsigned int i;
|
|
|
|
|
|
- printk(KERN_DEBUG "%s: %s [0x%x]", name, tag, bits);
|
|
|
+ printk(KERN_DEBUG pr_fmt("%s: %s [0x%x]"), name, tag, bits);
|
|
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
if (!(bits & (1 << i)))
|
|
|
continue;
|
|
|
if (strings[i])
|
|
|
- printk(" %s", strings[i]);
|
|
|
+ pr_cont(" %s", strings[i]);
|
|
|
else
|
|
|
- printk(" %d", i);
|
|
|
+ pr_cont(" %d", i);
|
|
|
if (!(mask & (1 << i)))
|
|
|
continue;
|
|
|
- printk("*");
|
|
|
+ pr_cont("*");
|
|
|
}
|
|
|
- printk("\n");
|
|
|
+ pr_cont("\n");
|
|
|
}
|
|
|
EXPORT_SYMBOL(cx25821_print_irqbits);
|
|
|
|
|
@@ -1405,12 +1399,12 @@ static int __devinit cx25821_initdev(struct pci_dev *pci_dev,
|
|
|
if (pci_enable_device(pci_dev)) {
|
|
|
err = -EIO;
|
|
|
|
|
|
- printk(KERN_INFO "pci enable failed! ");
|
|
|
+ pr_info("pci enable failed!\n");
|
|
|
|
|
|
goto fail_unregister_device;
|
|
|
}
|
|
|
|
|
|
- printk(KERN_INFO "cx25821 Athena pci enable !\n");
|
|
|
+ pr_info("Athena pci enable !\n");
|
|
|
|
|
|
err = cx25821_dev_setup(dev);
|
|
|
if (err) {
|
|
@@ -1423,14 +1417,13 @@ static int __devinit cx25821_initdev(struct pci_dev *pci_dev,
|
|
|
/* print pci info */
|
|
|
pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &dev->pci_rev);
|
|
|
pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &dev->pci_lat);
|
|
|
- printk(KERN_INFO "%s/0: found at %s, rev: %d, irq: %d, "
|
|
|
- "latency: %d, mmio: 0x%llx\n", dev->name,
|
|
|
- pci_name(pci_dev), dev->pci_rev, pci_dev->irq,
|
|
|
- dev->pci_lat, (unsigned long long)dev->base_io_addr);
|
|
|
+ pr_info("%s/0: found at %s, rev: %d, irq: %d, latency: %d, mmio: 0x%llx\n",
|
|
|
+ dev->name, pci_name(pci_dev), dev->pci_rev, pci_dev->irq,
|
|
|
+ dev->pci_lat, (unsigned long long)dev->base_io_addr);
|
|
|
|
|
|
pci_set_master(pci_dev);
|
|
|
if (!pci_dma_supported(pci_dev, 0xffffffff)) {
|
|
|
- printk("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name);
|
|
|
+ pr_err("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name);
|
|
|
err = -EIO;
|
|
|
goto fail_irq;
|
|
|
}
|
|
@@ -1440,15 +1433,14 @@ static int __devinit cx25821_initdev(struct pci_dev *pci_dev,
|
|
|
dev->name, dev);
|
|
|
|
|
|
if (err < 0) {
|
|
|
- printk(KERN_ERR "%s: can't get IRQ %d\n", dev->name,
|
|
|
- pci_dev->irq);
|
|
|
+ pr_err("%s: can't get IRQ %d\n", dev->name, pci_dev->irq);
|
|
|
goto fail_irq;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
fail_irq:
|
|
|
- printk(KERN_INFO "cx25821 cx25821_initdev() can't get IRQ !\n");
|
|
|
+ pr_info("cx25821_initdev() can't get IRQ !\n");
|
|
|
cx25821_dev_unregister(dev);
|
|
|
|
|
|
fail_unregister_pci:
|
|
@@ -1510,9 +1502,10 @@ static struct pci_driver cx25821_pci_driver = {
|
|
|
static int __init cx25821_init(void)
|
|
|
{
|
|
|
INIT_LIST_HEAD(&cx25821_devlist);
|
|
|
- printk(KERN_INFO "cx25821 driver version %d.%d.%d loaded\n",
|
|
|
- (CX25821_VERSION_CODE >> 16) & 0xff,
|
|
|
- (CX25821_VERSION_CODE >> 8) & 0xff, CX25821_VERSION_CODE & 0xff);
|
|
|
+ pr_info("driver version %d.%d.%d loaded\n",
|
|
|
+ (CX25821_VERSION_CODE >> 16) & 0xff,
|
|
|
+ (CX25821_VERSION_CODE >> 8) & 0xff,
|
|
|
+ CX25821_VERSION_CODE & 0xff);
|
|
|
return pci_register_driver(&cx25821_pci_driver);
|
|
|
}
|
|
|
|