Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c194588d authored by Haavard Skinnemoen's avatar Haavard Skinnemoen Committed by Linus Torvalds
Browse files

[PATCH] AVR32: Allow renumbering of serial devices



Allow the board to remap actual USART peripheral devices to serial
devices by calling at32_map_usart(hw_id, serial_line). This ensures
that even though ATSTK1002 uses USART1 as the first serial port, it
will still have a ttyS0 device.

This also adds a board-specific early setup hook and moves the
at32_setup_serial_console() call there from the platform code.

Signed-off-by: default avatarHaavard Skinnemoen <hskinnemoen@atmel.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent acca9b83
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
#include <linux/init.h>

#include <asm/arch/board.h>
#include <asm/arch/init.h>

struct eth_platform_data __initdata eth0_data = {
	.valid		= 1,
@@ -20,13 +21,22 @@ struct eth_platform_data __initdata eth0_data = {

extern struct lcdc_platform_data atstk1000_fb0_data;

void __init setup_board(void)
{
	at32_map_usart(1, 0);	/* /dev/ttyS0 */
	at32_map_usart(2, 1);	/* /dev/ttyS1 */
	at32_map_usart(3, 2);	/* /dev/ttyS2 */

	at32_setup_serial_console(0);
}

static int __init atstk1002_init(void)
{
	at32_add_system_devices();

	at32_add_device_usart(1);	/* /dev/ttyS0 */
	at32_add_device_usart(2);	/* /dev/ttyS1 */
	at32_add_device_usart(3);	/* /dev/ttyS2 */
	at32_add_device_usart(0);
	at32_add_device_usart(1);
	at32_add_device_usart(2);

	at32_add_device_eth(0, &eth0_data);
	at32_add_device_spi(0);
+1 −0
Original line number Diff line number Diff line
@@ -292,6 +292,7 @@ void __init setup_arch (char **cmdline_p)

	setup_processor();
	setup_platform();
	setup_board();

	cpu_clk = clk_get(NULL, "cpu");
	if (IS_ERR(cpu_clk)) {
+0 −3
Original line number Diff line number Diff line
@@ -48,9 +48,6 @@ void __init setup_platform(void)
	at32_sm_init();
	at32_clock_init();
	at32_portmux_init();

	/* FIXME: This doesn't belong here */
	at32_setup_serial_console(1);
}

static int __init pdc_probe(struct platform_device *pdev)
+10 −12
Original line number Diff line number Diff line
@@ -591,11 +591,13 @@ static inline void configure_usart3_pins(void)
	portmux_set_func(PIOB, 17, FUNC_B);	/* TXD	*/
}

static struct platform_device *setup_usart(unsigned int id)
static struct platform_device *at32_usarts[4];

void __init at32_map_usart(unsigned int hw_id, unsigned int line)
{
	struct platform_device *pdev;

	switch (id) {
	switch (hw_id) {
	case 0:
		pdev = &atmel_usart0_device;
		configure_usart0_pins();
@@ -613,7 +615,7 @@ static struct platform_device *setup_usart(unsigned int id)
		configure_usart3_pins();
		break;
	default:
		return NULL;
		return;
	}

	if (PXSEG(pdev->resource[0].start) == P4SEG) {
@@ -622,25 +624,21 @@ static struct platform_device *setup_usart(unsigned int id)
		data->regs = (void __iomem *)pdev->resource[0].start;
	}

	return pdev;
	pdev->id = line;
	at32_usarts[line] = pdev;
}

struct platform_device *__init at32_add_device_usart(unsigned int id)
{
	struct platform_device *pdev;

	pdev = setup_usart(id);
	if (pdev)
		platform_device_register(pdev);

	return pdev;
	platform_device_register(at32_usarts[id]);
	return at32_usarts[id];
}

struct platform_device *atmel_default_console_device;

void __init at32_setup_serial_console(unsigned int usart_id)
{
	atmel_default_console_device = setup_usart(usart_id);
	atmel_default_console_device = at32_usarts[usart_id];
}

/* --------------------------------------------------------------------
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ struct atmel_uart_data {
	short		use_dma_rx;	/* use receive DMA? */
	void __iomem	*regs;		/* virtual base address, if any */
};
void at32_map_usart(unsigned int hw_id, unsigned int line);
struct platform_device *at32_add_device_usart(unsigned int id);

struct eth_platform_data {
Loading