mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
Revert "serial:serial_core: Allow use of CTS for PPS line discipline"
This reverts commit c550f01c81
.
Turns out the samsung tty driver is mucking around in the "unused" port
fields and this patch breaks that code :(
So we need to fix that driver up before this can be accepted.
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
aad2d4952d
commit
817e9bc8cc
@ -154,12 +154,3 @@ Description:
|
||||
device specification. For example, when user sets 7bytes on
|
||||
16550A, which has 1/4/8/14 bytes trigger, the RX trigger is
|
||||
automatically changed to 4 bytes.
|
||||
|
||||
What: /sys/class/tty/ttyS0/pps_4wire
|
||||
Date: September 2018
|
||||
Contact: Steve Sakoman <steve@sakoman.com>
|
||||
Description:
|
||||
Shows/sets "4 wire" mode for the PPS input to the serial driver.
|
||||
For fully implemented serial ports PPS is normally provided
|
||||
on the DCD line. For partial "4 wire" implementations CTS is
|
||||
used instead of DCD.
|
||||
|
@ -2724,57 +2724,6 @@ static ssize_t uart_get_attr_iomem_reg_shift(struct device *dev,
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n", tmp.iomem_reg_shift);
|
||||
}
|
||||
|
||||
static ssize_t pps_4wire_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct tty_port *port = dev_get_drvdata(dev);
|
||||
struct uart_state *state = container_of(port, struct uart_state, port);
|
||||
struct uart_port *uport;
|
||||
int mode = 0;
|
||||
|
||||
mutex_lock(&port->mutex);
|
||||
uport = uart_port_check(state);
|
||||
if (!uport)
|
||||
goto out;
|
||||
|
||||
mode = uport->pps_4wire;
|
||||
|
||||
out:
|
||||
mutex_unlock(&port->mutex);
|
||||
return sprintf(buf, mode ? "yes\n" : "no\n");
|
||||
}
|
||||
|
||||
static ssize_t pps_4wire_store(struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
struct tty_port *port = dev_get_drvdata(dev);
|
||||
struct uart_state *state = container_of(port, struct uart_state, port);
|
||||
struct uart_port *uport;
|
||||
bool mode;
|
||||
int ret;
|
||||
|
||||
if (!count)
|
||||
return -EINVAL;
|
||||
|
||||
ret = kstrtobool(buf, &mode);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
mutex_lock(&port->mutex);
|
||||
uport = uart_port_check(state);
|
||||
if (!uport)
|
||||
goto out;
|
||||
|
||||
spin_lock_irq(&uport->lock);
|
||||
uport->pps_4wire = mode;
|
||||
spin_unlock_irq(&uport->lock);
|
||||
|
||||
out:
|
||||
mutex_unlock(&port->mutex);
|
||||
return count;
|
||||
}
|
||||
static DEVICE_ATTR_RW(pps_4wire);
|
||||
|
||||
static DEVICE_ATTR(type, S_IRUSR | S_IRGRP, uart_get_attr_type, NULL);
|
||||
static DEVICE_ATTR(line, S_IRUSR | S_IRGRP, uart_get_attr_line, NULL);
|
||||
static DEVICE_ATTR(port, S_IRUSR | S_IRGRP, uart_get_attr_port, NULL);
|
||||
@ -2803,7 +2752,6 @@ static struct attribute *tty_dev_attrs[] = {
|
||||
&dev_attr_io_type.attr,
|
||||
&dev_attr_iomem_base.attr,
|
||||
&dev_attr_iomem_reg_shift.attr,
|
||||
&dev_attr_pps_4wire.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
@ -2860,9 +2808,6 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* assert that pps handling is done via DCD as default */
|
||||
uport->pps_4wire = 0;
|
||||
|
||||
/*
|
||||
* If this port is a console, then the spinlock is already
|
||||
* initialised.
|
||||
@ -3038,7 +2983,7 @@ void uart_handle_dcd_change(struct uart_port *uport, unsigned int status)
|
||||
|
||||
lockdep_assert_held_once(&uport->lock);
|
||||
|
||||
if (tty && !uport->pps_4wire) {
|
||||
if (tty) {
|
||||
ld = tty_ldisc_ref(tty);
|
||||
if (ld) {
|
||||
if (ld->ops->dcd_change)
|
||||
@ -3067,21 +3012,8 @@ EXPORT_SYMBOL_GPL(uart_handle_dcd_change);
|
||||
*/
|
||||
void uart_handle_cts_change(struct uart_port *uport, unsigned int status)
|
||||
{
|
||||
struct tty_port *port = &uport->state->port;
|
||||
struct tty_struct *tty = port->tty;
|
||||
struct tty_ldisc *ld;
|
||||
|
||||
lockdep_assert_held_once(&uport->lock);
|
||||
|
||||
if (tty && uport->pps_4wire) {
|
||||
ld = tty_ldisc_ref(tty);
|
||||
if (ld) {
|
||||
if (ld->ops->dcd_change)
|
||||
ld->ops->dcd_change(tty, status);
|
||||
tty_ldisc_deref(ld);
|
||||
}
|
||||
}
|
||||
|
||||
uport->icount.cts++;
|
||||
|
||||
if (uart_softcts_mode(uport)) {
|
||||
|
@ -257,8 +257,7 @@ struct uart_port {
|
||||
struct device *dev; /* parent device */
|
||||
unsigned char hub6; /* this should be in the 8250 driver */
|
||||
unsigned char suspended;
|
||||
unsigned char pps_4wire; /* CTS instead of DCD */
|
||||
unsigned char unused;
|
||||
unsigned char unused[2];
|
||||
const char *name; /* port name */
|
||||
struct attribute_group *attr_group; /* port specific attributes */
|
||||
const struct attribute_group **tty_groups; /* all attributes (serial core use only) */
|
||||
|
Loading…
Reference in New Issue
Block a user