static void drv_M5_command(const unsigned int cmd, const int delay) { if (UseBusy) drv_M5_busy(); /* put data on DB1..DB8 */ drv_generic_parport_data(cmd & 0xff); /* set I/OC1 */ /* set I/OC2 */ /* clear RW */ drv_generic_parport_control(SIGNAL_IOC1 | SIGNAL_IOC2 | SIGNAL_RW, (cmd & 0x100 ? SIGNAL_IOC1 : 0) | (cmd & 0x200 ? SIGNAL_IOC2 : 0)); /* Control data setup time */ ndelay(T_SU); /* send command */ drv_generic_parport_toggle(SIGNAL_EX, 1, T_W); if (UseBusy) { /* honour data hold time */ ndelay(T_H); } else { /* wait for command completion */ udelay(delay); } }
static void drv_L7_write_data(const unsigned char data) { /* put data on DB1..DB8 */ drv_generic_parport_data(data); /* CS1 = high, RW = low, A0 = high */ drv_generic_parport_control(SIGNAL_CS1 | SIGNAL_RW | SIGNAL_A0, SIGNAL_CS1 | SIGNAL_A0); /* Address Setup Time = 10 ns */ /* Data Setup Time = 20 ns */ ndelay(20); /* Control L Pulse Width = 22 ns */ drv_generic_parport_toggle(SIGNAL_CS1, 0, 22); /* Address & Data Hold Time = 10 ns */ ndelay(10); }