mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 15:12:13 +02:00
sc16is7xx: Update status lines in single call
RTS, DTR and LOOP bits can be updated in a single MCR register update. This reduces the number of (slow) SPI/I2C bus transactions. Signed-off-by: Lech Perczak <l.perczak@camlintechnologies.com> Signed-off-by: Tomasz Moń <tomasz.mon@camlingroup.com> Link: https://lore.kernel.org/r/20220221105618.3503470-3-tomasz.mon@camlingroup.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
c112653b89
commit
6cca8f154a
|
|
@ -784,19 +784,24 @@ static void sc16is7xx_reg_proc(struct kthread_work *ws)
|
|||
spin_unlock_irqrestore(&one->port.lock, irqflags);
|
||||
|
||||
if (config.flags & SC16IS7XX_RECONF_MD) {
|
||||
u8 mcr = 0;
|
||||
|
||||
/* Device ignores RTS setting when hardware flow is enabled */
|
||||
if (one->port.mctrl & TIOCM_RTS)
|
||||
mcr |= SC16IS7XX_MCR_RTS_BIT;
|
||||
|
||||
if (one->port.mctrl & TIOCM_DTR)
|
||||
mcr |= SC16IS7XX_MCR_DTR_BIT;
|
||||
|
||||
if (one->port.mctrl & TIOCM_LOOP)
|
||||
mcr |= SC16IS7XX_MCR_LOOP_BIT;
|
||||
sc16is7xx_port_update(&one->port, SC16IS7XX_MCR_REG,
|
||||
SC16IS7XX_MCR_RTS_BIT |
|
||||
SC16IS7XX_MCR_DTR_BIT |
|
||||
SC16IS7XX_MCR_LOOP_BIT,
|
||||
(one->port.mctrl & TIOCM_LOOP) ?
|
||||
SC16IS7XX_MCR_LOOP_BIT : 0);
|
||||
sc16is7xx_port_update(&one->port, SC16IS7XX_MCR_REG,
|
||||
SC16IS7XX_MCR_RTS_BIT,
|
||||
(one->port.mctrl & TIOCM_RTS) ?
|
||||
SC16IS7XX_MCR_RTS_BIT : 0);
|
||||
sc16is7xx_port_update(&one->port, SC16IS7XX_MCR_REG,
|
||||
SC16IS7XX_MCR_DTR_BIT,
|
||||
(one->port.mctrl & TIOCM_DTR) ?
|
||||
SC16IS7XX_MCR_DTR_BIT : 0);
|
||||
mcr);
|
||||
}
|
||||
|
||||
if (config.flags & SC16IS7XX_RECONF_IER)
|
||||
sc16is7xx_port_update(&one->port, SC16IS7XX_IER_REG,
|
||||
config.ier_clear, 0);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user