staging: speakup: make ttyio synths use device name
authorOkash Khawaja <okash.khawaja@gmail.com>
Sun, 25 Jun 2017 18:40:02 +0000 (19:40 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 Jun 2017 07:12:33 +0000 (09:12 +0200)
This patch introduces new module parameter, dev, which takes a string
representing the device that the external synth is connected to, e.g.
ttyS0, ttyUSB0 etc. This is then used to communicate with the synth.
That way, speakup can support more than ttyS*. As of this patch, it
only supports ttyS*, ttyUSB* and selected synths for lp*. dev parameter
is only available for tty-migrated synths.

Users will either use dev or ser as both serve same purpose. This patch
maintains backward compatility by allowing ser to be specified. When
both are specified, whichever is non-default, i.e. not ttyS0, is used.
If both are non-default then dev is used.

Signed-off-by: Okash Khawaja <okash.khawaja@gmail.com>
Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/speakup/speakup_acntsa.c
drivers/staging/speakup/speakup_apollo.c
drivers/staging/speakup/speakup_audptr.c
drivers/staging/speakup/speakup_bns.c
drivers/staging/speakup/speakup_decext.c
drivers/staging/speakup/speakup_dectlk.c
drivers/staging/speakup/speakup_dummy.c
drivers/staging/speakup/speakup_ltlk.c
drivers/staging/speakup/speakup_spkout.c
drivers/staging/speakup/speakup_txprt.c
drivers/staging/speakup/spk_ttyio.c

index 6e4f873eddbc8e2d2dd7e12a8c3d75bb3ba1f70b..0e10404e2e8c0fd45e7c976038cf60354a98dfa7 100644 (file)
@@ -96,6 +96,7 @@ static struct spk_synth synth_acntsa = {
        .trigger = 50,
        .jiffies = 30,
        .full = 40000,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -135,9 +136,11 @@ static int synth_probe(struct spk_synth *synth)
 }
 
 module_param_named(ser, synth_acntsa.ser, int, 0444);
+module_param_named(dev, synth_acntsa.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_acntsa.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_acntsa);
index 7d99fba734b5482396375f350f9619b3e4a64c27..2edb56c8a5594941e110ae08ee577ca95d89784a 100644 (file)
@@ -105,6 +105,7 @@ static struct spk_synth synth_apollo = {
        .trigger = 50,
        .jiffies = 50,
        .full = 40000,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -199,9 +200,11 @@ static void do_catch_up(struct spk_synth *synth)
 }
 
 module_param_named(ser, synth_apollo.ser, int, 0444);
+module_param_named(dev, synth_apollo.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_apollo.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_apollo);
index 1ca476087ba3ba4b8b0a4f6d0d1cc537a4eed589..8ae826eba71cad167d8d50c7b9b344e4d5f7a745 100644 (file)
@@ -100,6 +100,7 @@ static struct spk_synth synth_audptr = {
        .trigger = 50,
        .jiffies = 30,
        .full = 18000,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -162,9 +163,11 @@ static int synth_probe(struct spk_synth *synth)
 }
 
 module_param_named(ser, synth_audptr.ser, int, 0444);
+module_param_named(dev, synth_audptr.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_audptr.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_audptr);
index 474c12770ff65d41e82f49566c4de4960904f1c9..60bcf0df8123c28350435494a56eef33dc838ade 100644 (file)
@@ -93,6 +93,7 @@ static struct spk_synth synth_bns = {
        .trigger = 50,
        .jiffies = 50,
        .full = 40000,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -119,9 +120,11 @@ static struct spk_synth synth_bns = {
 };
 
 module_param_named(ser, synth_bns.ser, int, 0444);
+module_param_named(dev, synth_bns.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_bns.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_bns);
index bf44ac988bf88cb75e78baeeb84b41a36e7b9beb..95f4b2116d0c69de1becd2ce26575a72f47a6043 100644 (file)
@@ -120,6 +120,7 @@ static struct spk_synth synth_decext = {
        .jiffies = 50,
        .full = 40000,
        .flags = SF_DEC,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -226,9 +227,11 @@ static void synth_flush(struct spk_synth *synth)
 }
 
 module_param_named(ser, synth_decext.ser, int, 0444);
+module_param_named(dev, synth_decext.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_decext.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_decext);
index ccb3bdf58e2a0cbc00d2c87c0da449fbaf63688e..f069954800226a2345b3a4a7157c5eb37f79e543 100644 (file)
@@ -124,6 +124,7 @@ static struct spk_synth synth_dectlk = {
        .trigger = 50,
        .jiffies = 50,
        .full = 40000,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -298,9 +299,11 @@ static void synth_flush(struct spk_synth *synth)
 }
 
 module_param_named(ser, synth_dectlk.ser, int, 0444);
+module_param_named(dev, synth_dectlk.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_dectlk.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_dectlk);
index 3fdc768c84542cdd8d418ed5f5dd2090026d64f7..851953d5eefb1efddf89f2b38967bc9d770a8df5 100644 (file)
@@ -95,6 +95,7 @@ static struct spk_synth synth_dummy = {
        .trigger = 50,
        .jiffies = 50,
        .full = 40000,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -121,9 +122,11 @@ static struct spk_synth synth_dummy = {
 };
 
 module_param_named(ser, synth_dummy.ser, int, 0444);
+module_param_named(dev, synth_dummy.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_dummy.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_dummy);
index 9606224bc4d613a48b715b8ab09cae52c718fbf7..423795f88f53208d748c84898fd5699fde204657 100644 (file)
@@ -107,6 +107,7 @@ static struct spk_synth synth_ltlk = {
        .trigger = 50,
        .jiffies = 50,
        .full = 40000,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -166,9 +167,11 @@ static int synth_probe(struct spk_synth *synth)
 }
 
 module_param_named(ser, synth_ltlk.ser, int, 0444);
+module_param_named(dev, synth_ltlk.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_ltlk.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_ltlk);
index 086d5349d8d8b26a64b4b47b856e738a16bfccab..9ca21edc42ce9f3d712aed438cfa2f588c72be8a 100644 (file)
@@ -98,6 +98,7 @@ static struct spk_synth synth_spkout = {
        .trigger = 50,
        .jiffies = 50,
        .full = 40000,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -130,9 +131,11 @@ static void synth_flush(struct spk_synth *synth)
 }
 
 module_param_named(ser, synth_spkout.ser, int, 0444);
+module_param_named(dev, synth_spkout.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_spkout.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_spkout);
index e4c1b5424f94d4a580b41fdc107633e9a34ae0f9..831ee404e7a1359a0a1d9db2607010d910c950fc 100644 (file)
@@ -92,6 +92,7 @@ static struct spk_synth synth_txprt = {
        .trigger = 50,
        .jiffies = 50,
        .full = 40000,
+       .dev_name = SYNTH_DEFAULT_DEV,
        .startup = SYNTH_START,
        .checkval = SYNTH_CHECK,
        .vars = vars,
@@ -118,9 +119,11 @@ static struct spk_synth synth_txprt = {
 };
 
 module_param_named(ser, synth_txprt.ser, int, 0444);
+module_param_named(dev, synth_txprt.dev_name, charp, S_IRUGO);
 module_param_named(start, synth_txprt.startup, short, 0444);
 
 MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based).");
+MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer.");
 MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded.");
 
 module_spk_synth(synth_txprt);
index 0a5436706e74c2ecf7402f52556c28b6fbaa7e2a..442f191a017eac9c039a3a4666172606699c13eb 100644 (file)
@@ -147,11 +147,12 @@ static inline void get_termios(struct tty_struct *tty, struct ktermios *out_term
        up_read(&tty->termios_rwsem);
 }
 
-static int spk_ttyio_initialise_ldisc(int ser)
+static int spk_ttyio_initialise_ldisc(struct spk_synth *synth)
 {
        int ret = 0;
        struct tty_struct *tty;
        struct ktermios tmp_termios;
+       dev_t dev;
 
        ret = tty_register_ldisc(N_SPEAKUP, &spk_ttyio_ldisc_ops);
        if (ret) {
@@ -159,13 +160,11 @@ static int spk_ttyio_initialise_ldisc(int ser)
                return ret;
        }
 
-       if (ser < 0 || ser > (255 - 64)) {
-               pr_err("speakup: Invalid ser param. Must be between 0 and 191 inclusive.\n");
-               return -EINVAL;
-       }
+       ret = get_dev_to_use(synth, &dev);
+       if (ret)
+               return ret;
 
-       /* TODO: support more than ttyS* */
-       tty = tty_open_by_driver(MKDEV(4, (ser +  64)), NULL, NULL);
+       tty = tty_open_by_driver(dev, NULL, NULL);
        if (IS_ERR(tty))
                return PTR_ERR(tty);
 
@@ -277,7 +276,7 @@ static void spk_ttyio_flush_buffer(void)
 
 int spk_ttyio_synth_probe(struct spk_synth *synth)
 {
-       int rv = spk_ttyio_initialise_ldisc(synth->ser);
+       int rv = spk_ttyio_initialise_ldisc(synth);
 
        if (rv)
                return rv;