diff options
Diffstat (limited to 'net/bluetooth/rfcomm/tty.c')
| -rw-r--r-- | net/bluetooth/rfcomm/tty.c | 26 | 
1 files changed, 11 insertions, 15 deletions
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c index 376ce6de84be..b783526ab588 100644 --- a/net/bluetooth/rfcomm/tty.c +++ b/net/bluetooth/rfcomm/tty.c @@ -643,8 +643,8 @@ static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)  		tty_port_tty_hangup(&dev->port, true);  	dev->modem_status = -		((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) | -		((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) | +		((v24_sig & RFCOMM_V24_RTC) ? TIOCM_DSR : 0) | +		((v24_sig & RFCOMM_V24_RTR) ? TIOCM_CTS : 0) |  		((v24_sig & RFCOMM_V24_IC)  ? TIOCM_RI : 0) |  		((v24_sig & RFCOMM_V24_DV)  ? TIOCM_CD : 0);  } @@ -1055,10 +1055,14 @@ static void rfcomm_tty_hangup(struct tty_struct *tty)  static int rfcomm_tty_tiocmget(struct tty_struct *tty)  {  	struct rfcomm_dev *dev = tty->driver_data; +	struct rfcomm_dlc *dlc = dev->dlc; +	u8 v24_sig;  	BT_DBG("tty %p dev %p", tty, dev); -	return dev->modem_status; +	rfcomm_dlc_get_modem_status(dlc, &v24_sig); + +	return (v24_sig & (TIOCM_DTR | TIOCM_RTS)) | dev->modem_status;  }  static int rfcomm_tty_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear) @@ -1071,23 +1075,15 @@ static int rfcomm_tty_tiocmset(struct tty_struct *tty, unsigned int set, unsigne  	rfcomm_dlc_get_modem_status(dlc, &v24_sig); -	if (set & TIOCM_DSR || set & TIOCM_DTR) +	if (set & TIOCM_DTR)  		v24_sig |= RFCOMM_V24_RTC; -	if (set & TIOCM_RTS || set & TIOCM_CTS) +	if (set & TIOCM_RTS)  		v24_sig |= RFCOMM_V24_RTR; -	if (set & TIOCM_RI) -		v24_sig |= RFCOMM_V24_IC; -	if (set & TIOCM_CD) -		v24_sig |= RFCOMM_V24_DV; -	if (clear & TIOCM_DSR || clear & TIOCM_DTR) +	if (clear & TIOCM_DTR)  		v24_sig &= ~RFCOMM_V24_RTC; -	if (clear & TIOCM_RTS || clear & TIOCM_CTS) +	if (clear & TIOCM_RTS)  		v24_sig &= ~RFCOMM_V24_RTR; -	if (clear & TIOCM_RI) -		v24_sig &= ~RFCOMM_V24_IC; -	if (clear & TIOCM_CD) -		v24_sig &= ~RFCOMM_V24_DV;  	rfcomm_dlc_set_modem_status(dlc, v24_sig);  | 
