-int ts7kv_check_presence(unsigned long remap_io_addr, int *pjmp)
-{
- int result = -ENODEV;
-
- if (!can_request_io_region(remap_io_addr, TSXXX_IO_RANGE, "ts7kv-probe"))
- return -ENODEV;
-
- do {
- if (inb(remap_io_addr+TSXXX_ID0_REG)!=TS7KV_ID0 ||
- inb(remap_io_addr+TSXXX_ID1_REG)!=TS7KV_ID1)
- break;
-
- if(pjmp)
- *pjmp = inb(remap_io_addr+TS7KV_JMP_REG);
-
- result = 0;
- } while (0);
-
- can_release_io_region(remap_io_addr, TSXXX_IO_RANGE);
-
- return result;
-}
-
-int ts7kv_init_hw_data(struct candevice_t *candev)
-{
- int i, j, jmp;
- unsigned long io_addr;
- unsigned long remap_io_addr;
- unsigned long can_io_addr;
-
- io_addr = candev->io_addr;
-
- if(io_addr && (io_addr != (unsigned long)-1)) {
- remap_io_addr = io_addr = tsxxx_base;
-
- if(ts7kv_check_presence(remap_io_addr, &jmp)){
- CANMSG("No TS7KV card found at address 0xlx\n");
- return -ENODEV;
- }
- } else {
- DEBUGMSG("Scanning bus for TS7KV boards...\n");
-
- for (i=0; 1;i++)
- {
- if(i >= 4) {
- CANMSG("No TS7KV boards found for slot %d\n", candev->candev_idx);
- return -ENODEV;
- }
-
- io_addr = TS7KV_BASE_IO + i*TSXXX_IO_RANGE;
- remap_io_addr = io_addr = tsxxx_base;
-
- for (j = 0; j < MAX_HW_CARDS; j++) {
- if(io[j] == io_addr){
- j = -1;
- break;
- }
- }
- if(j<0)
- continue;
-
- if(!ts7kv_check_presence(remap_io_addr, &jmp))
- break;
-
- }
- DEBUGMSG("TS7KV board was found at 0x%lx for driver slot %d\n",
- io_addr, candev->candev_idx);
-
- io[candev->candev_idx] = io_addr;
- }
-
- can_io_addr = ((io_addr>>3)&0x03)*0x20;
- tscanio[candev->candev_idx] = can_io_addr;
-
- /* dev_base_addr address is used to store remapped PLD base address */
- candev->dev_base_addr = remap_io_addr;
-
- /* dev_base_addr address is used to store remapped slave window address */
- candev->io_addr = can_io_addr+tsxxx_base;
-
- /* unused reset address is used to store jumper setting */
- candev->res_addr = jmp;
-
- candev->nr_82527_chips=NR_82527;
- candev->nr_sja1000_chips=NR_SJA1000;
- candev->nr_all_chips=NR_82527+NR_SJA1000;
- candev->flags &= ~CANDEV_PROGRAMMABLE_IRQ;
-
- DEBUGMSG("Memory region at 0x%lx assigned to sja1000 of driver %d/%s\n",
- candev->io_addr, candev->candev_idx, candev->hwname);
-
- return 0;
-}
-