Skip to content

Commit

Permalink
[PATCH] AVR32: Allow renumbering of serial devices
Browse files Browse the repository at this point in the history
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: Haavard Skinnemoen <hskinnemoen@atmel.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Haavard Skinnemoen authored and Linus Torvalds committed Oct 4, 2006
1 parent acca9b8 commit c194588
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 18 deletions.
16 changes: 13 additions & 3 deletions arch/avr32/boards/atstk1000/atstk1002.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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);
Expand Down
1 change: 1 addition & 0 deletions arch/avr32/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand Down
3 changes: 0 additions & 3 deletions arch/avr32/mach-at32ap/at32ap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
22 changes: 10 additions & 12 deletions arch/avr32/mach-at32ap/at32ap7000.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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) {
Expand All @@ -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];
}

/* --------------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions include/asm-avr32/arch-at32ap/board.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
1 change: 1 addition & 0 deletions include/asm-avr32/arch-at32ap/init.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#define __ASM_AVR32_AT32AP_INIT_H__

void setup_platform(void);
void setup_board(void);

/* Called by setup_platform */
void at32_clock_init(void);
Expand Down

0 comments on commit c194588

Please sign in to comment.