sc16is7xx: IrDA mode and threaded IRQs
Subsystems (2)
v4 cover sc16is7xx: IrDA mode and threaded IRQs
This is a resend of the first two patches of the series to bring IrDA support to the sc16is7xx driver.
The "linux," prefix is now dropped from the DT property.
The patches are rebased on top of the other 4 that have already been merged.
Pascal Huerst (2):
dt-bindings: sc16is7xx: Add flag to activate IrDA mode
sc16is7xx: Add flag to activate IrDA mode
.../bindings/serial/nxp,sc16is7xx.txt | 4 ++++ drivers/tty/serial/sc16is7xx.c | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+)
Signature · 1 line
2.26.2
PATCH v4 1/2 dt-bindings: sc16is7xx: Add flag to activate IrDA mode
From: Pascal Huerst <[email protected]>
This series of uart controllers is able to work in IrDA mode. This adds a property to the device tree to enable that feature on selected ports if needed.
--- Documentation/devicetree/bindings/serial/nxp,sc16is7xx.txt | 4 ++++ 1 file changed, 4 insertions(+)
Documentation/devicetree/bindings/serial/nxp,sc16is7xx.txt +4 -0
@@ -21,6 +21,8 @@ Optional properties: the second cell is used to specify the GPIO polarity: 0 = active high, 1 = active low. +- irda-mode-ports: An array that lists the indices of the port that + should operate in IrDA mode. Example: sc16is750: sc16is750@51 {
@@ -55,6 +57,8 @@ Optional properties: the second cell is used to specify the GPIO polarity: 0 = active high, 1 = active low. +- irda-mode-ports: An array that lists the indices of the port that + should operate in IrDA mode. Example: sc16is750: sc16is750@0 {
Signature · 1 line
2.26.2
PATCH v4 2/2 sc16is7xx: Add flag to activate IrDA mode
In reply to Daniel MackFrom: Pascal Huerst <[email protected]>
This series of uart controllers is able to work in IrDA mode. Add per-port flag to the device-tree to enable that feature if needed.
--- drivers/tty/serial/sc16is7xx.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
drivers/tty/serial/sc16is7xx.c +20 -0
@@ -315,6 +315,7 @@ struct sc16is7xx_one {struct kthread_work tx_work;struct kthread_work reg_work;struct sc16is7xx_one_config config; +bool irda_mode; };struct sc16is7xx_port {
@@ -986,6 +987,7 @@ static int sc16is7xx_config_rs485(struct uart_port *port,static int sc16is7xx_startup (struct uart_port *port) { +struct sc16is7xx_one *one =to_sc16is7xx_one (port, port);struct sc16is7xx_port *s =dev_get_drvdata (port->dev);unsigned int val;
@@ -1024,6 +1026,13 @@ static int sc16is7xx_startup(struct uart_port *port)/* Now, initialize the UART */ sc16is7xx_port_write (port,SC16IS7XX_LCR_REG ,SC16IS7XX_LCR_WORD_LEN_8 ); +/* Enable IrDA mode if requested in DT */ +/* This bit must be written with LCR[7] = 0 */ +sc16is7xx_port_update (port,SC16IS7XX_MCR_REG , +SC16IS7XX_MCR_IRDA_BIT , + one->irda_mode ? +SC16IS7XX_MCR_IRDA_BIT :0 ); +/* Enable the Rx and Tx FIFO */ sc16is7xx_port_update(port, SC16IS7XX_EFCR_REG, SC16IS7XX_EFCR_RXDISABLE_BIT |
@@ -1304,6 +1313,17 @@ static int sc16is7xx_probe(struct device *dev,sc16is7xx_power (&s->p[i].port,0 ); } +if (dev->of_node) { +struct property *prop; +const __be32 *p; +u32 u; + +of_property_for_each_u32 (dev->of_node,"irda-mode-ports" , + prop, p, u) +if (u < devtype->nr_uart) + s->p[u].irda_mode = true; + } +/* * Setup interrupt. We first try to acquire the IRQ line as level IRQ. * If that succeeds, we can allow sharing the interrupt as well.
Signature · 1 line
2.26.2