- 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 = tscan1_request_io;
+ hwspecops->release_io = tscan1_release_io;
+ hwspecops->reset = tscan1_reset;
+ hwspecops->init_hw_data = tscan1_init_hw_data;
+ hwspecops->init_chip_data = tscan1_init_chip_data;
+ hwspecops->init_obj_data = tscan1_init_obj_data;
+ hwspecops->write_register = tscan1mmio_write_register;
+ hwspecops->read_register = tscan1mmio_read_register;
+ hwspecops->program_irq = tscan1_program_irq;
+ return 0;