Lines Matching refs:port
41 struct parport *port; member
50 static int mux_present(struct parport *port);
51 static int num_mux_ports(struct parport *port);
52 static int select_port(struct parport *port);
53 static int assign_addrs(struct parport *port);
56 static void add_dev(int devnum, struct parport *port, int daisy) in add_dev() argument
61 newdev->port = port; in add_dev()
92 int parport_daisy_init(struct parport *port) in parport_daisy_init() argument
107 if (port->muxport < 0 && mux_present(port) && in parport_daisy_init()
109 ((num_ports = num_mux_ports(port)) == 2 || num_ports == 4)) { in parport_daisy_init()
111 port->muxport = 0; in parport_daisy_init()
114 port->name, num_ports); in parport_daisy_init()
117 struct parport *extra = clone_parport(port, i); in parport_daisy_init()
129 port->name); in parport_daisy_init()
138 if (port->muxport >= 0) in parport_daisy_init()
139 select_port(port); in parport_daisy_init()
141 parport_daisy_deselect_all(port); in parport_daisy_init()
142 detected += assign_addrs(port); in parport_daisy_init()
145 add_dev(numdevs++, port, -1); in parport_daisy_init()
160 parport_daisy_fini(port); in parport_daisy_init()
161 parport_write_control(port, PARPORT_CONTROL_SELECT); in parport_daisy_init()
163 parport_write_control(port, in parport_daisy_init()
175 void parport_daisy_fini(struct parport *port) in parport_daisy_fini() argument
183 if (dev->port != port) { in parport_daisy_fini()
216 struct parport *port; in parport_open() local
230 port = parport_get_port(p->port); in parport_open()
233 dev = parport_register_device(port, name, NULL, NULL, NULL, 0, NULL); in parport_open()
234 parport_put_port(port); in parport_open()
244 selected = port->daisy; in parport_open()
271 static int cpp_daisy(struct parport *port, int cmd) in cpp_daisy() argument
275 parport_data_forward(port); in cpp_daisy()
276 parport_write_data(port, 0xaa); udelay(2); in cpp_daisy()
277 parport_write_data(port, 0x55); udelay(2); in cpp_daisy()
278 parport_write_data(port, 0x00); udelay(2); in cpp_daisy()
279 parport_write_data(port, 0xff); udelay(2); in cpp_daisy()
280 s = parport_read_status(port) & (PARPORT_STATUS_BUSY in cpp_daisy()
289 port->name, s); in cpp_daisy()
293 parport_write_data(port, 0x87); udelay(2); in cpp_daisy()
294 s = parport_read_status(port) & (PARPORT_STATUS_BUSY in cpp_daisy()
300 port->name, s); in cpp_daisy()
304 parport_write_data(port, 0x78); udelay(2); in cpp_daisy()
305 parport_write_data(port, cmd); udelay(2); in cpp_daisy()
306 parport_frob_control(port, in cpp_daisy()
310 s = parport_read_status(port); in cpp_daisy()
311 parport_frob_control(port, PARPORT_CONTROL_STROBE, 0); in cpp_daisy()
313 parport_write_data(port, 0xff); udelay(2); in cpp_daisy()
319 static int cpp_mux(struct parport *port, int cmd) in cpp_mux() argument
324 parport_data_forward(port); in cpp_mux()
325 parport_write_data(port, 0xaa); udelay(2); in cpp_mux()
326 parport_write_data(port, 0x55); udelay(2); in cpp_mux()
327 parport_write_data(port, 0xf0); udelay(2); in cpp_mux()
328 parport_write_data(port, 0x0f); udelay(2); in cpp_mux()
329 parport_write_data(port, 0x52); udelay(2); in cpp_mux()
330 parport_write_data(port, 0xad); udelay(2); in cpp_mux()
331 parport_write_data(port, cmd); udelay(2); in cpp_mux()
333 s = parport_read_status(port); in cpp_mux()
336 port->name, cmd, s); in cpp_mux()
348 void parport_daisy_deselect_all(struct parport *port) in parport_daisy_deselect_all() argument
350 cpp_daisy(port, 0x30); in parport_daisy_deselect_all()
353 int parport_daisy_select(struct parport *port, int daisy, int mode) in parport_daisy_select() argument
361 return !(cpp_daisy(port, 0x20 + daisy) & in parport_daisy_select()
368 return !(cpp_daisy(port, 0xd0 + daisy) & in parport_daisy_select()
379 return !(cpp_daisy(port, 0xe0 + daisy) & in parport_daisy_select()
384 static int mux_present(struct parport *port) in mux_present() argument
386 return cpp_mux(port, 0x51) == 3; in mux_present()
389 static int num_mux_ports(struct parport *port) in num_mux_ports() argument
391 return cpp_mux(port, 0x58); in num_mux_ports()
394 static int select_port(struct parport *port) in select_port() argument
396 int muxport = port->muxport; in select_port()
397 return cpp_mux(port, 0x60 + muxport) == muxport; in select_port()
400 static int assign_addrs(struct parport *port) in assign_addrs() argument
408 parport_data_forward(port); in assign_addrs()
409 parport_write_data(port, 0xaa); udelay(2); in assign_addrs()
410 parport_write_data(port, 0x55); udelay(2); in assign_addrs()
411 parport_write_data(port, 0x00); udelay(2); in assign_addrs()
412 parport_write_data(port, 0xff); udelay(2); in assign_addrs()
413 s = parport_read_status(port) & (PARPORT_STATUS_BUSY in assign_addrs()
422 port->name, s); in assign_addrs()
426 parport_write_data(port, 0x87); udelay(2); in assign_addrs()
427 s = parport_read_status(port) & (PARPORT_STATUS_BUSY in assign_addrs()
433 port->name, s); in assign_addrs()
437 parport_write_data(port, 0x78); udelay(2); in assign_addrs()
438 s = parport_read_status(port); in assign_addrs()
445 parport_write_data(port, daisy); in assign_addrs()
447 parport_frob_control(port, in assign_addrs()
451 parport_frob_control(port, PARPORT_CONTROL_STROBE, 0); in assign_addrs()
454 add_dev(numdevs++, port, daisy); in assign_addrs()
465 s = parport_read_status(port); in assign_addrs()
468 parport_write_data(port, 0xff); udelay(2); in assign_addrs()
470 DPRINTK(KERN_DEBUG "%s: Found %d daisy-chained devices\n", port->name, in assign_addrs()