Lines Matching refs:port

98 static int scanner_reset(struct parport *port);
99 static void scanner_chessboard_control(struct parport *port);
100 static void scanner_chessboard_data(struct parport *port, int mode);
103 static int ieee_transfer(struct parport *port, int length,
107 static int readstatus(struct parport *port);
108 static int expect(struct parport *port, const char *step, int s,
112 static void outdata(struct parport *port, int d);
113 static void outcont(struct parport *port, int d, int mask);
114 static void outboth(struct parport *port, int d, int c);
130 int sanei_canon_pp_wake_scanner(struct parport *port, int mode)
133 (essentially disabling the passthrough port) and exits
139 tmp = readstatus(port);
148 scanner_reset(port);
162 scanner_chessboard_control(port);
163 scanner_chessboard_data(port, mode);
165 if (expect(port, NULL, 0x03, 0x1f, 800000) &&
169 scanner_chessboard_control(port);
170 scanner_chessboard_data(port, INITMODE_20P);
173 if (expect(port, "Scanner wakeup reply 1", 0x03, 0x1f, 50000))
175 outboth(port, 0x04, 0x0d);
177 outcont(port, 0x07, 0x0f);
181 } while ((i < max_cycles) && expect(port, "Scanner wakeup reply 2",
186 outcont(port, 0, HOSTBUSY); /* C1 off */
188 if (expect(port, "Reply 2", 0xc, 0x1f, 800000))
190 outcont(port, HOSTBUSY, HOSTBUSY); /* C1 on */
191 if (expect(port, "Reply 3", 0x0b, 0x1f, 800000))
193 outboth(port, 0, NSELECTIN | NINIT | HOSTCLK); /* Clear D, C3+, C1- */
209 int sanei_canon_pp_write(struct parport *port, int length, unsigned char *data)
233 ieee1284_negotiate(port, ieee_mode);
234 if (ieee1284_ecp_write_data(port, 0, (char *)data,
239 if (ieee1284_compat_write(port, 0, (char *)data,
252 int sanei_canon_pp_read(struct parport *port, int length, unsigned char *data)
257 ieee1284_negotiate(port, ieee_mode);
265 outcont(port, NSELECTIN, HOSTBUSY | NSELECTIN);
266 if (expect(port, "Read Data 1", 0, NDATAAVAIL, 6000000))
269 ieee1284_terminate(port);
272 outcont(port, HOSTBUSY, HOSTBUSY);
274 if (expect(port, "Read Data 2", NACK, NACK, 1000000))
277 ieee1284_terminate(port);
280 if (expect(port, "Read Data 3 (Ready?)", 0, PERROR, 1000000))
283 ieee1284_terminate(port);
289 if ((readstatus(port) & NDATAAVAIL) == NDATAAVAIL)
292 ieee1284_terminate(port);
300 count = ieee_transfer(port, length, data);
317 ieee1284_terminate(port);
322 count = ieee_transfer(port, length, data+offset);
349 ieee1284_terminate(port);
355 static int ieee_transfer(struct parport *port, int length, unsigned char *data)
367 result = ieee1284_ecp_read_data(port, 0, (char *)data,
371 result = ieee1284_nibble_read(port, 0, (char *)data,
383 int sanei_canon_pp_check_status(struct parport *port)
390 if (sanei_canon_pp_read(port, 2, data))
425 /* Send a raw byte to the printer port */
426 static void outdata(struct parport *port, int d)
428 ieee1284_write_data(port, d & 0xff);
431 /* Send the low nibble of d to the control port.
433 static void outcont(struct parport *port, int d, int mask)
437 ieee1284_write_control(port, (control_port_status & 0x0f));
441 static void outboth(struct parport *port, int d, int c)
443 ieee1284_write_data(port, d & 0xff);
444 outcont(port, c, 0x0f);
451 static int readstatus(struct parport *port)
453 return (ieee1284_read_status(port) & 0xf8) >> 3;
456 static void scanner_chessboard_control(struct parport *port)
459 outboth(port, 0x0, 13);
461 outcont(port, 7, 0xf);
463 outcont(port, 13, 0xf);
465 outcont(port, 7, 0xf);
469 static void scanner_chessboard_data(struct parport *port, int mode)
481 outdata(port, 0x55);
483 outdata(port, 0x33);
484 outcont(port, HOSTBUSY, HOSTBUSY);
486 outcont(port, 0, HOSTBUSY);
488 outcont(port, HOSTBUSY, HOSTBUSY);
492 outdata(port, 0xaa);
494 outdata(port, 0xcc);
495 outcont(port, HOSTBUSY, HOSTBUSY);
497 outcont(port, 0, HOSTBUSY);
499 outcont(port, HOSTBUSY, HOSTBUSY);
505 static int scanner_reset(struct parport *port)
509 if (readstatus(port) == 0x0b)
512 ieee1284_negotiate(port, 0x0);
513 ieee1284_terminate(port);
514 ieee1284_negotiate(port, 0x0);
515 ieee1284_terminate(port);
516 scanner_chessboard_data(port, 1);
517 scanner_chessboard_data(port, 1);
518 scanner_chessboard_data(port, 1);
519 scanner_chessboard_data(port, 1);
521 scanner_chessboard_data(port, 0);
522 scanner_chessboard_data(port, 0);
523 scanner_chessboard_data(port, 0);
524 scanner_chessboard_data(port, 0);
528 outboth(port, 0x04, 0x0d);
531 if (expect(port, "Reset 2 response 1", 0x7, 0x1f, 500000))
534 outcont(port, 0, HOSTCLK);
536 outcont(port, 0x0f, 0xf); /* All lines must be 1. */
539 if (expect(port, "Reset 2 response 2 (READY)",
543 outcont(port, 0, HOSTBUSY);
545 outcont(port, HOSTBUSY, HOSTBUSY | NSELECTIN);
552 static int expect(struct parport *port, const char *msg, int s,
560 if (ieee1284_wait_status(port, mask << 3, s << 3, &tv))
563 "= 0x%02x\n", msg, s, mask, readstatus(port));
570 int sanei_canon_pp_scanner_init(struct parport *port)
577 ieee1284_negotiate(port, 0x0);
580 ieee1284_terminate(port);
583 if (sanei_canon_pp_write(port, 10, cmd_init))
589 if (sanei_canon_pp_check_status(port) < 0)
593 sanei_canon_pp_write(port, 10, cmd_init);
594 while ((tries < 3) && (tmp = sanei_canon_pp_check_status(port)))
603 sanei_canon_pp_write(port, 10, cmd_init);