diff options
| author | David Brown <davidb@codeaurora.org> | 2011-08-04 01:55:24 -0700 | 
|---|---|---|
| committer | David Brown <davidb@codeaurora.org> | 2011-08-29 12:47:36 -0700 | 
| commit | cfdad2aba7398021f6eec415b9271b9cb40065f9 (patch) | |
| tree | a38cd210577bdba2affd72322fa36b41404adcd1 | |
| parent | 886a451bd2491de3551c2aea2a2f155f159716c8 (diff) | |
| download | olio-linux-3.10-cfdad2aba7398021f6eec415b9271b9cb40065f9.tar.xz olio-linux-3.10-cfdad2aba7398021f6eec415b9271b9cb40065f9.zip  | |
msm_serial: Add devicetree support
Add devicetree support to the msm_serial driver.  Clocks are still
queried by direct name from the driver until device tree clock support
is implemented.
Change-Id: Ia6b2ddfcf1e5dc3bd25dd502662f971202e6d56f
Signed-off-by: David Brown <davidb@codeaurora.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>
| -rw-r--r-- | Documentation/devicetree/bindings/tty/serial/msm_serial.txt | 27 | ||||
| -rw-r--r-- | drivers/tty/serial/msm_serial.c | 14 | 
2 files changed, 41 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/tty/serial/msm_serial.txt b/Documentation/devicetree/bindings/tty/serial/msm_serial.txt new file mode 100644 index 00000000000..aef383eb887 --- /dev/null +++ b/Documentation/devicetree/bindings/tty/serial/msm_serial.txt @@ -0,0 +1,27 @@ +* Qualcomm MSM UART + +Required properties: +- compatible : +	- "qcom,msm-uart", and one of "qcom,msm-hsuart" or +	  "qcom,msm-lsuart". +- reg : offset and length of the register set for the device +	for the hsuart operating in compatible mode, there should be a +	second pair describing the gsbi registers. +- interrupts : should contain the uart interrupt. + +There are two different UART blocks used in MSM devices, +"qcom,msm-hsuart" and "qcom,msm-lsuart".  The msm-serial driver is +able to handle both of these, and matches against the "qcom,msm-uart" +as the compatibility. + +The registers for the "qcom,msm-hsuart" device need to specify both +register blocks, even for the common driver. + +Example: + +	uart@19c400000 { +		compatible = "qcom,msm-hsuart", "qcom,msm-uart"; +		reg = <0x19c40000 0x1000>, +		      <0x19c00000 0x1000>; +		interrupts = <195>; +	}; diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c index d9863b2c2bc..77679027245 100644 --- a/drivers/tty/serial/msm_serial.c +++ b/drivers/tty/serial/msm_serial.c @@ -19,6 +19,7 @@  # define SUPPORT_SYSRQ  #endif +#include <linux/atomic.h>  #include <linux/hrtimer.h>  #include <linux/module.h>  #include <linux/io.h> @@ -33,6 +34,8 @@  #include <linux/clk.h>  #include <linux/platform_device.h>  #include <linux/delay.h> +#include <linux/of.h> +#include <linux/of_device.h>  #include "msm_serial.h" @@ -856,6 +859,8 @@ static struct uart_driver msm_uart_driver = {  	.cons = MSM_CONSOLE,  }; +static atomic_t msm_uart_next_id = ATOMIC_INIT(0); +  static int __init msm_serial_probe(struct platform_device *pdev)  {  	struct msm_port *msm_port; @@ -863,6 +868,9 @@ static int __init msm_serial_probe(struct platform_device *pdev)  	struct uart_port *port;  	int irq; +	if (pdev->id == -1) +		pdev->id = atomic_inc_return(&msm_uart_next_id) - 1; +  	if (unlikely(pdev->id < 0 || pdev->id >= UART_NR))  		return -ENXIO; @@ -920,11 +928,17 @@ static int __devexit msm_serial_remove(struct platform_device *pdev)  	return 0;  } +static struct of_device_id msm_match_table[] = { +	{ .compatible = "qcom,msm-uart" }, +	{} +}; +  static struct platform_driver msm_platform_driver = {  	.remove = msm_serial_remove,  	.driver = {  		.name = "msm_serial",  		.owner = THIS_MODULE, +		.of_match_table = msm_match_table,  	},  };  |