2005-04-17 05:20:36 +07:00
|
|
|
/*
|
|
|
|
* linux/arch/arm/mach-clps711x/p720t.c
|
|
|
|
*
|
|
|
|
* Copyright (C) 2000-2001 Deep Blue Solutions Ltd
|
|
|
|
*
|
|
|
|
* 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
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*/
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
#include <linux/init.h>
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include <linux/string.h>
|
|
|
|
#include <linux/mm.h>
|
2008-09-06 18:10:45 +07:00
|
|
|
#include <linux/io.h>
|
2012-03-14 00:55:26 +07:00
|
|
|
#include <linux/slab.h>
|
|
|
|
#include <linux/leds.h>
|
2012-11-17 20:57:08 +07:00
|
|
|
#include <linux/platform_device.h>
|
2012-11-17 20:57:19 +07:00
|
|
|
#include <linux/mtd/partitions.h>
|
|
|
|
#include <linux/mtd/nand-gpio.h>
|
2005-04-17 05:20:36 +07:00
|
|
|
|
2008-08-05 22:14:15 +07:00
|
|
|
#include <mach/hardware.h>
|
2005-04-17 05:20:36 +07:00
|
|
|
#include <asm/pgtable.h>
|
|
|
|
#include <asm/page.h>
|
|
|
|
#include <asm/setup.h>
|
2005-10-28 21:19:05 +07:00
|
|
|
#include <asm/sizes.h>
|
2005-04-17 05:20:36 +07:00
|
|
|
#include <asm/mach-types.h>
|
|
|
|
#include <asm/mach/arch.h>
|
|
|
|
#include <asm/mach/map.h>
|
2008-08-05 22:14:15 +07:00
|
|
|
#include <mach/syspld.h>
|
2005-04-17 05:20:36 +07:00
|
|
|
|
2012-11-17 20:57:18 +07:00
|
|
|
#include <video/platform_lcd.h>
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
#include "common.h"
|
|
|
|
|
2012-11-17 20:57:19 +07:00
|
|
|
#define P720T_USERLED CLPS711X_GPIO(3, 0)
|
|
|
|
#define P720T_NAND_CLE CLPS711X_GPIO(4, 0)
|
|
|
|
#define P720T_NAND_ALE CLPS711X_GPIO(4, 1)
|
|
|
|
#define P720T_NAND_NCE CLPS711X_GPIO(4, 2)
|
|
|
|
|
|
|
|
#define P720T_NAND_BASE (CLPS711X_SDRAM1_BASE)
|
|
|
|
|
|
|
|
static struct resource p720t_nand_resource[] __initdata = {
|
|
|
|
DEFINE_RES_MEM(P720T_NAND_BASE, SZ_4),
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct mtd_partition p720t_nand_parts[] __initdata = {
|
|
|
|
{
|
|
|
|
.name = "Flash partition 1",
|
|
|
|
.offset = 0,
|
|
|
|
.size = SZ_2M,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.name = "Flash partition 2",
|
|
|
|
.offset = MTDPART_OFS_APPEND,
|
|
|
|
.size = MTDPART_SIZ_FULL,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct gpio_nand_platdata p720t_nand_pdata __initdata = {
|
|
|
|
.gpio_rdy = -1,
|
|
|
|
.gpio_nce = P720T_NAND_NCE,
|
|
|
|
.gpio_ale = P720T_NAND_ALE,
|
|
|
|
.gpio_cle = P720T_NAND_CLE,
|
|
|
|
.gpio_nwp = -1,
|
|
|
|
.chip_delay = 15,
|
|
|
|
.parts = p720t_nand_parts,
|
|
|
|
.num_parts = ARRAY_SIZE(p720t_nand_parts),
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct platform_device p720t_nand_pdev __initdata = {
|
|
|
|
.name = "gpio-nand",
|
|
|
|
.id = -1,
|
|
|
|
.resource = p720t_nand_resource,
|
|
|
|
.num_resources = ARRAY_SIZE(p720t_nand_resource),
|
|
|
|
.dev = {
|
|
|
|
.platform_data = &p720t_nand_pdata,
|
|
|
|
},
|
|
|
|
};
|
2012-11-17 20:57:08 +07:00
|
|
|
|
2012-11-17 20:57:18 +07:00
|
|
|
static void p720t_lcd_power_set(struct plat_lcd_data *pd, unsigned int power)
|
|
|
|
{
|
|
|
|
if (power) {
|
|
|
|
PLD_LCDEN = PLD_LCDEN_EN;
|
|
|
|
PLD_PWR |= PLD_S4_ON | PLD_S2_ON | PLD_S1_ON;
|
|
|
|
} else {
|
|
|
|
PLD_PWR &= ~(PLD_S4_ON | PLD_S2_ON | PLD_S1_ON);
|
|
|
|
PLD_LCDEN = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static struct plat_lcd_data p720t_lcd_power_pdata = {
|
|
|
|
.set_power = p720t_lcd_power_set,
|
|
|
|
};
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
/*
|
2012-10-10 22:45:31 +07:00
|
|
|
* Map the P720T system PLD. It occupies two address spaces:
|
|
|
|
* 0x10000000 and 0x10400000. We map both regions as one.
|
2005-04-17 05:20:36 +07:00
|
|
|
*/
|
|
|
|
static struct map_desc p720t_io_desc[] __initdata = {
|
2005-10-28 21:19:05 +07:00
|
|
|
{
|
|
|
|
.virtual = SYSPLD_VIRT_BASE,
|
|
|
|
.pfn = __phys_to_pfn(SYSPLD_PHYS_BASE),
|
2012-10-10 22:45:31 +07:00
|
|
|
.length = SZ_8M,
|
|
|
|
.type = MT_DEVICE,
|
|
|
|
},
|
2005-04-17 05:20:36 +07:00
|
|
|
};
|
|
|
|
|
|
|
|
static void __init
|
ARM: platform fixups: remove mdesc argument to fixup function
Get rid of the mdesc pointer in the fixup function call. No one uses
the mdesc pointer, it shouldn't be modified anyway, and we can't wrap
it, so let's remove it.
Platform files found by:
$ regexp=$(git grep -h '\.fixup.*=' arch/arm |
sed 's!.*= *\([^,]*\),* *!\1!' | sort -u |
tr '\n' '|' | sed 's,|$,,;s,|,\\|,g')
$ git grep $regexp arch/arm
Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2010-12-20 17:37:50 +07:00
|
|
|
fixup_p720t(struct tag *tag, char **cmdline, struct meminfo *mi)
|
2005-04-17 05:20:36 +07:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
* Our bootloader doesn't setup any tags (yet).
|
|
|
|
*/
|
|
|
|
if (tag->hdr.tag != ATAG_CORE) {
|
|
|
|
tag->hdr.tag = ATAG_CORE;
|
|
|
|
tag->hdr.size = tag_size(tag_core);
|
|
|
|
tag->u.core.flags = 0;
|
|
|
|
tag->u.core.pagesize = PAGE_SIZE;
|
|
|
|
tag->u.core.rootdev = 0x0100;
|
|
|
|
|
|
|
|
tag = tag_next(tag);
|
|
|
|
tag->hdr.tag = ATAG_MEM;
|
|
|
|
tag->hdr.size = tag_size(tag_mem32);
|
|
|
|
tag->u.mem.size = 4096;
|
|
|
|
tag->u.mem.start = PHYS_OFFSET;
|
|
|
|
|
|
|
|
tag = tag_next(tag);
|
|
|
|
tag->hdr.tag = ATAG_NONE;
|
|
|
|
tag->hdr.size = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void __init p720t_map_io(void)
|
|
|
|
{
|
|
|
|
clps711x_map_io();
|
|
|
|
iotable_init(p720t_io_desc, ARRAY_SIZE(p720t_io_desc));
|
|
|
|
}
|
|
|
|
|
2012-07-17 01:21:45 +07:00
|
|
|
static void __init p720t_init_early(void)
|
2005-04-17 05:20:36 +07:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
* Power down as much as possible in case we don't
|
|
|
|
* have the drivers loaded.
|
|
|
|
*/
|
|
|
|
PLD_LCDEN = 0;
|
|
|
|
PLD_PWR &= ~(PLD_S4_ON|PLD_S3_ON|PLD_S2_ON|PLD_S1_ON);
|
|
|
|
|
|
|
|
PLD_KBD = 0;
|
|
|
|
PLD_IO = 0;
|
|
|
|
PLD_IRDA = 0;
|
|
|
|
PLD_CODEC = 0;
|
|
|
|
PLD_TCH = 0;
|
|
|
|
PLD_SPI = 0;
|
2012-07-17 01:21:45 +07:00
|
|
|
if (!IS_ENABLED(CONFIG_DEBUG_LL)) {
|
|
|
|
PLD_COM2 = 0;
|
|
|
|
PLD_COM1 = 0;
|
|
|
|
}
|
2005-04-17 05:20:36 +07:00
|
|
|
}
|
|
|
|
|
2012-11-17 20:57:08 +07:00
|
|
|
static struct gpio_led p720t_gpio_leds[] = {
|
|
|
|
{
|
|
|
|
.name = "User LED",
|
|
|
|
.default_trigger = "heartbeat",
|
2012-11-17 20:57:19 +07:00
|
|
|
.gpio = P720T_USERLED,
|
2012-11-17 20:57:08 +07:00
|
|
|
},
|
|
|
|
};
|
2012-03-14 00:55:26 +07:00
|
|
|
|
2012-11-17 20:57:08 +07:00
|
|
|
static struct gpio_led_platform_data p720t_gpio_led_pdata __initdata = {
|
|
|
|
.leds = p720t_gpio_leds,
|
|
|
|
.num_leds = ARRAY_SIZE(p720t_gpio_leds),
|
|
|
|
};
|
2012-03-14 00:55:26 +07:00
|
|
|
|
2012-11-17 20:57:09 +07:00
|
|
|
static void __init p720t_init(void)
|
|
|
|
{
|
2012-11-17 20:57:19 +07:00
|
|
|
platform_device_register(&p720t_nand_pdev);
|
2012-11-17 20:57:18 +07:00
|
|
|
platform_device_register_data(&platform_bus, "platform-lcd", 0,
|
|
|
|
&p720t_lcd_power_pdata,
|
|
|
|
sizeof(p720t_lcd_power_pdata));
|
2012-11-17 20:57:09 +07:00
|
|
|
platform_device_register_simple("video-clps711x", 0, NULL, 0);
|
|
|
|
}
|
|
|
|
|
2012-11-17 20:57:08 +07:00
|
|
|
static void __init p720t_init_late(void)
|
2012-03-14 00:55:26 +07:00
|
|
|
{
|
2012-11-17 20:57:08 +07:00
|
|
|
platform_device_register_data(&platform_bus, "leds-gpio", 0,
|
|
|
|
&p720t_gpio_led_pdata,
|
|
|
|
sizeof(p720t_gpio_led_pdata));
|
2012-03-14 00:55:26 +07:00
|
|
|
}
|
|
|
|
|
2012-07-17 01:21:45 +07:00
|
|
|
MACHINE_START(P720T, "ARM-Prospector720T")
|
|
|
|
/* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
|
|
|
|
.atag_offset = 0x100,
|
2012-11-17 20:57:13 +07:00
|
|
|
.nr_irqs = CLPS711X_NR_IRQS,
|
2012-07-17 01:21:45 +07:00
|
|
|
.fixup = fixup_p720t,
|
|
|
|
.map_io = p720t_map_io,
|
2012-11-17 20:57:08 +07:00
|
|
|
.init_early = p720t_init_early,
|
2012-07-17 01:21:45 +07:00
|
|
|
.init_irq = clps711x_init_irq,
|
|
|
|
.timer = &clps711x_timer,
|
2012-11-17 20:57:09 +07:00
|
|
|
.init_machine = p720t_init,
|
2012-11-17 20:57:08 +07:00
|
|
|
.init_late = p720t_init_late,
|
2012-11-17 20:57:14 +07:00
|
|
|
.handle_irq = clps711x_handle_irq,
|
2012-07-17 01:21:45 +07:00
|
|
|
.restart = clps711x_restart,
|
|
|
|
MACHINE_END
|