On Mon, Apr 03, 2017 at 09:21:23PM +0100, Okash Khawaja wrote: > Hi, > > This patchset migrates synths to use TTY-based comms instead of directly using > serial i/o. The move doesn't cover those synths which do need direct access, > e.g. some which talk over ISA. > > Please note that this patchset applies on top of current staging-next branch of > Greg Kroah-Hartman's tree as that contains some other changes to speakup and > tty drivers that have recently gone in. So the first patch makes ammendments to > TTY code which allows speakup to access and tty device. Next patch adds > spk_ttyio.c which contains TTY-based initialisation and output functionality. > Next patch migrates those synths which only use output: dummy, acntsa, bns and > txprt. Then we add xchar and tiocmset functions. Next we rearrange the code > such that input functionality is grouped under a few methods inside spk_synth > and spk_io_ops structs. That paves the way for simple migration of other synths > to TTY. The final patch does that for apollo, ltlk, audptr, decext, dectlk > and spkout. > > Thanks, > Okash Hi, The staging-next tree wasn't working for me, specially the usb modules. So I took following steps: 1. Switch to kernel versio 4.10.0 (I guess others upto 4.10.8 will be fine) 2. Copy drivers/staging/speakup directory from staging-next tree to overwrite the one in 4.10.0. 3. Use the patch I have attached as the first patch instead of the one in this email series ([patch 1/7] staging: speakup: export tty_open_by_driver). 4. Apply rest of the patches in this patchset. That worked for me. As I have mentioned before, apollo and double talk lt worked fine but I haven't done thorough testing. If you have questions about applying patches, do let me know. Thanks, Okash
[32mIndex: linux-stable/drivers/tty/tty_io.c[00m =================================================================== [32m--- linux-stable.orig/drivers/tty/tty_io.c[00m [32m+++ linux-stable/drivers/tty/tty_io.c[00m [33m@@ -855,7 +855,7 @@[00m[35m[00m int tty_hung_up_p(struct file *filp) { [35m- return (filp->f_op == &hung_up_tty_fops);[00m [36m+ return (filp && filp->f_op == &hung_up_tty_fops);[00m } EXPORT_SYMBOL(tty_hung_up_p); [33m@@ -1368,7 +1368,10 @@[00m[35m[00m struct tty_struct *tty; if (driver->ops->lookup) [35m- tty = driver->ops->lookup(driver, file, idx);[00m [36m+ if (!file)[00m [36m+ tty = ERR_PTR(-EIO);[00m [36m+ else[00m [36m+ tty = driver->ops->lookup(driver, file, idx);[00m else tty = driver->ttys[idx]; [33m@@ -1986,7 +1989,7 @@[00m[35m[00m struct tty_driver *console_driver = console_device(index); if (console_driver) { driver = tty_driver_kref_get(console_driver); [35m- if (driver) {[00m [36m+ if (driver && filp) {[00m /* Don't let /dev/console block */ filp->f_flags |= O_NONBLOCK; break; [33m@@ -2019,7 +2022,7 @@[00m[35m[00m * - concurrent tty driver removal w/ lookup * - concurrent tty removal from driver table */ [35m-static struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode,[00m [36m+struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode,[00m struct file *filp) { struct tty_struct *tty; [33m@@ -2064,6 +2067,7 @@[00m[35m[00m tty_driver_kref_put(driver); return tty; } [36m+EXPORT_SYMBOL(tty_open_by_driver);[00m /** * tty_open - open a tty device [32mIndex: linux-stable/drivers/tty/tty_port.c[00m =================================================================== [32m--- linux-stable.orig/drivers/tty/tty_port.c[00m [32m+++ linux-stable/drivers/tty/tty_port.c[00m [33m@@ -335,7 +335,7 @@[00m[35m[00m * tty_port_block_til_ready - Waiting logic for tty open * @port: the tty port being opened * @tty: the tty device being bound [35m- * @filp: the file pointer of the opener[00m [36m+ * @filp: the file pointer of the opener or NULL[00m * * Implement the core POSIX/SuS tty behaviour when opening a tty device. * Handles: [33m@@ -369,7 +369,7 @@[00m[35m[00m tty_port_set_active(port, 1); return 0; } [35m- if (filp->f_flags & O_NONBLOCK) {[00m [36m+ if (filp == NULL || filp->f_flags & O_NONBLOCK) {[00m /* Indicate we are open */ if (C_BAUD(tty)) tty_port_raise_dtr_rts(port); [32mIndex: linux-stable/include/linux/tty.h[00m =================================================================== [32m--- linux-stable.orig/include/linux/tty.h[00m [32m+++ linux-stable/include/linux/tty.h[00m [33m@@ -394,6 +394,8 @@[00m[35m[00m /* tty_io.c */ extern int __init tty_init(void); extern const char *tty_name(const struct tty_struct *tty); [36m+extern struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode,[00m [36m+ struct file *filp);[00m #else static inline void console_init(void) { }
_______________________________________________ Speakup mailing list Speakup@xxxxxxxxxxxxxxxxx http://linux-speakup.org/cgi-bin/mailman/listinfo/speakup