diff options
author | Olof Johansson <olof@lixom.net> | 2013-06-25 16:36:09 -0400 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2013-06-25 16:43:18 -0400 |
commit | 2655e828350cc7558d1a74cd4464e34b81e17f36 (patch) | |
tree | ddf5a103b69de5982b102f1f3e8feb6b236a8de1 | |
parent | cbe461f65427210fd0f2813d72383f66a46889f1 (diff) | |
parent | 9851ca5774e693e2088a4b34ad456cfaadaf29a7 (diff) |
Merge branch 'nspire/soc' into next/late
From Daniel Tang <dt.tangr@gmail.com>
This is the initial platform code for the TI-Nspire graphing
calculators. The platform support is rather unspectacular, but still
contains platform data for the LCD panel, which will get removed once
there is a DT binding for the AMBA CLCD driver.
* nspire/soc:
arm: Add Initial TI-Nspire support
arm: Add device trees for TI-Nspire hardware
Signed-off-by: Olof Johansson <olof@lixom.net>
-rw-r--r-- | Documentation/devicetree/bindings/arm/nspire.txt | 14 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/vendor-prefixes.txt | 1 | ||||
-rw-r--r-- | arch/arm/Kconfig | 2 | ||||
-rw-r--r-- | arch/arm/Kconfig.debug | 16 | ||||
-rw-r--r-- | arch/arm/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/boot/dts/Makefile | 3 | ||||
-rw-r--r-- | arch/arm/boot/dts/nspire-classic.dtsi | 74 | ||||
-rw-r--r-- | arch/arm/boot/dts/nspire-clp.dts | 45 | ||||
-rw-r--r-- | arch/arm/boot/dts/nspire-cx.dts | 112 | ||||
-rw-r--r-- | arch/arm/boot/dts/nspire-tp.dts | 44 | ||||
-rw-r--r-- | arch/arm/boot/dts/nspire.dtsi | 175 | ||||
-rw-r--r-- | arch/arm/include/debug/nspire.S | 28 | ||||
-rw-r--r-- | arch/arm/mach-nspire/Kconfig | 16 | ||||
-rw-r--r-- | arch/arm/mach-nspire/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mach-nspire/Makefile.boot | 0 | ||||
-rw-r--r-- | arch/arm/mach-nspire/clcd.c | 119 | ||||
-rw-r--r-- | arch/arm/mach-nspire/clcd.h | 14 | ||||
-rw-r--r-- | arch/arm/mach-nspire/mmio.h | 20 | ||||
-rw-r--r-- | arch/arm/mach-nspire/nspire.c | 89 |
19 files changed, 775 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/arm/nspire.txt b/Documentation/devicetree/bindings/arm/nspire.txt new file mode 100644 index 000000000000..4d08518bd176 --- /dev/null +++ b/Documentation/devicetree/bindings/arm/nspire.txt | |||
@@ -0,0 +1,14 @@ | |||
1 | TI-NSPIRE calculators | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: Compatible property value should contain "ti,nspire". | ||
5 | CX models should have "ti,nspire-cx" | ||
6 | Touchpad models should have "ti,nspire-tp" | ||
7 | Clickpad models should have "ti,nspire-clp" | ||
8 | |||
9 | Example: | ||
10 | |||
11 | / { | ||
12 | model = "TI-NSPIRE CX"; | ||
13 | compatible = "ti,nspire-cx"; | ||
14 | ... | ||
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt index 6931c4348d24..b27b057c5c4f 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt | |||
@@ -31,6 +31,7 @@ idt Integrated Device Technologies, Inc. | |||
31 | img Imagination Technologies Ltd. | 31 | img Imagination Technologies Ltd. |
32 | intercontrol Inter Control Group | 32 | intercontrol Inter Control Group |
33 | linux Linux-specific binding | 33 | linux Linux-specific binding |
34 | lsi LSI Corp. (LSI Logic) | ||
34 | marvell Marvell Technology Group Ltd. | 35 | marvell Marvell Technology Group Ltd. |
35 | maxim Maxim Integrated Products | 36 | maxim Maxim Integrated Products |
36 | mosaixtech Mosaix Technologies, Inc. | 37 | mosaixtech Mosaix Technologies, Inc. |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index dfb4fee1f552..aa27704be4e4 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -964,6 +964,8 @@ source "arch/arm/mach-netx/Kconfig" | |||
964 | 964 | ||
965 | source "arch/arm/mach-nomadik/Kconfig" | 965 | source "arch/arm/mach-nomadik/Kconfig" |
966 | 966 | ||
967 | source "arch/arm/mach-nspire/Kconfig" | ||
968 | |||
967 | source "arch/arm/plat-omap/Kconfig" | 969 | source "arch/arm/plat-omap/Kconfig" |
968 | 970 | ||
969 | source "arch/arm/mach-omap1/Kconfig" | 971 | source "arch/arm/mach-omap1/Kconfig" |
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 1d41908d5cda..fe079417daa2 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
@@ -309,6 +309,20 @@ choice | |||
309 | Say Y here if you want kernel low-level debugging support | 309 | Say Y here if you want kernel low-level debugging support |
310 | on MVEBU based platforms. | 310 | on MVEBU based platforms. |
311 | 311 | ||
312 | config DEBUG_NSPIRE_CLASSIC_UART | ||
313 | bool "Kernel low-level debugging via TI-NSPIRE 8250 UART" | ||
314 | depends on ARCH_NSPIRE | ||
315 | help | ||
316 | Say Y here if you want kernel low-level debugging support | ||
317 | on TI-NSPIRE classic models. | ||
318 | |||
319 | config DEBUG_NSPIRE_CX_UART | ||
320 | bool "Kernel low-level debugging via TI-NSPIRE PL011 UART" | ||
321 | depends on ARCH_NSPIRE | ||
322 | help | ||
323 | Say Y here if you want kernel low-level debugging support | ||
324 | on TI-NSPIRE CX models. | ||
325 | |||
312 | config DEBUG_NOMADIK_UART | 326 | config DEBUG_NOMADIK_UART |
313 | bool "Kernel low-level debugging messages via NOMADIK UART" | 327 | bool "Kernel low-level debugging messages via NOMADIK UART" |
314 | depends on ARCH_NOMADIK | 328 | depends on ARCH_NOMADIK |
@@ -633,6 +647,8 @@ config DEBUG_LL_INCLUDE | |||
633 | DEBUG_IMX53_UART ||\ | 647 | DEBUG_IMX53_UART ||\ |
634 | DEBUG_IMX6Q_UART | 648 | DEBUG_IMX6Q_UART |
635 | default "debug/mvebu.S" if DEBUG_MVEBU_UART | 649 | default "debug/mvebu.S" if DEBUG_MVEBU_UART |
650 | default "debug/nspire.S" if DEBUG_NSPIRE_CX_UART || \ | ||
651 | DEBUG_NSPIRE_CLASSIC_UART | ||
636 | default "debug/mxs.S" if DEBUG_IMX23_UART || DEBUG_IMX28_UART | 652 | default "debug/mxs.S" if DEBUG_IMX23_UART || DEBUG_IMX28_UART |
637 | default "debug/nomadik.S" if DEBUG_NOMADIK_UART | 653 | default "debug/nomadik.S" if DEBUG_NOMADIK_UART |
638 | default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART | 654 | default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 1ba358ba16b8..b4615aa9bf7a 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -164,6 +164,7 @@ machine-$(CONFIG_ARCH_MXS) += mxs | |||
164 | machine-$(CONFIG_ARCH_MVEBU) += mvebu | 164 | machine-$(CONFIG_ARCH_MVEBU) += mvebu |
165 | machine-$(CONFIG_ARCH_NETX) += netx | 165 | machine-$(CONFIG_ARCH_NETX) += netx |
166 | machine-$(CONFIG_ARCH_NOMADIK) += nomadik | 166 | machine-$(CONFIG_ARCH_NOMADIK) += nomadik |
167 | machine-$(CONFIG_ARCH_NSPIRE) += nspire | ||
167 | machine-$(CONFIG_ARCH_OMAP1) += omap1 | 168 | machine-$(CONFIG_ARCH_OMAP1) += omap1 |
168 | machine-$(CONFIG_ARCH_OMAP2PLUS) += omap2 | 169 | machine-$(CONFIG_ARCH_OMAP2PLUS) += omap2 |
169 | machine-$(CONFIG_ARCH_ORION5X) += orion5x | 170 | machine-$(CONFIG_ARCH_ORION5X) += orion5x |
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 13575103594d..60404661585d 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
@@ -136,6 +136,9 @@ dtb-$(CONFIG_ARCH_MXS) += imx23-evk.dtb \ | |||
136 | imx28-sps1.dtb \ | 136 | imx28-sps1.dtb \ |
137 | imx28-tx28.dtb | 137 | imx28-tx28.dtb |
138 | dtb-$(CONFIG_ARCH_NOMADIK) += ste-nomadik-s8815.dtb | 138 | dtb-$(CONFIG_ARCH_NOMADIK) += ste-nomadik-s8815.dtb |
139 | dtb-$(CONFIG_ARCH_NSPIRE) += nspire-cx.dtb \ | ||
140 | nspire-tp.dtb \ | ||
141 | nspire-clp.dtb | ||
139 | dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \ | 142 | dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \ |
140 | omap3430-sdp.dtb \ | 143 | omap3430-sdp.dtb \ |
141 | omap3-beagle.dtb \ | 144 | omap3-beagle.dtb \ |
diff --git a/arch/arm/boot/dts/nspire-classic.dtsi b/arch/arm/boot/dts/nspire-classic.dtsi new file mode 100644 index 000000000000..9565199bce7a --- /dev/null +++ b/arch/arm/boot/dts/nspire-classic.dtsi | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/boot/nspire-classic.dts | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | /include/ "nspire.dtsi" | ||
13 | |||
14 | &lcd { | ||
15 | lcd-type = "classic"; | ||
16 | }; | ||
17 | |||
18 | &fast_timer { | ||
19 | /* compatible = "lsi,zevio-timer"; */ | ||
20 | reg = <0x90010000 0x1000>, <0x900A0010 0x8>; | ||
21 | }; | ||
22 | |||
23 | &uart { | ||
24 | compatible = "ns16550"; | ||
25 | reg-shift = <2>; | ||
26 | reg-io-width = <4>; | ||
27 | clocks = <&apb_pclk>; | ||
28 | no-loopback-test; | ||
29 | }; | ||
30 | |||
31 | &timer0 { | ||
32 | /* compatible = "lsi,zevio-timer"; */ | ||
33 | reg = <0x900C0000 0x1000>, <0x900A0018 0x8>; | ||
34 | }; | ||
35 | |||
36 | &timer1 { | ||
37 | compatible = "lsi,zevio-timer"; | ||
38 | reg = <0x900D0000 0x1000>, <0x900A0020 0x8>; | ||
39 | }; | ||
40 | |||
41 | &keypad { | ||
42 | active-low; | ||
43 | |||
44 | }; | ||
45 | |||
46 | &base_clk { | ||
47 | compatible = "lsi,nspire-classic-clock"; | ||
48 | }; | ||
49 | |||
50 | &ahb_clk { | ||
51 | compatible = "lsi,nspire-classic-ahb-divider"; | ||
52 | }; | ||
53 | |||
54 | / { | ||
55 | memory { | ||
56 | device_type = "memory"; | ||
57 | reg = <0x10000000 0x2000000>; /* 32 MB */ | ||
58 | }; | ||
59 | |||
60 | ahb { | ||
61 | #address-cells = <1>; | ||
62 | #size-cells = <1>; | ||
63 | |||
64 | intc: interrupt-controller@DC000000 { | ||
65 | compatible = "lsi,zevio-intc"; | ||
66 | interrupt-controller; | ||
67 | reg = <0xDC000000 0x1000>; | ||
68 | #interrupt-cells = <1>; | ||
69 | }; | ||
70 | }; | ||
71 | chosen { | ||
72 | bootargs = "debug earlyprintk console=tty0 console=ttyS0,115200n8 root=/dev/ram0"; | ||
73 | }; | ||
74 | }; | ||
diff --git a/arch/arm/boot/dts/nspire-clp.dts b/arch/arm/boot/dts/nspire-clp.dts new file mode 100644 index 000000000000..fa5a044656de --- /dev/null +++ b/arch/arm/boot/dts/nspire-clp.dts | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/boot/nspire-clp.dts | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | /dts-v1/; | ||
12 | |||
13 | /include/ "nspire-classic.dtsi" | ||
14 | |||
15 | &keypad { | ||
16 | linux,keymap = < | ||
17 | 0x0000001c 0x0001001c 0x00020039 | ||
18 | 0x0004002c 0x00050034 0x00060015 | ||
19 | 0x0007000b 0x0008002d 0x01000033 | ||
20 | 0x0101004e 0x01020011 0x01030004 | ||
21 | 0x0104002f 0x01050003 0x01060016 | ||
22 | 0x01070002 0x01080014 0x02000062 | ||
23 | 0x0201000c 0x0202001f 0x02030007 | ||
24 | 0x02040013 0x02050006 0x02060010 | ||
25 | 0x02070005 0x02080019 0x03000027 | ||
26 | 0x03010037 0x03020018 0x0303000a | ||
27 | 0x03040031 0x03050009 0x03060032 | ||
28 | 0x03070008 0x03080026 0x04000028 | ||
29 | 0x04010035 0x04020025 0x04040024 | ||
30 | 0x04060017 0x04080023 0x05000028 | ||
31 | 0x05020022 0x0503001b 0x05040021 | ||
32 | 0x0505001a 0x05060012 0x0507006f | ||
33 | 0x05080020 0x0509002a 0x0601001c | ||
34 | 0x0602002e 0x06030068 0x06040030 | ||
35 | 0x0605006d 0x0606001e 0x06070001 | ||
36 | 0x0608002b 0x0609000f 0x07000067 | ||
37 | 0x0702006a 0x0704006c 0x07060069 | ||
38 | 0x0707000e 0x0708001d 0x070a000d | ||
39 | >; | ||
40 | }; | ||
41 | |||
42 | / { | ||
43 | model = "TI-NSPIRE Clickpad"; | ||
44 | compatible = "ti,nspire-clp"; | ||
45 | }; | ||
diff --git a/arch/arm/boot/dts/nspire-cx.dts b/arch/arm/boot/dts/nspire-cx.dts new file mode 100644 index 000000000000..375b924f60d8 --- /dev/null +++ b/arch/arm/boot/dts/nspire-cx.dts | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/boot/nspire-cx.dts | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | /dts-v1/; | ||
12 | |||
13 | /include/ "nspire.dtsi" | ||
14 | |||
15 | &lcd { | ||
16 | lcd-type = "cx"; | ||
17 | }; | ||
18 | |||
19 | &fast_timer { | ||
20 | /* compatible = "arm,sp804", "arm,primecell"; */ | ||
21 | }; | ||
22 | |||
23 | &uart { | ||
24 | compatible = "arm,pl011", "arm,primecell"; | ||
25 | |||
26 | clocks = <&uart_clk>, <&apb_pclk>; | ||
27 | clock-names = "uart_clk", "apb_pclk"; | ||
28 | }; | ||
29 | |||
30 | &timer0 { | ||
31 | compatible = "arm,sp804", "arm,primecell"; | ||
32 | }; | ||
33 | |||
34 | &timer1 { | ||
35 | compatible = "arm,sp804", "arm,primecell"; | ||
36 | }; | ||
37 | |||
38 | &base_clk { | ||
39 | compatible = "lsi,nspire-cx-clock"; | ||
40 | }; | ||
41 | |||
42 | &ahb_clk { | ||
43 | compatible = "lsi,nspire-cx-ahb-divider"; | ||
44 | }; | ||
45 | |||
46 | &keypad { | ||
47 | linux,keymap = < | ||
48 | 0x0000001c 0x0001001c 0x00040039 | ||
49 | 0x0005002c 0x00060015 0x0007000b | ||
50 | 0x0008000f 0x0100002d 0x01010011 | ||
51 | 0x0102002f 0x01030004 0x01040016 | ||
52 | 0x01050014 0x0106001f 0x01070002 | ||
53 | 0x010a006a 0x02000013 0x02010010 | ||
54 | 0x02020019 0x02030007 0x02040018 | ||
55 | 0x02050031 0x02060032 0x02070005 | ||
56 | 0x02080028 0x0209006c 0x03000026 | ||
57 | 0x03010025 0x03020024 0x0303000a | ||
58 | 0x03040017 0x03050023 0x03060022 | ||
59 | 0x03070008 0x03080035 0x03090069 | ||
60 | 0x04000021 0x04010012 0x04020020 | ||
61 | 0x0404002e 0x04050030 0x0406001e | ||
62 | 0x0407000d 0x04080037 0x04090067 | ||
63 | 0x05010038 0x0502000c 0x0503001b | ||
64 | 0x05040034 0x0505001a 0x05060006 | ||
65 | 0x05080027 0x0509000e 0x050a006f | ||
66 | 0x0600002b 0x0602004e 0x06030068 | ||
67 | 0x06040003 0x0605006d 0x06060009 | ||
68 | 0x06070001 0x0609000f 0x0708002a | ||
69 | 0x0709001d 0x070a0033 >; | ||
70 | }; | ||
71 | |||
72 | / { | ||
73 | model = "TI-NSPIRE CX"; | ||
74 | compatible = "ti,nspire-cx"; | ||
75 | |||
76 | memory { | ||
77 | device_type = "memory"; | ||
78 | reg = <0x10000000 0x4000000>; /* 64 MB */ | ||
79 | }; | ||
80 | |||
81 | uart_clk: uart_clk { | ||
82 | #clock-cells = <0>; | ||
83 | compatible = "fixed-clock"; | ||
84 | clock-frequency = <12000000>; | ||
85 | }; | ||
86 | |||
87 | ahb { | ||
88 | #address-cells = <1>; | ||
89 | #size-cells = <1>; | ||
90 | |||
91 | intc: interrupt-controller@DC000000 { | ||
92 | compatible = "arm,pl190-vic"; | ||
93 | interrupt-controller; | ||
94 | reg = <0xDC000000 0x1000>; | ||
95 | #interrupt-cells = <1>; | ||
96 | }; | ||
97 | |||
98 | apb@90000000 { | ||
99 | #address-cells = <1>; | ||
100 | #size-cells = <1>; | ||
101 | |||
102 | i2c@90050000 { | ||
103 | compatible = "snps,designware-i2c"; | ||
104 | reg = <0x90050000 0x1000>; | ||
105 | interrupts = <20>; | ||
106 | }; | ||
107 | }; | ||
108 | }; | ||
109 | chosen { | ||
110 | bootargs = "debug earlyprintk console=tty0 console=ttyAMA0,115200n8 root=/dev/ram0"; | ||
111 | }; | ||
112 | }; | ||
diff --git a/arch/arm/boot/dts/nspire-tp.dts b/arch/arm/boot/dts/nspire-tp.dts new file mode 100644 index 000000000000..621391ce6ed6 --- /dev/null +++ b/arch/arm/boot/dts/nspire-tp.dts | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/boot/nspire-tp.dts | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | /dts-v1/; | ||
12 | |||
13 | /include/ "nspire-classic.dtsi" | ||
14 | |||
15 | &keypad { | ||
16 | linux,keymap = < | ||
17 | 0x0000001c 0x0001001c 0x00040039 | ||
18 | 0x0005002c 0x00060015 0x0007000b | ||
19 | 0x0008000f 0x0100002d 0x01010011 | ||
20 | 0x0102002f 0x01030004 0x01040016 | ||
21 | 0x01050014 0x0106001f 0x01070002 | ||
22 | 0x010a006a 0x02000013 0x02010010 | ||
23 | 0x02020019 0x02030007 0x02040018 | ||
24 | 0x02050031 0x02060032 0x02070005 | ||
25 | 0x02080028 0x0209006c 0x03000026 | ||
26 | 0x03010025 0x03020024 0x0303000a | ||
27 | 0x03040017 0x03050023 0x03060022 | ||
28 | 0x03070008 0x03080035 0x03090069 | ||
29 | 0x04000021 0x04010012 0x04020020 | ||
30 | 0x0404002e 0x04050030 0x0406001e | ||
31 | 0x0407000d 0x04080037 0x04090067 | ||
32 | 0x05010038 0x0502000c 0x0503001b | ||
33 | 0x05040034 0x0505001a 0x05060006 | ||
34 | 0x05080027 0x0509000e 0x050a006f | ||
35 | 0x0600002b 0x0602004e 0x06030068 | ||
36 | 0x06040003 0x0605006d 0x06060009 | ||
37 | 0x06070001 0x0609000f 0x0708002a | ||
38 | 0x0709001d 0x070a0033 >; | ||
39 | }; | ||
40 | |||
41 | / { | ||
42 | model = "TI-NSPIRE Touchpad"; | ||
43 | compatible = "ti,nspire-tp"; | ||
44 | }; | ||
diff --git a/arch/arm/boot/dts/nspire.dtsi b/arch/arm/boot/dts/nspire.dtsi new file mode 100644 index 000000000000..a22ffe633b49 --- /dev/null +++ b/arch/arm/boot/dts/nspire.dtsi | |||
@@ -0,0 +1,175 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/boot/nspire.dtsi | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | /include/ "skeleton.dtsi" | ||
13 | |||
14 | / { | ||
15 | interrupt-parent = <&intc>; | ||
16 | |||
17 | cpus { | ||
18 | cpu@0 { | ||
19 | compatible = "arm,arm926ejs"; | ||
20 | }; | ||
21 | }; | ||
22 | |||
23 | bootrom: bootrom@00000000 { | ||
24 | reg = <0x00000000 0x80000>; | ||
25 | }; | ||
26 | |||
27 | sram: sram@A4000000 { | ||
28 | device = "memory"; | ||
29 | reg = <0xA4000000 0x20000>; | ||
30 | }; | ||
31 | |||
32 | timer_clk: timer_clk { | ||
33 | #clock-cells = <0>; | ||
34 | compatible = "fixed-clock"; | ||
35 | clock-frequency = <32768>; | ||
36 | }; | ||
37 | |||
38 | base_clk: base_clk { | ||
39 | #clock-cells = <0>; | ||
40 | reg = <0x900B0024 0x4>; | ||
41 | }; | ||
42 | |||
43 | ahb_clk: ahb_clk { | ||
44 | #clock-cells = <0>; | ||
45 | reg = <0x900B0024 0x4>; | ||
46 | clocks = <&base_clk>; | ||
47 | }; | ||
48 | |||
49 | apb_pclk: apb_pclk { | ||
50 | #clock-cells = <0>; | ||
51 | compatible = "fixed-factor-clock"; | ||
52 | clock-div = <2>; | ||
53 | clock-mult = <1>; | ||
54 | clocks = <&ahb_clk>; | ||
55 | }; | ||
56 | |||
57 | ahb { | ||
58 | compatible = "simple-bus"; | ||
59 | #address-cells = <1>; | ||
60 | #size-cells = <1>; | ||
61 | ranges; | ||
62 | |||
63 | spi: spi@A9000000 { | ||
64 | reg = <0xA9000000 0x1000>; | ||
65 | }; | ||
66 | |||
67 | usb0: usb@B0000000 { | ||
68 | reg = <0xB0000000 0x1000>; | ||
69 | interrupts = <8>; | ||
70 | }; | ||
71 | |||
72 | usb1: usb@B4000000 { | ||
73 | reg = <0xB4000000 0x1000>; | ||
74 | interrupts = <9>; | ||
75 | status = "disabled"; | ||
76 | }; | ||
77 | |||
78 | lcd: lcd@C0000000 { | ||
79 | compatible = "arm,pl111", "arm,primecell"; | ||
80 | reg = <0xC0000000 0x1000>; | ||
81 | interrupts = <21>; | ||
82 | |||
83 | clocks = <&apb_pclk>; | ||
84 | clock-names = "apb_pclk"; | ||
85 | }; | ||
86 | |||
87 | adc: adc@C4000000 { | ||
88 | reg = <0xC4000000 0x1000>; | ||
89 | interrupts = <11>; | ||
90 | }; | ||
91 | |||
92 | tdes: crypto@C8010000 { | ||
93 | reg = <0xC8010000 0x1000>; | ||
94 | }; | ||
95 | |||
96 | sha256: crypto@CC000000 { | ||
97 | reg = <0xCC000000 0x1000>; | ||
98 | }; | ||
99 | |||
100 | apb@90000000 { | ||
101 | compatible = "simple-bus"; | ||
102 | #address-cells = <1>; | ||
103 | #size-cells = <1>; | ||
104 | clock-ranges; | ||
105 | ranges; | ||
106 | |||
107 | gpio: gpio@90000000 { | ||
108 | reg = <0x90000000 0x1000>; | ||
109 | interrupts = <7>; | ||
110 | }; | ||
111 | |||
112 | fast_timer: timer@90010000 { | ||
113 | reg = <0x90010000 0x1000>; | ||
114 | interrupts = <17>; | ||
115 | }; | ||
116 | |||
117 | uart: serial@90020000 { | ||
118 | reg = <0x90020000 0x1000>; | ||
119 | interrupts = <1>; | ||
120 | }; | ||
121 | |||
122 | timer0: timer@900C0000 { | ||
123 | reg = <0x900C0000 0x1000>; | ||
124 | |||
125 | clocks = <&timer_clk>; | ||
126 | }; | ||
127 | |||
128 | timer1: timer@900D0000 { | ||
129 | reg = <0x900D0000 0x1000>; | ||
130 | interrupts = <19>; | ||
131 | |||
132 | clocks = <&timer_clk>; | ||
133 | }; | ||
134 | |||
135 | watchdog: watchdog@90060000 { | ||
136 | compatible = "arm,amba-primecell"; | ||
137 | reg = <0x90060000 0x1000>; | ||
138 | interrupts = <3>; | ||
139 | }; | ||
140 | |||
141 | rtc: rtc@90090000 { | ||
142 | reg = <0x90090000 0x1000>; | ||
143 | interrupts = <4>; | ||
144 | }; | ||
145 | |||
146 | misc: misc@900A0000 { | ||
147 | reg = <0x900A0000 0x1000>; | ||
148 | }; | ||
149 | |||
150 | pwr: pwr@900B0000 { | ||
151 | reg = <0x900B0000 0x1000>; | ||
152 | interrupts = <15>; | ||
153 | }; | ||
154 | |||
155 | keypad: input@900E0000 { | ||
156 | compatible = "ti,nspire-keypad"; | ||
157 | reg = <0x900E0000 0x1000>; | ||
158 | interrupts = <16>; | ||
159 | |||
160 | scan-interval = <1000>; | ||
161 | row-delay = <200>; | ||
162 | |||
163 | clocks = <&apb_pclk>; | ||
164 | }; | ||
165 | |||
166 | contrast: contrast@900F0000 { | ||
167 | reg = <0x900F0000 0x1000>; | ||
168 | }; | ||
169 | |||
170 | led: led@90110000 { | ||
171 | reg = <0x90110000 0x1000>; | ||
172 | }; | ||
173 | }; | ||
174 | }; | ||
175 | }; | ||
diff --git a/arch/arm/include/debug/nspire.S b/arch/arm/include/debug/nspire.S new file mode 100644 index 000000000000..886fd276fcbc --- /dev/null +++ b/arch/arm/include/debug/nspire.S | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/include/debug/nspire.S | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #define NSPIRE_EARLY_UART_PHYS_BASE 0x90020000 | ||
13 | #define NSPIRE_EARLY_UART_VIRT_BASE 0xfee20000 | ||
14 | |||
15 | .macro addruart, rp, rv, tmp | ||
16 | ldr \rp, =(NSPIRE_EARLY_UART_PHYS_BASE) @ physical base address | ||
17 | ldr \rv, =(NSPIRE_EARLY_UART_VIRT_BASE) @ virtual base address | ||
18 | .endm | ||
19 | |||
20 | |||
21 | #ifdef CONFIG_DEBUG_NSPIRE_CX_UART | ||
22 | #include <asm/hardware/debug-pl01x.S> | ||
23 | #endif | ||
24 | |||
25 | #ifdef CONFIG_DEBUG_NSPIRE_CLASSIC_UART | ||
26 | #define UART_SHIFT 2 | ||
27 | #include <asm/hardware/debug-8250.S> | ||
28 | #endif | ||
diff --git a/arch/arm/mach-nspire/Kconfig b/arch/arm/mach-nspire/Kconfig new file mode 100644 index 000000000000..59d8f0a70919 --- /dev/null +++ b/arch/arm/mach-nspire/Kconfig | |||
@@ -0,0 +1,16 @@ | |||
1 | config ARCH_NSPIRE | ||
2 | bool "TI-NSPIRE based" | ||
3 | depends on ARCH_MULTI_V4_V5 | ||
4 | depends on MMU | ||
5 | select CPU_ARM926T | ||
6 | select COMMON_CLK | ||
7 | select GENERIC_CLOCKEVENTS | ||
8 | select GENERIC_IRQ_CHIP | ||
9 | select SPARSE_IRQ | ||
10 | select ARM_AMBA | ||
11 | select ARM_VIC | ||
12 | select ARM_TIMER_SP804 | ||
13 | select USE_OF | ||
14 | select CLKSRC_OF | ||
15 | help | ||
16 | This enables support for systems using the TI-NSPIRE CPU | ||
diff --git a/arch/arm/mach-nspire/Makefile b/arch/arm/mach-nspire/Makefile new file mode 100644 index 000000000000..1bec256eba07 --- /dev/null +++ b/arch/arm/mach-nspire/Makefile | |||
@@ -0,0 +1,2 @@ | |||
1 | obj-y += nspire.o | ||
2 | obj-y += clcd.o | ||
diff --git a/arch/arm/mach-nspire/Makefile.boot b/arch/arm/mach-nspire/Makefile.boot new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/arch/arm/mach-nspire/Makefile.boot | |||
diff --git a/arch/arm/mach-nspire/clcd.c b/arch/arm/mach-nspire/clcd.c new file mode 100644 index 000000000000..abea12617b17 --- /dev/null +++ b/arch/arm/mach-nspire/clcd.c | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-nspire/clcd.c | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/init.h> | ||
13 | #include <linux/of.h> | ||
14 | #include <linux/amba/bus.h> | ||
15 | #include <linux/amba/clcd.h> | ||
16 | #include <linux/dma-mapping.h> | ||
17 | |||
18 | static struct clcd_panel nspire_cx_lcd_panel = { | ||
19 | .mode = { | ||
20 | .name = "Color LCD", | ||
21 | .refresh = 60, | ||
22 | .xres = 320, | ||
23 | .yres = 240, | ||
24 | .sync = 0, | ||
25 | .vmode = FB_VMODE_NONINTERLACED, | ||
26 | .pixclock = 1, | ||
27 | .hsync_len = 6, | ||
28 | .vsync_len = 1, | ||
29 | .right_margin = 50, | ||
30 | .left_margin = 38, | ||
31 | .lower_margin = 3, | ||
32 | .upper_margin = 17, | ||
33 | }, | ||
34 | .width = 65, /* ~6.50 cm */ | ||
35 | .height = 49, /* ~4.87 cm */ | ||
36 | .tim2 = TIM2_IPC, | ||
37 | .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1), | ||
38 | .bpp = 16, | ||
39 | .caps = CLCD_CAP_565, | ||
40 | }; | ||
41 | |||
42 | static struct clcd_panel nspire_classic_lcd_panel = { | ||
43 | .mode = { | ||
44 | .name = "Grayscale LCD", | ||
45 | .refresh = 60, | ||
46 | .xres = 320, | ||
47 | .yres = 240, | ||
48 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
49 | .vmode = FB_VMODE_NONINTERLACED, | ||
50 | .pixclock = 1, | ||
51 | .hsync_len = 6, | ||
52 | .vsync_len = 1, | ||
53 | .right_margin = 6, | ||
54 | .left_margin = 6, | ||
55 | }, | ||
56 | .width = 71, /* 7.11cm */ | ||
57 | .height = 53, /* 5.33cm */ | ||
58 | .tim2 = 0x80007d0, | ||
59 | .cntl = CNTL_LCDMONO8, | ||
60 | .bpp = 8, | ||
61 | .grayscale = 1, | ||
62 | .caps = CLCD_CAP_5551, | ||
63 | }; | ||
64 | |||
65 | int nspire_clcd_setup(struct clcd_fb *fb) | ||
66 | { | ||
67 | struct clcd_panel *panel; | ||
68 | size_t panel_size; | ||
69 | const char *type; | ||
70 | dma_addr_t dma; | ||
71 | int err; | ||
72 | |||
73 | BUG_ON(!fb->dev->dev.of_node); | ||
74 | |||
75 | err = of_property_read_string(fb->dev->dev.of_node, "lcd-type", &type); | ||
76 | if (err) { | ||
77 | pr_err("CLCD: Could not find lcd-type property\n"); | ||
78 | return err; | ||
79 | } | ||
80 | |||
81 | if (!strcmp(type, "cx")) { | ||
82 | panel = &nspire_cx_lcd_panel; | ||
83 | } else if (!strcmp(type, "classic")) { | ||
84 | panel = &nspire_classic_lcd_panel; | ||
85 | } else { | ||
86 | pr_err("CLCD: Unknown lcd-type %s\n", type); | ||
87 | return -EINVAL; | ||
88 | } | ||
89 | |||
90 | panel_size = ((panel->mode.xres * panel->mode.yres) * panel->bpp) / 8; | ||
91 | panel_size = ALIGN(panel_size, PAGE_SIZE); | ||
92 | |||
93 | fb->fb.screen_base = dma_alloc_writecombine(&fb->dev->dev, | ||
94 | panel_size, &dma, GFP_KERNEL); | ||
95 | |||
96 | if (!fb->fb.screen_base) { | ||
97 | pr_err("CLCD: unable to map framebuffer\n"); | ||
98 | return -ENOMEM; | ||
99 | } | ||
100 | |||
101 | fb->fb.fix.smem_start = dma; | ||
102 | fb->fb.fix.smem_len = panel_size; | ||
103 | fb->panel = panel; | ||
104 | |||
105 | return 0; | ||
106 | } | ||
107 | |||
108 | int nspire_clcd_mmap(struct clcd_fb *fb, struct vm_area_struct *vma) | ||
109 | { | ||
110 | return dma_mmap_writecombine(&fb->dev->dev, vma, | ||
111 | fb->fb.screen_base, fb->fb.fix.smem_start, | ||
112 | fb->fb.fix.smem_len); | ||
113 | } | ||
114 | |||
115 | void nspire_clcd_remove(struct clcd_fb *fb) | ||
116 | { | ||
117 | dma_free_writecombine(&fb->dev->dev, fb->fb.fix.smem_len, | ||
118 | fb->fb.screen_base, fb->fb.fix.smem_start); | ||
119 | } | ||
diff --git a/arch/arm/mach-nspire/clcd.h b/arch/arm/mach-nspire/clcd.h new file mode 100644 index 000000000000..8c33d2c18371 --- /dev/null +++ b/arch/arm/mach-nspire/clcd.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-nspire/clcd.h | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | int nspire_clcd_setup(struct clcd_fb *fb); | ||
13 | int nspire_clcd_mmap(struct clcd_fb *fb, struct vm_area_struct *vma); | ||
14 | void nspire_clcd_remove(struct clcd_fb *fb); | ||
diff --git a/arch/arm/mach-nspire/mmio.h b/arch/arm/mach-nspire/mmio.h new file mode 100644 index 000000000000..8813471af4cf --- /dev/null +++ b/arch/arm/mach-nspire/mmio.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-nspire/mmio.h | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #define NSPIRE_MISC_PHYS_BASE 0x900A0000 | ||
13 | #define NSPIRE_MISC_HWRESET 0x08 | ||
14 | |||
15 | #define NSPIRE_PWR_PHYS_BASE 0x900B0000 | ||
16 | #define NSPIRE_PWR_VIRT_BASE 0xFEEB0000 | ||
17 | #define NSPIRE_PWR_BUS_DISABLE1 0x18 | ||
18 | #define NSPIRE_PWR_BUS_DISABLE2 0x20 | ||
19 | |||
20 | #define NSPIRE_LCD_PHYS_BASE 0xC0000000 | ||
diff --git a/arch/arm/mach-nspire/nspire.c b/arch/arm/mach-nspire/nspire.c new file mode 100644 index 000000000000..99e26092a9f7 --- /dev/null +++ b/arch/arm/mach-nspire/nspire.c | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-nspire/nspire.c | ||
3 | * | ||
4 | * Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | #include <linux/init.h> | ||
12 | #include <linux/of_irq.h> | ||
13 | #include <linux/of_address.h> | ||
14 | #include <linux/of_platform.h> | ||
15 | #include <linux/irqchip.h> | ||
16 | #include <linux/irqchip/arm-vic.h> | ||
17 | #include <linux/clk-provider.h> | ||
18 | #include <linux/clkdev.h> | ||
19 | #include <linux/amba/bus.h> | ||
20 | #include <linux/amba/clcd.h> | ||
21 | #include <linux/clocksource.h> | ||
22 | |||
23 | #include <asm/mach/arch.h> | ||
24 | #include <asm/mach-types.h> | ||
25 | #include <asm/mach/map.h> | ||
26 | |||
27 | #include <asm/hardware/timer-sp.h> | ||
28 | |||
29 | #include "mmio.h" | ||
30 | #include "clcd.h" | ||
31 | |||
32 | static const char *nspire_dt_match[] __initconst = { | ||
33 | "ti,nspire", | ||
34 | "ti,nspire-cx", | ||
35 | "ti,nspire-tp", | ||
36 | "ti,nspire-clp", | ||
37 | NULL, | ||
38 | }; | ||
39 | |||
40 | static void __init nspire_map_io(void) | ||
41 | { | ||
42 | debug_ll_io_init(); | ||
43 | } | ||
44 | |||
45 | static struct clcd_board nspire_clcd_data = { | ||
46 | .name = "LCD", | ||
47 | .caps = CLCD_CAP_5551 | CLCD_CAP_565, | ||
48 | .check = clcdfb_check, | ||
49 | .decode = clcdfb_decode, | ||
50 | .setup = nspire_clcd_setup, | ||
51 | .mmap = nspire_clcd_mmap, | ||
52 | .remove = nspire_clcd_remove, | ||
53 | }; | ||
54 | |||
55 | |||
56 | static struct of_dev_auxdata nspire_auxdata[] __initdata = { | ||
57 | OF_DEV_AUXDATA("arm,pl111", NSPIRE_LCD_PHYS_BASE, | ||
58 | NULL, &nspire_clcd_data), | ||
59 | { } | ||
60 | }; | ||
61 | |||
62 | static void __init nspire_init(void) | ||
63 | { | ||
64 | of_platform_populate(NULL, of_default_bus_match_table, | ||
65 | nspire_auxdata, NULL); | ||
66 | } | ||
67 | |||
68 | static void __init nspire_init_time(void) | ||
69 | { | ||
70 | of_clk_init(NULL); | ||
71 | clocksource_of_init(); | ||
72 | } | ||
73 | |||
74 | static void nspire_restart(char mode, const char *cmd) | ||
75 | { | ||
76 | void __iomem *base = ioremap(NSPIRE_MISC_PHYS_BASE, SZ_4K); | ||
77 | if (!base) | ||
78 | return; | ||
79 | |||
80 | writel(2, base + NSPIRE_MISC_HWRESET); | ||
81 | } | ||
82 | |||
83 | DT_MACHINE_START(NSPIRE, "TI-NSPIRE") | ||
84 | .dt_compat = nspire_dt_match, | ||
85 | .map_io = nspire_map_io, | ||
86 | .init_time = nspire_init_time, | ||
87 | .init_machine = nspire_init, | ||
88 | .restart = nspire_restart, | ||
89 | MACHINE_END | ||