Commit 98267d33 authored by Andrew Jackson's avatar Andrew Jackson Committed by Greg Kroah-Hartman

serial: pl011: Add device tree support for RX DMA polling

Add equivalent attributes to those provided in the platform data
for use when RX DMA is enabled.
Signed-off-by: default avatarAndrew Jackson <Andrew.Jackson@arm.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2d3b7d6e
...@@ -6,12 +6,17 @@ Required properties: ...@@ -6,12 +6,17 @@ Required properties:
- interrupts: exactly one interrupt specifier - interrupts: exactly one interrupt specifier
Optional properties: Optional properties:
- pinctrl: When present, must have one state named "sleep" - pinctrl: When present, must have one state named "sleep"
and one state named "default" and one state named "default"
- clocks: When present, must refer to exactly one clock named - clocks: When present, must refer to exactly one clock named
"apb_pclk" "apb_pclk"
- dmas: When present, may have one or two dma channels. - dmas: When present, may have one or two dma channels.
The first one must be named "rx", the second one The first one must be named "rx", the second one
must be named "tx". must be named "tx".
- auto-poll: Enables polling when using RX DMA.
- poll-rate-ms: Rate at which poll occurs when auto-poll is set,
default 100ms.
- poll-timeout-ms: Poll timeout when auto-poll is set, default
3000ms.
See also bindings/arm/primecell.txt See also bindings/arm/primecell.txt
...@@ -341,6 +341,7 @@ static void pl011_dma_probe_initcall(struct device *dev, struct uart_amba_port * ...@@ -341,6 +341,7 @@ static void pl011_dma_probe_initcall(struct device *dev, struct uart_amba_port *
dmaengine_slave_config(chan, &rx_conf); dmaengine_slave_config(chan, &rx_conf);
uap->dmarx.chan = chan; uap->dmarx.chan = chan;
uap->dmarx.auto_poll_rate = false;
if (plat && plat->dma_rx_poll_enable) { if (plat && plat->dma_rx_poll_enable) {
/* Set poll rate if specified. */ /* Set poll rate if specified. */
if (plat->dma_rx_poll_rate) { if (plat->dma_rx_poll_rate) {
...@@ -361,9 +362,24 @@ static void pl011_dma_probe_initcall(struct device *dev, struct uart_amba_port * ...@@ -361,9 +362,24 @@ static void pl011_dma_probe_initcall(struct device *dev, struct uart_amba_port *
plat->dma_rx_poll_timeout; plat->dma_rx_poll_timeout;
else else
uap->dmarx.poll_timeout = 3000; uap->dmarx.poll_timeout = 3000;
} else } else if (!plat && dev->of_node) {
uap->dmarx.auto_poll_rate = false; uap->dmarx.auto_poll_rate = of_property_read_bool(
dev->of_node, "auto-poll");
if (uap->dmarx.auto_poll_rate) {
u32 x;
if (0 == of_property_read_u32(dev->of_node,
"poll-rate-ms", &x))
uap->dmarx.poll_rate = x;
else
uap->dmarx.poll_rate = 100;
if (0 == of_property_read_u32(dev->of_node,
"poll-timeout-ms", &x))
uap->dmarx.poll_timeout = x;
else
uap->dmarx.poll_timeout = 3000;
}
}
dev_info(uap->port.dev, "DMA channel RX %s\n", dev_info(uap->port.dev, "DMA channel RX %s\n",
dma_chan_name(uap->dmarx.chan)); dma_chan_name(uap->dmarx.chan));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment