- ///?FIXME Consider addresses beyond 32bytes range
- unsigned short i;
- for (i=0;i<MAX_HW_CARDS;i++)
- if ( remap_can_addr[i]!=-1 &&
- (address >= remap_can_addr[i]) &&
- (address < remap_can_addr[i]+TSXXX_CAN_RANGE) )
- return i;
- return -1;
-}
-
-unsigned long tscan1_setpage_getaddr(unsigned long address,
- signed short *nwinbak, unsigned long *winaddr)
-{
- unsigned long offset_addr;
- unsigned short candev_idx;
- char nwin;
-
- if ((candev_idx = tscan1_getcandevidx(address)) < 0)
- return address;
-
- offset_addr = address;
- nwin = 0x0;
-
- if (!strcmp(hardware_p->candevice[candev_idx]->hwname,"tscan1")) {
- while ((offset_addr - remap_can_addr[candev_idx]) > 0x1f) {
- offset_addr -= 0x20;
- nwin += 0x1;
- }
- DEBUGMSG("%s win outb(0x%x,0x%lx) of address 0x%lx\n",
- hardware_p->candevice[candev_idx]->hwname,
- nwin, remap_io_addr[candev_idx]|TSCAN1_WIN_REG, address);
- outb(nwin, remap_io_addr[candev_idx]|TSCAN1_WIN_REG);
- }
-
- else if (!strcmp(hardware_p->candevice[candev_idx]->hwname,"ts7kv")) {
- while ((offset_addr - remap_can_addr[candev_idx]) > 0x1d) {
- offset_addr -= 0x10;
- nwin += 0x1;
- }
-
- *winaddr = (unsigned long)remap_can_addr[candev_idx]|TS7KV_WIN_REG;
- *nwinbak = inb(*winaddr);
- DEBUGMSG("inb(0x%lx)=0x%x bak\n", *winaddr, *nwinbak);
- if (*nwinbak != (nwin|0x10)) {
- DEBUGMSG("%s win outb(0x%x,0x%lx) of address 0x%lx\n",
- hardware_p->candevice[candev_idx]->hwname,
- nwin|0x10, *winaddr, address);
- outb(nwin|0x10, *winaddr);
- }
- if ( 0x10 == ((*nwinbak)&0xF0) ) *nwinbak = -1;
- }
-
- return offset_addr;
+ hwspecops->request_io = ts7kv_request_io;
+ hwspecops->release_io = ts7kv_release_io;
+ hwspecops->reset = tscan1_reset;
+ hwspecops->init_hw_data = ts7kv_init_hw_data;
+ hwspecops->init_chip_data = ts7kv_init_chip_data;
+ hwspecops->init_obj_data = tscan1_init_obj_data;
+ hwspecops->write_register = ts7kv_write_register;
+ hwspecops->read_register = ts7kv_read_register;
+ hwspecops->program_irq = tscan1_program_irq;
+ return 0;