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

Commit 45c349b5 authored by Hans-Christian Egtvedt's avatar Hans-Christian Egtvedt Committed by Haavard Skinnemoen
Browse files

avr32: add support for EarthLCD Favr-32 board



This patch adds support for the Favr-32 board made by EarthLCD.

This kit, which is also called ezLCD-101, has a 10.4" touch screen LCD panel,
16 MB 32-bit SDRAM, 8 MB parallel flash, Ethernet, audio out, USB device,
SD-card slot, USART and various other connectors for cennecting stuff to SPI,
I2C, GPIO, etc.

Signed-off-by: default avatarHans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
Signed-off-by: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
parent a3bee42f
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -119,10 +119,15 @@ config BOARD_ATSTK1000
config BOARD_ATNGW100
	bool "ATNGW100 Network Gateway"
	select CPU_AT32AP7000

config BOARD_FAVR_32
	bool "Favr-32 LCD-board"
	select CPU_AT32AP7000
endchoice

source "arch/avr32/boards/atstk1000/Kconfig"
source "arch/avr32/boards/atngw100/Kconfig"
source "arch/avr32/boards/favr-32/Kconfig"

choice
	prompt "Boot loader type"
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ head-y += arch/avr32/kernel/head.o
core-y					+= $(machdirs)
core-$(CONFIG_BOARD_ATSTK1000)		+= arch/avr32/boards/atstk1000/
core-$(CONFIG_BOARD_ATNGW100)		+= arch/avr32/boards/atngw100/
core-$(CONFIG_BOARD_FAVR_32)		+= arch/avr32/boards/favr-32/
core-$(CONFIG_LOADER_U_BOOT)		+= arch/avr32/boot/u-boot/
core-y					+= arch/avr32/kernel/
core-y					+= arch/avr32/mm/
+22 −0
Original line number Diff line number Diff line
# Favr-32 customization

if BOARD_FAVR_32

config BOARD_FAVR32_ABDAC_RATE
	int "DAC target rate"
	default 44100
	range 32000 50000
	help
	  Specify the target rate the internal DAC should try to match. This
	  will use PLL1 to generate a frequency as close as possible to this
	  rate.

	  Must be within the range 32000 to 50000, which should be suitable to
	  generate most other frequencies in power of 2 steps.

	  Ex:
		48000 will also suit 24000 and 12000
		44100 will also suit 22050 and 11025
		32000 will also suit 16000 and 8000

endif # BOARD_FAVR_32
+1 −0
Original line number Diff line number Diff line
obj-y	+= setup.o flash.o
+98 −0
Original line number Diff line number Diff line
/*
 * Favr-32 board-specific flash initialization
 *
 * Copyright (C) 2008 Atmel Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/physmap.h>

#include <asm/arch/smc.h>

static struct smc_timing flash_timing __initdata = {
	.ncs_read_setup		= 0,
	.nrd_setup		= 40,
	.ncs_write_setup	= 0,
	.nwe_setup		= 10,

	.ncs_read_pulse		= 80,
	.nrd_pulse		= 40,
	.ncs_write_pulse	= 65,
	.nwe_pulse		= 55,

	.read_cycle		= 120,
	.write_cycle		= 120,
};

static struct smc_config flash_config __initdata = {
	.bus_width		= 2,
	.nrd_controlled		= 1,
	.nwe_controlled		= 1,
	.byte_write		= 1,
};

static struct mtd_partition flash_parts[] = {
	{
		.name           = "u-boot",
		.offset         = 0x00000000,
		.size           = 0x00020000,           /* 128 KiB */
		.mask_flags     = MTD_WRITEABLE,
	},
	{
		.name           = "root",
		.offset         = 0x00020000,
		.size           = 0x007d0000,
	},
	{
		.name           = "env",
		.offset         = 0x007f0000,
		.size           = 0x00010000,
		.mask_flags     = MTD_WRITEABLE,
	},
};

static struct physmap_flash_data flash_data = {
	.width		= 2,
	.nr_parts	= ARRAY_SIZE(flash_parts),
	.parts		= flash_parts,
};

static struct resource flash_resource = {
	.start		= 0x00000000,
	.end		= 0x007fffff,
	.flags		= IORESOURCE_MEM,
};

static struct platform_device flash_device = {
	.name		= "physmap-flash",
	.id		= 0,
	.resource	= &flash_resource,
	.num_resources	= 1,
	.dev		= {
		.platform_data = &flash_data,
	},
};

/* This needs to be called after the SMC has been initialized */
static int __init favr32_flash_init(void)
{
	int ret;

	smc_set_timing(&flash_config, &flash_timing);
	ret = smc_set_configuration(0, &flash_config);
	if (ret < 0) {
		printk(KERN_ERR "Favr-32: failed to set NOR flash timing\n");
		return ret;
	}

	platform_device_register(&flash_device);

	return 0;
}
device_initcall(favr32_flash_init);
Loading