[PATCH 5/7] serial: samsung: Get console register defaults from device tree

Grant Likely grant.likely at secretlab.ca
Thu Feb 17 11:21:10 EST 2011


On Sat, Feb 12, 2011 at 06:17:03PM +0530, Thomas Abraham wrote:
> The uart ports are used as console and due to console_init, the uart ports
> are initialized prior to the uart driver's probe function is called.
> During this intialization stage, the driver obtains the default port
> register values from the platform data.
> 
> This patch adds support for obtaining the default port register values
> from the device tree. The default values should be specified in the
> 'chosen' node of the device tree.
> 
> Signed-off-by: Thomas Abraham <thomas.abraham at linaro.org>
> ---
>  drivers/tty/serial/samsung.c |   14 ++++++++++++++
>  1 files changed, 14 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
> index 2335eda..66fece9 100644
> --- a/drivers/tty/serial/samsung.c
> +++ b/drivers/tty/serial/samsung.c
> @@ -43,6 +43,7 @@
>  #include <linux/delay.h>
>  #include <linux/clk.h>
>  #include <linux/cpufreq.h>
> +#include <linux/of.h>
>  
>  #include <asm/irq.h>
>  
> @@ -1384,11 +1385,24 @@ static int s3c24xx_serial_init_ports(struct s3c24xx_uart_info **info)
>  	struct s3c24xx_uart_port *ptr = s3c24xx_serial_ports;
>  	struct platform_device **platdev_ptr;
>  	int i;
> +	unsigned int *condefs , len;
> +	struct s3c2410_uartcfg *cfg;
>  
>  	dbg("s3c24xx_serial_init_ports: initialising ports...\n");
>  
>  	platdev_ptr = s3c24xx_uart_devs;
> +	condefs = (u32 *)of_get_property(of_chosen, "console-defaults", &len);

of_get_property returns (const void *) for a reason.  Make condefs a
'const u32 *' instead of overriding the compiler warning.

Pulling the uart configuration out of a console-defaults property in
the chosen node is not the way to do this.  Each uart device should
have its own node in the device tree, and the per-port configuration
belongs there.

g.

> +	if (condefs && (len / sizeof(unsigned int)) == 3) {
> +		for (i = 0; i < CONFIG_SERIAL_SAMSUNG_UARTS; i++) {
> +			cfg = s3c24xx_dev_to_cfg(&(*platdev_ptr)->dev);
> +			cfg->ucon = be32_to_cpu(condefs[0]);
> +			cfg->ulcon = be32_to_cpu(condefs[1]);
> +			cfg->ufcon = be32_to_cpu(condefs[2]);
> +			platdev_ptr++;
> +		}
> +	}
>  
> +	platdev_ptr = s3c24xx_uart_devs;
>  	for (i = 0; i < CONFIG_SERIAL_SAMSUNG_UARTS; i++, ptr++, platdev_ptr++) {
>  		s3c24xx_serial_init_port(ptr, info[i], *platdev_ptr);
>  	}
> -- 
> 1.6.6.rc2
> 


More information about the devicetree-discuss mailing list