xref: /openbmc/linux/arch/arm/mach-nspire/nspire.c (revision 543c5040)
19851ca57SDaniel Tang /*
29851ca57SDaniel Tang  *	linux/arch/arm/mach-nspire/nspire.c
39851ca57SDaniel Tang  *
49851ca57SDaniel Tang  *	Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au>
59851ca57SDaniel Tang  *
69851ca57SDaniel Tang  * This program is free software; you can redistribute it and/or modify
79851ca57SDaniel Tang  * it under the terms of the GNU General Public License version 2, as
89851ca57SDaniel Tang  * published by the Free Software Foundation.
99851ca57SDaniel Tang  *
109851ca57SDaniel Tang  */
119851ca57SDaniel Tang #include <linux/init.h>
129851ca57SDaniel Tang #include <linux/of_irq.h>
139851ca57SDaniel Tang #include <linux/of_address.h>
149851ca57SDaniel Tang #include <linux/of_platform.h>
159851ca57SDaniel Tang #include <linux/irqchip.h>
169851ca57SDaniel Tang #include <linux/irqchip/arm-vic.h>
179851ca57SDaniel Tang #include <linux/clkdev.h>
189851ca57SDaniel Tang #include <linux/amba/bus.h>
199851ca57SDaniel Tang #include <linux/amba/clcd.h>
209851ca57SDaniel Tang 
219851ca57SDaniel Tang #include <asm/mach/arch.h>
229851ca57SDaniel Tang #include <asm/mach-types.h>
239851ca57SDaniel Tang #include <asm/mach/map.h>
249851ca57SDaniel Tang 
259851ca57SDaniel Tang #include <asm/hardware/timer-sp.h>
269851ca57SDaniel Tang 
279851ca57SDaniel Tang #include "mmio.h"
289851ca57SDaniel Tang #include "clcd.h"
299851ca57SDaniel Tang 
30543c5040SUwe Kleine-König static const char *const nspire_dt_match[] __initconst = {
319851ca57SDaniel Tang 	"ti,nspire",
329851ca57SDaniel Tang 	"ti,nspire-cx",
339851ca57SDaniel Tang 	"ti,nspire-tp",
349851ca57SDaniel Tang 	"ti,nspire-clp",
359851ca57SDaniel Tang 	NULL,
369851ca57SDaniel Tang };
379851ca57SDaniel Tang 
389851ca57SDaniel Tang static void __init nspire_map_io(void)
399851ca57SDaniel Tang {
409851ca57SDaniel Tang 	debug_ll_io_init();
419851ca57SDaniel Tang }
429851ca57SDaniel Tang 
439851ca57SDaniel Tang static struct clcd_board nspire_clcd_data = {
449851ca57SDaniel Tang 	.name		= "LCD",
459851ca57SDaniel Tang 	.caps		= CLCD_CAP_5551 | CLCD_CAP_565,
469851ca57SDaniel Tang 	.check		= clcdfb_check,
479851ca57SDaniel Tang 	.decode		= clcdfb_decode,
489851ca57SDaniel Tang 	.setup		= nspire_clcd_setup,
499851ca57SDaniel Tang 	.mmap		= nspire_clcd_mmap,
509851ca57SDaniel Tang 	.remove		= nspire_clcd_remove,
519851ca57SDaniel Tang };
529851ca57SDaniel Tang 
539851ca57SDaniel Tang 
549851ca57SDaniel Tang static struct of_dev_auxdata nspire_auxdata[] __initdata = {
559851ca57SDaniel Tang 	OF_DEV_AUXDATA("arm,pl111", NSPIRE_LCD_PHYS_BASE,
569851ca57SDaniel Tang 			NULL, &nspire_clcd_data),
579851ca57SDaniel Tang 	{ }
589851ca57SDaniel Tang };
599851ca57SDaniel Tang 
609851ca57SDaniel Tang static void __init nspire_init(void)
619851ca57SDaniel Tang {
629851ca57SDaniel Tang 	of_platform_populate(NULL, of_default_bus_match_table,
639851ca57SDaniel Tang 			nspire_auxdata, NULL);
649851ca57SDaniel Tang }
659851ca57SDaniel Tang 
6627addb96SAlexander Shiyan static void nspire_restart(enum reboot_mode mode, const char *cmd)
679851ca57SDaniel Tang {
689851ca57SDaniel Tang 	void __iomem *base = ioremap(NSPIRE_MISC_PHYS_BASE, SZ_4K);
699851ca57SDaniel Tang 	if (!base)
709851ca57SDaniel Tang 		return;
719851ca57SDaniel Tang 
729851ca57SDaniel Tang 	writel(2, base + NSPIRE_MISC_HWRESET);
739851ca57SDaniel Tang }
749851ca57SDaniel Tang 
759851ca57SDaniel Tang DT_MACHINE_START(NSPIRE, "TI-NSPIRE")
769851ca57SDaniel Tang 	.dt_compat	= nspire_dt_match,
779851ca57SDaniel Tang 	.map_io		= nspire_map_io,
789851ca57SDaniel Tang 	.init_machine	= nspire_init,
799851ca57SDaniel Tang 	.restart	= nspire_restart,
809851ca57SDaniel Tang MACHINE_END
81