Driver for at91 usart in spi mode
Subsystems (8)
v2 cover Driver for at91 usart in spi mode
Hello,
This is the second version of driver. I added a mfd driver which by default probes atmel_serial driver and if in dt is specified to probe the spi driver, then the spi-at91-usart driver will be probed. The compatible for atmel_serial is now the compatible for at91-usart mfd driver and compatilbe for atmel_serial driver was changed in order to keep the bindings for serial as they are.
Changes in v1:
- added spi-at91-usart driver
Changes in v2:
- added at91-usart mfd driver
- modified spi-at91-usart driver to work as mfd driver child
- modified atmel_serial driver to work as mfd driver child
Radu Pirea (6):
MAINTAINERS: add at91 usart mfd driver
mfd: at91-usart: added mfd driver for usart
MAINTAINERS: add at91 usart spi driver
dt-bindings: add binding for at91-usart in spi mode
spi: at91-usart: add driver for at91-usart as spi tty/serial: atmel: changed the driver to work under at91-usart mfd
.../bindings/spi/microchip,at91-usart-spi.txt | 28 + MAINTAINERS | 14 + drivers/mfd/Kconfig | 10 + drivers/mfd/Makefile | 1 + drivers/mfd/at91-usart.c | 81 +++ drivers/spi/Kconfig | 9 + drivers/spi/Makefile | 1 + drivers/spi/spi-at91-usart.c | 545 ++++++++++++++++++ drivers/tty/serial/Kconfig | 1 + drivers/tty/serial/atmel_serial.c | 29 +- include/dt-bindings/mfd/at91-usart.h | 17 + 11 files changed, 722 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/spi/microchip,at91-usart-spi.txt create mode 100644 drivers/mfd/at91-usart.c create mode 100644 drivers/spi/spi-at91-usart.c create mode 100644 include/dt-bindings/mfd/at91-usart.h
Signature · 1 line
2.17.0
PATCH v2 1/6 MAINTAINERS: add at91 usart mfd driver
Added entry for at91 usart mfd driver.
--- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+)
MAINTAINERS +7 -0
@@ -9192,6 +9192,13 @@ S: Supported F: drivers/mtd/nand/raw/atmel/* F: Documentation/devicetree/bindings/mtd/atmel-nand.txt +MICROCHIP AT91 USART MFD DRIVER +M: Radu Pirea <[email protected]> +L: [email protected] +S: Supported +F: drivers/mfd/at91-usart.c +F: include/dt-bindings/mfd/at91-usart.h + MICROCHIP KSZ SERIES ETHERNET SWITCH DRIVER M: Woojung Huh <[email protected]> M: Microchip Linux Driver Support <[email protected]>
Signature · 1 line
2.17.0
PATCH v2 2/6 mfd: at91-usart: added mfd driver for usart
In reply to Radu PireaThis mfd driver is just a wrapper over atmel_serial driver and spi-at91-usart driver. Selection of one of the drivers is based on a property from device tree. If the property is not specified, the default driver is atmel_serial.
--- drivers/mfd/Kconfig | 10 ++++ drivers/mfd/Makefile | 1 + drivers/mfd/at91-usart.c | 81 ++++++++++++++++++++++++++++ include/dt-bindings/mfd/at91-usart.h | 17 ++++++ 4 files changed, 109 insertions(+) create mode 100644 drivers/mfd/at91-usart.c create mode 100644 include/dt-bindings/mfd/at91-usart.h
drivers/mfd/Kconfig +10 -0
@@ -99,6 +99,16 @@ config MFD_AAT2870_CORE additional drivers must be enabled in order to use the functionality of the device. +config MFD_AT91_USART + tristate "AT91 USART Driver" + select MFD_CORE + depends on OF + help + Select this to get support for AT91 USART IP. This is a wrapper + over at91-usart-serial driver and usart-spi-driver. Only one function + can be used at a time. The choice is done at boot time by the probe + function of this MFD driver according to a device tree property. + config MFD_ATMEL_FLEXCOM tristate "Atmel Flexcom (Flexible Serial Communication Unit)" select MFD_CORE
drivers/mfd/Makefile +1 -0
@@ -185,6 +185,7 @@ obj-$(CONFIG_MFD_SPMI_PMIC) += qcom-spmi-pmic.o obj-$(CONFIG_TPS65911_COMPARATOR) += tps65911-comparator.o obj-$(CONFIG_MFD_TPS65090) += tps65090.o obj-$(CONFIG_MFD_AAT2870_CORE) += aat2870-core.o +obj-$(CONFIG_MFD_AT91_USART) += at91-usart.o obj-$(CONFIG_MFD_ATMEL_FLEXCOM) += atmel-flexcom.o obj-$(CONFIG_MFD_ATMEL_HLCDC) += atmel-hlcdc.o obj-$(CONFIG_MFD_ATMEL_SMC) += atmel-smc.o
drivers/mfd/at91-usart.c new file +81 -0
81 lines not on this page · raw message
include/dt-bindings/mfd/at91-usart.h new file +17 -0
@@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* +* This header provides macros for AT91 USART DT bindings. +* +* Copyright (C) 2018 Microchip Technology +* +* Author: Radu Pirea <[email protected]> +* +*/ + +#ifndef __DT_BINDINGS_AT91_USART_H__ +#define __DT_BINDINGS_AT91_USART_H__ + +#define AT91_USART_MODE_SERIAL 1 +#define AT91_USART_MODE_SPI 2 + +#endif /* __DT_BINDINGS_AT91_USART_H__ */
Signature · 1 line
2.17.0
PATCH v2 3/6 MAINTAINERS: add at91 usart spi driver
In reply to Radu PireaAdded entry for at91 usart mfd driver.
--- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+)
MAINTAINERS +7 -0
@@ -9199,6 +9199,13 @@ S: Supported F: drivers/mfd/at91-usart.c F: include/dt-bindings/mfd/at91-usart.h +MICROCHIP AT91 USART SPI DRIVER +M: Radu Pirea <[email protected]> +L: [email protected] +S: Supported +F: drivers/spi/spi-at91-usart.c +F: Documentation/devicetree/bindings/spi/microchip,at91-usart-spi.txt + MICROCHIP KSZ SERIES ETHERNET SWITCH DRIVER M: Woojung Huh <[email protected]> M: Microchip Linux Driver Support <[email protected]>
Signature · 1 line
2.17.0
PATCH v2 4/6 dt-bindings: add binding for at91-usart in spi mode
In reply to Radu PireaThese are bindings for at91-usart IP in spi spi mode. There is no support for internal chip select. Only kind of chip selects available are gpio chip selects.
--- .../bindings/spi/microchip,at91-usart-spi.txt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Documentation/devicetree/bindings/spi/microchip,at91-usart-spi.txt
Documentation/devicetree/bindings/spi/microchip,at91-usart-spi.txt new file +28 -0
@@ -0,0 +1,28 @@ +* Universal Synchronous Asynchronous Receiver/Transmitter (USART) in SPI mode + +Required properties: +- #size-cells : Must be <0> +- #address-cells : Must be <1> +- compatible: Should be "atmel,at91rm9200-usart" or "atmel,at91sam9260-usart" +- reg: Should contain registers location and length +- interrupts: Should contain interrupt +- clocks: phandles to input clocks. +- clock-names: tuple listing input clock names. + Required elements: "usart" +- cs-gpios: chipselects (internal cs not supported) +- at91,usart-mode: AT91_USART_MODE_SPI (found in dt-bindings/mfd/at91-usart.h) + +Example: + #include <dt-bindings/mfd/at91-usart.h> + + spi0: spi@f001c000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "atmel,at91rm9200-usart", "atmel,at91sam9260-usart"; + at91,usart-mode = <AT91_USART_MODE_SPI>; + reg = <0xf001c000 0x100>; + interrupts = <12 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&usart0_clk>; + clock-names = "usart"; + cs-gpios = <&pioB 3 0>; + };
Signature · 1 line
2.17.0
PATCH v2 5/6 spi: at91-usart: add driver for at91-usart as spi
In reply to Radu PireaThis is the driver for at91-usart in spi mode. The USART IP can be configured to work in many modes and one of them is SPI.
The driver was tested on sama5d3-xplained and sama5d4-xplained boards with enc28j60 ethernet controller as slave.
--- drivers/spi/Kconfig | 9 + drivers/spi/Makefile | 1 + drivers/spi/spi-at91-usart.c | 545 +++++++++++++++++++++++++++++++++++ 3 files changed, 555 insertions(+) create mode 100644 drivers/spi/spi-at91-usart.c
drivers/spi/Kconfig +9 -0
@@ -77,6 +77,15 @@ config SPI_ATMEL This selects a driver for the Atmel SPI Controller, present on many AT91 (ARM) chips. +config SPI_AT91_USART + tristate "Atmel USART Controller as SPI" + depends on HAS_DMA + depends on (ARCH_AT91 || COMPILE_TEST) + select MFD_AT91_USART + help + This selects a driver for the AT91 USART Controller as SPI Master, + present on AT91 and SAMA5 SoC series. + config SPI_AU1550 tristate "Au1550/Au1200/Au1300 SPI Controller" depends on MIPS_ALCHEMY
drivers/spi/Makefile +1 -0
@@ -15,6 +15,7 @@ obj-$(CONFIG_SPI_LOOPBACK_TEST) += spi-loopback-test.o obj-$(CONFIG_SPI_ALTERA) += spi-altera.o obj-$(CONFIG_SPI_ARMADA_3700) += spi-armada-3700.o obj-$(CONFIG_SPI_ATMEL) += spi-atmel.o +obj-$(CONFIG_SPI_AT91_USART) += spi-at91-usart.o obj-$(CONFIG_SPI_ATH79) += spi-ath79.o obj-$(CONFIG_SPI_AU1550) += spi-au1550.o obj-$(CONFIG_SPI_AXI_SPI_ENGINE) += spi-axi-spi-engine.o
drivers/spi/spi-at91-usart.c new file +545 -0
545 lines not on this page · raw message
Signature · 1 line
2.17.0
PATCH v2 6/6 tty/serial: atmel: changed the driver to work under at91-usart mfd
In reply to Radu PireaThis patch modifies the place where resources and device tree properties are searched.
--- drivers/tty/serial/Kconfig | 1 + drivers/tty/serial/atmel_serial.c | 29 +++++++++++++++-------------- 2 files changed, 16 insertions(+), 14 deletions(-)
drivers/tty/serial/Kconfig +1 -0
@@ -119,6 +119,7 @@ config SERIAL_ATMEL depends on ARCH_AT91 || COMPILE_TEST select SERIAL_CORE select SERIAL_MCTRL_GPIO if GPIOLIB + select MFD_AT91_USART help This enables the driver for the on-chip UARTs of the Atmel AT91 processors.
drivers/tty/serial/atmel_serial.c +15 -14
@@ -193,8 +193,8 @@ static struct console atmel_console;#if defined(CONFIG_OF )static const struct of_device_id atmel_serial_dt_ids[] = { - { .compatible ="atmel,at91rm9200-usart" }, - { .compatible ="atmel,at91sam9260-usart" }, + { .compatible ="atmel,at91rm9200-usart-serial" }, + { .compatible ="atmel,at91sam9260-usart-serial" }, {/* sentinel */ } };#endif
@@ -1631,7 +1631,7 @@ static void atmel_tasklet_tx_func(unsigned long data)static void atmel_init_property (struct atmel_uart_port *atmel_port,struct platform_device *pdev) { -struct device_node *np = pdev->dev.of_node; +struct device_node *np = pdev->dev.parent->of_node;/* DMA/PDC usage specification */ if (of_property_read_bool (np,"atmel,use-dma-rx" )) {
@@ -2223,7 +2223,8 @@ static const char *atmel_type(struct uart_port *port)static void atmel_release_port (struct uart_port *port) {struct platform_device *pdev =to_platform_device (port->dev); -int size = pdev->resource[0 ].end - pdev->resource[0 ].start +1 ; +int size =to_platform_device (pdev->dev.parent)->resource[0 ].end - +to_platform_device (pdev->dev.parent)->resource[0 ].start +1 ;release_mem_region (port->mapbase, size);
@@ -2239,7 +2240,8 @@ static void atmel_release_port(struct uart_port *port)static int atmel_request_port (struct uart_port *port) {struct platform_device *pdev =to_platform_device (port->dev); -int size = pdev->resource[0 ].end - pdev->resource[0 ].start +1 ; +int size =to_platform_device (pdev->dev.parent)->resource[0 ].end - +to_platform_device (pdev->dev.parent)->resource[0 ].start +1 ;if (!request_mem_region (port->mapbase, size,"atmel_serial" ))return -EBUSY ;
@@ -2345,23 +2347,23 @@ static int atmel_init_port(struct atmel_uart_port *atmel_port,atmel_init_property (atmel_port, pdev);atmel_set_ops (port); -uart_get_rs485_mode (&pdev->dev, &port->rs485); +uart_get_rs485_mode (pdev->dev.parent, &port->rs485); port->iotype =UPIO_MEM ; port->flags =UPF_BOOT_AUTOCONF |UPF_IOREMAP ; port->ops = &atmel_pops; port->fifosize =1 ; port->dev = &pdev->dev; - port->mapbase = pdev->resource[0 ].start; - port->irq = pdev->resource[1 ].start; + port->mapbase =to_platform_device (pdev->dev.parent)->resource[0 ].start; + port->irq =to_platform_device (pdev->dev.parent)->resource[1 ].start; port->rs485_config = atmel_config_rs485; - port->membase =NULL ; + port->membase =NULL ;memset (&atmel_port->rx_ring,0 ,sizeof (atmel_port->rx_ring));/* for console, the clock could already be configured */ if (!atmel_port->clk) { - atmel_port->clk =clk_get (&pdev->dev,"usart" ); + atmel_port->clk =clk_get (pdev->dev.parent,"usart" );if (IS_ERR (atmel_port->clk)) { ret =PTR_ERR (atmel_port->clk); atmel_port->clk =NULL ;
@@ -2656,7 +2658,7 @@ static void atmel_serial_probe_fifos(struct atmel_uart_port *atmel_port, atmel_port->rts_low =0 ; atmel_port->rts_high =0 ; -if (of_property_read_u32 (pdev->dev.of_node, +if (of_property_read_u32 (pdev->dev.parent->of_node,"atmel,fifo-size" , &atmel_port->fifo_size))return ;
@@ -2694,11 +2696,10 @@ static void atmel_serial_probe_fifos(struct atmel_uart_port *atmel_port,static int atmel_serial_probe (struct platform_device *pdev) {struct atmel_uart_port *atmel_port; -struct device_node *np = pdev->dev.of_node; +struct device_node *np = pdev->dev.parent->of_node;void *data;int ret = -ENODEV ;bool rs485_enabled; -BUILD_BUG_ON (ATMEL_SERIAL_RINGSIZE & (ATMEL_SERIAL_RINGSIZE -1 )); ret =of_alias_get_id (np,"serial" );
@@ -2845,7 +2846,7 @@ static struct platform_driver atmel_serial_driver = { .suspend = atmel_serial_suspend, .resume = atmel_serial_resume, .driver = { - .name = "atmel_usart", + .name = "atmel_usart_serial", .of_match_table = of_match_ptr(atmel_serial_dt_ids), }, };
Signature · 1 line
2.17.0
Lee Jones
AppliedQuoted 25 lines · Radu Pirea
Hello,
This is the second version of driver. I added a mfd driver which by default probes
atmel_serialdriver and if in dt is specified to probe the spi driver, then the spi-at91-usart driver will be probed. The compatible foratmel_serialis now the compatible for at91-usart mfd driver and compatilbe foratmel_serialdriver was changed in order to keep the bindings for serial as they are.Changes in v1:
- added spi-at91-usart driverChanges in v2:
- added at91-usart mfd driver
- modified spi-at91-usart driver to work as mfd driver child
- modifiedatmel_serialdriver to work as mfd driver childRadu Pirea (6):
MAINTAINERS: add at91 usart mfd driver
mfd: at91-usart: added mfd driver for usart
MAINTAINERS: add at91 usart spi driver
dt-bindings: add binding for at91-usart in spi mode
spi: at91-usart: add driver for at91-usart as spi tty/serial: atmel: changed the driver to work under at91-usart mfd
Quoted 16 lines
.../bindings/spi/microchip,at91-usart-spi.txt | 28 + MAINTAINERS | 14 + drivers/mfd/Kconfig | 10 + drivers/mfd/Makefile | 1 + drivers/mfd/at91-usart.c | 81 +++ drivers/spi/Kconfig | 9 + drivers/spi/Makefile | 1 + drivers/spi/spi-at91-usart.c | 545 ++++++++++++++++++ drivers/tty/serial/Kconfig | 1 + drivers/tty/serial/atmel_serial.c | 29 +- include/dt-bindings/mfd/at91-usart.h | 17 + 11 files changed, 722 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/spi/microchip,at91-usart-spi.txt create mode 100644 drivers/mfd/at91-usart.c create mode 100644 drivers/spi/spi-at91-usart.c create mode 100644 include/dt-bindings/mfd/at91-usart.h
Applied, thanks.
Signature · 4 lines
Lee Jones [???] Linaro Services Technical Lead Linaro.org ? Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
Quoted 44 lines · Lee Jones
Quoted 25 lines · Radu Pirea
Hello,
This is the second version of driver. I added a mfd driver which by default probes
atmel_serialdriver and if in dt is specified to probe the spi driver, then the spi-at91-usart driver will be probed. The compatible foratmel_serialis now the compatible for at91-usart mfd driver and compatilbe foratmel_serialdriver was changed in order to keep the bindings for serial as they are.Changes in v1:
- added spi-at91-usart driverChanges in v2:
- added at91-usart mfd driver
- modified spi-at91-usart driver to work as mfd driver child
- modifiedatmel_serialdriver to work as mfd driver childRadu Pirea (6):
MAINTAINERS: add at91 usart mfd driver
mfd: at91-usart: added mfd driver for usart
MAINTAINERS: add at91 usart spi driver
dt-bindings: add binding for at91-usart in spi mode
spi: at91-usart: add driver for at91-usart as spi tty/serial: atmel: changed the driver to work under at91-usart mfdQuoted 16 lines
.../bindings/spi/microchip,at91-usart-spi.txt | 28 + MAINTAINERS | 14 + drivers/mfd/Kconfig | 10 + drivers/mfd/Makefile | 1 + drivers/mfd/at91-usart.c | 81 +++ drivers/spi/Kconfig | 9 + drivers/spi/Makefile | 1 + drivers/spi/spi-at91-usart.c | 545 ++++++++++++++++++ drivers/tty/serial/Kconfig | 1 + drivers/tty/serial/atmel_serial.c | 29 +- include/dt-bindings/mfd/at91-usart.h | 17 + 11 files changed, 722 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/spi/microchip,at91-usart-spi.txt create mode 100644 drivers/mfd/at91-usart.c create mode 100644 drivers/spi/spi-at91-usart.c create mode 100644 include/dt-bindings/mfd/at91-usart.h
Quoted 1 line
Applied, thanks.
Whoops! Ignore this, wrong patch!
Signature · 4 lines
Lee Jones [???] Linaro Services Technical Lead Linaro.org ? Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog