static CAN_DEFINE_SPINLOCK(ts7kv_win_lock);
-long clock[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1};
-MODULE_PARM(clock, "1-" __MODULE_STRING(MAX_HW_CARDS)"i");
-MODULE_PARM_DESC(clock,"clock frequency for each board in step of 1kHz");
-
-long tscanio[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1};
-MODULE_PARM(tscanio, "1-" __MODULE_STRING(MAX_HW_CARDS)"i");
-MODULE_PARM_DESC(tscanio,"TSCAN CAN controller IO address for each board");
+unsigned long tscanio[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1};
+unsigned int tscanio_specified;
#if defined(TS7XXX_IO8_BASE)&&defined(TSXXX_BASE_IO)
int tsxxx_base=TS7XXX_IO8_BASE+TSXXX_BASE_IO;
#else /*TS7XXX_IO8_BASE*/
unsigned long tsxxx_base=0;
#endif /*TS7XXX_IO8_BASE*/
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12))
+MODULE_PARM(tscanio, "1-" __MODULE_STRING(MAX_HW_CARDS)"i");
MODULE_PARM(tsxxx_base, "1i");
+#else /* LINUX_VERSION_CODE >= 2,6,12 */
+module_param_array(tscanio, int, &tscanio_specified, 0);
+module_param(tsxxx_base, ulong, 0);
+#endif /* LINUX_VERSION_CODE >= 2,6,12 */
+
+MODULE_PARM_DESC(tscanio,"TSCAN CAN controller IO address for each board");
MODULE_PARM_DESC(tsxxx_base,"The base of the ISA/8-bit IO space for TSxxx CAN peripherals in the system");
-unsigned short ts7kv_isused = 0x0;
/**
* tscan1_request_io: - reserve io or memory range for can board
default: mode=0x60; break;
}
- outb(0x00, candev->io_addr+TSCAN1_WIN_REG);
- outb(mode, candev->io_addr+TSCAN1_MOD_REG);
+ can_outb(0x00, candev->io_addr+TSCAN1_WIN_REG);
+ can_outb(mode, candev->io_addr+TSCAN1_MOD_REG);
return 0;
}
can_release_io_region(remap_can_io_addr, TSXXX_CAN_RANGE);
}
- outb(0x20, candev->io_addr+TSCAN1_MOD_REG);
+ can_outb(0x20, candev->io_addr+TSCAN1_MOD_REG);
can_release_io_region(candev->io_addr, TSXXX_IO_RANGE);
return 0;
return -ENODEV;
do {
- if (inb(remap_io_addr+TSXXX_ID0_REG)!=TSCAN1_ID0 ||
- inb(remap_io_addr+TSXXX_ID1_REG)!=TSCAN1_ID1)
+ if (can_inb(remap_io_addr+TSXXX_ID0_REG)!=TSCAN1_ID0 ||
+ can_inb(remap_io_addr+TSXXX_ID1_REG)!=TSCAN1_ID1)
break;
- outb(0x00, remap_io_addr+TSCAN1_WIN_REG);
- outb(0x20, remap_io_addr+TSCAN1_MOD_REG);
+ can_outb(0x00, remap_io_addr+TSCAN1_WIN_REG);
+ can_outb(0x20, remap_io_addr+TSCAN1_MOD_REG);
if(pjmp)
- *pjmp = inb(remap_io_addr+TSCAN1_JMP_REG);
+ *pjmp = can_inb(remap_io_addr+TSCAN1_JMP_REG);
result = 0;
} while (0);
io_addr = candev->io_addr;
if(io_addr && (io_addr != (unsigned long)-1)) {
- remap_io_addr = io_addr = tsxxx_base;
+ remap_io_addr = io_addr + tsxxx_base;
if(tscan1_check_presence(remap_io_addr, &jmp)){
CANMSG("No TSCAN1 card found at address 0xlx\n");
}
io_addr = TSCAN1_BASE_IO + i*TSXXX_IO_RANGE;
- remap_io_addr = io_addr = tsxxx_base;
+ remap_io_addr = io_addr + tsxxx_base;
for (j = 0; j < MAX_HW_CARDS; j++) {
if(io[j] == io_addr){
return -ENODEV;
do {
- if (inb(remap_io_addr+TSXXX_ID0_REG)!=TS7KV_ID0 ||
- inb(remap_io_addr+TSXXX_ID1_REG)!=TS7KV_ID1)
+ if (can_inb(remap_io_addr+TSXXX_ID0_REG)!=TS7KV_ID0 ||
+ can_inb(remap_io_addr+TSXXX_ID1_REG)!=TS7KV_ID1)
break;
if(pjmp)
- *pjmp = inb(remap_io_addr+TS7KV_JMP_REG);
+ *pjmp = can_inb(remap_io_addr+TS7KV_JMP_REG);
result = 0;
} while (0);
io_addr = candev->io_addr;
if(io_addr && (io_addr != (unsigned long)-1)) {
- remap_io_addr = io_addr = tsxxx_base;
+ remap_io_addr = io_addr + tsxxx_base;
if(ts7kv_check_presence(remap_io_addr, &jmp)){
CANMSG("No TS7KV card found at address 0xlx\n");
}
io_addr = TS7KV_BASE_IO + i*TSXXX_IO_RANGE;
- remap_io_addr = io_addr = tsxxx_base;
+ remap_io_addr = io_addr + tsxxx_base;
for (j = 0; j < MAX_HW_CARDS; j++) {
if(io[j] == io_addr){
*/
int tscan1_init_chip_data(struct candevice_t *candev, int chipnr)
{
- unsigned long clk;
+ unsigned long default_clk = 16000 * 1000;
int jmp;
int irq = -1;
- clk = clock[candev->candev_idx];
- if(!clk || (clk == -1))
- clk = 16000 * 1000;
- else
- clk *= 1000;
-
/* unused reset address is used to store jumper setting */
jmp = candev->res_addr;
sja1000p_fill_chipspecops(candev->chip[chipnr]);
- candev->chip[chipnr]->clock = clk;
+ if(candev->chip[chipnr]->clock <= 0)
+ candev->chip[chipnr]->clock = default_clk;
candev->chip[chipnr]->int_clk_reg = 0x0;
candev->chip[chipnr]->int_bus_reg = 0x0;
candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF;
int ts7kv_init_chip_data(struct candevice_t *candev, int chipnr)
{
- unsigned long clk;
+ unsigned long default_clk = 16000 * 1000;
int jmp;
int irq = -1;
- clk = clock[candev->candev_idx];
- if(!clk || (clk == -1))
- clk = 24000 * 1000;
- else
- clk *= 1000;
-
/* unused reset address is used to store jumper setting */
jmp = candev->res_addr;
sja1000p_fill_chipspecops(candev->chip[chipnr]);
- candev->chip[chipnr]->clock = clk;
+ if(candev->chip[chipnr]->clock <= 0)
+ candev->chip[chipnr]->clock = default_clk;
candev->chip[chipnr]->int_clk_reg = 0x0;
candev->chip[chipnr]->int_bus_reg = 0x0;
candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF;
* Return Value: The function does not return a value
* File: src/tscan1.c
*/
-void tscan1_write_register(unsigned data, unsigned long address)
+void tscan1_write_register(unsigned data, can_ioptr_t address)
{
- outb(data, address);
+ can_outb(data, address);
}
-void ts7kv_write_register(unsigned data, unsigned long address)
+void ts7kv_write_register(unsigned data, can_ioptr_t address)
{
- unsigned long base = address & ~0x1f;
+ unsigned long addr=can_ioptr2ulong(address);
+ can_ioptr_t base = can_ulong2ioptr(addr & ~0x1f);
unsigned char nwin = 0x10;
unsigned char savewin;
can_spin_irqflags_t flags;
- if((address&0x1f) > 0x1d) {
+ if((addr&0x1f) > 0x1d) {
nwin++;
address -= 0x10;
}
can_spin_lock_irqsave(&ts7kv_win_lock,flags);
- savewin = inb(base+TS7KV_WIN_REG);
+ savewin = can_inb(base+TS7KV_WIN_REG);
if(nwin == savewin) {
- outb(data, address);
+ can_outb(data, address);
}else{
- outb(nwin, base+TS7KV_WIN_REG);
- outb(data, address);
- outb(savewin, base+TS7KV_WIN_REG);
+ can_outb(nwin, base+TS7KV_WIN_REG);
+ can_outb(data, address);
+ can_outb(savewin, base+TS7KV_WIN_REG);
}
can_spin_unlock_irqrestore(&ts7kv_win_lock,flags);
}
* Return Value: The function returns the value stored in @address
* File: src/tscan1.c
*/
-unsigned tscan1_read_register(unsigned long address)
+unsigned tscan1_read_register(can_ioptr_t address)
{
- return inb(address);
+ return can_inb(address);
}
-unsigned ts7kv_read_register(unsigned long address)
+unsigned ts7kv_read_register(can_ioptr_t address)
{
- unsigned long base = address & ~0x1f;
+ unsigned long addr=can_ioptr2ulong(address);
+ can_ioptr_t base = can_ulong2ioptr(addr & ~0x1f);
unsigned char nwin = 0x10;
unsigned char savewin;
unsigned val;
can_spin_irqflags_t flags;
- if((address&0x1f) > 0x1d) {
+ if((addr&0x1f) > 0x1d) {
nwin++;
address -= 0x10;
}
can_spin_lock_irqsave(&ts7kv_win_lock,flags);
- savewin = inb(base+TS7KV_WIN_REG);
+ savewin = can_inb(base+TS7KV_WIN_REG);
if(nwin == savewin) {
- val = inb(address);
+ val = can_inb(address);
}else{
- outb(nwin, base+TS7KV_WIN_REG);
- val = inb(address);
- outb(savewin, base+TS7KV_WIN_REG);
+ can_outb(nwin, base+TS7KV_WIN_REG);
+ val = can_inb(address);
+ can_outb(savewin, base+TS7KV_WIN_REG);
}
can_spin_unlock_irqrestore(&ts7kv_win_lock,flags);