From nobody Thu Sep 24 17:02:55 2026 Received: from sonata.ens-lyon.org (sonata.ens-lyon.org [140.77.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0FE24DE714 for ; Tue, 22 Sep 2026 06:30:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=140.77.166.138 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790058672; cv=none; b=WAnsaUyeSldRiuzNmZvGYP2c4woqQ8H/BYAK8NTaOk2CTDAeX/zWDPCiDnelKRcwdfQgiFR7nNKsiBpt1PIWh9U4PZDVLfhCFGxDL7kP1QZLYk+GQ9Fcv1n0TH5xxtItQukySbKSwO7NIutqdzKY1AsOxb7oYJR0W6qCh9/rYLI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790058672; c=relaxed/simple; bh=8ych7vh/bUCvdKAZ8mScexBW4iPgAwZvpCc332syeiE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Q8NuxOeRgut2GbaIm+csGPs7L1Kj9MAQecqLfxQ2KEYPuWZX/Cgy0+Up8hCqBenslWuAGWG9VdqwPrBXuDMztyyX/2AYiJzjH653fzRaMOcG8kWWVtPo2Oe6JO2+1aodCICpn/mKhg/uuM4Ujnb1MSalh8Q/do1ZU+6A7lT34jw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ens-lyon.org; spf=pass smtp.mailfrom=bounce.ens-lyon.org; dkim=pass (2048-bit key) header.d=ens-lyon.org header.i=@ens-lyon.org header.b=geyAvd+X; dkim=pass (2048-bit key) header.d=ens-lyon.org header.i=@ens-lyon.org header.b=aVxiHD0j; arc=none smtp.client-ip=140.77.166.138 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ens-lyon.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bounce.ens-lyon.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ens-lyon.org header.i=@ens-lyon.org header.b="geyAvd+X"; dkim=pass (2048-bit key) header.d=ens-lyon.org header.i=@ens-lyon.org header.b="aVxiHD0j" Received: from localhost (localhost [127.0.0.1]) by sonata.ens-lyon.org (Postfix) with ESMTP id F1B04A4870; Tue, 22 Sep 2026 08:30:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ens-lyon.org; s=dkim; t=1790058650; bh=8ych7vh/bUCvdKAZ8mScexBW4iPgAwZvpCc332syeiE=; h=From:To:Cc:Subject:Date:From; b=geyAvd+XWfnJ4ptcgYjvffkGklAPL3i5EL4qT/D+AwnB+oJS5AQmNyEMhkxQRdRKF 6/Of4URTG+zcX3ykAl2IziQHDxdDTTCyaBD7a36RDDno46rA//1k7BwUhfd0seSgOG gjAoDV37BOAB0IA1LwGp527s0PdYVBOF3MEbla/ZqLLu4kV+3XL8eWu5YwM6W3YqBp nowSm/Djioea5x+QcARJiOJsl5+LMH1wvDaurFfy1vyd8CdBNU8f3u/gs5z2P04pSj vcscGL82sSIh29XEIFD4wOR2icD8R3OK//D33VILM0jSxGnuSLh6kSMf5TTyFVRg5U twe+588VMv6Ug== Received: from sonata.ens-lyon.org ([127.0.0.1]) by localhost (sonata.ens-lyon.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id eBQ_bYRfzN81; Tue, 22 Sep 2026 08:30:49 +0200 (CEST) Received: from end (unknown [212.133.41.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by sonata.ens-lyon.org (Postfix) with ESMTPSA id A70B6A1B39; Tue, 22 Sep 2026 08:30:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ens-lyon.org; s=dkim; t=1790058649; bh=8ych7vh/bUCvdKAZ8mScexBW4iPgAwZvpCc332syeiE=; h=From:To:Cc:Subject:Date:From; b=aVxiHD0jpXZHz4tSwve4MkH3cVkfLz15oPnNFdAwyYy3loohs0/d8WAOPwHd2APdr OFiImQ228r+uJuUG27nMwBNEdtjePOOtdrBpyEY2xpysw7ttX9u52Zu4Ywgs4rHvw+ 9de9MfEUrL5LrG90gd1uZyMnP4ML1jfJjvhoUEDwLHiQRdmaP5cGtAmG2LHsYVLPUe hy3eVPpLBoMoJeLOKYge09CrHkeT82V1YgqgtAonx1eiyWqXfS0WE5fX4vkQ0K2kt8 wt5f+CVCgVn6m+aI0EPBinH6HfLjPd7hn34HRHBjBYgdtAVQQXKG3HMi5rHIYAElKs RYppMgkcRzsTw== Received: from samy by end with local (Exim 4.100) (envelope-from ) id 1x8u1g-00000005qM4-0Sni; Tue, 22 Sep 2026 08:30:48 +0200 From: Samuel Thibault To: gregkh@linuxfoundation.org Cc: Samuel Thibault , w.d.hubbs@gmail.com, chris@the-brannons.com, kirk@reisers.ca, speakup@linux-speakup.org, linux-kernel@vger.kernel.org Subject: [PATCH] speakup: Drop now-unused serialio operations Date: Tue, 22 Sep 2026 08:30:47 +0200 Message-ID: <20260922063047.1392828-1-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The only users of serialio (acntpc, decpc, dtlk, keypc) don't actually define a read_buff_add method, so start_stop_serial_interrupt were not doing anything. The other functions were not referenced at all any more since bbe6fb5b96bd ("staging: speakup: migrate bns to tty") Signed-off-by: Samuel Thibault --- drivers/accessibility/speakup/serialio.c | 179 ------------------ .../accessibility/speakup/speakup_acntpc.c | 1 - drivers/accessibility/speakup/speakup_decpc.c | 1 - drivers/accessibility/speakup/speakup_dtlk.c | 1 - drivers/accessibility/speakup/speakup_keypc.c | 1 - drivers/accessibility/speakup/spk_priv.h | 6 - 6 files changed, 189 deletions(-) diff --git a/drivers/accessibility/speakup/serialio.c b/drivers/accessibili= ty/speakup/serialio.c index 3418ea31d28f..b8d89dc30704 100644 --- a/drivers/accessibility/speakup/serialio.c +++ b/drivers/accessibility/speakup/serialio.c @@ -17,8 +17,6 @@ #define SERIAL_PORT_DFNS #endif =20 -static void start_serial_interrupt(int irq); - static const struct old_serial_port rs_table[] =3D { SERIAL_PORT_DFNS }; @@ -45,111 +43,6 @@ struct spk_io_ops spk_serial_io_ops =3D { }; EXPORT_SYMBOL_GPL(spk_serial_io_ops); =20 -const struct old_serial_port *spk_serial_init(int index) -{ - int baud =3D 9600, quot =3D 0; - unsigned int cval =3D 0; - int cflag =3D CREAD | HUPCL | CLOCAL | B9600 | CS8; - const struct old_serial_port *ser; - int err; - - if (index >=3D ARRAY_SIZE(rs_table)) { - pr_info("no port info for ttyS%d\n", index); - return NULL; - } - ser =3D rs_table + index; - - /* Divisor, byte size and parity */ - quot =3D ser->baud_base / baud; - cval =3D cflag & (CSIZE | CSTOPB); -#if defined(__powerpc__) || defined(__alpha__) - cval >>=3D 8; -#else /* !__powerpc__ && !__alpha__ */ - cval >>=3D 4; -#endif /* !__powerpc__ && !__alpha__ */ - if (cflag & PARENB) - cval |=3D UART_LCR_PARITY; - if (!(cflag & PARODD)) - cval |=3D UART_LCR_EPAR; - if (synth_request_region(ser->port, 8)) { - /* try to take it back. */ - pr_info("Ports not available, trying to steal them\n"); - __release_region(&ioport_resource, ser->port, 8); - err =3D synth_request_region(ser->port, 8); - if (err) { - pr_warn("Unable to allocate port at %x, errno %i", - ser->port, err); - return NULL; - } - } - - /* Disable UART interrupts, set DTR and RTS high - * and set speed. - */ - outb(cval | UART_LCR_DLAB, ser->port + UART_LCR); /* set DLAB */ - outb(quot & 0xff, ser->port + UART_DLL); /* LS of divisor */ - outb(quot >> 8, ser->port + UART_DLM); /* MS of divisor */ - outb(cval, ser->port + UART_LCR); /* reset DLAB */ - - /* Turn off Interrupts */ - outb(0, ser->port + UART_IER); - outb(UART_MCR_DTR | UART_MCR_RTS, ser->port + UART_MCR); - - /* If we read 0xff from the LSR, there is no UART here. */ - if (inb(ser->port + UART_LSR) =3D=3D 0xff) { - synth_release_region(ser->port, 8); - serstate =3D NULL; - return NULL; - } - - mdelay(1); - speakup_info.port_tts =3D ser->port; - serstate =3D ser; - - start_serial_interrupt(ser->irq); - - return ser; -} - -static irqreturn_t synth_readbuf_handler(int irq, void *dev_id) -{ - unsigned long flags; - int c; - - spin_lock_irqsave(&speakup_info.spinlock, flags); - while (inb_p(speakup_info.port_tts + UART_LSR) & UART_LSR_DR) { - c =3D inb_p(speakup_info.port_tts + UART_RX); - synth->read_buff_add((u_char)c); - } - spin_unlock_irqrestore(&speakup_info.spinlock, flags); - return IRQ_HANDLED; -} - -static void start_serial_interrupt(int irq) -{ - int rv; - - if (!synth->read_buff_add) - return; - - rv =3D request_irq(irq, synth_readbuf_handler, IRQF_SHARED, - "serial", (void *)synth_readbuf_handler); - - if (rv) - pr_err("Unable to request Speakup serial I R Q\n"); - /* Set MCR */ - outb(UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2, - speakup_info.port_tts + UART_MCR); - /* Turn on Interrupts */ - outb(UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI, - speakup_info.port_tts + UART_IER); - inb(speakup_info.port_tts + UART_LSR); - inb(speakup_info.port_tts + UART_RX); - inb(speakup_info.port_tts + UART_IIR); - inb(speakup_info.port_tts + UART_MSR); - outb(1, speakup_info.port_tts + UART_FCR); /* Turn FIFO On */ -} - static void spk_serial_send_xchar(struct spk_synth *synth, char ch) { int timeout =3D SPK_XMITR_TIMEOUT; @@ -169,50 +62,6 @@ static void spk_serial_tiocmset(struct spk_synth *in_sy= nth, unsigned int set, un outb((old & ~clear) | set, speakup_info.port_tts + UART_MCR); } =20 -int spk_serial_synth_probe(struct spk_synth *synth) -{ - const struct old_serial_port *ser; - int failed =3D 0; - - if ((synth->ser >=3D SPK_LO_TTY) && (synth->ser <=3D SPK_HI_TTY)) { - ser =3D spk_serial_init(synth->ser); - if (!ser) { - failed =3D -1; - } else { - outb_p(0, ser->port); - mdelay(1); - outb_p('\r', ser->port); - } - } else { - failed =3D -1; - pr_warn("ttyS%i is an invalid port\n", synth->ser); - } - if (failed) { - pr_info("%s: not found\n", synth->long_name); - return -ENODEV; - } - pr_info("%s: ttyS%i, Driver Version %s\n", - synth->long_name, synth->ser, synth->version); - synth->alive =3D 1; - return 0; -} -EXPORT_SYMBOL_GPL(spk_serial_synth_probe); - -void spk_stop_serial_interrupt(void) -{ - if (speakup_info.port_tts =3D=3D 0) - return; - - if (!synth->read_buff_add) - return; - - /* Turn off interrupts */ - outb(0, speakup_info.port_tts + UART_IER); - /* Free IRQ */ - free_irq(serstate->irq, (void *)synth_readbuf_handler); -} -EXPORT_SYMBOL_GPL(spk_stop_serial_interrupt); - static int spk_serial_wait_for_xmitr(struct spk_synth *in_synth) { int tmout =3D SPK_XMITR_TIMEOUT; @@ -288,31 +137,3 @@ static int spk_serial_out(struct spk_synth *in_synth, = const char ch) } return 0; } - -const char *spk_serial_synth_immediate(struct spk_synth *synth, - const char *buff) -{ - u_char ch; - - while ((ch =3D *buff)) { - if (ch =3D=3D '\n') - ch =3D synth->procspeech; - if (spk_serial_wait_for_xmitr(synth)) - outb(ch, speakup_info.port_tts); - else - return buff; - buff++; - } - return NULL; -} -EXPORT_SYMBOL_GPL(spk_serial_synth_immediate); - -void spk_serial_release(struct spk_synth *synth) -{ - spk_stop_serial_interrupt(); - if (speakup_info.port_tts =3D=3D 0) - return; - synth_release_region(speakup_info.port_tts, 8); - speakup_info.port_tts =3D 0; -} -EXPORT_SYMBOL_GPL(spk_serial_release); diff --git a/drivers/accessibility/speakup/speakup_acntpc.c b/drivers/acces= sibility/speakup/speakup_acntpc.c index a27e6bbf05da..1cc6147cafac 100644 --- a/drivers/accessibility/speakup/speakup_acntpc.c +++ b/drivers/accessibility/speakup/speakup_acntpc.c @@ -305,7 +305,6 @@ static int synth_probe(struct spk_synth *synth) =20 static void accent_release(struct spk_synth *synth) { - spk_stop_serial_interrupt(); if (speakup_info.port_tts) synth_release_region(speakup_info.port_tts - 1, SYNTH_IO_EXTENT); diff --git a/drivers/accessibility/speakup/speakup_decpc.c b/drivers/access= ibility/speakup/speakup_decpc.c index 1bf36d1e5477..4837cac8bafa 100644 --- a/drivers/accessibility/speakup/speakup_decpc.c +++ b/drivers/accessibility/speakup/speakup_decpc.c @@ -487,7 +487,6 @@ static int synth_probe(struct spk_synth *synth) =20 static void dtpc_release(struct spk_synth *synth) { - spk_stop_serial_interrupt(); if (speakup_info.port_tts) synth_release_region(speakup_info.port_tts, SYNTH_IO_EXTENT); speakup_info.port_tts =3D 0; diff --git a/drivers/accessibility/speakup/speakup_dtlk.c b/drivers/accessi= bility/speakup/speakup_dtlk.c index fa826568937b..0a57f7ea894c 100644 --- a/drivers/accessibility/speakup/speakup_dtlk.c +++ b/drivers/accessibility/speakup/speakup_dtlk.c @@ -377,7 +377,6 @@ static int synth_probe(struct spk_synth *synth) =20 static void dtlk_release(struct spk_synth *synth) { - spk_stop_serial_interrupt(); if (speakup_info.port_tts) synth_release_region(speakup_info.port_tts - 1, SYNTH_IO_EXTENT); diff --git a/drivers/accessibility/speakup/speakup_keypc.c b/drivers/access= ibility/speakup/speakup_keypc.c index 9356f6379560..1e2edc5c4b8b 100644 --- a/drivers/accessibility/speakup/speakup_keypc.c +++ b/drivers/accessibility/speakup/speakup_keypc.c @@ -306,7 +306,6 @@ static int synth_probe(struct spk_synth *synth) =20 static void keynote_release(struct spk_synth *synth) { - spk_stop_serial_interrupt(); if (synth_port) synth_release_region(synth_port, SYNTH_IO_EXTENT); synth_port =3D 0; diff --git a/drivers/accessibility/speakup/spk_priv.h b/drivers/accessibili= ty/speakup/spk_priv.h index 9da57ead17cb..704ff9f120d3 100644 --- a/drivers/accessibility/speakup/spk_priv.h +++ b/drivers/accessibility/speakup/spk_priv.h @@ -32,9 +32,6 @@ #define SYNTH_DEFAULT_DEV "ttyS0" #define SYNTH_DEFAULT_SER 0 =20 -const struct old_serial_port *spk_serial_init(int index); -void spk_stop_serial_interrupt(void); -void spk_serial_release(struct spk_synth *synth); void spk_ttyio_release(struct spk_synth *synth); void spk_ttyio_register_ldisc(void); void spk_ttyio_unregister_ldisc(void); @@ -49,10 +46,7 @@ ssize_t spk_var_show(struct kobject *kobj, struct kobj_a= ttribute *attr, ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count); =20 -int spk_serial_synth_probe(struct spk_synth *synth); int spk_ttyio_synth_probe(struct spk_synth *synth); -const char *spk_serial_synth_immediate(struct spk_synth *synth, - const char *buff); const char *spk_ttyio_synth_immediate(struct spk_synth *synth, const char *buff); void spk_do_catch_up(struct spk_synth *synth); --=20 2.47.3