diff options
Diffstat (limited to 'arch/arm/mach-at91')
73 files changed, 1341 insertions, 948 deletions
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 45db05d8d94..19505c0a3f0 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -9,15 +9,6 @@ config HAVE_AT91_DBGU0  config HAVE_AT91_DBGU1  	bool -config HAVE_AT91_USART3 -	bool - -config HAVE_AT91_USART4 -	bool - -config HAVE_AT91_USART5 -	bool -  config AT91_SAM9_ALT_RESET  	bool  	default !ARCH_AT91X40 @@ -26,87 +17,129 @@ config AT91_SAM9G45_RESET  	bool  	default !ARCH_AT91X40 +config SOC_AT91SAM9 +	bool +	select GENERIC_CLOCKEVENTS +	select CPU_ARM926T +  menu "Atmel AT91 System-on-Chip" -choice -	prompt "Atmel AT91 Processor" +comment "Atmel AT91 Processor" -config ARCH_AT91RM9200 +config SOC_AT91SAM9 +	bool +	select CPU_ARM926T +	select AT91_SAM9_TIME +	select AT91_SAM9_SMC + +config SOC_AT91RM9200  	bool "AT91RM9200"  	select CPU_ARM920T  	select GENERIC_CLOCKEVENTS  	select HAVE_AT91_DBGU0 -	select HAVE_AT91_USART3 -config ARCH_AT91SAM9260 -	bool "AT91SAM9260 or AT91SAM9XE" -	select CPU_ARM926T -	select GENERIC_CLOCKEVENTS +config SOC_AT91SAM9260 +	bool "AT91SAM9260, AT91SAM9XE or AT91SAM9G20" +	select SOC_AT91SAM9  	select HAVE_AT91_DBGU0 -	select HAVE_AT91_USART3 -	select HAVE_AT91_USART4 -	select HAVE_AT91_USART5  	select HAVE_NET_MACB +	help +	  Select this if you are using one of Atmel's AT91SAM9260, AT91SAM9XE +	  or AT91SAM9G20 SoC. -config ARCH_AT91SAM9261 -	bool "AT91SAM9261" -	select CPU_ARM926T -	select GENERIC_CLOCKEVENTS -	select HAVE_FB_ATMEL -	select HAVE_AT91_DBGU0 - -config ARCH_AT91SAM9G10 -	bool "AT91SAM9G10" -	select CPU_ARM926T -	select GENERIC_CLOCKEVENTS +config SOC_AT91SAM9261 +	bool "AT91SAM9261 or AT91SAM9G10" +	select SOC_AT91SAM9  	select HAVE_AT91_DBGU0  	select HAVE_FB_ATMEL +	help +	  Select this if you are using one of Atmel's AT91SAM9261 or AT91SAM9G10 SoC. -config ARCH_AT91SAM9263 +config SOC_AT91SAM9263  	bool "AT91SAM9263" -	select CPU_ARM926T -	select GENERIC_CLOCKEVENTS +	select SOC_AT91SAM9 +	select HAVE_AT91_DBGU1  	select HAVE_FB_ATMEL  	select HAVE_NET_MACB -	select HAVE_AT91_DBGU1 -config ARCH_AT91SAM9RL +config SOC_AT91SAM9RL  	bool "AT91SAM9RL" -	select CPU_ARM926T -	select GENERIC_CLOCKEVENTS -	select HAVE_AT91_USART3 -	select HAVE_FB_ATMEL -	select HAVE_AT91_DBGU0 - -config ARCH_AT91SAM9G20 -	bool "AT91SAM9G20" -	select CPU_ARM926T -	select GENERIC_CLOCKEVENTS +	select SOC_AT91SAM9  	select HAVE_AT91_DBGU0 -	select HAVE_AT91_USART3 -	select HAVE_AT91_USART4 -	select HAVE_AT91_USART5 -	select HAVE_NET_MACB +	select HAVE_FB_ATMEL -config ARCH_AT91SAM9G45 -	bool "AT91SAM9G45" -	select CPU_ARM926T -	select GENERIC_CLOCKEVENTS -	select HAVE_AT91_USART3 +config SOC_AT91SAM9G45 +	bool "AT91SAM9G45 or AT91SAM9M10 families" +	select SOC_AT91SAM9 +	select HAVE_AT91_DBGU1  	select HAVE_FB_ATMEL  	select HAVE_NET_MACB -	select HAVE_AT91_DBGU1 +	help +	  Select this if you are using one of Atmel's AT91SAM9G45 family SoC. +	  This support covers AT91SAM9G45, AT91SAM9G46, AT91SAM9M10 and AT91SAM9M11. -config ARCH_AT91SAM9X5 +config SOC_AT91SAM9X5  	bool "AT91SAM9x5 family" -	select CPU_ARM926T -	select GENERIC_CLOCKEVENTS +	select SOC_AT91SAM9 +	select HAVE_AT91_DBGU0  	select HAVE_FB_ATMEL  	select HAVE_NET_MACB +	help +	  Select this if you are using one of Atmel's AT91SAM9x5 family SoC. +	  This means that your SAM9 name finishes with a '5' (except if it is +	  AT91SAM9G45!). +	  This support covers AT91SAM9G15, AT91SAM9G25, AT91SAM9X25, AT91SAM9G35 +	  and AT91SAM9X35. + +config SOC_AT91SAM9N12 +	bool "AT91SAM9N12 family" +	select SOC_AT91SAM9  	select HAVE_AT91_DBGU0 +	select HAVE_FB_ATMEL +	help +	  Select this if you are using Atmel's AT91SAM9N12 SoC. + +choice +	prompt "Atmel AT91 Processor Devices for non DT boards" + +config ARCH_AT91_NONE +	bool "None" + +config ARCH_AT91RM9200 +	bool "AT91RM9200" +	select SOC_AT91RM9200 + +config ARCH_AT91SAM9260 +	bool "AT91SAM9260 or AT91SAM9XE" +	select SOC_AT91SAM9260 + +config ARCH_AT91SAM9261 +	bool "AT91SAM9261" +	select SOC_AT91SAM9261 + +config ARCH_AT91SAM9G10 +	bool "AT91SAM9G10" +	select SOC_AT91SAM9261 + +config ARCH_AT91SAM9263 +	bool "AT91SAM9263" +	select SOC_AT91SAM9263 + +config ARCH_AT91SAM9RL +	bool "AT91SAM9RL" +	select SOC_AT91SAM9RL + +config ARCH_AT91SAM9G20 +	bool "AT91SAM9G20" +	select SOC_AT91SAM9260 + +config ARCH_AT91SAM9G45 +	bool "AT91SAM9G45" +	select SOC_AT91SAM9G45  config ARCH_AT91X40  	bool "AT91x40" +	depends on !MMU  	select ARCH_USES_GETTIMEOFFSET  endchoice @@ -364,6 +397,7 @@ config MACH_AT91SAM9G20EK_2MMC  	  Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit  	  with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and  	  onwards. +	  <http://www.atmel.com/tools/SAM9G20-EK.aspx>  config MACH_CPU9G20  	bool "Eukrea CPU9G20 board" @@ -433,9 +467,10 @@ comment "AT91SAM9G45 Board Type"  config MACH_AT91SAM9M10G45EK  	bool "Atmel AT91SAM9M10G45-EK Evaluation Kits"  	help -	  Select this if you are using Atmel's AT91SAM9G45-EKES Evaluation Kit. -	  "ES" at the end of the name means that this board is an -	  Engineering Sample. +	  Select this if you are using Atmel's AT91SAM9M10G45-EK Evaluation Kit. +	  Those boards can be populated with any SoC of AT91SAM9G45 or AT91SAM9M10 +	  families: AT91SAM9G45, AT91SAM9G46, AT91SAM9M10 and AT91SAM9M11. +	  <http://www.atmel.com/tools/SAM9M10-G45-EK.aspx>  endif @@ -515,41 +550,6 @@ config AT91_TIMER_HZ  	  system clock (of at least several MHz), rounding is less of a  	  problem so it can be safer to use a decimal values like 100. -choice -	prompt "Select a UART for early kernel messages" - -config AT91_EARLY_DBGU0 -	bool "DBGU on rm9200, 9260/9g20, 9261/9g10 and 9rl" -	depends on HAVE_AT91_DBGU0 - -config AT91_EARLY_DBGU1 -	bool "DBGU on 9263 and 9g45" -	depends on HAVE_AT91_DBGU1 - -config AT91_EARLY_USART0 -	bool "USART0" - -config AT91_EARLY_USART1 -	bool "USART1" - -config AT91_EARLY_USART2 -	bool "USART2" -	depends on ! ARCH_AT91X40 - -config AT91_EARLY_USART3 -	bool "USART3" -	depends on HAVE_AT91_USART3 - -config AT91_EARLY_USART4 -	bool "USART4" -	depends on HAVE_AT91_USART4 - -config AT91_EARLY_USART5 -	bool "USART5" -	depends on HAVE_AT91_USART5 - -endchoice -  endmenu  endif diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 8512e53bed9..3bb7a51efc9 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile @@ -10,17 +10,26 @@ obj-		:=  obj-$(CONFIG_AT91_PMC_UNIT)	+= clock.o  obj-$(CONFIG_AT91_SAM9_ALT_RESET) += at91sam9_alt_reset.o  obj-$(CONFIG_AT91_SAM9G45_RESET) += at91sam9g45_reset.o +obj-$(CONFIG_SOC_AT91SAM9)	+= at91sam926x_time.o sam9_smc.o  # CPU-specific support -obj-$(CONFIG_ARCH_AT91RM9200)	+= at91rm9200.o at91rm9200_time.o at91rm9200_devices.o -obj-$(CONFIG_ARCH_AT91SAM9260)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o -obj-$(CONFIG_ARCH_AT91SAM9261)	+= at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o -obj-$(CONFIG_ARCH_AT91SAM9G10)	+= at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o -obj-$(CONFIG_ARCH_AT91SAM9263)	+= at91sam9263.o at91sam926x_time.o at91sam9263_devices.o sam9_smc.o -obj-$(CONFIG_ARCH_AT91SAM9RL)	+= at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o -obj-$(CONFIG_ARCH_AT91SAM9G20)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o -obj-$(CONFIG_ARCH_AT91SAM9G45)	+= at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o -obj-$(CONFIG_ARCH_AT91SAM9X5)	+= at91sam9x5.o at91sam926x_time.o sam9_smc.o +obj-$(CONFIG_SOC_AT91RM9200)	+= at91rm9200.o at91rm9200_time.o +obj-$(CONFIG_SOC_AT91SAM9260)	+= at91sam9260.o +obj-$(CONFIG_SOC_AT91SAM9261)	+= at91sam9261.o +obj-$(CONFIG_SOC_AT91SAM9263)	+= at91sam9263.o +obj-$(CONFIG_SOC_AT91SAM9G45)	+= at91sam9g45.o +obj-$(CONFIG_SOC_AT91SAM9N12)	+= at91sam9n12.o +obj-$(CONFIG_SOC_AT91SAM9X5)	+= at91sam9x5.o +obj-$(CONFIG_SOC_AT91SAM9RL)	+= at91sam9rl.o + +obj-$(CONFIG_ARCH_AT91RM9200)	+= at91rm9200_devices.o +obj-$(CONFIG_ARCH_AT91SAM9260)	+= at91sam9260_devices.o +obj-$(CONFIG_ARCH_AT91SAM9261)	+= at91sam9261_devices.o +obj-$(CONFIG_ARCH_AT91SAM9G10)	+= at91sam9261_devices.o +obj-$(CONFIG_ARCH_AT91SAM9263)	+= at91sam9263_devices.o +obj-$(CONFIG_ARCH_AT91SAM9RL)	+= at91sam9rl_devices.o +obj-$(CONFIG_ARCH_AT91SAM9G20)	+= at91sam9260_devices.o +obj-$(CONFIG_ARCH_AT91SAM9G45)	+= at91sam9g45_devices.o  obj-$(CONFIG_ARCH_AT91X40)	+= at91x40.o at91x40_time.o  # AT91RM9200 board-specific support diff --git a/arch/arm/mach-at91/Makefile.boot b/arch/arm/mach-at91/Makefile.boot index 0da66ca4a4f..9e84fe4f2aa 100644 --- a/arch/arm/mach-at91/Makefile.boot +++ b/arch/arm/mach-at91/Makefile.boot @@ -14,9 +14,23 @@ initrd_phys-y	:= 0x20410000  endif  # Keep dtb files sorted alphabetically for each SoC +# sam9260 +dtb-$(CONFIG_MACH_AT91SAM_DT) += ethernut5.dtb +dtb-$(CONFIG_MACH_AT91SAM_DT) += tny_a9260.dtb +dtb-$(CONFIG_MACH_AT91SAM_DT) += usb_a9260.dtb +# sam9263 +dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9263ek.dtb +dtb-$(CONFIG_MACH_AT91SAM_DT) += tny_a9263.dtb +dtb-$(CONFIG_MACH_AT91SAM_DT) += usb_a9263.dtb  # sam9g20 +dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9g20ek.dtb +dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9g20ek_2mmc.dtb +dtb-$(CONFIG_MACH_AT91SAM_DT) += kizbox.dtb +dtb-$(CONFIG_MACH_AT91SAM_DT) += tny_a9g20.dtb  dtb-$(CONFIG_MACH_AT91SAM_DT) += usb_a9g20.dtb  # sam9g45  dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9m10g45ek.dtb +# sam9n12 +dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9n12ek.dtb  # sam9x5  dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9g25ek.dtb diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c index 89106792d06..26917687fc3 100644 --- a/arch/arm/mach-at91/at91rm9200.c +++ b/arch/arm/mach-at91/at91rm9200.c @@ -249,18 +249,6 @@ static void __init at91rm9200_register_clocks(void)  	clk_register(&pck3);  } -static struct clk_lookup console_clock_lookup; - -void __init at91rm9200_set_console_clock(int id) -{ -	if (id >= ARRAY_SIZE(usart_clocks_lookups)) -		return; - -	console_clock_lookup.con_id = "usart"; -	console_clock_lookup.clk = usart_clocks_lookups[id].clk; -	clkdev_add(&console_clock_lookup); -} -  /* --------------------------------------------------------------------   *  GPIO   * -------------------------------------------------------------------- */ diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index 60c472861e5..e6b7d0533dd 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c @@ -1152,14 +1152,6 @@ void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins)  		at91_uarts[portnr] = pdev;  } -void __init at91_set_serial_console(unsigned portnr) -{ -	if (portnr < ATMEL_MAX_UART) { -		atmel_default_console_device = at91_uarts[portnr]; -		at91rm9200_set_console_clock(at91_uarts[portnr]->id); -	} -} -  void __init at91_add_device_serial(void)  {  	int i; @@ -1168,13 +1160,9 @@ void __init at91_add_device_serial(void)  		if (at91_uarts[i])  			platform_device_register(at91_uarts[i]);  	} - -	if (!atmel_default_console_device) -		printk(KERN_INFO "AT91: No default serial console defined.\n");  }  #else  void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} -void __init at91_set_serial_console(unsigned portnr) {}  void __init at91_add_device_serial(void) {}  #endif diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c index 46f77423329..2b1e438ed87 100644 --- a/arch/arm/mach-at91/at91sam9260.c +++ b/arch/arm/mach-at91/at91sam9260.c @@ -55,6 +55,13 @@ static struct clk adc_clk = {  	.pmc_mask	= 1 << AT91SAM9260_ID_ADC,  	.type		= CLK_TYPE_PERIPHERAL,  }; + +static struct clk adc_op_clk = { +	.name		= "adc_op_clk", +	.type		= CLK_TYPE_PERIPHERAL, +	.rate_hz	= 5000000, +}; +  static struct clk usart0_clk = {  	.name		= "usart0_clk",  	.pmc_mask	= 1 << AT91SAM9260_ID_US0, @@ -166,6 +173,7 @@ static struct clk *periph_clocks[] __initdata = {  	&pioB_clk,  	&pioC_clk,  	&adc_clk, +	&adc_op_clk,  	&usart0_clk,  	&usart1_clk,  	&usart2_clk, @@ -268,18 +276,6 @@ static void __init at91sam9260_register_clocks(void)  	clk_register(&pck1);  } -static struct clk_lookup console_clock_lookup; - -void __init at91sam9260_set_console_clock(int id) -{ -	if (id >= ARRAY_SIZE(usart_clocks_lookups)) -		return; - -	console_clock_lookup.con_id = "usart"; -	console_clock_lookup.clk = usart_clocks_lookups[id].clk; -	clkdev_add(&console_clock_lookup); -} -  /* --------------------------------------------------------------------   *  GPIO   * -------------------------------------------------------------------- */ diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 5652dde4bbe..0ded951f785 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c @@ -17,12 +17,15 @@  #include <linux/platform_device.h>  #include <linux/i2c-gpio.h> +#include <linux/platform_data/at91_adc.h> +  #include <mach/board.h>  #include <mach/cpu.h>  #include <mach/at91sam9260.h>  #include <mach/at91sam9260_matrix.h>  #include <mach/at91_matrix.h>  #include <mach/at91sam9_smc.h> +#include <mach/at91_adc.h>  #include "generic.h" @@ -702,25 +705,8 @@ static struct platform_device at91sam9260_tcb1_device = {  	.num_resources	= ARRAY_SIZE(tcb1_resources),  }; -#if defined(CONFIG_OF) -static struct of_device_id tcb_ids[] = { -	{ .compatible = "atmel,at91rm9200-tcb" }, -	{ /*sentinel*/ } -}; -#endif -  static void __init at91_add_device_tc(void)  { -#if defined(CONFIG_OF) -	struct device_node *np; - -	np = of_find_matching_node(NULL, tcb_ids); -	if (np) { -		of_node_put(np); -		return; -	} -#endif -  	platform_device_register(&at91sam9260_tcb0_device);  	platform_device_register(&at91sam9260_tcb1_device);  } @@ -1229,14 +1215,6 @@ void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins)  		at91_uarts[portnr] = pdev;  } -void __init at91_set_serial_console(unsigned portnr) -{ -	if (portnr < ATMEL_MAX_UART) { -		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9260_set_console_clock(at91_uarts[portnr]->id); -	} -} -  void __init at91_add_device_serial(void)  {  	int i; @@ -1245,13 +1223,9 @@ void __init at91_add_device_serial(void)  		if (at91_uarts[i])  			platform_device_register(at91_uarts[i]);  	} - -	if (!atmel_default_console_device) -		printk(KERN_INFO "AT91: No default serial console defined.\n");  }  #else  void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} -void __init at91_set_serial_console(unsigned portnr) {}  void __init at91_add_device_serial(void) {}  #endif @@ -1369,6 +1343,93 @@ void __init at91_add_device_cf(struct at91_cf_data *data)  void __init at91_add_device_cf(struct at91_cf_data * data) {}  #endif +/* -------------------------------------------------------------------- + *  ADCs + * -------------------------------------------------------------------- */ + +#if IS_ENABLED(CONFIG_AT91_ADC) +static struct at91_adc_data adc_data; + +static struct resource adc_resources[] = { +	[0] = { +		.start	= AT91SAM9260_BASE_ADC, +		.end	= AT91SAM9260_BASE_ADC + SZ_16K - 1, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= AT91SAM9260_ID_ADC, +		.end	= AT91SAM9260_ID_ADC, +		.flags	= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device at91_adc_device = { +	.name		= "at91_adc", +	.id		= -1, +	.dev		= { +				.platform_data		= &adc_data, +	}, +	.resource	= adc_resources, +	.num_resources	= ARRAY_SIZE(adc_resources), +}; + +static struct at91_adc_trigger at91_adc_triggers[] = { +	[0] = { +		.name = "timer-counter-0", +		.value = AT91_ADC_TRGSEL_TC0 | AT91_ADC_TRGEN, +	}, +	[1] = { +		.name = "timer-counter-1", +		.value = AT91_ADC_TRGSEL_TC1 | AT91_ADC_TRGEN, +	}, +	[2] = { +		.name = "timer-counter-2", +		.value = AT91_ADC_TRGSEL_TC2 | AT91_ADC_TRGEN, +	}, +	[3] = { +		.name = "external", +		.value = AT91_ADC_TRGSEL_EXTERNAL | AT91_ADC_TRGEN, +		.is_external = true, +	}, +}; + +static struct at91_adc_reg_desc at91_adc_register_g20 = { +	.channel_base = AT91_ADC_CHR(0), +	.drdy_mask = AT91_ADC_DRDY, +	.status_register = AT91_ADC_SR, +	.trigger_register = AT91_ADC_MR, +}; + +void __init at91_add_device_adc(struct at91_adc_data *data) +{ +	if (!data) +		return; + +	if (test_bit(0, &data->channels_used)) +		at91_set_A_periph(AT91_PIN_PC0, 0); +	if (test_bit(1, &data->channels_used)) +		at91_set_A_periph(AT91_PIN_PC1, 0); +	if (test_bit(2, &data->channels_used)) +		at91_set_A_periph(AT91_PIN_PC2, 0); +	if (test_bit(3, &data->channels_used)) +		at91_set_A_periph(AT91_PIN_PC3, 0); + +	if (data->use_external_triggers) +		at91_set_A_periph(AT91_PIN_PA22, 0); + +	data->num_channels = 4; +	data->startup_time = 10; +	data->registers = &at91_adc_register_g20; +	data->trigger_number = 4; +	data->trigger_list = at91_adc_triggers; + +	adc_data = *data; +	platform_device_register(&at91_adc_device); +} +#else +void __init at91_add_device_adc(struct at91_adc_data *data) {} +#endif +  /* -------------------------------------------------------------------- */  /*   * These devices are always present and don't need any board-specific @@ -1376,6 +1437,9 @@ void __init at91_add_device_cf(struct at91_cf_data * data) {}   */  static int __init at91_add_standard_devices(void)  { +	if (of_have_populated_dt()) +		return 0; +  	at91_add_device_rtt();  	at91_add_device_watchdog();  	at91_add_device_tc(); diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c index 7de81e6222f..c77d503d09d 100644 --- a/arch/arm/mach-at91/at91sam9261.c +++ b/arch/arm/mach-at91/at91sam9261.c @@ -239,18 +239,6 @@ static void __init at91sam9261_register_clocks(void)  	clk_register(&hck1);  } -static struct clk_lookup console_clock_lookup; - -void __init at91sam9261_set_console_clock(int id) -{ -	if (id >= ARRAY_SIZE(usart_clocks_lookups)) -		return; - -	console_clock_lookup.con_id = "usart"; -	console_clock_lookup.clk = usart_clocks_lookups[id].clk; -	clkdev_add(&console_clock_lookup); -} -  /* --------------------------------------------------------------------   *  GPIO   * -------------------------------------------------------------------- */ diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 4db961a9308..9295e90b08f 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c @@ -1051,14 +1051,6 @@ void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins)  		at91_uarts[portnr] = pdev;  } -void __init at91_set_serial_console(unsigned portnr) -{ -	if (portnr < ATMEL_MAX_UART) { -		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9261_set_console_clock(at91_uarts[portnr]->id); -	} -} -  void __init at91_add_device_serial(void)  {  	int i; @@ -1067,13 +1059,9 @@ void __init at91_add_device_serial(void)  		if (at91_uarts[i])  			platform_device_register(at91_uarts[i]);  	} - -	if (!atmel_default_console_device) -		printk(KERN_INFO "AT91: No default serial console defined.\n");  }  #else  void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} -void __init at91_set_serial_console(unsigned portnr) {}  void __init at91_add_device_serial(void) {}  #endif diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c index ef301be6657..ed91c7e9f7c 100644 --- a/arch/arm/mach-at91/at91sam9263.c +++ b/arch/arm/mach-at91/at91sam9263.c @@ -199,6 +199,16 @@ static struct clk_lookup periph_clocks_lookups[] = {  	CLKDEV_CON_ID("pioC", &pioCDE_clk),  	CLKDEV_CON_ID("pioD", &pioCDE_clk),  	CLKDEV_CON_ID("pioE", &pioCDE_clk), +	/* more usart lookup table for DT entries */ +	CLKDEV_CON_DEV_ID("usart", "ffffee00.serial", &mck), +	CLKDEV_CON_DEV_ID("usart", "fff8c000.serial", &usart0_clk), +	CLKDEV_CON_DEV_ID("usart", "fff90000.serial", &usart1_clk), +	CLKDEV_CON_DEV_ID("usart", "fff94000.serial", &usart2_clk), +	/* more tc lookup table for DT entries */ +	CLKDEV_CON_DEV_ID("t0_clk", "fff7c000.timer", &tcb_clk), +	CLKDEV_CON_DEV_ID("hclk", "a00000.ohci", &ohci_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "fffa4000.spi", &spi0_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "fffa8000.spi", &spi1_clk),  };  static struct clk_lookup usart_clocks_lookups[] = { @@ -255,18 +265,6 @@ static void __init at91sam9263_register_clocks(void)  	clk_register(&pck3);  } -static struct clk_lookup console_clock_lookup; - -void __init at91sam9263_set_console_clock(int id) -{ -	if (id >= ARRAY_SIZE(usart_clocks_lookups)) -		return; - -	console_clock_lookup.con_id = "usart"; -	console_clock_lookup.clk = usart_clocks_lookups[id].clk; -	clkdev_add(&console_clock_lookup); -} -  /* --------------------------------------------------------------------   *  GPIO   * -------------------------------------------------------------------- */ diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index fe99206de88..175e0009eaa 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c @@ -953,8 +953,25 @@ static struct platform_device at91sam9263_tcb_device = {  	.num_resources	= ARRAY_SIZE(tcb_resources),  }; +#if defined(CONFIG_OF) +static struct of_device_id tcb_ids[] = { +	{ .compatible = "atmel,at91rm9200-tcb" }, +	{ /*sentinel*/ } +}; +#endif +  static void __init at91_add_device_tc(void)  { +#if defined(CONFIG_OF) +	struct device_node *np; + +	np = of_find_matching_node(NULL, tcb_ids); +	if (np) { +		of_node_put(np); +		return; +	} +#endif +  	platform_device_register(&at91sam9263_tcb_device);  }  #else @@ -1461,14 +1478,6 @@ void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins)  		at91_uarts[portnr] = pdev;  } -void __init at91_set_serial_console(unsigned portnr) -{ -	if (portnr < ATMEL_MAX_UART) { -		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9263_set_console_clock(at91_uarts[portnr]->id); -	} -} -  void __init at91_add_device_serial(void)  {  	int i; @@ -1477,13 +1486,9 @@ void __init at91_add_device_serial(void)  		if (at91_uarts[i])  			platform_device_register(at91_uarts[i]);  	} - -	if (!atmel_default_console_device) -		printk(KERN_INFO "AT91: No default serial console defined.\n");  }  #else  void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} -void __init at91_set_serial_console(unsigned portnr) {}  void __init at91_add_device_serial(void) {}  #endif @@ -1495,6 +1500,9 @@ void __init at91_add_device_serial(void) {}   */  static int __init at91_add_standard_devices(void)  { +	if (of_have_populated_dt()) +		return 0; +  	at91_add_device_rtt();  	at91_add_device_watchdog();  	at91_add_device_tc(); diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index d222f8333da..4792682d52b 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c @@ -176,6 +176,12 @@ static struct clk vdec_clk = {  	.type		= CLK_TYPE_PERIPHERAL,  }; +static struct clk adc_op_clk = { +	.name		= "adc_op_clk", +	.type		= CLK_TYPE_PERIPHERAL, +	.rate_hz	= 13200000, +}; +  static struct clk *periph_clocks[] __initdata = {  	&pioA_clk,  	&pioB_clk, @@ -204,6 +210,7 @@ static struct clk *periph_clocks[] __initdata = {  	&isi_clk,  	&udphs_clk,  	&mmc1_clk, +	&adc_op_clk,  	// irq0  }; @@ -242,6 +249,8 @@ static struct clk_lookup periph_clocks_lookups[] = {  	CLKDEV_CON_ID("pioC", &pioC_clk),  	CLKDEV_CON_ID("pioD", &pioDE_clk),  	CLKDEV_CON_ID("pioE", &pioDE_clk), +	/* Fake adc clock */ +	CLKDEV_CON_ID("adc_clk", &tsc_clk),  };  static struct clk_lookup usart_clocks_lookups[] = { @@ -288,18 +297,6 @@ static void __init at91sam9g45_register_clocks(void)  	clk_register(&pck1);  } -static struct clk_lookup console_clock_lookup; - -void __init at91sam9g45_set_console_clock(int id) -{ -	if (id >= ARRAY_SIZE(usart_clocks_lookups)) -		return; - -	console_clock_lookup.con_id = "usart"; -	console_clock_lookup.clk = usart_clocks_lookups[id].clk; -	clkdev_add(&console_clock_lookup); -} -  /* --------------------------------------------------------------------   *  GPIO   * -------------------------------------------------------------------- */ diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 6b008aee1df..f6747246d64 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c @@ -19,9 +19,12 @@  #include <linux/i2c-gpio.h>  #include <linux/atmel-mci.h> +#include <linux/platform_data/at91_adc.h> +  #include <linux/fb.h>  #include <video/atmel_lcdc.h> +#include <mach/at91_adc.h>  #include <mach/board.h>  #include <mach/at91sam9g45.h>  #include <mach/at91sam9g45_matrix.h> @@ -69,15 +72,7 @@ static struct platform_device at_hdmac_device = {  void __init at91_add_device_hdmac(void)  { -#if defined(CONFIG_OF) -	struct device_node *of_node = -		of_find_node_by_name(NULL, "dma-controller"); - -	if (of_node) -		of_node_put(of_node); -	else -#endif -		platform_device_register(&at_hdmac_device); +	platform_device_register(&at_hdmac_device);  }  #else  void __init at91_add_device_hdmac(void) {} @@ -1094,25 +1089,8 @@ static struct platform_device at91sam9g45_tcb1_device = {  	.num_resources	= ARRAY_SIZE(tcb1_resources),  }; -#if defined(CONFIG_OF) -static struct of_device_id tcb_ids[] = { -	{ .compatible = "atmel,at91rm9200-tcb" }, -	{ /*sentinel*/ } -}; -#endif -  static void __init at91_add_device_tc(void)  { -#if defined(CONFIG_OF) -	struct device_node *np; - -	np = of_find_matching_node(NULL, tcb_ids); -	if (np) { -		of_node_put(np); -		return; -	} -#endif -  	platform_device_register(&at91sam9g45_tcb0_device);  	platform_device_register(&at91sam9g45_tcb1_device);  } @@ -1207,6 +1185,104 @@ void __init at91_add_device_tsadcc(struct at91_tsadcc_data *data) {}  /* -------------------------------------------------------------------- + *  ADC + * -------------------------------------------------------------------- */ + +#if IS_ENABLED(CONFIG_AT91_ADC) +static struct at91_adc_data adc_data; + +static struct resource adc_resources[] = { +	[0] = { +		.start	= AT91SAM9G45_BASE_TSC, +		.end	= AT91SAM9G45_BASE_TSC + SZ_16K - 1, +		.flags	= IORESOURCE_MEM, +	}, +	[1] = { +		.start	= AT91SAM9G45_ID_TSC, +		.end	= AT91SAM9G45_ID_TSC, +		.flags	= IORESOURCE_IRQ, +	} +}; + +static struct platform_device at91_adc_device = { +	.name		= "at91_adc", +	.id		= -1, +	.dev		= { +				.platform_data	= &adc_data, +	}, +	.resource	= adc_resources, +	.num_resources	= ARRAY_SIZE(adc_resources), +}; + +static struct at91_adc_trigger at91_adc_triggers[] = { +	[0] = { +		.name = "external-rising", +		.value = 1, +		.is_external = true, +	}, +	[1] = { +		.name = "external-falling", +		.value = 2, +		.is_external = true, +	}, +	[2] = { +		.name = "external-any", +		.value = 3, +		.is_external = true, +	}, +	[3] = { +		.name = "continuous", +		.value = 6, +		.is_external = false, +	}, +}; + +static struct at91_adc_reg_desc at91_adc_register_g45 = { +	.channel_base = AT91_ADC_CHR(0), +	.drdy_mask = AT91_ADC_DRDY, +	.status_register = AT91_ADC_SR, +	.trigger_register = 0x08, +}; + +void __init at91_add_device_adc(struct at91_adc_data *data) +{ +	if (!data) +		return; + +	if (test_bit(0, &data->channels_used)) +		at91_set_gpio_input(AT91_PIN_PD20, 0); +	if (test_bit(1, &data->channels_used)) +		at91_set_gpio_input(AT91_PIN_PD21, 0); +	if (test_bit(2, &data->channels_used)) +		at91_set_gpio_input(AT91_PIN_PD22, 0); +	if (test_bit(3, &data->channels_used)) +		at91_set_gpio_input(AT91_PIN_PD23, 0); +	if (test_bit(4, &data->channels_used)) +		at91_set_gpio_input(AT91_PIN_PD24, 0); +	if (test_bit(5, &data->channels_used)) +		at91_set_gpio_input(AT91_PIN_PD25, 0); +	if (test_bit(6, &data->channels_used)) +		at91_set_gpio_input(AT91_PIN_PD26, 0); +	if (test_bit(7, &data->channels_used)) +		at91_set_gpio_input(AT91_PIN_PD27, 0); + +	if (data->use_external_triggers) +		at91_set_A_periph(AT91_PIN_PD28, 0); + +	data->num_channels = 8; +	data->startup_time = 40; +	data->registers = &at91_adc_register_g45; +	data->trigger_number = 4; +	data->trigger_list = at91_adc_triggers; + +	adc_data = *data; +	platform_device_register(&at91_adc_device); +} +#else +void __init at91_add_device_adc(struct at91_adc_data *data) {} +#endif + +/* --------------------------------------------------------------------   *  RTT   * -------------------------------------------------------------------- */ @@ -1741,14 +1817,6 @@ void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins)  		at91_uarts[portnr] = pdev;  } -void __init at91_set_serial_console(unsigned portnr) -{ -	if (portnr < ATMEL_MAX_UART) { -		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9g45_set_console_clock(at91_uarts[portnr]->id); -	} -} -  void __init at91_add_device_serial(void)  {  	int i; @@ -1757,13 +1825,9 @@ void __init at91_add_device_serial(void)  		if (at91_uarts[i])  			platform_device_register(at91_uarts[i]);  	} - -	if (!atmel_default_console_device) -		printk(KERN_INFO "AT91: No default serial console defined.\n");  }  #else  void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} -void __init at91_set_serial_console(unsigned portnr) {}  void __init at91_add_device_serial(void) {}  #endif @@ -1775,6 +1839,9 @@ void __init at91_add_device_serial(void) {}   */  static int __init at91_add_standard_devices(void)  { +	if (of_have_populated_dt()) +		return 0; +  	at91_add_device_hdmac();  	at91_add_device_rtc();  	at91_add_device_rtt(); diff --git a/arch/arm/mach-at91/at91sam9n12.c b/arch/arm/mach-at91/at91sam9n12.c new file mode 100644 index 00000000000..08494664ab7 --- /dev/null +++ b/arch/arm/mach-at91/at91sam9n12.c @@ -0,0 +1,233 @@ +/* + * SoC specific setup code for the AT91SAM9N12 + * + * Copyright (C) 2012 Atmel Corporation. + * + * Licensed under GPLv2 or later. + */ + +#include <linux/module.h> +#include <linux/dma-mapping.h> + +#include <asm/irq.h> +#include <asm/mach/arch.h> +#include <asm/mach/map.h> +#include <mach/at91sam9n12.h> +#include <mach/at91_pmc.h> +#include <mach/cpu.h> +#include <mach/board.h> + +#include "soc.h" +#include "generic.h" +#include "clock.h" +#include "sam9_smc.h" + +/* -------------------------------------------------------------------- + *  Clocks + * -------------------------------------------------------------------- */ + +/* + * The peripheral clocks. + */ +static struct clk pioAB_clk = { +	.name		= "pioAB_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_PIOAB, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk pioCD_clk = { +	.name		= "pioCD_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_PIOCD, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk usart0_clk = { +	.name		= "usart0_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_USART0, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk usart1_clk = { +	.name		= "usart1_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_USART1, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk usart2_clk = { +	.name		= "usart2_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_USART2, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk usart3_clk = { +	.name		= "usart3_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_USART3, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk twi0_clk = { +	.name		= "twi0_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_TWI0, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk twi1_clk = { +	.name		= "twi1_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_TWI1, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk mmc_clk = { +	.name		= "mci_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_MCI, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk spi0_clk = { +	.name		= "spi0_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_SPI0, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk spi1_clk = { +	.name		= "spi1_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_SPI1, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk uart0_clk = { +	.name		= "uart0_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_UART0, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk uart1_clk = { +	.name		= "uart1_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_UART1, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk tcb_clk = { +	.name		= "tcb_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_TCB, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk pwm_clk = { +	.name		= "pwm_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_PWM, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk adc_clk = { +	.name		= "adc_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_ADC, +	.type	= CLK_TYPE_PERIPHERAL, +}; +static struct clk dma_clk = { +	.name		= "dma_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_DMA, +	.type	= CLK_TYPE_PERIPHERAL, +}; +static struct clk uhp_clk = { +	.name		= "uhp", +	.pmc_mask	= 1 << AT91SAM9N12_ID_UHP, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk udp_clk = { +	.name		= "udp_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_UDP, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk lcdc_clk = { +	.name		= "lcdc_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_LCDC, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk ssc_clk = { +	.name		= "ssc_clk", +	.pmc_mask	= 1 << AT91SAM9N12_ID_SSC, +	.type		= CLK_TYPE_PERIPHERAL, +}; + +static struct clk *periph_clocks[] __initdata = { +	&pioAB_clk, +	&pioCD_clk, +	&usart0_clk, +	&usart1_clk, +	&usart2_clk, +	&usart3_clk, +	&twi0_clk, +	&twi1_clk, +	&mmc_clk, +	&spi0_clk, +	&spi1_clk, +	&lcdc_clk, +	&uart0_clk, +	&uart1_clk, +	&tcb_clk, +	&pwm_clk, +	&adc_clk, +	&dma_clk, +	&uhp_clk, +	&udp_clk, +	&ssc_clk, +}; + +static struct clk_lookup periph_clocks_lookups[] = { +	/* lookup table for DT entries */ +	CLKDEV_CON_DEV_ID("usart", "fffff200.serial", &mck), +	CLKDEV_CON_DEV_ID("usart", "f801c000.serial", &usart0_clk), +	CLKDEV_CON_DEV_ID("usart", "f8020000.serial", &usart1_clk), +	CLKDEV_CON_DEV_ID("usart", "f8024000.serial", &usart2_clk), +	CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), +	CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb_clk), +	CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb_clk), +	CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma_clk), +	CLKDEV_CON_ID("pioA", &pioAB_clk), +	CLKDEV_CON_ID("pioB", &pioAB_clk), +	CLKDEV_CON_ID("pioC", &pioCD_clk), +	CLKDEV_CON_ID("pioD", &pioCD_clk), +	/* additional fake clock for macb_hclk */ +	CLKDEV_CON_DEV_ID("hclk", "500000.ohci", &uhp_clk), +	CLKDEV_CON_DEV_ID("ohci_clk", "500000.ohci", &uhp_clk), +}; + +/* + * The two programmable clocks. + * You must configure pin multiplexing to bring these signals out. + */ +static struct clk pck0 = { +	.name		= "pck0", +	.pmc_mask	= AT91_PMC_PCK0, +	.type		= CLK_TYPE_PROGRAMMABLE, +	.id		= 0, +}; +static struct clk pck1 = { +	.name		= "pck1", +	.pmc_mask	= AT91_PMC_PCK1, +	.type		= CLK_TYPE_PROGRAMMABLE, +	.id		= 1, +}; + +static void __init at91sam9n12_register_clocks(void) +{ +	int i; + +	for (i = 0; i < ARRAY_SIZE(periph_clocks); i++) +		clk_register(periph_clocks[i]); +	clk_register(&pck0); +	clk_register(&pck1); + +	clkdev_add_table(periph_clocks_lookups, +			 ARRAY_SIZE(periph_clocks_lookups)); + +} + +/* -------------------------------------------------------------------- + *  AT91SAM9N12 processor initialization + * -------------------------------------------------------------------- */ + +static void __init at91sam9n12_map_io(void) +{ +	at91_init_sram(0, AT91SAM9N12_SRAM_BASE, AT91SAM9N12_SRAM_SIZE); +} + +void __init at91sam9n12_initialize(void) +{ +	at91_extern_irq = (1 << AT91SAM9N12_ID_IRQ0); + +	/* Register GPIO subsystem (using DT) */ +	at91_gpio_init(NULL, 0); +} + +struct at91_init_soc __initdata at91sam9n12_soc = { +	.map_io = at91sam9n12_map_io, +	.register_clocks = at91sam9n12_register_clocks, +	.init = at91sam9n12_initialize, +}; diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c index d9f2774f385..e420085a57e 100644 --- a/arch/arm/mach-at91/at91sam9rl.c +++ b/arch/arm/mach-at91/at91sam9rl.c @@ -232,18 +232,6 @@ static void __init at91sam9rl_register_clocks(void)  	clk_register(&pck1);  } -static struct clk_lookup console_clock_lookup; - -void __init at91sam9rl_set_console_clock(int id) -{ -	if (id >= ARRAY_SIZE(usart_clocks_lookups)) -		return; - -	console_clock_lookup.con_id = "usart"; -	console_clock_lookup.clk = usart_clocks_lookups[id].clk; -	clkdev_add(&console_clock_lookup); -} -  /* --------------------------------------------------------------------   *  GPIO   * -------------------------------------------------------------------- */ diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index fe4ae22e856..9c0b1481a9a 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c @@ -1192,14 +1192,6 @@ void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins)  		at91_uarts[portnr] = pdev;  } -void __init at91_set_serial_console(unsigned portnr) -{ -	if (portnr < ATMEL_MAX_UART) { -		atmel_default_console_device = at91_uarts[portnr]; -		at91sam9rl_set_console_clock(at91_uarts[portnr]->id); -	} -} -  void __init at91_add_device_serial(void)  {  	int i; @@ -1208,13 +1200,9 @@ void __init at91_add_device_serial(void)  		if (at91_uarts[i])  			platform_device_register(at91_uarts[i]);  	} - -	if (!atmel_default_console_device) -		printk(KERN_INFO "AT91: No default serial console defined.\n");  }  #else  void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {} -void __init at91_set_serial_console(unsigned portnr) {}  void __init at91_add_device_serial(void) {}  #endif diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c index 13c8cae6046..1b144b4d3ce 100644 --- a/arch/arm/mach-at91/at91sam9x5.c +++ b/arch/arm/mach-at91/at91sam9x5.c @@ -120,6 +120,11 @@ static struct clk adc_clk = {  	.pmc_mask	= 1 << AT91SAM9X5_ID_ADC,  	.type	= CLK_TYPE_PERIPHERAL,  }; +static struct clk adc_op_clk = { +	.name		= "adc_op_clk", +	.type		= CLK_TYPE_PERIPHERAL, +	.rate_hz	= 5000000, +};  static struct clk dma0_clk = {  	.name		= "dma0_clk",  	.pmc_mask	= 1 << AT91SAM9X5_ID_DMA0, @@ -205,6 +210,7 @@ static struct clk *periph_clocks[] __initdata = {  	&tcb0_clk,  	&pwm_clk,  	&adc_clk, +	&adc_op_clk,  	&dma0_clk,  	&dma1_clk,  	&uhphs_clk, diff --git a/arch/arm/mach-at91/board-1arm.c b/arch/arm/mach-at91/board-1arm.c index 2628384aaae..271f994314a 100644 --- a/arch/arm/mach-at91/board-1arm.c +++ b/arch/arm/mach-at91/board-1arm.c @@ -47,20 +47,6 @@ static void __init onearm_init_early(void)  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1 (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* USART1 on ttyS2 (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91RM9200_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			   | ATMEL_UART_RI); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata onearm_eth_data = { @@ -82,6 +68,16 @@ static struct at91_udc_data __initdata onearm_udc_data = {  static void __init onearm_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1 (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); + +	/* USART1 on ttyS2 (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91RM9200_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			   | ATMEL_UART_RI);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&onearm_eth_data); diff --git a/arch/arm/mach-at91/board-afeb-9260v1.c b/arch/arm/mach-at91/board-afeb-9260v1.c index 161efbaa102..b7d8aa7b81e 100644 --- a/arch/arm/mach-at91/board-afeb-9260v1.c +++ b/arch/arm/mach-at91/board-afeb-9260v1.c @@ -52,22 +52,6 @@ static void __init afeb9260_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, -			     ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR -			   | ATMEL_UART_DCD | ATMEL_UART_RI); - -	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, -			ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -183,6 +167,18 @@ static struct at91_cf_data afeb9260_cf_data = {  static void __init afeb9260_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, +			     ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR +			   | ATMEL_UART_DCD | ATMEL_UART_RI); + +	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, +			ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&afeb9260_usbh_data); diff --git a/arch/arm/mach-at91/board-cam60.c b/arch/arm/mach-at91/board-cam60.c index c6d44ee0c77..29d3ef0a50f 100644 --- a/arch/arm/mach-at91/board-cam60.c +++ b/arch/arm/mach-at91/board-cam60.c @@ -49,12 +49,6 @@ static void __init cam60_init_early(void)  {  	/* Initialize processor: 10 MHz crystal */  	at91_initialize(10000000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -175,6 +169,8 @@ static void __init cam60_add_device_nand(void)  static void __init cam60_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0);  	at91_add_device_serial();  	/* SPI */  	at91_add_device_spi(cam60_spi_devices, ARRAY_SIZE(cam60_spi_devices)); diff --git a/arch/arm/mach-at91/board-carmeva.c b/arch/arm/mach-at91/board-carmeva.c index 59d9cf99753..44328a6d460 100644 --- a/arch/arm/mach-at91/board-carmeva.c +++ b/arch/arm/mach-at91/board-carmeva.c @@ -44,17 +44,6 @@ static void __init carmeva_init_early(void)  {  	/* Initialize processor: 20.000 MHz crystal */  	at91_initialize(20000000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			   | ATMEL_UART_RI); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata carmeva_eth_data = { @@ -139,6 +128,13 @@ static struct gpio_led carmeva_leds[] = {  static void __init carmeva_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			   | ATMEL_UART_RI);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&carmeva_eth_data); diff --git a/arch/arm/mach-at91/board-cpu9krea.c b/arch/arm/mach-at91/board-cpu9krea.c index 5f3680e7c88..69951ec7dbf 100644 --- a/arch/arm/mach-at91/board-cpu9krea.c +++ b/arch/arm/mach-at91/board-cpu9krea.c @@ -52,34 +52,6 @@ static void __init cpu9krea_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DGBU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | -		ATMEL_UART_RTS | ATMEL_UART_DTR | ATMEL_UART_DSR | -		ATMEL_UART_DCD | ATMEL_UART_RI); - -	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | -		ATMEL_UART_RTS); - -	/* USART2 on ttyS3. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | -		ATMEL_UART_RTS); - -	/* USART3 on ttyS4. (Rx, Tx) */ -	at91_register_uart(AT91SAM9260_ID_US3, 4, 0); - -	/* USART4 on ttyS5. (Rx, Tx) */ -	at91_register_uart(AT91SAM9260_ID_US4, 5, 0); - -	/* USART5 on ttyS6. (Rx, Tx) */ -	at91_register_uart(AT91SAM9260_ID_US5, 6, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -352,6 +324,30 @@ static void __init cpu9krea_board_init(void)  	/* NOR */  	cpu9krea_add_device_nor();  	/* Serial */ +	/* DGBU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | +		ATMEL_UART_RTS | ATMEL_UART_DTR | ATMEL_UART_DSR | +		ATMEL_UART_DCD | ATMEL_UART_RI); + +	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | +		ATMEL_UART_RTS); + +	/* USART2 on ttyS3. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | +		ATMEL_UART_RTS); + +	/* USART3 on ttyS4. (Rx, Tx) */ +	at91_register_uart(AT91SAM9260_ID_US3, 4, 0); + +	/* USART4 on ttyS5. (Rx, Tx) */ +	at91_register_uart(AT91SAM9260_ID_US4, 5, 0); + +	/* USART5 on ttyS6. (Rx, Tx) */ +	at91_register_uart(AT91SAM9260_ID_US5, 6, 0);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&cpu9krea_usbh_data); diff --git a/arch/arm/mach-at91/board-cpuat91.c b/arch/arm/mach-at91/board-cpuat91.c index e094cc81fe2..895cf2dba61 100644 --- a/arch/arm/mach-at91/board-cpuat91.c +++ b/arch/arm/mach-at91/board-cpuat91.c @@ -59,28 +59,6 @@ static void __init cpuat91_init_early(void)  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | -		ATMEL_UART_RTS); - -	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91RM9200_ID_US1, 2, ATMEL_UART_CTS | -		ATMEL_UART_RTS | ATMEL_UART_DTR | ATMEL_UART_DSR | -		ATMEL_UART_DCD | ATMEL_UART_RI); - -	/* USART2 on ttyS3 (Rx, Tx) */ -	at91_register_uart(AT91RM9200_ID_US2, 3, 0); - -	/* USART3 on ttyS4 (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91RM9200_ID_US3, 4, ATMEL_UART_CTS | -		ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata cpuat91_eth_data = { @@ -161,6 +139,24 @@ static struct platform_device *platform_devices[] __initdata = {  static void __init cpuat91_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | +		ATMEL_UART_RTS); + +	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91RM9200_ID_US1, 2, ATMEL_UART_CTS | +		ATMEL_UART_RTS | ATMEL_UART_DTR | ATMEL_UART_DSR | +		ATMEL_UART_DCD | ATMEL_UART_RI); + +	/* USART2 on ttyS3 (Rx, Tx) */ +	at91_register_uart(AT91RM9200_ID_US2, 3, 0); + +	/* USART3 on ttyS4 (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91RM9200_ID_US3, 4, ATMEL_UART_CTS | +		ATMEL_UART_RTS);  	at91_add_device_serial();  	/* LEDs. */  	at91_gpio_leds(cpuat91_leds, ARRAY_SIZE(cpuat91_leds)); diff --git a/arch/arm/mach-at91/board-csb337.c b/arch/arm/mach-at91/board-csb337.c index 1a1547b1ce4..cd813361cd2 100644 --- a/arch/arm/mach-at91/board-csb337.c +++ b/arch/arm/mach-at91/board-csb337.c @@ -47,15 +47,6 @@ static void __init csb337_init_early(void)  {  	/* Initialize processor: 3.6864 MHz crystal */  	at91_initialize(3686400); - -	/* Setup the LEDs */ -	at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1); - -	/* DBGU on ttyS0 */ -	at91_register_uart(0, 0, 0); - -	/* make console=ttyS0 the default */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata csb337_eth_data = { @@ -228,7 +219,11 @@ static struct gpio_led csb_leds[] = {  static void __init csb337_board_init(void)  { +	/* Setup the LEDs */ +	at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1);  	/* Serial */ +	/* DBGU on ttyS0 */ +	at91_register_uart(0, 0, 0);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&csb337_eth_data); diff --git a/arch/arm/mach-at91/board-csb637.c b/arch/arm/mach-at91/board-csb637.c index f650bf39455..7c8b05a57d7 100644 --- a/arch/arm/mach-at91/board-csb637.c +++ b/arch/arm/mach-at91/board-csb637.c @@ -44,12 +44,6 @@ static void __init csb637_init_early(void)  {  	/* Initialize processor: 3.6864 MHz crystal */  	at91_initialize(3686400); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* make console=ttyS0 (ie, DBGU) the default */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata csb637_eth_data = { @@ -118,6 +112,8 @@ static void __init csb637_board_init(void)  	/* LED(s) */  	at91_gpio_leds(csb_leds, ARRAY_SIZE(csb_leds));  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&csb637_eth_data); diff --git a/arch/arm/mach-at91/board-dt.c b/arch/arm/mach-at91/board-dt.c index c18d4d30780..a1fce05aa7a 100644 --- a/arch/arm/mach-at91/board-dt.c +++ b/arch/arm/mach-at91/board-dt.c @@ -1,10 +1,6 @@  /*   *  Setup code for AT91SAM Evaluation Kits with Device Tree support   * - *  Covers: * AT91SAM9G45-EKES  board - *          * AT91SAM9M10-EKES  board - *          * AT91SAM9M10G45-EK board - *   *  Copyright (C) 2011 Atmel,   *                2011 Nicolas Ferre <nicolas.ferre@atmel.com>   * @@ -49,9 +45,7 @@ static void __init at91_dt_device_init(void)  }  static const char *at91_dt_board_compat[] __initdata = { -	"atmel,at91sam9m10g45ek", -	"atmel,at91sam9x5ek", -	"calao,usb-a9g20", +	"atmel,at91sam9",  	NULL  }; diff --git a/arch/arm/mach-at91/board-eb9200.c b/arch/arm/mach-at91/board-eb9200.c index d302ca3eeb6..bd101729798 100644 --- a/arch/arm/mach-at91/board-eb9200.c +++ b/arch/arm/mach-at91/board-eb9200.c @@ -44,20 +44,6 @@ static void __init eb9200_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			| ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			| ATMEL_UART_RI); - -	/* USART2 on ttyS2. (Rx, Tx) - IRDA */ -	at91_register_uart(AT91RM9200_ID_US2, 2, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata eb9200_eth_data = { @@ -101,6 +87,16 @@ static struct i2c_board_info __initdata eb9200_i2c_devices[] = {  static void __init eb9200_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			| ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			| ATMEL_UART_RI); + +	/* USART2 on ttyS2. (Rx, Tx) - IRDA */ +	at91_register_uart(AT91RM9200_ID_US2, 2, 0);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&eb9200_eth_data); diff --git a/arch/arm/mach-at91/board-ecbat91.c b/arch/arm/mach-at91/board-ecbat91.c index 69966ce4d77..89cc3726a9c 100644 --- a/arch/arm/mach-at91/board-ecbat91.c +++ b/arch/arm/mach-at91/board-ecbat91.c @@ -50,18 +50,6 @@ static void __init ecb_at91init_early(void)  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* Setup the LEDs */ -	at91_init_leds(AT91_PIN_PC7, AT91_PIN_PC7); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx & Tx only) */ -	at91_register_uart(AT91RM9200_ID_US0, 1, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata ecb_at91eth_data = { @@ -151,7 +139,15 @@ static struct spi_board_info __initdata ecb_at91spi_devices[] = {  static void __init ecb_at91board_init(void)  { +	/* Setup the LEDs */ +	at91_init_leds(AT91_PIN_PC7, AT91_PIN_PC7); +  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx & Tx only) */ +	at91_register_uart(AT91RM9200_ID_US0, 1, 0);  	at91_add_device_serial();  	/* Ethernet */ diff --git a/arch/arm/mach-at91/board-eco920.c b/arch/arm/mach-at91/board-eco920.c index f23aabef855..558546cf63f 100644 --- a/arch/arm/mach-at91/board-eco920.c +++ b/arch/arm/mach-at91/board-eco920.c @@ -37,15 +37,6 @@ static void __init eco920_init_early(void)  	at91rm9200_set_type(ARCH_REVISON_9200_PQFP);  	at91_initialize(18432000); - -	/* Setup the LEDs */ -	at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1); - -	/* DBGU on ttyS0. (Rx & Tx only */ -	at91_register_uart(0, 0, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata eco920_eth_data = { @@ -103,6 +94,10 @@ static struct spi_board_info eco920_spi_devices[] = {  static void __init eco920_board_init(void)  { +	/* Setup the LEDs */ +	at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1); +	/* DBGU on ttyS0. (Rx & Tx only */ +	at91_register_uart(0, 0, 0);  	at91_add_device_serial();  	at91_add_device_eth(&eco920_eth_data);  	at91_add_device_usbh(&eco920_usbh_data); diff --git a/arch/arm/mach-at91/board-flexibity.c b/arch/arm/mach-at91/board-flexibity.c index 1815152001f..47658f78105 100644 --- a/arch/arm/mach-at91/board-flexibity.c +++ b/arch/arm/mach-at91/board-flexibity.c @@ -41,12 +41,6 @@ static void __init flexibity_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* USB Host port */ @@ -143,6 +137,8 @@ static struct gpio_led flexibity_leds[] = {  static void __init flexibity_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&flexibity_usbh_data); diff --git a/arch/arm/mach-at91/board-foxg20.c b/arch/arm/mach-at91/board-foxg20.c index caf017f0f4e..33411e6ecb1 100644 --- a/arch/arm/mach-at91/board-foxg20.c +++ b/arch/arm/mach-at91/board-foxg20.c @@ -61,44 +61,6 @@ static void __init foxg20_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, -				ATMEL_UART_CTS -				| ATMEL_UART_RTS -				| ATMEL_UART_DTR -				| ATMEL_UART_DSR -				| ATMEL_UART_DCD -				| ATMEL_UART_RI); - -	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, -		ATMEL_UART_CTS -		| ATMEL_UART_RTS); - -	/* USART2 on ttyS3. (Rx & Tx only) */ -	at91_register_uart(AT91SAM9260_ID_US2, 3, 0); - -	/* USART3 on ttyS4. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9260_ID_US3, 4, -		ATMEL_UART_CTS -		| ATMEL_UART_RTS); - -	/* USART4 on ttyS5. (Rx & Tx only) */ -	at91_register_uart(AT91SAM9260_ID_US4, 5, 0); - -	/* USART5 on ttyS6. (Rx & Tx only) */ -	at91_register_uart(AT91SAM9260_ID_US5, 6, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0); - -	/* Set the internal pull-up resistor on DRXD */ -	at91_set_A_periph(AT91_PIN_PB14, 1); -  }  /* @@ -241,6 +203,39 @@ static struct i2c_board_info __initdata foxg20_i2c_devices[] = {  static void __init foxg20_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, +				ATMEL_UART_CTS +				| ATMEL_UART_RTS +				| ATMEL_UART_DTR +				| ATMEL_UART_DSR +				| ATMEL_UART_DCD +				| ATMEL_UART_RI); + +	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, +		ATMEL_UART_CTS +		| ATMEL_UART_RTS); + +	/* USART2 on ttyS3. (Rx & Tx only) */ +	at91_register_uart(AT91SAM9260_ID_US2, 3, 0); + +	/* USART3 on ttyS4. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9260_ID_US3, 4, +		ATMEL_UART_CTS +		| ATMEL_UART_RTS); + +	/* USART4 on ttyS5. (Rx & Tx only) */ +	at91_register_uart(AT91SAM9260_ID_US4, 5, 0); + +	/* USART5 on ttyS6. (Rx & Tx only) */ +	at91_register_uart(AT91SAM9260_ID_US5, 6, 0); + +	/* Set the internal pull-up resistor on DRXD */ +	at91_set_A_periph(AT91_PIN_PB14, 1);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&foxg20_usbh_data); diff --git a/arch/arm/mach-at91/board-gsia18s.c b/arch/arm/mach-at91/board-gsia18s.c index 230e71969fb..3e0dfa643a8 100644 --- a/arch/arm/mach-at91/board-gsia18s.c +++ b/arch/arm/mach-at91/board-gsia18s.c @@ -41,38 +41,6 @@  static void __init gsia18s_init_early(void)  {  	stamp9g20_init_early(); - -	/* -	 * USART0 on ttyS1 (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI). -	 * Used for Internal Analog Modem. -	 */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, -				ATMEL_UART_CTS | ATMEL_UART_RTS | -				ATMEL_UART_DTR | ATMEL_UART_DSR | -				ATMEL_UART_DCD | ATMEL_UART_RI); -	/* -	 * USART1 on ttyS2 (Rx, Tx, CTS, RTS). -	 * Used for GPS or WiFi or Data stream. -	 */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, -				ATMEL_UART_CTS | ATMEL_UART_RTS); -	/* -	 * USART2 on ttyS3 (Rx, Tx, CTS, RTS). -	 * Used for External Modem. -	 */ -	at91_register_uart(AT91SAM9260_ID_US2, 3, -				ATMEL_UART_CTS | ATMEL_UART_RTS); -	/* -	 * USART3 on ttyS4 (Rx, Tx, RTS). -	 * Used for RS-485. -	 */ -	at91_register_uart(AT91SAM9260_ID_US3, 4, ATMEL_UART_RTS); - -	/* -	 * USART4 on ttyS5 (Rx, Tx). -	 * Used for TRX433 Radio Module. -	 */ -	at91_register_uart(AT91SAM9260_ID_US4, 5, 0);  }  /* @@ -558,6 +526,37 @@ static int __init gsia18s_power_off_init(void)  static void __init gsia18s_board_init(void)  { +	/* +	 * USART0 on ttyS1 (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI). +	 * Used for Internal Analog Modem. +	 */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, +				ATMEL_UART_CTS | ATMEL_UART_RTS | +				ATMEL_UART_DTR | ATMEL_UART_DSR | +				ATMEL_UART_DCD | ATMEL_UART_RI); +	/* +	 * USART1 on ttyS2 (Rx, Tx, CTS, RTS). +	 * Used for GPS or WiFi or Data stream. +	 */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, +				ATMEL_UART_CTS | ATMEL_UART_RTS); +	/* +	 * USART2 on ttyS3 (Rx, Tx, CTS, RTS). +	 * Used for External Modem. +	 */ +	at91_register_uart(AT91SAM9260_ID_US2, 3, +				ATMEL_UART_CTS | ATMEL_UART_RTS); +	/* +	 * USART3 on ttyS4 (Rx, Tx, RTS). +	 * Used for RS-485. +	 */ +	at91_register_uart(AT91SAM9260_ID_US3, 4, ATMEL_UART_RTS); + +	/* +	 * USART4 on ttyS5 (Rx, Tx). +	 * Used for TRX433 Radio Module. +	 */ +	at91_register_uart(AT91SAM9260_ID_US4, 5, 0);  	stamp9g20_board_init();  	at91_add_device_usbh(&usbh_data);  	at91_add_device_udc(&udc_data); diff --git a/arch/arm/mach-at91/board-kafa.c b/arch/arm/mach-at91/board-kafa.c index efde1b2327c..f260657f32b 100644 --- a/arch/arm/mach-at91/board-kafa.c +++ b/arch/arm/mach-at91/board-kafa.c @@ -47,18 +47,6 @@ static void __init kafa_init_early(void)  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* Set up the LEDs */ -	at91_init_leds(AT91_PIN_PB4, AT91_PIN_PB4); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1 (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata kafa_eth_data = { @@ -79,7 +67,15 @@ static struct at91_udc_data __initdata kafa_udc_data = {  static void __init kafa_board_init(void)  { +	/* Set up the LEDs */ +	at91_init_leds(AT91_PIN_PB4, AT91_PIN_PB4); +  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1 (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&kafa_eth_data); diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c index 59b92aab9bc..ba39db5482b 100644 --- a/arch/arm/mach-at91/board-kb9202.c +++ b/arch/arm/mach-at91/board-kb9202.c @@ -50,24 +50,6 @@ static void __init kb9202_init_early(void)  	/* Initialize processor: 10 MHz crystal */  	at91_initialize(10000000); - -	/* Set up the LEDs */ -	at91_init_leds(AT91_PIN_PC19, AT91_PIN_PC18); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1 (Rx & Tx only) */ -	at91_register_uart(AT91RM9200_ID_US0, 1, 0); - -	/* USART1 on ttyS2 (Rx & Tx only) - IRDA (optional) */ -	at91_register_uart(AT91RM9200_ID_US1, 2, 0); - -	/* USART3 on ttyS3 (Rx, Tx, CTS, RTS) - RS485 (optional) */ -	at91_register_uart(AT91RM9200_ID_US3, 3, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata kb9202_eth_data = { @@ -115,7 +97,21 @@ static struct atmel_nand_data __initdata kb9202_nand_data = {  static void __init kb9202_board_init(void)  { +	/* Set up the LEDs */ +	at91_init_leds(AT91_PIN_PC19, AT91_PIN_PC18); +  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1 (Rx & Tx only) */ +	at91_register_uart(AT91RM9200_ID_US0, 1, 0); + +	/* USART1 on ttyS2 (Rx & Tx only) - IRDA (optional) */ +	at91_register_uart(AT91RM9200_ID_US1, 2, 0); + +	/* USART3 on ttyS3 (Rx, Tx, CTS, RTS) - RS485 (optional) */ +	at91_register_uart(AT91RM9200_ID_US3, 3, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&kb9202_eth_data); diff --git a/arch/arm/mach-at91/board-neocore926.c b/arch/arm/mach-at91/board-neocore926.c index 57d5f6a4726..d2f4cc16176 100644 --- a/arch/arm/mach-at91/board-neocore926.c +++ b/arch/arm/mach-at91/board-neocore926.c @@ -55,15 +55,6 @@ static void __init neocore926_init_early(void)  {  	/* Initialize processor: 20 MHz crystal */  	at91_initialize(20000000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9263_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -341,6 +332,11 @@ static struct ac97c_platform_data neocore926_ac97_data = {  static void __init neocore926_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9263_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* USB Host */ diff --git a/arch/arm/mach-at91/board-pcontrol-g20.c b/arch/arm/mach-at91/board-pcontrol-g20.c index b4a12fc184c..7fe63834242 100644 --- a/arch/arm/mach-at91/board-pcontrol-g20.c +++ b/arch/arm/mach-at91/board-pcontrol-g20.c @@ -40,17 +40,6 @@  static void __init pcontrol_g20_init_early(void)  {  	stamp9g20_init_early(); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) piggyback  A2 */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS -						| ATMEL_UART_RTS); - -	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS) isolated RS485  X5 */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS -						| ATMEL_UART_RTS); - -	/* USART2 on ttyS3. (Rx, Tx)  9bit-Bus  Multidrop-mode  X4 */ -	at91_register_uart(AT91SAM9260_ID_US4, 3, 0);  }  static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { { @@ -199,6 +188,16 @@ static struct spi_board_info pcontrol_g20_spi_devices[] = {  static void __init pcontrol_g20_board_init(void)  { +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) piggyback  A2 */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS +						| ATMEL_UART_RTS); + +	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS) isolated RS485  X5 */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS +						| ATMEL_UART_RTS); + +	/* USART2 on ttyS3. (Rx, Tx)  9bit-Bus  Multidrop-mode  X4 */ +	at91_register_uart(AT91SAM9260_ID_US4, 3, 0);  	stamp9g20_board_init();  	at91_add_device_usbh(&usbh_data);  	at91_add_device_eth(&macb_data); diff --git a/arch/arm/mach-at91/board-picotux200.c b/arch/arm/mach-at91/board-picotux200.c index 59e35dd1486..b45c0a5d5ca 100644 --- a/arch/arm/mach-at91/board-picotux200.c +++ b/arch/arm/mach-at91/board-picotux200.c @@ -48,17 +48,6 @@ static void __init picotux200_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			  | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			  | ATMEL_UART_RI); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata picotux200_eth_data = { @@ -106,6 +95,13 @@ static struct platform_device picotux200_flash = {  static void __init picotux200_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			  | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			  | ATMEL_UART_RI);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&picotux200_eth_data); diff --git a/arch/arm/mach-at91/board-qil-a9260.c b/arch/arm/mach-at91/board-qil-a9260.c index b6ed5ed7081..0c61bf0d272 100644 --- a/arch/arm/mach-at91/board-qil-a9260.c +++ b/arch/arm/mach-at91/board-qil-a9260.c @@ -52,24 +52,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 12.000 MHz crystal */  	at91_initialize(12000000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			   | ATMEL_UART_RI); - -	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* USART2 on ttyS3. (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS1 (ie, USART0) */ -	at91_set_serial_console(1); -  }  /* @@ -235,6 +217,19 @@ static struct gpio_led ek_leds[] = {  static void __init ek_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			   | ATMEL_UART_RI); + +	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); + +	/* USART2 on ttyS3. (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&ek_usbh_data); diff --git a/arch/arm/mach-at91/board-rm9200dk.c b/arch/arm/mach-at91/board-rm9200dk.c index 01332aa538b..afd7a471376 100644 --- a/arch/arm/mach-at91/board-rm9200dk.c +++ b/arch/arm/mach-at91/board-rm9200dk.c @@ -50,20 +50,6 @@ static void __init dk_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* Setup the LEDs */ -	at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			   | ATMEL_UART_RI); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata dk_eth_data = { @@ -190,7 +176,17 @@ static struct gpio_led dk_leds[] = {  static void __init dk_board_init(void)  { +	/* Setup the LEDs */ +	at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); +  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			   | ATMEL_UART_RI);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&dk_eth_data); diff --git a/arch/arm/mach-at91/board-rm9200ek.c b/arch/arm/mach-at91/board-rm9200ek.c index b2e4fe21f34..2b15b8adec4 100644 --- a/arch/arm/mach-at91/board-rm9200ek.c +++ b/arch/arm/mach-at91/board-rm9200ek.c @@ -50,20 +50,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* Setup the LEDs */ -	at91_init_leds(AT91_PIN_PB1, AT91_PIN_PB2); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			   | ATMEL_UART_RI); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  static struct macb_platform_data __initdata ek_eth_data = { @@ -161,7 +147,17 @@ static struct gpio_led ek_leds[] = {  static void __init ek_board_init(void)  { +	/* Setup the LEDs */ +	at91_init_leds(AT91_PIN_PB1, AT91_PIN_PB2); +  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			   | ATMEL_UART_RI);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&ek_eth_data); diff --git a/arch/arm/mach-at91/board-rsi-ews.c b/arch/arm/mach-at91/board-rsi-ews.c index af0750fafa2..24ab9be7510 100644 --- a/arch/arm/mach-at91/board-rsi-ews.c +++ b/arch/arm/mach-at91/board-rsi-ews.c @@ -35,26 +35,6 @@ static void __init rsi_ews_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* Setup the LEDs */ -	at91_init_leds(AT91_PIN_PB6, AT91_PIN_PB9); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	/* This one is for debugging */ -	at91_register_uart(0, 0, 0); - -	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	/* Dialin/-out modem interface */ -	at91_register_uart(AT91RM9200_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			   | ATMEL_UART_RI); - -	/* USART3 on ttyS4. (Rx, Tx, RTS) */ -	/* RS485 communication */ -	at91_register_uart(AT91RM9200_ID_US3, 4, ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -204,7 +184,23 @@ static struct platform_device rsiews_nor_flash = {   */  static void __init rsi_ews_board_init(void)  { +	/* Setup the LEDs */ +	at91_init_leds(AT91_PIN_PB6, AT91_PIN_PB9); +  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	/* This one is for debugging */ +	at91_register_uart(0, 0, 0); + +	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	/* Dialin/-out modem interface */ +	at91_register_uart(AT91RM9200_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			   | ATMEL_UART_RI); + +	/* USART3 on ttyS4. (Rx, Tx, RTS) */ +	/* RS485 communication */ +	at91_register_uart(AT91RM9200_ID_US3, 4, ATMEL_UART_RTS);  	at91_add_device_serial();  	at91_set_gpio_output(AT91_PIN_PA21, 0);  	/* Ethernet */ diff --git a/arch/arm/mach-at91/board-sam9-l9260.c b/arch/arm/mach-at91/board-sam9-l9260.c index e8b116b6cba..cdd21f2595d 100644 --- a/arch/arm/mach-at91/board-sam9-l9260.c +++ b/arch/arm/mach-at91/board-sam9-l9260.c @@ -48,23 +48,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* Setup the LEDs */ -	at91_init_leds(AT91_PIN_PA9, AT91_PIN_PA6); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			   | ATMEL_UART_RI); - -	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -184,7 +167,20 @@ static struct at91_mmc_data __initdata ek_mmc_data = {  static void __init ek_board_init(void)  { +	/* Setup the LEDs */ +	at91_init_leds(AT91_PIN_PA9, AT91_PIN_PA6); +  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			   | ATMEL_UART_RI); + +	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&ek_usbh_data); diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/board-sam9260ek.c index d5aec55b0eb..7b3c3913551 100644 --- a/arch/arm/mach-at91/board-sam9260ek.c +++ b/arch/arm/mach-at91/board-sam9260ek.c @@ -54,20 +54,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			   | ATMEL_UART_RI); - -	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -320,6 +306,16 @@ static void __init ek_add_device_buttons(void) {}  static void __init ek_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			   | ATMEL_UART_RI); + +	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&ek_usbh_data); diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c index 065fed34242..2736453821b 100644 --- a/arch/arm/mach-at91/board-sam9261ek.c +++ b/arch/arm/mach-at91/board-sam9261ek.c @@ -58,15 +58,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* Setup the LEDs */ -	at91_init_leds(AT91_PIN_PA13, AT91_PIN_PA14); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -577,7 +568,12 @@ static struct gpio_led ek_leds[] = {  static void __init ek_board_init(void)  { +	/* Setup the LEDs */ +	at91_init_leds(AT91_PIN_PA13, AT91_PIN_PA14); +  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&ek_usbh_data); diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c index 2ffe50f3a9e..983cb98d246 100644 --- a/arch/arm/mach-at91/board-sam9263ek.c +++ b/arch/arm/mach-at91/board-sam9263ek.c @@ -57,15 +57,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 16.367 MHz crystal */  	at91_initialize(16367660); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9263_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -412,6 +403,11 @@ static struct at91_can_data ek_can_data = {  static void __init ek_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9263_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&ek_usbh_data); diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index 8923ec9f583..6860d345110 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c @@ -32,6 +32,8 @@  #include <linux/regulator/fixed.h>  #include <linux/regulator/consumer.h> +#include <linux/platform_data/at91_adc.h> +  #include <mach/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h> @@ -65,20 +67,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			   | ATMEL_UART_RI); - -	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -318,6 +306,16 @@ static void __init ek_add_device_buttons(void)  static void __init ek_add_device_buttons(void) {}  #endif +/* + * ADCs + */ + +static struct at91_adc_data ek_adc_data = { +	.channels_used = BIT(0) | BIT(1) | BIT(2) | BIT(3), +	.use_external_triggers = true, +	.vref = 3300, +}; +  #if defined(CONFIG_REGULATOR_FIXED_VOLTAGE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE)  static struct regulator_consumer_supply ek_audio_consumer_supplies[] = {  	REGULATOR_SUPPLY("AVDD", "0-001b"), @@ -372,6 +370,16 @@ static struct i2c_board_info __initdata ek_i2c_devices[] = {  static void __init ek_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			   | ATMEL_UART_RI); + +	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&ek_usbh_data); @@ -393,6 +401,8 @@ static void __init ek_board_init(void)  	ek_add_device_gpio_leds();  	/* Push Buttons */  	ek_add_device_buttons(); +	/* ADCs */ +	at91_add_device_adc(&ek_adc_data);  	/* PCK0 provides MCLK to the WM8731 */  	at91_set_B_periph(AT91_PIN_PC1, 0);  	/* SSC (for WM8731) */ diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index c88e908ddd8..63163dc7df4 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c @@ -27,6 +27,8 @@  #include <linux/atmel-mci.h>  #include <linux/delay.h> +#include <linux/platform_data/at91_adc.h> +  #include <mach/hardware.h>  #include <video/atmel_lcdc.h>  #include <media/soc_camera.h> @@ -53,16 +55,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 12.000 MHz crystal */  	at91_initialize(12000000); - -	/* DGBU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 not connected on the -EK board */ -	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ -	at91_register_uart(AT91SAM9G45_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -315,6 +307,14 @@ static struct at91_tsadcc_data ek_tsadcc_data = {  	.ts_sample_hold_time	= 0x0a,  }; +/* + * ADCs + */ +static struct at91_adc_data ek_adc_data = { +	.channels_used = BIT(0) | BIT(1) | BIT(2) | BIT(3) | BIT(4) | BIT(5) | BIT(6) | BIT(7), +	.use_external_triggers = true, +	.vref = 3300, +};  /*   * GPIO Buttons @@ -457,6 +457,12 @@ static struct platform_device *devices[] __initdata = {  static void __init ek_board_init(void)  {  	/* Serial */ +	/* DGBU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 not connected on the -EK board */ +	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ +	at91_register_uart(AT91SAM9G45_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* USB HS Host */  	at91_add_device_usbh_ohci(&ek_usbh_hs_data); @@ -480,6 +486,8 @@ static void __init ek_board_init(void)  	at91_add_device_lcdc(&ek_lcdc_data);  	/* Touch Screen */  	at91_add_device_tsadcc(&ek_tsadcc_data); +	/* ADC */ +	at91_add_device_adc(&ek_adc_data);  	/* Push Buttons */  	ek_add_device_buttons();  	/* AC97 */ diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c index b109ce2ba86..be3239f13da 100644 --- a/arch/arm/mach-at91/board-sam9rlek.c +++ b/arch/arm/mach-at91/board-sam9rlek.c @@ -42,15 +42,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 12.000 MHz crystal */  	at91_initialize(12000000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91SAM9RL_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -296,6 +287,11 @@ static void __init ek_add_device_buttons(void) {}  static void __init ek_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91SAM9RL_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);  	at91_add_device_serial();  	/* USB HS */  	at91_add_device_usba(&ek_usba_udc_data); diff --git a/arch/arm/mach-at91/board-snapper9260.c b/arch/arm/mach-at91/board-snapper9260.c index ebc9d01ce74..9d446f1bb45 100644 --- a/arch/arm/mach-at91/board-snapper9260.c +++ b/arch/arm/mach-at91/board-snapper9260.c @@ -43,16 +43,6 @@  static void __init snapper9260_init_early(void)  {  	at91_initialize(18432000); - -	/* Debug on ttyS0 */ -	at91_register_uart(0, 0, 0); -	at91_set_serial_console(0); - -	at91_register_uart(AT91SAM9260_ID_US0, 1, -			   ATMEL_UART_CTS | ATMEL_UART_RTS); -	at91_register_uart(AT91SAM9260_ID_US1, 2, -			   ATMEL_UART_CTS | ATMEL_UART_RTS); -	at91_register_uart(AT91SAM9260_ID_US2, 3, 0);  }  static struct at91_usbh_data __initdata snapper9260_usbh_data = { @@ -168,6 +158,14 @@ static void __init snapper9260_board_init(void)  	snapper9260_i2c_isl1208.irq = gpio_to_irq(AT91_PIN_PA31);  	i2c_register_board_info(0, &snapper9260_i2c_isl1208, 1); +	/* Debug on ttyS0 */ +	at91_register_uart(0, 0, 0); + +	at91_register_uart(AT91SAM9260_ID_US0, 1, +			   ATMEL_UART_CTS | ATMEL_UART_RTS); +	at91_register_uart(AT91SAM9260_ID_US1, 2, +			   ATMEL_UART_CTS | ATMEL_UART_RTS); +	at91_register_uart(AT91SAM9260_ID_US2, 3, 0);  	at91_add_device_serial();  	at91_add_device_usbh(&snapper9260_usbh_data);  	at91_add_device_udc(&snapper9260_udc_data); diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c index 7640049410a..ee86f9d7ee7 100644 --- a/arch/arm/mach-at91/board-stamp9g20.c +++ b/arch/arm/mach-at91/board-stamp9g20.c @@ -36,44 +36,6 @@ void __init stamp9g20_init_early(void)  {  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* DGBU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0); -} - -static void __init stamp9g20evb_init_early(void) -{ -	stamp9g20_init_early(); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -						| ATMEL_UART_DTR | ATMEL_UART_DSR -						| ATMEL_UART_DCD | ATMEL_UART_RI); -} - -static void __init portuxg20_init_early(void) -{ -	stamp9g20_init_early(); - -	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -						| ATMEL_UART_DTR | ATMEL_UART_DSR -						| ATMEL_UART_DCD | ATMEL_UART_RI); - -	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* USART2 on ttyS3. (Rx, Tx, CTS, RTS) */ -	at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS); - -	/* USART4 on ttyS5. (Rx, Tx only) */ -	at91_register_uart(AT91SAM9260_ID_US4, 5, 0); - -	/* USART5 on ttyS6. (Rx, Tx only) */ -	at91_register_uart(AT91SAM9260_ID_US5, 6, 0);  }  /* @@ -254,6 +216,8 @@ void add_w1(void)  void __init stamp9g20_board_init(void)  {  	/* Serial */ +	/* DGBU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0);  	at91_add_device_serial();  	/* NAND */  	add_device_nand(); @@ -269,6 +233,22 @@ void __init stamp9g20_board_init(void)  static void __init portuxg20_board_init(void)  { +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +						| ATMEL_UART_DTR | ATMEL_UART_DSR +						| ATMEL_UART_DCD | ATMEL_UART_RI); + +	/* USART1 on ttyS2. (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); + +	/* USART2 on ttyS3. (Rx, Tx, CTS, RTS) */ +	at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS); + +	/* USART4 on ttyS5. (Rx, Tx only) */ +	at91_register_uart(AT91SAM9260_ID_US4, 5, 0); + +	/* USART5 on ttyS6. (Rx, Tx only) */ +	at91_register_uart(AT91SAM9260_ID_US5, 6, 0);  	stamp9g20_board_init();  	/* USB Host */  	at91_add_device_usbh(&usbh_data); @@ -286,6 +266,10 @@ static void __init portuxg20_board_init(void)  static void __init stamp9g20evb_board_init(void)  { +	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +						| ATMEL_UART_DTR | ATMEL_UART_DSR +						| ATMEL_UART_DCD | ATMEL_UART_RI);  	stamp9g20_board_init();  	/* USB Host */  	at91_add_device_usbh(&usbh_data); @@ -303,7 +287,7 @@ MACHINE_START(PORTUXG20, "taskit PortuxG20")  	/* Maintainer: taskit GmbH */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, -	.init_early	= portuxg20_init_early, +	.init_early	= stamp9g20_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= portuxg20_board_init,  MACHINE_END @@ -312,7 +296,7 @@ MACHINE_START(STAMP9G20, "taskit Stamp9G20")  	/* Maintainer: taskit GmbH */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, -	.init_early	= stamp9g20evb_init_early, +	.init_early	= stamp9g20_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= stamp9g20evb_board_init,  MACHINE_END diff --git a/arch/arm/mach-at91/board-usb-a926x.c b/arch/arm/mach-at91/board-usb-a926x.c index b7483a3d098..95393fcaf19 100644 --- a/arch/arm/mach-at91/board-usb-a926x.c +++ b/arch/arm/mach-at91/board-usb-a926x.c @@ -53,12 +53,6 @@ static void __init ek_init_early(void)  {  	/* Initialize processor: 12.00 MHz crystal */  	at91_initialize(12000000); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -178,6 +172,10 @@ static struct mtd_partition __initdata ek_nand_partition[] = {  		.offset	= MTDPART_OFS_NXTBLK,  		.size	= SZ_128K,  	}, { +		.name	= "oftree", +		.offset	= MTDPART_OFS_NXTBLK, +		.size	= SZ_128K, +	}, {  		.name	= "kernel",  		.offset	= MTDPART_OFS_NXTBLK,  		.size	= 4 * SZ_1M, @@ -325,6 +323,8 @@ static void __init ek_add_device_leds(void)  static void __init ek_board_init(void)  {  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0);  	at91_add_device_serial();  	/* USB Host */  	at91_add_device_usbh(&ek_usbh_data); diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/board-yl-9200.c index 38dd279d30b..d56665ea4b5 100644 --- a/arch/arm/mach-at91/board-yl-9200.c +++ b/arch/arm/mach-at91/board-yl-9200.c @@ -58,26 +58,6 @@ static void __init yl9200_init_early(void)  	/* Initialize processor: 18.432 MHz crystal */  	at91_initialize(18432000); - -	/* Setup the LEDs D2=PB17 (timer), D3=PB16 (cpu) */ -	at91_init_leds(AT91_PIN_PB16, AT91_PIN_PB17); - -	/* DBGU on ttyS0. (Rx & Tx only) */ -	at91_register_uart(0, 0, 0); - -	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ -	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS -			| ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD -			| ATMEL_UART_RI); - -	/* USART0 on ttyS2. (Rx & Tx only to JP3) */ -	at91_register_uart(AT91RM9200_ID_US0, 2, 0); - -	/* USART3 on ttyS3. (Rx, Tx, RTS - RS485 interface) */ -	at91_register_uart(AT91RM9200_ID_US3, 3, ATMEL_UART_RTS); - -	/* set serial console to ttyS0 (ie, DBGU) */ -	at91_set_serial_console(0);  }  /* @@ -560,7 +540,23 @@ void __init yl9200_add_device_video(void) {}  static void __init yl9200_board_init(void)  { +	/* Setup the LEDs D2=PB17 (timer), D3=PB16 (cpu) */ +	at91_init_leds(AT91_PIN_PB16, AT91_PIN_PB17); +  	/* Serial */ +	/* DBGU on ttyS0. (Rx & Tx only) */ +	at91_register_uart(0, 0, 0); + +	/* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ +	at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS +			| ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD +			| ATMEL_UART_RI); + +	/* USART0 on ttyS2. (Rx & Tx only to JP3) */ +	at91_register_uart(AT91RM9200_ID_US0, 2, 0); + +	/* USART3 on ttyS3. (Rx, Tx, RTS - RS485 interface) */ +	at91_register_uart(AT91RM9200_ID_US3, 3, ATMEL_UART_RTS);  	at91_add_device_serial();  	/* Ethernet */  	at91_add_device_eth(&yl9200_eth_data); diff --git a/arch/arm/mach-at91/clock.c b/arch/arm/mach-at91/clock.c index 6b692824c98..de2ec6b8fea 100644 --- a/arch/arm/mach-at91/clock.c +++ b/arch/arm/mach-at91/clock.c @@ -58,13 +58,15 @@ EXPORT_SYMBOL_GPL(at91_pmc_base);  #define cpu_has_800M_plla()	(  cpu_is_at91sam9g20() \  				|| cpu_is_at91sam9g45() \ -				|| cpu_is_at91sam9x5()) +				|| cpu_is_at91sam9x5() \ +				|| cpu_is_at91sam9n12())  #define cpu_has_300M_plla()	(cpu_is_at91sam9g10())  #define cpu_has_pllb()		(!(cpu_is_at91sam9rl() \  				|| cpu_is_at91sam9g45() \ -				|| cpu_is_at91sam9x5())) +				|| cpu_is_at91sam9x5() \ +				|| cpu_is_at91sam9n12()))  #define cpu_has_upll()		(cpu_is_at91sam9g45() \  				|| cpu_is_at91sam9x5()) @@ -78,12 +80,15 @@ EXPORT_SYMBOL_GPL(at91_pmc_base);  				|| cpu_is_at91sam9x5()))  #define cpu_has_plladiv2()	(cpu_is_at91sam9g45() \ -				|| cpu_is_at91sam9x5()) +				|| cpu_is_at91sam9x5() \ +				|| cpu_is_at91sam9n12())  #define cpu_has_mdiv3()		(cpu_is_at91sam9g45() \ -				|| cpu_is_at91sam9x5()) +				|| cpu_is_at91sam9x5() \ +				|| cpu_is_at91sam9n12()) -#define cpu_has_alt_prescaler()	(cpu_is_at91sam9x5()) +#define cpu_has_alt_prescaler()	(cpu_is_at91sam9x5() \ +				|| cpu_is_at91sam9n12())  static LIST_HEAD(clocks);  static DEFINE_SPINLOCK(clk_lock); diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c index ece1f9aefb4..0c6381516a5 100644 --- a/arch/arm/mach-at91/cpuidle.c +++ b/arch/arm/mach-at91/cpuidle.c @@ -21,6 +21,7 @@  #include <linux/export.h>  #include <asm/proc-fns.h>  #include <asm/cpuidle.h> +#include <mach/cpu.h>  #include "pm.h" @@ -33,7 +34,12 @@ static int at91_enter_idle(struct cpuidle_device *dev,  			struct cpuidle_driver *drv,  			       int index)  { -	at91_standby(); +	if (cpu_is_at91rm9200()) +		at91rm9200_standby(); +	else if (cpu_is_at91sam9g45()) +		at91sam9g45_standby(); +	else +		at91sam9_standby();  	return index;  } diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h index dd9b346c451..0a60bf83703 100644 --- a/arch/arm/mach-at91/generic.h +++ b/arch/arm/mach-at91/generic.h @@ -40,17 +40,6 @@ extern struct sys_timer at91sam926x_timer;  extern struct sys_timer at91x40_timer;   /* Clocks */ -/* - * function to specify the clock of the default console. As we do not - * use the device/driver bus, the dev_name is not intialize. So we need - * to link the clock to a specific con_id only "usart" - */ -extern void __init at91rm9200_set_console_clock(int id); -extern void __init at91sam9260_set_console_clock(int id); -extern void __init at91sam9261_set_console_clock(int id); -extern void __init at91sam9263_set_console_clock(int id); -extern void __init at91sam9rl_set_console_clock(int id); -extern void __init at91sam9g45_set_console_clock(int id);  #ifdef CONFIG_AT91_PMC_UNIT  extern int __init at91_clock_init(unsigned long main_clock);  extern int __init at91_dt_clock_init(void); diff --git a/arch/arm/mach-at91/include/mach/at91rm9200.h b/arch/arm/mach-at91/include/mach/at91rm9200.h index 603e6aac2a4..e67317c6776 100644 --- a/arch/arm/mach-at91/include/mach/at91rm9200.h +++ b/arch/arm/mach-at91/include/mach/at91rm9200.h @@ -88,11 +88,6 @@  #define AT91RM9200_BASE_RTC	0xfffffe00	/* Real-Time Clock */  #define AT91RM9200_BASE_MC	0xffffff00	/* Memory Controllers */ -#define AT91_USART0	AT91RM9200_BASE_US0 -#define AT91_USART1	AT91RM9200_BASE_US1 -#define AT91_USART2	AT91RM9200_BASE_US2 -#define AT91_USART3	AT91RM9200_BASE_US3 -  /*   * Internal Memory.   */ diff --git a/arch/arm/mach-at91/include/mach/at91sam9260.h b/arch/arm/mach-at91/include/mach/at91sam9260.h index 08ae9afd00f..416c7b6c56d 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9260.h +++ b/arch/arm/mach-at91/include/mach/at91sam9260.h @@ -95,13 +95,6 @@  #define AT91SAM9260_BASE_WDT	0xfffffd40  #define AT91SAM9260_BASE_GPBR	0xfffffd50 -#define AT91_USART0	AT91SAM9260_BASE_US0 -#define AT91_USART1	AT91SAM9260_BASE_US1 -#define AT91_USART2	AT91SAM9260_BASE_US2 -#define AT91_USART3	AT91SAM9260_BASE_US3 -#define AT91_USART4	AT91SAM9260_BASE_US4 -#define AT91_USART5	AT91SAM9260_BASE_US5 -  /*   * Internal Memory. diff --git a/arch/arm/mach-at91/include/mach/at91sam9261.h b/arch/arm/mach-at91/include/mach/at91sam9261.h index 44fbdc12ee6..a041406d06e 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9261.h +++ b/arch/arm/mach-at91/include/mach/at91sam9261.h @@ -79,10 +79,6 @@  #define AT91SAM9261_BASE_WDT	0xfffffd40  #define AT91SAM9261_BASE_GPBR	0xfffffd50 -#define AT91_USART0	AT91SAM9261_BASE_US0 -#define AT91_USART1	AT91SAM9261_BASE_US1 -#define AT91_USART2	AT91SAM9261_BASE_US2 -  /*   * Internal Memory. diff --git a/arch/arm/mach-at91/include/mach/at91sam9263.h b/arch/arm/mach-at91/include/mach/at91sam9263.h index d96cbb2e03c..d201029d60b 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9263.h +++ b/arch/arm/mach-at91/include/mach/at91sam9263.h @@ -95,10 +95,6 @@  #define AT91SAM9263_BASE_RTT1	0xfffffd50  #define AT91SAM9263_BASE_GPBR	0xfffffd60 -#define AT91_USART0	AT91SAM9263_BASE_US0 -#define AT91_USART1	AT91SAM9263_BASE_US1 -#define AT91_USART2	AT91SAM9263_BASE_US2 -  #define AT91_SMC	AT91_SMC0  /* diff --git a/arch/arm/mach-at91/include/mach/at91sam9g45.h b/arch/arm/mach-at91/include/mach/at91sam9g45.h index d052abcff85..3a4da24d591 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9g45.h +++ b/arch/arm/mach-at91/include/mach/at91sam9g45.h @@ -106,11 +106,6 @@  #define AT91SAM9G45_BASE_RTC	0xfffffdb0  #define AT91SAM9G45_BASE_GPBR	0xfffffd60 -#define AT91_USART0	AT91SAM9G45_BASE_US0 -#define AT91_USART1	AT91SAM9G45_BASE_US1 -#define AT91_USART2	AT91SAM9G45_BASE_US2 -#define AT91_USART3	AT91SAM9G45_BASE_US3 -  /*   * Internal Memory.   */ diff --git a/arch/arm/mach-at91/include/mach/at91sam9n12.h b/arch/arm/mach-at91/include/mach/at91sam9n12.h new file mode 100644 index 00000000000..d374b87c045 --- /dev/null +++ b/arch/arm/mach-at91/include/mach/at91sam9n12.h @@ -0,0 +1,60 @@ +/* + * SoC specific header file for the AT91SAM9N12 + * + * Copyright (C) 2012 Atmel Corporation + * + * Common definitions, based on AT91SAM9N12 SoC datasheet + * + * Licensed under GPLv2 or later + */ + +#ifndef _AT91SAM9N12_H_ +#define _AT91SAM9N12_H_ + +/* + * Peripheral identifiers/interrupts. + */ +#define AT91SAM9N12_ID_PIOAB	2	/* Parallel I/O Controller A and B */ +#define AT91SAM9N12_ID_PIOCD	3	/* Parallel I/O Controller C and D */ +#define AT91SAM9N12_ID_FUSE	4	/* FUSE Controller */ +#define AT91SAM9N12_ID_USART0	5	/* USART 0 */ +#define AT91SAM9N12_ID_USART1	6	/* USART 1 */ +#define AT91SAM9N12_ID_USART2	7	/* USART 2 */ +#define AT91SAM9N12_ID_USART3	8	/* USART 3 */ +#define AT91SAM9N12_ID_TWI0	9	/* Two-Wire Interface 0 */ +#define AT91SAM9N12_ID_TWI1	10	/* Two-Wire Interface 1 */ +#define AT91SAM9N12_ID_MCI	12	/* High Speed Multimedia Card Interface */ +#define AT91SAM9N12_ID_SPI0	13	/* Serial Peripheral Interface 0 */ +#define AT91SAM9N12_ID_SPI1	14	/* Serial Peripheral Interface 1 */ +#define AT91SAM9N12_ID_UART0	15	/* UART 0 */ +#define AT91SAM9N12_ID_UART1	16	/* UART 1 */ +#define AT91SAM9N12_ID_TCB	17	/* Timer Counter 0, 1, 2, 3, 4 and 5 */ +#define AT91SAM9N12_ID_PWM	18	/* Pulse Width Modulation Controller */ +#define AT91SAM9N12_ID_ADC	19	/* ADC Controller */ +#define AT91SAM9N12_ID_DMA	20	/* DMA Controller */ +#define AT91SAM9N12_ID_UHP	22	/* USB Host High Speed */ +#define AT91SAM9N12_ID_UDP	23	/* USB Device High Speed */ +#define AT91SAM9N12_ID_LCDC	25	/* LCD Controller */ +#define AT91SAM9N12_ID_ISI	25	/* Image Sensor Interface */ +#define AT91SAM9N12_ID_SSC	28	/* Synchronous Serial Controller */ +#define AT91SAM9N12_ID_TRNG	30	/* TRNG */ +#define AT91SAM9N12_ID_IRQ0	31	/* Advanced Interrupt Controller */ + +/* + * User Peripheral physical base addresses. + */ +#define AT91SAM9N12_BASE_USART0	0xf801c000 +#define AT91SAM9N12_BASE_USART1	0xf8020000 +#define AT91SAM9N12_BASE_USART2	0xf8024000 +#define AT91SAM9N12_BASE_USART3	0xf8028000 + +/* + * Internal Memory. + */ +#define AT91SAM9N12_SRAM_BASE	0x00300000	/* Internal SRAM base address */ +#define AT91SAM9N12_SRAM_SIZE	SZ_32K		/* Internal SRAM size (32Kb) */ + +#define AT91SAM9N12_ROM_BASE	0x00100000	/* Internal ROM base address */ +#define AT91SAM9N12_ROM_SIZE	SZ_128K		/* Internal ROM size (128Kb) */ + +#endif diff --git a/arch/arm/mach-at91/include/mach/at91sam9n12_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9n12_matrix.h new file mode 100644 index 00000000000..40060cd62fa --- /dev/null +++ b/arch/arm/mach-at91/include/mach/at91sam9n12_matrix.h @@ -0,0 +1,53 @@ +/* + * Matrix-centric header file for the AT91SAM9N12 + * + * Copyright (C) 2012 Atmel Corporation. + * + * Only EBI related registers. + * Write Protect register definitions may be useful. + * + * Licensed under GPLv2 or later. + */ + +#ifndef _AT91SAM9N12_MATRIX_H_ +#define _AT91SAM9N12_MATRIX_H_ + +#define AT91_MATRIX_EBICSA	(AT91_MATRIX + 0x118)	/* EBI Chip Select Assignment Register */ +#define		AT91_MATRIX_EBI_CS1A		(1 << 1)	/* Chip Select 1 Assignment */ +#define			AT91_MATRIX_EBI_CS1A_SMC		(0 << 1) +#define			AT91_MATRIX_EBI_CS1A_SDRAMC		(1 << 1) +#define		AT91_MATRIX_EBI_CS3A		(1 << 3)	/* Chip Select 3 Assignment */ +#define			AT91_MATRIX_EBI_CS3A_SMC		(0 << 3) +#define			AT91_MATRIX_EBI_CS3A_SMC_NANDFLASH	(1 << 3) +#define		AT91_MATRIX_EBI_DBPUC		(1 << 8)	/* Data Bus Pull-up Configuration */ +#define			AT91_MATRIX_EBI_DBPU_ON			(0 << 8) +#define			AT91_MATRIX_EBI_DBPU_OFF		(1 << 8) +#define		AT91_MATRIX_EBI_VDDIOMSEL	(1 << 16)	/* Memory voltage selection */ +#define			AT91_MATRIX_EBI_VDDIOMSEL_1_8V		(0 << 16) +#define			AT91_MATRIX_EBI_VDDIOMSEL_3_3V		(1 << 16) +#define		AT91_MATRIX_EBI_EBI_IOSR	(1 << 17)	/* EBI I/O slew rate selection */ +#define			AT91_MATRIX_EBI_EBI_IOSR_REDUCED	(0 << 17) +#define			AT91_MATRIX_EBI_EBI_IOSR_NORMAL		(1 << 17) +#define		AT91_MATRIX_EBI_DDR_IOSR	(1 << 18)	/* DDR2 dedicated port I/O slew rate selection */ +#define			AT91_MATRIX_EBI_DDR_IOSR_REDUCED	(0 << 18) +#define			AT91_MATRIX_EBI_DDR_IOSR_NORMAL		(1 << 18) +#define		AT91_MATRIX_NFD0_SELECT		(1 << 24)	/* NAND Flash Data Bus Selection */ +#define			AT91_MATRIX_NFD0_ON_D0			(0 << 24) +#define			AT91_MATRIX_NFD0_ON_D16			(1 << 24) +#define		AT91_MATRIX_DDR_MP_EN		(1 << 25)	/* DDR Multi-port Enable */ +#define			AT91_MATRIX_MP_OFF			(0 << 25) +#define			AT91_MATRIX_MP_ON			(1 << 25) + +#define AT91_MATRIX_WPMR	(AT91_MATRIX + 0x1E4)	/* Write Protect Mode Register */ +#define		AT91_MATRIX_WPMR_WPEN		(1 << 0)	/* Write Protect ENable */ +#define			AT91_MATRIX_WPMR_WP_WPDIS		(0 << 0) +#define			AT91_MATRIX_WPMR_WP_WPEN		(1 << 0) +#define		AT91_MATRIX_WPMR_WPKEY		(0xFFFFFF << 8)	/* Write Protect KEY */ + +#define AT91_MATRIX_WPSR	(AT91_MATRIX + 0x1E8)	/* Write Protect Status Register */ +#define		AT91_MATRIX_WPSR_WPVS		(1 << 0)	/* Write Protect Violation Status */ +#define			AT91_MATRIX_WPSR_NO_WPV		(0 << 0) +#define			AT91_MATRIX_WPSR_WPV		(1 << 0) +#define		AT91_MATRIX_WPSR_WPVSRC		(0xFFFF << 8)	/* Write Protect Violation Source */ + +#endif diff --git a/arch/arm/mach-at91/include/mach/at91sam9rl.h b/arch/arm/mach-at91/include/mach/at91sam9rl.h index e0073eb1014..a15db56d33f 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9rl.h +++ b/arch/arm/mach-at91/include/mach/at91sam9rl.h @@ -89,11 +89,6 @@  #define AT91SAM9RL_BASE_GPBR	0xfffffd60  #define AT91SAM9RL_BASE_RTC	0xfffffe00 -#define AT91_USART0	AT91SAM9RL_BASE_US0 -#define AT91_USART1	AT91SAM9RL_BASE_US1 -#define AT91_USART2	AT91SAM9RL_BASE_US2 -#define AT91_USART3	AT91SAM9RL_BASE_US3 -  /*   * Internal Memory. diff --git a/arch/arm/mach-at91/include/mach/at91sam9x5.h b/arch/arm/mach-at91/include/mach/at91sam9x5.h index 88e43d534cd..c75ee19b58d 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9x5.h +++ b/arch/arm/mach-at91/include/mach/at91sam9x5.h @@ -55,14 +55,6 @@  #define AT91SAM9X5_BASE_USART2	0xf8024000  /* - * Base addresses for early serial code (uncompress.h) - */ -#define AT91_DBGU	AT91_BASE_DBGU0 -#define AT91_USART0	AT91SAM9X5_BASE_USART0 -#define AT91_USART1	AT91SAM9X5_BASE_USART1 -#define AT91_USART2	AT91SAM9X5_BASE_USART2 - -/*   * Internal Memory.   */  #define AT91SAM9X5_SRAM_BASE	0x00300000	/* Internal SRAM base address */ diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index 49a821192c6..369afc2ffc5 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h @@ -121,7 +121,6 @@ extern void __init at91_add_device_spi(struct spi_board_info *devices, int nr_de  #define ATMEL_UART_RI	0x20  extern void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins); -extern void __init at91_set_serial_console(unsigned portnr);  extern struct platform_device *atmel_default_console_device; diff --git a/arch/arm/mach-at91/include/mach/cpu.h b/arch/arm/mach-at91/include/mach/cpu.h index 0118c333855..b6504c19d55 100644 --- a/arch/arm/mach-at91/include/mach/cpu.h +++ b/arch/arm/mach-at91/include/mach/cpu.h @@ -25,6 +25,7 @@  #define ARCH_ID_AT91SAM9G45MRL	0x819b05a2	/* aka 9G45-ES2 & non ES lots */  #define ARCH_ID_AT91SAM9G45ES	0x819b05a1	/* 9G45-ES (Engineering Sample) */  #define ARCH_ID_AT91SAM9X5	0x819a05a0 +#define ARCH_ID_AT91SAM9N12	0x819a07a0  #define ARCH_ID_AT91SAM9XE128	0x329973a0  #define ARCH_ID_AT91SAM9XE256	0x329a93a0 @@ -54,6 +55,7 @@  #define ARCH_REVISON_9200_BGA	(0 << 0)  #define ARCH_REVISON_9200_PQFP	(1 << 0) +#ifndef __ASSEMBLY__  enum at91_soc_type {  	/* 920T */  	AT91_SOC_RM9200, @@ -70,6 +72,9 @@ enum at91_soc_type {  	/* SAM9X5 */  	AT91_SOC_SAM9X5, +	/* SAM9N12 */ +	AT91_SOC_SAM9N12, +  	/* Unknown type */  	AT91_SOC_NONE  }; @@ -106,7 +111,7 @@ static inline int at91_soc_is_detected(void)  	return at91_soc_initdata.type != AT91_SOC_NONE;  } -#ifdef CONFIG_ARCH_AT91RM9200 +#ifdef CONFIG_SOC_AT91RM9200  #define cpu_is_at91rm9200()	(at91_soc_initdata.type == AT91_SOC_RM9200)  #define cpu_is_at91rm9200_bga()	(at91_soc_initdata.subtype == AT91_SOC_RM9200_BGA)  #define cpu_is_at91rm9200_pqfp() (at91_soc_initdata.subtype == AT91_SOC_RM9200_PQFP) @@ -116,45 +121,37 @@ static inline int at91_soc_is_detected(void)  #define cpu_is_at91rm9200_pqfp() (0)  #endif -#ifdef CONFIG_ARCH_AT91SAM9260 +#ifdef CONFIG_SOC_AT91SAM9260  #define cpu_is_at91sam9xe()	(at91_soc_initdata.subtype == AT91_SOC_SAM9XE)  #define cpu_is_at91sam9260()	(at91_soc_initdata.type == AT91_SOC_SAM9260) +#define cpu_is_at91sam9g20()	(at91_soc_initdata.type == AT91_SOC_SAM9G20)  #else  #define cpu_is_at91sam9xe()	(0)  #define cpu_is_at91sam9260()	(0) -#endif - -#ifdef CONFIG_ARCH_AT91SAM9G20 -#define cpu_is_at91sam9g20()	(at91_soc_initdata.type == AT91_SOC_SAM9G20) -#else  #define cpu_is_at91sam9g20()	(0)  #endif -#ifdef CONFIG_ARCH_AT91SAM9261 +#ifdef CONFIG_SOC_AT91SAM9261  #define cpu_is_at91sam9261()	(at91_soc_initdata.type == AT91_SOC_SAM9261) -#else -#define cpu_is_at91sam9261()	(0) -#endif - -#ifdef CONFIG_ARCH_AT91SAM9G10  #define cpu_is_at91sam9g10()	(at91_soc_initdata.type == AT91_SOC_SAM9G10)  #else +#define cpu_is_at91sam9261()	(0)  #define cpu_is_at91sam9g10()	(0)  #endif -#ifdef CONFIG_ARCH_AT91SAM9263 +#ifdef CONFIG_SOC_AT91SAM9263  #define cpu_is_at91sam9263()	(at91_soc_initdata.type == AT91_SOC_SAM9263)  #else  #define cpu_is_at91sam9263()	(0)  #endif -#ifdef CONFIG_ARCH_AT91SAM9RL +#ifdef CONFIG_SOC_AT91SAM9RL  #define cpu_is_at91sam9rl()	(at91_soc_initdata.type == AT91_SOC_SAM9RL)  #else  #define cpu_is_at91sam9rl()	(0)  #endif -#ifdef CONFIG_ARCH_AT91SAM9G45 +#ifdef CONFIG_SOC_AT91SAM9G45  #define cpu_is_at91sam9g45()	(at91_soc_initdata.type == AT91_SOC_SAM9G45)  #define cpu_is_at91sam9g45es()	(at91_soc_initdata.subtype == AT91_SOC_SAM9G45ES)  #define cpu_is_at91sam9m10()	(at91_soc_initdata.subtype == AT91_SOC_SAM9M10) @@ -168,7 +165,7 @@ static inline int at91_soc_is_detected(void)  #define cpu_is_at91sam9m11()	(0)  #endif -#ifdef CONFIG_ARCH_AT91SAM9X5 +#ifdef CONFIG_SOC_AT91SAM9X5  #define cpu_is_at91sam9x5()	(at91_soc_initdata.type == AT91_SOC_SAM9X5)  #define cpu_is_at91sam9g15()	(at91_soc_initdata.subtype == AT91_SOC_SAM9G15)  #define cpu_is_at91sam9g35()	(at91_soc_initdata.subtype == AT91_SOC_SAM9G35) @@ -184,10 +181,17 @@ static inline int at91_soc_is_detected(void)  #define cpu_is_at91sam9x25()	(0)  #endif +#ifdef CONFIG_SOC_AT91SAM9N12 +#define cpu_is_at91sam9n12()	(at91_soc_initdata.type == AT91_SOC_SAM9N12) +#else +#define cpu_is_at91sam9n12()	(0) +#endif +  /*   * Since this is ARM, we will never run on any AVR32 CPU. But these   * definitions may reduce clutter in common drivers.   */  #define cpu_is_at32ap7000()	(0) +#endif /* __ASSEMBLY__ */  #endif /* __MACH_CPU_H__ */ diff --git a/arch/arm/mach-at91/include/mach/hardware.h b/arch/arm/mach-at91/include/mach/hardware.h index 01db372be8e..09242b67d27 100644 --- a/arch/arm/mach-at91/include/mach/hardware.h +++ b/arch/arm/mach-at91/include/mach/hardware.h @@ -22,27 +22,18 @@  /* 9263, 9g45 */  #define AT91_BASE_DBGU1	0xffffee00 -#if defined(CONFIG_ARCH_AT91RM9200) +#if defined(CONFIG_ARCH_AT91X40) +#include <mach/at91x40.h> +#else  #include <mach/at91rm9200.h> -#elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20)  #include <mach/at91sam9260.h> -#elif defined(CONFIG_ARCH_AT91SAM9261) || defined(CONFIG_ARCH_AT91SAM9G10)  #include <mach/at91sam9261.h> -#elif defined(CONFIG_ARCH_AT91SAM9263)  #include <mach/at91sam9263.h> -#elif defined(CONFIG_ARCH_AT91SAM9RL)  #include <mach/at91sam9rl.h> -#elif defined(CONFIG_ARCH_AT91SAM9G45)  #include <mach/at91sam9g45.h> -#elif defined(CONFIG_ARCH_AT91SAM9X5)  #include <mach/at91sam9x5.h> -#elif defined(CONFIG_ARCH_AT91X40) -#include <mach/at91x40.h> -#else -#error "Unsupported AT91 processor" -#endif +#include <mach/at91sam9n12.h> -#if !defined(CONFIG_ARCH_AT91X40)  /*   * On all at91 except rm9200 and x40 have the System Controller starts   * at address 0xffffc000 and has a size of 16KiB. diff --git a/arch/arm/mach-at91/include/mach/uncompress.h b/arch/arm/mach-at91/include/mach/uncompress.h index 4218647c1fc..6f6118d1576 100644 --- a/arch/arm/mach-at91/include/mach/uncompress.h +++ b/arch/arm/mach-at91/include/mach/uncompress.h @@ -1,7 +1,8 @@  /*   * arch/arm/mach-at91/include/mach/uncompress.h   * - *  Copyright (C) 2003 SAN People + * Copyright (C) 2003 SAN People + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -25,22 +26,147 @@  #include <linux/atmel_serial.h>  #include <mach/hardware.h> -#if defined(CONFIG_AT91_EARLY_DBGU0) -#define UART_OFFSET AT91_BASE_DBGU0 -#elif defined(CONFIG_AT91_EARLY_DBGU1) -#define UART_OFFSET AT91_BASE_DBGU1 -#elif defined(CONFIG_AT91_EARLY_USART0) -#define UART_OFFSET AT91_USART0 -#elif defined(CONFIG_AT91_EARLY_USART1) -#define UART_OFFSET AT91_USART1 -#elif defined(CONFIG_AT91_EARLY_USART2) -#define UART_OFFSET AT91_USART2 -#elif defined(CONFIG_AT91_EARLY_USART3) -#define UART_OFFSET AT91_USART3 -#elif defined(CONFIG_AT91_EARLY_USART4) -#define UART_OFFSET AT91_USART4 -#elif defined(CONFIG_AT91_EARLY_USART5) -#define UART_OFFSET AT91_USART5 +#include <mach/at91_dbgu.h> +#include <mach/cpu.h> + +void __iomem *at91_uart; + +#if !defined(CONFIG_ARCH_AT91X40) +static const u32 uarts_rm9200[] = { +	AT91_BASE_DBGU0, +	AT91RM9200_BASE_US0, +	AT91RM9200_BASE_US1, +	AT91RM9200_BASE_US2, +	AT91RM9200_BASE_US3, +	0, +}; + +static const u32 uarts_sam9260[] = { +	AT91_BASE_DBGU0, +	AT91SAM9260_BASE_US0, +	AT91SAM9260_BASE_US1, +	AT91SAM9260_BASE_US2, +	AT91SAM9260_BASE_US3, +	AT91SAM9260_BASE_US4, +	AT91SAM9260_BASE_US5, +	0, +}; + +static const u32 uarts_sam9261[] = { +	AT91_BASE_DBGU0, +	AT91SAM9261_BASE_US0, +	AT91SAM9261_BASE_US1, +	AT91SAM9261_BASE_US2, +	0, +}; + +static const u32 uarts_sam9263[] = { +	AT91_BASE_DBGU1, +	AT91SAM9263_BASE_US0, +	AT91SAM9263_BASE_US1, +	AT91SAM9263_BASE_US2, +	0, +}; + +static const u32 uarts_sam9g45[] = { +	AT91_BASE_DBGU1, +	AT91SAM9G45_BASE_US0, +	AT91SAM9G45_BASE_US1, +	AT91SAM9G45_BASE_US2, +	AT91SAM9G45_BASE_US3, +	0, +}; + +static const u32 uarts_sam9rl[] = { +	AT91_BASE_DBGU0, +	AT91SAM9RL_BASE_US0, +	AT91SAM9RL_BASE_US1, +	AT91SAM9RL_BASE_US2, +	AT91SAM9RL_BASE_US3, +	0, +}; + +static const u32 uarts_sam9x5[] = { +	AT91_BASE_DBGU0, +	AT91SAM9X5_BASE_USART0, +	AT91SAM9X5_BASE_USART1, +	AT91SAM9X5_BASE_USART2, +	0, +}; + +static inline const u32* decomp_soc_detect(u32 dbgu_base) +{ +	u32 cidr, socid; + +	cidr = __raw_readl(dbgu_base + AT91_DBGU_CIDR); +	socid = cidr & ~AT91_CIDR_VERSION; + +	switch (socid) { +	case ARCH_ID_AT91RM9200: +		return uarts_rm9200; + +	case ARCH_ID_AT91SAM9G20: +	case ARCH_ID_AT91SAM9260: +		return uarts_sam9260; + +	case ARCH_ID_AT91SAM9261: +		return uarts_sam9261; + +	case ARCH_ID_AT91SAM9263: +		return uarts_sam9263; + +	case ARCH_ID_AT91SAM9G45: +		return uarts_sam9g45; + +	case ARCH_ID_AT91SAM9RL64: +		return uarts_sam9rl; + +	case ARCH_ID_AT91SAM9X5: +		return uarts_sam9x5; +	} + +	/* at91sam9g10 */ +	if ((cidr & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10) { +		return uarts_sam9261; +	} +	/* at91sam9xe */ +	else if ((cidr & AT91_CIDR_ARCH) == ARCH_FAMILY_AT91SAM9XE) { +		return uarts_sam9260; +	} + +	return NULL; +} + +static inline void arch_decomp_setup(void) +{ +	int i = 0; +	const u32* usarts; + +	usarts = decomp_soc_detect(AT91_BASE_DBGU0); + +	if (!usarts) +		usarts = decomp_soc_detect(AT91_BASE_DBGU1); +	if (!usarts) { +		at91_uart = NULL; +		return; +	} + +	do { +		/* physical address */ +		at91_uart = (void __iomem *)usarts[i]; + +		if (__raw_readl(at91_uart + ATMEL_US_BRGR)) +			return; +		i++; +	} while (usarts[i]); + +	at91_uart = NULL; +} +#else +static inline void arch_decomp_setup(void) +{ +	at91_uart = NULL; +}  #endif  /* @@ -52,28 +178,24 @@   */  static void putc(int c)  { -#ifdef UART_OFFSET -	void __iomem *sys = (void __iomem *) UART_OFFSET;	/* physical address */ +	if (!at91_uart) +		return; -	while (!(__raw_readl(sys + ATMEL_US_CSR) & ATMEL_US_TXRDY)) +	while (!(__raw_readl(at91_uart + ATMEL_US_CSR) & ATMEL_US_TXRDY))  		barrier(); -	__raw_writel(c, sys + ATMEL_US_THR); -#endif +	__raw_writel(c, at91_uart + ATMEL_US_THR);  }  static inline void flush(void)  { -#ifdef UART_OFFSET -	void __iomem *sys = (void __iomem *) UART_OFFSET;	/* physical address */ +	if (!at91_uart) +		return;  	/* wait for transmission to complete */ -	while (!(__raw_readl(sys + ATMEL_US_CSR) & ATMEL_US_TXEMPTY)) +	while (!(__raw_readl(at91_uart + ATMEL_US_CSR) & ATMEL_US_TXEMPTY))  		barrier(); -#endif  } -#define arch_decomp_setup() -  #define arch_decomp_wdog()  #endif diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index f630250c6b8..1bfaad62873 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c @@ -261,7 +261,12 @@ static int at91_pm_enter(suspend_state_t state)  			 * For ARM 926 based chips, this requirement is weaker  			 * as at91sam9 can access a RAM in self-refresh mode.  			 */ -			at91_standby(); +			if (cpu_is_at91rm9200()) +				at91rm9200_standby(); +			else if (cpu_is_at91sam9g45()) +				at91sam9g45_standby(); +			else +				at91sam9_standby();  			break;  		case PM_SUSPEND_ON: @@ -307,10 +312,9 @@ static int __init at91_pm_init(void)  	pr_info("AT91: Power Management%s\n", (slow_clock ? " (with slow clock mode)" : "")); -#ifdef CONFIG_ARCH_AT91RM9200  	/* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh. */ -	at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0); -#endif +	if (cpu_is_at91rm9200()) +		at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0);  	suspend_set_ops(&at91_pm_ops); diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h index 89f56f3a802..38f467c6b71 100644 --- a/arch/arm/mach-at91/pm.h +++ b/arch/arm/mach-at91/pm.h @@ -12,7 +12,6 @@  #define __ARCH_ARM_MACH_AT91_PM  #include <mach/at91_ramc.h> -#ifdef CONFIG_ARCH_AT91RM9200  #include <mach/at91rm9200_sdramc.h>  /* @@ -43,10 +42,6 @@ static inline void at91rm9200_standby(void)  		  "r" (lpr));  } -#define at91_standby at91rm9200_standby - -#elif defined(CONFIG_ARCH_AT91SAM9G45) -  /* We manage both DDRAM/SDRAM controllers, we need more than one value to   * remember.   */ @@ -75,11 +70,7 @@ static inline void at91sam9g45_standby(void)  	at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);  } -#define at91_standby at91sam9g45_standby - -#else - -#ifdef CONFIG_ARCH_AT91SAM9263 +#ifdef CONFIG_SOC_AT91SAM9263  /*   * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use;   * handle those cases both here and in the Suspend-To-RAM support. @@ -102,8 +93,4 @@ static inline void at91sam9_standby(void)  	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr);  } -#define at91_standby at91sam9_standby - -#endif -  #endif diff --git a/arch/arm/mach-at91/pm_slowclock.S b/arch/arm/mach-at91/pm_slowclock.S index db5452123f1..098c28ddf02 100644 --- a/arch/arm/mach-at91/pm_slowclock.S +++ b/arch/arm/mach-at91/pm_slowclock.S @@ -18,7 +18,7 @@  #include <mach/at91_ramc.h> -#ifdef CONFIG_ARCH_AT91SAM9263 +#ifdef CONFIG_SOC_AT91SAM9263  /*   * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use;   * handle those cases both here and in the Suspend-To-RAM support. diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index f44a2e7272e..944bffb0899 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c @@ -143,6 +143,11 @@ static void __init soc_detect(u32 dbgu_base)  		at91_soc_initdata.type = AT91_SOC_SAM9X5;  		at91_boot_soc = at91sam9x5_soc;  		break; + +	case ARCH_ID_AT91SAM9N12: +		at91_soc_initdata.type = AT91_SOC_SAM9N12; +		at91_boot_soc = at91sam9n12_soc; +		break;  	}  	/* at91sam9g10 */ @@ -210,6 +215,7 @@ static const char *soc_name[] = {  	[AT91_SOC_SAM9G45]	= "at91sam9g45",  	[AT91_SOC_SAM9RL]	= "at91sam9rl",  	[AT91_SOC_SAM9X5]	= "at91sam9x5", +	[AT91_SOC_SAM9N12]	= "at91sam9n12",  	[AT91_SOC_NONE]		= "Unknown"  }; diff --git a/arch/arm/mach-at91/soc.h b/arch/arm/mach-at91/soc.h index 5db4aa45404..a9cfeb15371 100644 --- a/arch/arm/mach-at91/soc.h +++ b/arch/arm/mach-at91/soc.h @@ -20,36 +20,41 @@ extern struct at91_init_soc at91sam9263_soc;  extern struct at91_init_soc at91sam9g45_soc;  extern struct at91_init_soc at91sam9rl_soc;  extern struct at91_init_soc at91sam9x5_soc; +extern struct at91_init_soc at91sam9n12_soc;  static inline int at91_soc_is_enabled(void)  {  	return at91_boot_soc.init != NULL;  } -#if !defined(CONFIG_ARCH_AT91RM9200) +#if !defined(CONFIG_SOC_AT91RM9200)  #define at91rm9200_soc	at91_boot_soc  #endif -#if !(defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20)) +#if !defined(CONFIG_SOC_AT91SAM9260)  #define at91sam9260_soc	at91_boot_soc  #endif -#if !(defined(CONFIG_ARCH_AT91SAM9261) || defined(CONFIG_ARCH_AT91SAM9G10)) +#if !defined(CONFIG_SOC_AT91SAM9261)  #define at91sam9261_soc	at91_boot_soc  #endif -#if !defined(CONFIG_ARCH_AT91SAM9263) +#if !defined(CONFIG_SOC_AT91SAM9263)  #define at91sam9263_soc	at91_boot_soc  #endif -#if !defined(CONFIG_ARCH_AT91SAM9G45) +#if !defined(CONFIG_SOC_AT91SAM9G45)  #define at91sam9g45_soc	at91_boot_soc  #endif -#if !defined(CONFIG_ARCH_AT91SAM9RL) +#if !defined(CONFIG_SOC_AT91SAM9RL)  #define at91sam9rl_soc	at91_boot_soc  #endif -#if !defined(CONFIG_ARCH_AT91SAM9X5) +#if !defined(CONFIG_SOC_AT91SAM9X5)  #define at91sam9x5_soc	at91_boot_soc  #endif + +#if !defined(CONFIG_SOC_AT91SAM9N12) +#define at91sam9n12_soc	at91_boot_soc +#endif  |