Lines Matching +full:no +full:- +full:pc +full:- +full:write
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* -*- linux-c -*-
3 * dtlk.c - DoubleTalk PC driver for Linux
8 * 2000-03-18 Jim Van Zandt: Fix polling.
15 /* This driver is for the DoubleTalk PC, a speech synthesizer
20 The DoubleTalk PC contains four voice synthesizers: text-to-speech
30 DoubleTalk PC implement index markers. Both the TTS and LPC ports
33 The DoubleTalk PC generates no interrupts.
38 "write" sends bytes to the TTS port. It is the responsibility of
40 This driver was written for use with the text-to-speech
57 #include <linux/errno.h> /* for -EBUSY */
105 .write = dtlk_write,
134 /* printk("DoubleTalk PC - dtlk_read()\n"); */ in dtlk_read()
137 return -EINVAL; in dtlk_read()
144 return -EFAULT; in dtlk_read()
149 if (file->f_flags & O_NONBLOCK) in dtlk_read()
156 return -EAGAIN; in dtlk_read()
171 return -EFAULT; in dtlk_write()
182 return -EINVAL; in dtlk_write()
198 /* the RDY bit goes zero 2-3 usec in dtlk_write()
200 180-190 usec later. Here, we wait in dtlk_write()
214 if (file->f_flags & O_NONBLOCK) in dtlk_write()
219 if (++retries > 10 * HZ) { /* wait no more than 10 sec in dtlk_write()
220 from last write */ in dtlk_write()
221 printk("dtlk: write timeout. " in dtlk_write()
225 return -EBUSY; in dtlk_write()
229 return -EAGAIN; in dtlk_write()
241 printk("<%ld>", jiffies-j); in dtlk_poll()
254 /* there are no exception conditions */ in dtlk_poll()
285 return -EINVAL; in dtlk_ioctl()
293 return -EINVAL; in dtlk_ioctl()
305 return -EBUSY; in dtlk_open()
309 return -ENXIO; in dtlk_open()
340 printk(KERN_ERR "DoubleTalk PC - cannot register device\n"); in dtlk_init()
371 /* ------------------------------------------------------------------------ */
397 return -EBUSY; in dtlk_dev_probe()
401 printk("DoubleTalk PC - Port %03x = %04x\n", in dtlk_dev_probe()
414 printk("DoubleTalk PC at %03x-%03x, " in dtlk_dev_probe()
417 DTLK_IO_EXTENT - 1, in dtlk_dev_probe()
418 sp->rom_version, sp->serial_number); in dtlk_dev_probe()
497 printk(KERN_INFO "DoubleTalk PC - not found\n"); in dtlk_dev_probe()
498 return -ENODEV; in dtlk_dev_probe()
504 printk(KERN_INFO"\nDoubleTalk PC - MINOR: %d, OPCODE: %d, ERROR: %d\n",
510 /* interrogate the DoubleTalk PC and return its settings */
540 if (i < sizeof(status.rom_version) - 1) in dtlk_interrogate()
602 /* no need to test -- this is only called when the port is readable */ in dtlk_read_lpc()
608 /* acknowledging a read takes 3-4 in dtlk_read_lpc()
612 while (inb_p(dtlk_port_lpc) != 0x7f && --retries > 0); in dtlk_read_lpc()
620 /* write n bytes to tts port */
624 /* printk("dtlk_write_bytes(\"%-*s\", %d)\n", n, buf, n); */ in dtlk_write_bytes()
626 while (n-- > 0) in dtlk_write_bytes()
642 if (ch != DTLK_CLEAR) /* no flow control for CLEAR command */ in dtlk_write_tts()
650 /* the RDY bit goes zero 2-3 usec after writing, and goes in dtlk_write_tts()
651 1 again 180-190 usec later. Here, we wait up to 10 in dtlk_write_tts()