@@ -10,6 +10,8 @@ Required properties:
Optional properties:
- atmel,use-dma-rx: use of PDC or DMA for receiving data
- atmel,use-dma-tx: use of PDC or DMA for transmitting data
+- rts-gpios: specify a GPIO for RTS line. It will use specified PIO instead of the peripheral
+ function pin for the USART RTS feature. If unsure, don't specify this property.
- add dma bindings for dma transfer:
- dmas: DMA specifier, consisting of a phandle to DMA controller node,
memory peripheral interface and USART DMA channel ID, FIFO configuration.
@@ -28,6 +30,7 @@ Example:
interrupts = <7>;
atmel,use-dma-rx;
atmel,use-dma-tx;
+ rts-gpios = <&pioD 15 0>;
};
- use DMA:
@@ -35,6 +35,7 @@
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/of_device.h>
+#include <linux/of_gpio.h>
#include <linux/dma-mapping.h>
#include <linux/atmel_pdc.h>
#include <linux/atmel_serial.h>
@@ -2364,13 +2365,17 @@ static int atmel_serial_probe(struct platform_device *pdev)
* structs to indicate "no RTS GPIO" instead of open-coding some
* invalid value everywhere.
*/
- if (pdata->rts_gpio > 0) {
- ret = devm_gpio_request(&pdev->dev, pdata->rts_gpio, "RTS");
+ if (pdata && pdata->rts_gpio > 0)
+ port->rts_gpio = pdata->rts_gpio;
+ else if (np)
+ port->rts_gpio = of_get_named_gpio(np, "rts-gpios", 0);
+
+ if (gpio_is_valid(port->rts_gpio)) {
+ ret = devm_gpio_request(&pdev->dev, port->rts_gpio, "RTS");
if (ret) {
dev_err(&pdev->dev, "error requesting RTS GPIO\n");
goto err;
}
- port->rts_gpio = pdata->rts_gpio;
ret = gpio_direction_output(port->rts_gpio, 0);
if (ret) {
dev_err(&pdev->dev, "error setting up RTS GPIO\n");
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> --- Documentation/devicetree/bindings/serial/atmel-usart.txt | 3 +++ drivers/tty/serial/atmel_serial.c | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-)