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/clk-provider.h> 189851ca57SDaniel Tang #include <linux/clkdev.h> 199851ca57SDaniel Tang #include <linux/amba/bus.h> 209851ca57SDaniel Tang #include <linux/amba/clcd.h> 219851ca57SDaniel Tang #include <linux/clocksource.h> 229851ca57SDaniel Tang 239851ca57SDaniel Tang #include <asm/mach/arch.h> 249851ca57SDaniel Tang #include <asm/mach-types.h> 259851ca57SDaniel Tang #include <asm/mach/map.h> 269851ca57SDaniel Tang 279851ca57SDaniel Tang #include <asm/hardware/timer-sp.h> 289851ca57SDaniel Tang 299851ca57SDaniel Tang #include "mmio.h" 309851ca57SDaniel Tang #include "clcd.h" 319851ca57SDaniel Tang 329851ca57SDaniel Tang static const char *nspire_dt_match[] __initconst = { 339851ca57SDaniel Tang "ti,nspire", 349851ca57SDaniel Tang "ti,nspire-cx", 359851ca57SDaniel Tang "ti,nspire-tp", 369851ca57SDaniel Tang "ti,nspire-clp", 379851ca57SDaniel Tang NULL, 389851ca57SDaniel Tang }; 399851ca57SDaniel Tang 409851ca57SDaniel Tang static void __init nspire_map_io(void) 419851ca57SDaniel Tang { 429851ca57SDaniel Tang debug_ll_io_init(); 439851ca57SDaniel Tang } 449851ca57SDaniel Tang 459851ca57SDaniel Tang static struct clcd_board nspire_clcd_data = { 469851ca57SDaniel Tang .name = "LCD", 479851ca57SDaniel Tang .caps = CLCD_CAP_5551 | CLCD_CAP_565, 489851ca57SDaniel Tang .check = clcdfb_check, 499851ca57SDaniel Tang .decode = clcdfb_decode, 509851ca57SDaniel Tang .setup = nspire_clcd_setup, 519851ca57SDaniel Tang .mmap = nspire_clcd_mmap, 529851ca57SDaniel Tang .remove = nspire_clcd_remove, 539851ca57SDaniel Tang }; 549851ca57SDaniel Tang 559851ca57SDaniel Tang 569851ca57SDaniel Tang static struct of_dev_auxdata nspire_auxdata[] __initdata = { 579851ca57SDaniel Tang OF_DEV_AUXDATA("arm,pl111", NSPIRE_LCD_PHYS_BASE, 589851ca57SDaniel Tang NULL, &nspire_clcd_data), 599851ca57SDaniel Tang { } 609851ca57SDaniel Tang }; 619851ca57SDaniel Tang 629851ca57SDaniel Tang static void __init nspire_init(void) 639851ca57SDaniel Tang { 649851ca57SDaniel Tang of_platform_populate(NULL, of_default_bus_match_table, 659851ca57SDaniel Tang nspire_auxdata, NULL); 669851ca57SDaniel Tang } 679851ca57SDaniel Tang 689851ca57SDaniel Tang static void __init nspire_init_time(void) 699851ca57SDaniel Tang { 709851ca57SDaniel Tang of_clk_init(NULL); 719851ca57SDaniel Tang clocksource_of_init(); 729851ca57SDaniel Tang } 739851ca57SDaniel Tang 749851ca57SDaniel Tang static void nspire_restart(char mode, const char *cmd) 759851ca57SDaniel Tang { 769851ca57SDaniel Tang void __iomem *base = ioremap(NSPIRE_MISC_PHYS_BASE, SZ_4K); 779851ca57SDaniel Tang if (!base) 789851ca57SDaniel Tang return; 799851ca57SDaniel Tang 809851ca57SDaniel Tang writel(2, base + NSPIRE_MISC_HWRESET); 819851ca57SDaniel Tang } 829851ca57SDaniel Tang 839851ca57SDaniel Tang DT_MACHINE_START(NSPIRE, "TI-NSPIRE") 849851ca57SDaniel Tang .dt_compat = nspire_dt_match, 859851ca57SDaniel Tang .map_io = nspire_map_io, 869851ca57SDaniel Tang .init_time = nspire_init_time, 879851ca57SDaniel Tang .init_machine = nspire_init, 889851ca57SDaniel Tang .restart = nspire_restart, 899851ca57SDaniel Tang MACHINE_END 90