Lines Matching +full:tri +full:- +full:state
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Low-level parallel-support for PC-style hardware integrated in the
4 * LASI-Controller (on GSC-Bus) for HP-PARISC Workstations
6 * (C) 1999-2001 by Helge Deller <deller@gmx.de>
36 #include <asm/parisc-device.h>
42 MODULE_DESCRIPTION("HP-PARISC PC-style parallel port driver");
78 s->u.pc.ctr = 0xc | (dev->irq_func ? 0x10 : 0x0); in parport_gsc_init_state()
83 s->u.pc.ctr = parport_readb (CONTROL (p)); in parport_gsc_save_state()
88 parport_writeb (s->u.pc.ctr, CONTROL (p)); in parport_gsc_restore_state()
128 /* --- Mode detection ------------------------------------- */
145 /* Do a simple read-write test to make sure the port exists. */ in parport_SPP_supported()
164 /* Try the data register. The data lines aren't tri-stated at in parport_SPP_supported()
188 * Some SPP ports have "half PS/2" ability - you can't turn off the line
203 /* try to tri-state the buffer */ in parport_PS2_supported()
216 pb->modes |= PARPORT_MODE_TRISTATE; in parport_PS2_supported()
218 struct parport_gsc_private *priv = pb->private_data; in parport_PS2_supported()
219 priv->ctr_writable &= ~0x20; in parport_PS2_supported()
226 /* --- Initialisation code -------------------------------- */
250 priv->ctr = 0xc; in parport_gsc_probe_port()
251 priv->ctr_writable = 0xff; in parport_gsc_probe_port()
252 p->base = base; in parport_gsc_probe_port()
253 p->base_hi = base_hi; in parport_gsc_probe_port()
254 p->irq = irq; in parport_gsc_probe_port()
255 p->modes = PARPORT_MODE_PCSPP | PARPORT_MODE_SAFEININT; in parport_gsc_probe_port()
256 p->ops = ops; in parport_gsc_probe_port()
257 p->private_data = priv; in parport_gsc_probe_port()
258 p->physport = p; in parport_gsc_probe_port()
274 p->dev = &padev->dev; in parport_gsc_probe_port()
275 p->base_hi = base_hi; in parport_gsc_probe_port()
276 p->modes = tmp.modes; in parport_gsc_probe_port()
277 p->size = (p->modes & PARPORT_MODE_EPP)?8:3; in parport_gsc_probe_port()
278 p->private_data = priv; in parport_gsc_probe_port()
280 pr_info("%s: PC-style at 0x%lx", p->name, p->base); in parport_gsc_probe_port()
281 p->irq = irq; in parport_gsc_probe_port()
282 if (p->irq == PARPORT_IRQ_AUTO) { in parport_gsc_probe_port()
283 p->irq = PARPORT_IRQ_NONE; in parport_gsc_probe_port()
285 if (p->irq != PARPORT_IRQ_NONE) in parport_gsc_probe_port()
286 pr_cont(", irq %d", p->irq); in parport_gsc_probe_port()
291 if (p->modes & PARPORT_MODE_##x) \ in parport_gsc_probe_port()
306 if (p->irq != PARPORT_IRQ_NONE) { in parport_gsc_probe_port()
307 if (request_irq (p->irq, parport_irq_handler, in parport_gsc_probe_port()
308 0, p->name, p)) { in parport_gsc_probe_port()
310 p->name, p->irq); in parport_gsc_probe_port()
311 p->irq = PARPORT_IRQ_NONE; in parport_gsc_probe_port()
315 /* Done probing. Now put the port into a sensible start-up state. */ in parport_gsc_probe_port()
321 found out its characteristics, let the high-level drivers in parport_gsc_probe_port()
338 if (!dev->irq) { in parport_init_chip()
340 (unsigned long long)dev->hpa.start); in parport_init_chip()
341 return -ENODEV; in parport_init_chip()
344 port = dev->hpa.start + PARPORT_GSC_OFFSET; in parport_init_chip()
346 /* some older machines with ASP-chip don't support in parport_init_chip()
351 /* Initialize bidirectional-mode (0x10) & data-tranfer-mode #1 (0x20) */ in parport_init_chip()
352 pr_info("%s: initialize bidirectional-mode\n", __func__); in parport_init_chip()
356 pr_info("%s: enhanced parport-modes not supported\n", __func__); in parport_init_chip()
359 p = parport_gsc_probe_port(port, 0, dev->irq, dev); in parport_init_chip()
362 dev_set_drvdata(&dev->dev, p); in parport_init_chip()
369 struct parport *p = dev_get_drvdata(&dev->dev); in parport_remove_chip()
371 struct parport_operations *ops = p->ops; in parport_remove_chip()
373 if (p->irq != PARPORT_IRQ_NONE) in parport_remove_chip()
374 free_irq(p->irq, p); in parport_remove_chip()
375 kfree (p->private_data); in parport_remove_chip()
377 kfree (ops); /* hope no-one cached it */ in parport_remove_chip()