diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-13 13:39:38 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-13 13:39:38 -0500 |
commit | 86f6f9b64a730844f1438cbedfacd6fb0170a7f7 (patch) | |
tree | cd80f8610b444ae3bd2ebfc136c2c3299a52bd9b /arch/sh/boards | |
parent | d33a6291c1c577ff2272edab7416a0f7308e1cef (diff) | |
parent | 8b6f08eaef16dfcfebc32fa9a017bf70336ad9ec (diff) |
Merge branch 'sh-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
* 'sh-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (31 commits)
sh: Add support for AP-SH4AD-0A board.
sh: Add support for AP-SH4A-3A board.
sh: Add a new mach type for alpha project boards.
serial: sh-sci: build fixes.
sh: sh7372 SH4AL-DSP probe support
sh: sh7366 Enable SDIO IRQs
sh: sh7343 Enable SDIO IRQs
sh: mach-ecovec24: enable runtime PM for SDHI
sh: sh7723 / ap325rxa enable SDIO IRQs
sh: sh7722 Enable SDIO IRQs
sh: sh7724 Enable SDIO IRQs
sh: Fix up legacy PTEA space attribute mapping.
sh: Stub out legacy PCC pgprot encoding for X2 TLBs.
sh: constify prefetch pointers.
sh: Add a machvec callback for early memblock reservations.
sh: update sh7757lcr_defconfig
sh: add PVR probing for SH7757 3rd cut
sh: Use device_initcall() instead of __initcall()
sh: intc - convert board specific landisk code
sh: Move init_landisk_IRQ to header file
...
Diffstat (limited to 'arch/sh/boards')
-rw-r--r-- | arch/sh/boards/Kconfig | 18 | ||||
-rw-r--r-- | arch/sh/boards/Makefile | 2 | ||||
-rw-r--r-- | arch/sh/boards/board-apsh4a3a.c | 175 | ||||
-rw-r--r-- | arch/sh/boards/board-apsh4ad0a.c | 125 | ||||
-rw-r--r-- | arch/sh/boards/board-edosk7705.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/board-edosk7760.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/board-sh7785lcr.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-ap325rxa/setup.c | 16 | ||||
-rw-r--r-- | arch/sh/boards/mach-cayman/setup.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-ecovec24/setup.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-kfr2r09/setup.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-landisk/irq.c | 59 | ||||
-rw-r--r-- | arch/sh/boards/mach-landisk/setup.c | 4 | ||||
-rw-r--r-- | arch/sh/boards/mach-migor/setup.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-r2d/setup.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-sdk7786/setup.c | 4 | ||||
-rw-r--r-- | arch/sh/boards/mach-se/7206/setup.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-se/7724/setup.c | 3 | ||||
-rw-r--r-- | arch/sh/boards/mach-se/7751/setup.c | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-sh03/setup.c | 2 |
20 files changed, 391 insertions, 37 deletions
diff --git a/arch/sh/boards/Kconfig b/arch/sh/boards/Kconfig index 2018c7ea4c93..d893411022d5 100644 --- a/arch/sh/boards/Kconfig +++ b/arch/sh/boards/Kconfig | |||
@@ -3,6 +3,9 @@ menu "Board support" | |||
3 | config SOLUTION_ENGINE | 3 | config SOLUTION_ENGINE |
4 | bool | 4 | bool |
5 | 5 | ||
6 | config SH_ALPHA_BOARD | ||
7 | bool | ||
8 | |||
6 | config SH_SOLUTION_ENGINE | 9 | config SH_SOLUTION_ENGINE |
7 | bool "SolutionEngine" | 10 | bool "SolutionEngine" |
8 | select SOLUTION_ENGINE | 11 | select SOLUTION_ENGINE |
@@ -320,6 +323,21 @@ config SH_SH2007 | |||
320 | Compact Flash socket, two serial ports and PC-104 bus. | 323 | Compact Flash socket, two serial ports and PC-104 bus. |
321 | More information at <http://sh2000.sh-linux.org>. | 324 | More information at <http://sh2000.sh-linux.org>. |
322 | 325 | ||
326 | config SH_APSH4A3A | ||
327 | bool "AP-SH4A-3A" | ||
328 | select SH_ALPHA_BOARD | ||
329 | depends on CPU_SUBTYPE_SH7785 | ||
330 | help | ||
331 | Select AP-SH4A-3A if configuring for an ALPHAPROJECT AP-SH4A-3A. | ||
332 | |||
333 | config SH_APSH4AD0A | ||
334 | bool "AP-SH4AD-0A" | ||
335 | select SH_ALPHA_BOARD | ||
336 | select SYS_SUPPORTS_PCI | ||
337 | depends on CPU_SUBTYPE_SH7786 | ||
338 | help | ||
339 | Select AP-SH4AD-0A if configuring for an ALPHAPROJECT AP-SH4AD-0A. | ||
340 | |||
323 | endmenu | 341 | endmenu |
324 | 342 | ||
325 | source "arch/sh/boards/mach-r2d/Kconfig" | 343 | source "arch/sh/boards/mach-r2d/Kconfig" |
diff --git a/arch/sh/boards/Makefile b/arch/sh/boards/Makefile index be7d11d04b26..975a0f64ff20 100644 --- a/arch/sh/boards/Makefile +++ b/arch/sh/boards/Makefile | |||
@@ -13,3 +13,5 @@ obj-$(CONFIG_SH_ESPT) += board-espt.o | |||
13 | obj-$(CONFIG_SH_POLARIS) += board-polaris.o | 13 | obj-$(CONFIG_SH_POLARIS) += board-polaris.o |
14 | obj-$(CONFIG_SH_TITAN) += board-titan.o | 14 | obj-$(CONFIG_SH_TITAN) += board-titan.o |
15 | obj-$(CONFIG_SH_SH7757LCR) += board-sh7757lcr.o | 15 | obj-$(CONFIG_SH_SH7757LCR) += board-sh7757lcr.o |
16 | obj-$(CONFIG_SH_APSH4A3A) += board-apsh4a3a.o | ||
17 | obj-$(CONFIG_SH_APSH4AD0A) += board-apsh4ad0a.o | ||
diff --git a/arch/sh/boards/board-apsh4a3a.c b/arch/sh/boards/board-apsh4a3a.c new file mode 100644 index 000000000000..8e2a27057bc9 --- /dev/null +++ b/arch/sh/boards/board-apsh4a3a.c | |||
@@ -0,0 +1,175 @@ | |||
1 | /* | ||
2 | * ALPHAPROJECT AP-SH4A-3A Support. | ||
3 | * | ||
4 | * Copyright (C) 2010 ALPHAPROJECT Co.,Ltd. | ||
5 | * Copyright (C) 2008 Yoshihiro Shimoda | ||
6 | * Copyright (C) 2009 Paul Mundt | ||
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General Public | ||
9 | * License. See the file "COPYING" in the main directory of this archive | ||
10 | * for more details. | ||
11 | */ | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/platform_device.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <linux/mtd/physmap.h> | ||
16 | #include <linux/smsc911x.h> | ||
17 | #include <linux/irq.h> | ||
18 | #include <linux/clk.h> | ||
19 | #include <asm/machvec.h> | ||
20 | #include <asm/sizes.h> | ||
21 | #include <asm/clock.h> | ||
22 | |||
23 | static struct mtd_partition nor_flash_partitions[] = { | ||
24 | { | ||
25 | .name = "loader", | ||
26 | .offset = 0x00000000, | ||
27 | .size = 512 * 1024, | ||
28 | }, | ||
29 | { | ||
30 | .name = "bootenv", | ||
31 | .offset = MTDPART_OFS_APPEND, | ||
32 | .size = 512 * 1024, | ||
33 | }, | ||
34 | { | ||
35 | .name = "kernel", | ||
36 | .offset = MTDPART_OFS_APPEND, | ||
37 | .size = 4 * 1024 * 1024, | ||
38 | }, | ||
39 | { | ||
40 | .name = "data", | ||
41 | .offset = MTDPART_OFS_APPEND, | ||
42 | .size = MTDPART_SIZ_FULL, | ||
43 | }, | ||
44 | }; | ||
45 | |||
46 | static struct physmap_flash_data nor_flash_data = { | ||
47 | .width = 4, | ||
48 | .parts = nor_flash_partitions, | ||
49 | .nr_parts = ARRAY_SIZE(nor_flash_partitions), | ||
50 | }; | ||
51 | |||
52 | static struct resource nor_flash_resources[] = { | ||
53 | [0] = { | ||
54 | .start = 0x00000000, | ||
55 | .end = 0x01000000 - 1, | ||
56 | .flags = IORESOURCE_MEM, | ||
57 | } | ||
58 | }; | ||
59 | |||
60 | static struct platform_device nor_flash_device = { | ||
61 | .name = "physmap-flash", | ||
62 | .dev = { | ||
63 | .platform_data = &nor_flash_data, | ||
64 | }, | ||
65 | .num_resources = ARRAY_SIZE(nor_flash_resources), | ||
66 | .resource = nor_flash_resources, | ||
67 | }; | ||
68 | |||
69 | static struct resource smsc911x_resources[] = { | ||
70 | [0] = { | ||
71 | .name = "smsc911x-memory", | ||
72 | .start = 0xA4000000, | ||
73 | .end = 0xA4000000 + SZ_256 - 1, | ||
74 | .flags = IORESOURCE_MEM, | ||
75 | }, | ||
76 | [1] = { | ||
77 | .name = "smsc911x-irq", | ||
78 | .start = evt2irq(0x200), | ||
79 | .end = evt2irq(0x200), | ||
80 | .flags = IORESOURCE_IRQ, | ||
81 | }, | ||
82 | }; | ||
83 | |||
84 | static struct smsc911x_platform_config smsc911x_config = { | ||
85 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, | ||
86 | .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, | ||
87 | .flags = SMSC911X_USE_16BIT, | ||
88 | .phy_interface = PHY_INTERFACE_MODE_MII, | ||
89 | }; | ||
90 | |||
91 | static struct platform_device smsc911x_device = { | ||
92 | .name = "smsc911x", | ||
93 | .id = -1, | ||
94 | .num_resources = ARRAY_SIZE(smsc911x_resources), | ||
95 | .resource = smsc911x_resources, | ||
96 | .dev = { | ||
97 | .platform_data = &smsc911x_config, | ||
98 | }, | ||
99 | }; | ||
100 | |||
101 | static struct platform_device *apsh4a3a_devices[] __initdata = { | ||
102 | &nor_flash_device, | ||
103 | &smsc911x_device, | ||
104 | }; | ||
105 | |||
106 | static int __init apsh4a3a_devices_setup(void) | ||
107 | { | ||
108 | return platform_add_devices(apsh4a3a_devices, | ||
109 | ARRAY_SIZE(apsh4a3a_devices)); | ||
110 | } | ||
111 | device_initcall(apsh4a3a_devices_setup); | ||
112 | |||
113 | static int apsh4a3a_clk_init(void) | ||
114 | { | ||
115 | struct clk *clk; | ||
116 | int ret; | ||
117 | |||
118 | clk = clk_get(NULL, "extal"); | ||
119 | if (!clk || IS_ERR(clk)) | ||
120 | return PTR_ERR(clk); | ||
121 | ret = clk_set_rate(clk, 33333000); | ||
122 | clk_put(clk); | ||
123 | |||
124 | return ret; | ||
125 | } | ||
126 | |||
127 | /* Initialize the board */ | ||
128 | static void __init apsh4a3a_setup(char **cmdline_p) | ||
129 | { | ||
130 | printk(KERN_INFO "Alpha Project AP-SH4A-3A support:\n"); | ||
131 | } | ||
132 | |||
133 | static void __init apsh4a3a_init_irq(void) | ||
134 | { | ||
135 | plat_irq_setup_pins(IRQ_MODE_IRQ7654); | ||
136 | } | ||
137 | |||
138 | /* Return the board specific boot mode pin configuration */ | ||
139 | static int apsh4a3a_mode_pins(void) | ||
140 | { | ||
141 | int value = 0; | ||
142 | |||
143 | /* These are the factory default settings of SW1 and SW2. | ||
144 | * If you change these dip switches then you will need to | ||
145 | * adjust the values below as well. | ||
146 | */ | ||
147 | value &= ~MODE_PIN0; /* Clock Mode 16 */ | ||
148 | value &= ~MODE_PIN1; | ||
149 | value &= ~MODE_PIN2; | ||
150 | value &= ~MODE_PIN3; | ||
151 | value |= MODE_PIN4; | ||
152 | value &= ~MODE_PIN5; /* 16-bit Area0 bus width */ | ||
153 | value |= MODE_PIN6; /* Area 0 SRAM interface */ | ||
154 | value |= MODE_PIN7; | ||
155 | value |= MODE_PIN8; /* Little Endian */ | ||
156 | value |= MODE_PIN9; /* Master Mode */ | ||
157 | value |= MODE_PIN10; /* Crystal resonator */ | ||
158 | value |= MODE_PIN11; /* Display Unit */ | ||
159 | value |= MODE_PIN12; | ||
160 | value &= ~MODE_PIN13; /* 29-bit address mode */ | ||
161 | value |= MODE_PIN14; /* No PLL step-up */ | ||
162 | |||
163 | return value; | ||
164 | } | ||
165 | |||
166 | /* | ||
167 | * The Machine Vector | ||
168 | */ | ||
169 | static struct sh_machine_vector mv_apsh4a3a __initmv = { | ||
170 | .mv_name = "AP-SH4A-3A", | ||
171 | .mv_setup = apsh4a3a_setup, | ||
172 | .mv_clk_init = apsh4a3a_clk_init, | ||
173 | .mv_init_irq = apsh4a3a_init_irq, | ||
174 | .mv_mode_pins = apsh4a3a_mode_pins, | ||
175 | }; | ||
diff --git a/arch/sh/boards/board-apsh4ad0a.c b/arch/sh/boards/board-apsh4ad0a.c new file mode 100644 index 000000000000..e2bd218a054e --- /dev/null +++ b/arch/sh/boards/board-apsh4ad0a.c | |||
@@ -0,0 +1,125 @@ | |||
1 | /* | ||
2 | * ALPHAPROJECT AP-SH4AD-0A Support. | ||
3 | * | ||
4 | * Copyright (C) 2010 ALPHAPROJECT Co.,Ltd. | ||
5 | * Copyright (C) 2010 Matt Fleming | ||
6 | * Copyright (C) 2010 Paul Mundt | ||
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General Public | ||
9 | * License. See the file "COPYING" in the main directory of this archive | ||
10 | * for more details. | ||
11 | */ | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/platform_device.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <linux/smsc911x.h> | ||
16 | #include <linux/irq.h> | ||
17 | #include <linux/clk.h> | ||
18 | #include <asm/machvec.h> | ||
19 | #include <asm/sizes.h> | ||
20 | |||
21 | static struct resource smsc911x_resources[] = { | ||
22 | [0] = { | ||
23 | .name = "smsc911x-memory", | ||
24 | .start = 0xA4000000, | ||
25 | .end = 0xA4000000 + SZ_256 - 1, | ||
26 | .flags = IORESOURCE_MEM, | ||
27 | }, | ||
28 | [1] = { | ||
29 | .name = "smsc911x-irq", | ||
30 | .start = evt2irq(0x200), | ||
31 | .end = evt2irq(0x200), | ||
32 | .flags = IORESOURCE_IRQ, | ||
33 | }, | ||
34 | }; | ||
35 | |||
36 | static struct smsc911x_platform_config smsc911x_config = { | ||
37 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, | ||
38 | .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, | ||
39 | .flags = SMSC911X_USE_16BIT, | ||
40 | .phy_interface = PHY_INTERFACE_MODE_MII, | ||
41 | }; | ||
42 | |||
43 | static struct platform_device smsc911x_device = { | ||
44 | .name = "smsc911x", | ||
45 | .id = -1, | ||
46 | .num_resources = ARRAY_SIZE(smsc911x_resources), | ||
47 | .resource = smsc911x_resources, | ||
48 | .dev = { | ||
49 | .platform_data = &smsc911x_config, | ||
50 | }, | ||
51 | }; | ||
52 | |||
53 | static struct platform_device *apsh4ad0a_devices[] __initdata = { | ||
54 | &smsc911x_device, | ||
55 | }; | ||
56 | |||
57 | static int __init apsh4ad0a_devices_setup(void) | ||
58 | { | ||
59 | return platform_add_devices(apsh4ad0a_devices, | ||
60 | ARRAY_SIZE(apsh4ad0a_devices)); | ||
61 | } | ||
62 | device_initcall(apsh4ad0a_devices_setup); | ||
63 | |||
64 | static int apsh4ad0a_mode_pins(void) | ||
65 | { | ||
66 | int value = 0; | ||
67 | |||
68 | /* These are the factory default settings of SW1 and SW2. | ||
69 | * If you change these dip switches then you will need to | ||
70 | * adjust the values below as well. | ||
71 | */ | ||
72 | value |= MODE_PIN0; /* Clock Mode 3 */ | ||
73 | value |= MODE_PIN1; | ||
74 | value &= ~MODE_PIN2; | ||
75 | value &= ~MODE_PIN3; | ||
76 | value &= ~MODE_PIN4; /* 16-bit Area0 bus width */ | ||
77 | value |= MODE_PIN5; | ||
78 | value |= MODE_PIN6; | ||
79 | value |= MODE_PIN7; /* Normal mode */ | ||
80 | value |= MODE_PIN8; /* Little Endian */ | ||
81 | value |= MODE_PIN9; /* Crystal resonator */ | ||
82 | value &= ~MODE_PIN10; /* 29-bit address mode */ | ||
83 | value &= ~MODE_PIN11; /* PCI-E Root port */ | ||
84 | value &= ~MODE_PIN12; /* 4 lane + 1 lane */ | ||
85 | value |= MODE_PIN13; /* AUD Enable */ | ||
86 | value &= ~MODE_PIN14; /* Normal Operation */ | ||
87 | |||
88 | return value; | ||
89 | } | ||
90 | |||
91 | static int apsh4ad0a_clk_init(void) | ||
92 | { | ||
93 | struct clk *clk; | ||
94 | int ret; | ||
95 | |||
96 | clk = clk_get(NULL, "extal"); | ||
97 | if (!clk || IS_ERR(clk)) | ||
98 | return PTR_ERR(clk); | ||
99 | ret = clk_set_rate(clk, 33333000); | ||
100 | clk_put(clk); | ||
101 | |||
102 | return ret; | ||
103 | } | ||
104 | |||
105 | /* Initialize the board */ | ||
106 | static void __init apsh4ad0a_setup(char **cmdline_p) | ||
107 | { | ||
108 | pr_info("Alpha Project AP-SH4AD-0A support:\n"); | ||
109 | } | ||
110 | |||
111 | static void __init apsh4ad0a_init_irq(void) | ||
112 | { | ||
113 | plat_irq_setup_pins(IRQ_MODE_IRQ3210); | ||
114 | } | ||
115 | |||
116 | /* | ||
117 | * The Machine Vector | ||
118 | */ | ||
119 | static struct sh_machine_vector mv_apsh4ad0a __initmv = { | ||
120 | .mv_name = "AP-SH4AD-0A", | ||
121 | .mv_setup = apsh4ad0a_setup, | ||
122 | .mv_mode_pins = apsh4ad0a_mode_pins, | ||
123 | .mv_clk_init = apsh4ad0a_clk_init, | ||
124 | .mv_init_irq = apsh4ad0a_init_irq, | ||
125 | }; | ||
diff --git a/arch/sh/boards/board-edosk7705.c b/arch/sh/boards/board-edosk7705.c index 4cb3bb74c36f..541d8a281035 100644 --- a/arch/sh/boards/board-edosk7705.c +++ b/arch/sh/boards/board-edosk7705.c | |||
@@ -66,7 +66,7 @@ static int __init init_edosk7705_devices(void) | |||
66 | return platform_add_devices(edosk7705_devices, | 66 | return platform_add_devices(edosk7705_devices, |
67 | ARRAY_SIZE(edosk7705_devices)); | 67 | ARRAY_SIZE(edosk7705_devices)); |
68 | } | 68 | } |
69 | __initcall(init_edosk7705_devices); | 69 | device_initcall(init_edosk7705_devices); |
70 | 70 | ||
71 | /* | 71 | /* |
72 | * The Machine Vector | 72 | * The Machine Vector |
diff --git a/arch/sh/boards/board-edosk7760.c b/arch/sh/boards/board-edosk7760.c index 35dc0994875d..f47ac82da876 100644 --- a/arch/sh/boards/board-edosk7760.c +++ b/arch/sh/boards/board-edosk7760.c | |||
@@ -182,7 +182,7 @@ static int __init init_edosk7760_devices(void) | |||
182 | return platform_add_devices(edosk7760_devices, | 182 | return platform_add_devices(edosk7760_devices, |
183 | ARRAY_SIZE(edosk7760_devices)); | 183 | ARRAY_SIZE(edosk7760_devices)); |
184 | } | 184 | } |
185 | __initcall(init_edosk7760_devices); | 185 | device_initcall(init_edosk7760_devices); |
186 | 186 | ||
187 | /* | 187 | /* |
188 | * The Machine Vector | 188 | * The Machine Vector |
diff --git a/arch/sh/boards/board-sh7785lcr.c b/arch/sh/boards/board-sh7785lcr.c index fe7e686c94ac..ee65ff05c558 100644 --- a/arch/sh/boards/board-sh7785lcr.c +++ b/arch/sh/boards/board-sh7785lcr.c | |||
@@ -284,7 +284,7 @@ static int __init sh7785lcr_devices_setup(void) | |||
284 | return platform_add_devices(sh7785lcr_devices, | 284 | return platform_add_devices(sh7785lcr_devices, |
285 | ARRAY_SIZE(sh7785lcr_devices)); | 285 | ARRAY_SIZE(sh7785lcr_devices)); |
286 | } | 286 | } |
287 | __initcall(sh7785lcr_devices_setup); | 287 | device_initcall(sh7785lcr_devices_setup); |
288 | 288 | ||
289 | /* Initialize IRQ setting */ | 289 | /* Initialize IRQ setting */ |
290 | void __init init_sh7785lcr_IRQ(void) | 290 | void __init init_sh7785lcr_IRQ(void) |
diff --git a/arch/sh/boards/mach-ap325rxa/setup.c b/arch/sh/boards/mach-ap325rxa/setup.c index 07ea908c510d..3e5fc3bbf3ed 100644 --- a/arch/sh/boards/mach-ap325rxa/setup.c +++ b/arch/sh/boards/mach-ap325rxa/setup.c | |||
@@ -14,6 +14,8 @@ | |||
14 | #include <linux/device.h> | 14 | #include <linux/device.h> |
15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
18 | #include <linux/mmc/host.h> | ||
17 | #include <linux/mtd/physmap.h> | 19 | #include <linux/mtd/physmap.h> |
18 | #include <linux/mtd/sh_flctl.h> | 20 | #include <linux/mtd/sh_flctl.h> |
19 | #include <linux/delay.h> | 21 | #include <linux/delay.h> |
@@ -430,11 +432,18 @@ static struct resource sdhi0_cn3_resources[] = { | |||
430 | }, | 432 | }, |
431 | }; | 433 | }; |
432 | 434 | ||
435 | static struct sh_mobile_sdhi_info sdhi0_cn3_data = { | ||
436 | .tmio_caps = MMC_CAP_SDIO_IRQ, | ||
437 | }; | ||
438 | |||
433 | static struct platform_device sdhi0_cn3_device = { | 439 | static struct platform_device sdhi0_cn3_device = { |
434 | .name = "sh_mobile_sdhi", | 440 | .name = "sh_mobile_sdhi", |
435 | .id = 0, /* "sdhi0" clock */ | 441 | .id = 0, /* "sdhi0" clock */ |
436 | .num_resources = ARRAY_SIZE(sdhi0_cn3_resources), | 442 | .num_resources = ARRAY_SIZE(sdhi0_cn3_resources), |
437 | .resource = sdhi0_cn3_resources, | 443 | .resource = sdhi0_cn3_resources, |
444 | .dev = { | ||
445 | .platform_data = &sdhi0_cn3_data, | ||
446 | }, | ||
438 | .archdata = { | 447 | .archdata = { |
439 | .hwblk_id = HWBLK_SDHI0, | 448 | .hwblk_id = HWBLK_SDHI0, |
440 | }, | 449 | }, |
@@ -453,11 +462,18 @@ static struct resource sdhi1_cn7_resources[] = { | |||
453 | }, | 462 | }, |
454 | }; | 463 | }; |
455 | 464 | ||
465 | static struct sh_mobile_sdhi_info sdhi1_cn7_data = { | ||
466 | .tmio_caps = MMC_CAP_SDIO_IRQ, | ||
467 | }; | ||
468 | |||
456 | static struct platform_device sdhi1_cn7_device = { | 469 | static struct platform_device sdhi1_cn7_device = { |
457 | .name = "sh_mobile_sdhi", | 470 | .name = "sh_mobile_sdhi", |
458 | .id = 1, /* "sdhi1" clock */ | 471 | .id = 1, /* "sdhi1" clock */ |
459 | .num_resources = ARRAY_SIZE(sdhi1_cn7_resources), | 472 | .num_resources = ARRAY_SIZE(sdhi1_cn7_resources), |
460 | .resource = sdhi1_cn7_resources, | 473 | .resource = sdhi1_cn7_resources, |
474 | .dev = { | ||
475 | .platform_data = &sdhi1_cn7_data, | ||
476 | }, | ||
461 | .archdata = { | 477 | .archdata = { |
462 | .hwblk_id = HWBLK_SDHI1, | 478 | .hwblk_id = HWBLK_SDHI1, |
463 | }, | 479 | }, |
diff --git a/arch/sh/boards/mach-cayman/setup.c b/arch/sh/boards/mach-cayman/setup.c index 7e8216ac31bd..e89e8e122a26 100644 --- a/arch/sh/boards/mach-cayman/setup.c +++ b/arch/sh/boards/mach-cayman/setup.c | |||
@@ -165,7 +165,7 @@ static int __init smsc_superio_setup(void) | |||
165 | 165 | ||
166 | return 0; | 166 | return 0; |
167 | } | 167 | } |
168 | __initcall(smsc_superio_setup); | 168 | device_initcall(smsc_superio_setup); |
169 | 169 | ||
170 | static void __iomem *cayman_ioport_map(unsigned long port, unsigned int len) | 170 | static void __iomem *cayman_ioport_map(unsigned long port, unsigned int len) |
171 | { | 171 | { |
diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index f48c492a68d3..33b662999fc6 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c | |||
@@ -473,6 +473,7 @@ static struct sh_mobile_sdhi_info sdhi0_info = { | |||
473 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | 473 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, |
474 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | 474 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, |
475 | .set_pwr = sdhi0_set_pwr, | 475 | .set_pwr = sdhi0_set_pwr, |
476 | .tmio_caps = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD, | ||
476 | }; | 477 | }; |
477 | 478 | ||
478 | static struct resource sdhi0_resources[] = { | 479 | static struct resource sdhi0_resources[] = { |
@@ -511,6 +512,7 @@ static void sdhi1_set_pwr(struct platform_device *pdev, int state) | |||
511 | static struct sh_mobile_sdhi_info sdhi1_info = { | 512 | static struct sh_mobile_sdhi_info sdhi1_info = { |
512 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, | 513 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, |
513 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, | 514 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, |
515 | .tmio_caps = MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD, | ||
514 | .set_pwr = sdhi1_set_pwr, | 516 | .set_pwr = sdhi1_set_pwr, |
515 | }; | 517 | }; |
516 | 518 | ||
diff --git a/arch/sh/boards/mach-kfr2r09/setup.c b/arch/sh/boards/mach-kfr2r09/setup.c index 9b60eaabf8f3..7504daaa85da 100644 --- a/arch/sh/boards/mach-kfr2r09/setup.c +++ b/arch/sh/boards/mach-kfr2r09/setup.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/platform_device.h> | 11 | #include <linux/platform_device.h> |
12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
13 | #include <linux/mfd/sh_mobile_sdhi.h> | 13 | #include <linux/mfd/sh_mobile_sdhi.h> |
14 | #include <linux/mmc/host.h> | ||
14 | #include <linux/mfd/tmio.h> | 15 | #include <linux/mfd/tmio.h> |
15 | #include <linux/mtd/physmap.h> | 16 | #include <linux/mtd/physmap.h> |
16 | #include <linux/mtd/onenand.h> | 17 | #include <linux/mtd/onenand.h> |
@@ -366,6 +367,7 @@ static struct sh_mobile_sdhi_info sh7724_sdhi0_data = { | |||
366 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | 367 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, |
367 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | 368 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, |
368 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE, | 369 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE, |
370 | .tmio_caps = MMC_CAP_SDIO_IRQ, | ||
369 | }; | 371 | }; |
370 | 372 | ||
371 | static struct platform_device kfr2r09_sh_sdhi0_device = { | 373 | static struct platform_device kfr2r09_sh_sdhi0_device = { |
diff --git a/arch/sh/boards/mach-landisk/irq.c b/arch/sh/boards/mach-landisk/irq.c index e79412a40490..c00ace38db3f 100644 --- a/arch/sh/boards/mach-landisk/irq.c +++ b/arch/sh/boards/mach-landisk/irq.c | |||
@@ -1,9 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * arch/sh/boards/landisk/irq.c | 2 | * arch/sh/boards/mach-landisk/irq.c |
3 | * | 3 | * |
4 | * I-O DATA Device, Inc. LANDISK Support | 4 | * I-O DATA Device, Inc. LANDISK Support |
5 | * | 5 | * |
6 | * Copyright (C) 2005-2007 kogiidena | 6 | * Copyright (C) 2005-2007 kogiidena |
7 | * Copyright (C) 2011 Nobuhiro Iwamatsu | ||
7 | * | 8 | * |
8 | * Copyright (C) 2001 Ian da Silva, Jeremy Siegel | 9 | * Copyright (C) 2001 Ian da Silva, Jeremy Siegel |
9 | * Based largely on io_se.c. | 10 | * Based largely on io_se.c. |
@@ -12,44 +13,54 @@ | |||
12 | * License. See the file "COPYING" in the main directory of this archive | 13 | * License. See the file "COPYING" in the main directory of this archive |
13 | * for more details. | 14 | * for more details. |
14 | */ | 15 | */ |
16 | |||
15 | #include <linux/init.h> | 17 | #include <linux/init.h> |
16 | #include <linux/irq.h> | 18 | #include <linux/irq.h> |
17 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
18 | #include <linux/io.h> | 20 | #include <linux/io.h> |
19 | #include <mach-landisk/mach/iodata_landisk.h> | 21 | #include <mach-landisk/mach/iodata_landisk.h> |
20 | 22 | ||
21 | static void disable_landisk_irq(struct irq_data *data) | 23 | enum { |
22 | { | 24 | UNUSED = 0, |
23 | unsigned char mask = 0xff ^ (0x01 << (data->irq - 5)); | ||
24 | 25 | ||
25 | __raw_writeb(__raw_readb(PA_IMASK) & mask, PA_IMASK); | 26 | PCI_INTA, /* PCI int A */ |
26 | } | 27 | PCI_INTB, /* PCI int B */ |
27 | 28 | PCI_INTC, /* PCI int C */ | |
28 | static void enable_landisk_irq(struct irq_data *data) | 29 | PCI_INTD, /* PCI int D */ |
29 | { | 30 | ATA, /* ATA */ |
30 | unsigned char value = (0x01 << (data->irq - 5)); | 31 | FATA, /* CF */ |
32 | POWER, /* Power swtich */ | ||
33 | BUTTON, /* Button swtich */ | ||
34 | }; | ||
31 | 35 | ||
32 | __raw_writeb(__raw_readb(PA_IMASK) | value, PA_IMASK); | 36 | /* Vectors for LANDISK */ |
33 | } | 37 | static struct intc_vect vectors_landisk[] __initdata = { |
38 | INTC_IRQ(PCI_INTA, IRQ_PCIINTA), | ||
39 | INTC_IRQ(PCI_INTB, IRQ_PCIINTB), | ||
40 | INTC_IRQ(PCI_INTC, IRQ_PCIINTC), | ||
41 | INTC_IRQ(PCI_INTD, IRQ_PCIINTD), | ||
42 | INTC_IRQ(ATA, IRQ_ATA), | ||
43 | INTC_IRQ(FATA, IRQ_FATA), | ||
44 | INTC_IRQ(POWER, IRQ_POWER), | ||
45 | INTC_IRQ(BUTTON, IRQ_BUTTON), | ||
46 | }; | ||
34 | 47 | ||
35 | static struct irq_chip landisk_irq_chip __read_mostly = { | 48 | /* IRLMSK mask register layout for LANDISK */ |
36 | .name = "LANDISK", | 49 | static struct intc_mask_reg mask_registers_landisk[] __initdata = { |
37 | .irq_mask = disable_landisk_irq, | 50 | { PA_IMASK, 0, 8, /* IRLMSK */ |
38 | .irq_unmask = enable_landisk_irq, | 51 | { BUTTON, POWER, FATA, ATA, |
52 | PCI_INTD, PCI_INTC, PCI_INTB, PCI_INTA, | ||
53 | } | ||
54 | }, | ||
39 | }; | 55 | }; |
40 | 56 | ||
57 | static DECLARE_INTC_DESC(intc_desc_landisk, "landisk", vectors_landisk, NULL, | ||
58 | mask_registers_landisk, NULL, NULL); | ||
41 | /* | 59 | /* |
42 | * Initialize IRQ setting | 60 | * Initialize IRQ setting |
43 | */ | 61 | */ |
44 | void __init init_landisk_IRQ(void) | 62 | void __init init_landisk_IRQ(void) |
45 | { | 63 | { |
46 | int i; | 64 | register_intc_controller(&intc_desc_landisk); |
47 | |||
48 | for (i = 5; i < 14; i++) { | ||
49 | disable_irq_nosync(i); | ||
50 | set_irq_chip_and_handler_name(i, &landisk_irq_chip, | ||
51 | handle_level_irq, "level"); | ||
52 | enable_landisk_irq(irq_get_irq_data(i)); | ||
53 | } | ||
54 | __raw_writeb(0x00, PA_PWRINT_CLR); | 65 | __raw_writeb(0x00, PA_PWRINT_CLR); |
55 | } | 66 | } |
diff --git a/arch/sh/boards/mach-landisk/setup.c b/arch/sh/boards/mach-landisk/setup.c index 50337acc18c5..94186cf079b6 100644 --- a/arch/sh/boards/mach-landisk/setup.c +++ b/arch/sh/boards/mach-landisk/setup.c | |||
@@ -21,8 +21,6 @@ | |||
21 | #include <mach-landisk/mach/iodata_landisk.h> | 21 | #include <mach-landisk/mach/iodata_landisk.h> |
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | 23 | ||
24 | void init_landisk_IRQ(void); | ||
25 | |||
26 | static void landisk_power_off(void) | 24 | static void landisk_power_off(void) |
27 | { | 25 | { |
28 | __raw_writeb(0x01, PA_SHUTDOWN); | 26 | __raw_writeb(0x01, PA_SHUTDOWN); |
@@ -83,7 +81,7 @@ static int __init landisk_devices_setup(void) | |||
83 | ARRAY_SIZE(landisk_devices)); | 81 | ARRAY_SIZE(landisk_devices)); |
84 | } | 82 | } |
85 | 83 | ||
86 | __initcall(landisk_devices_setup); | 84 | device_initcall(landisk_devices_setup); |
87 | 85 | ||
88 | static void __init landisk_setup(char **cmdline_p) | 86 | static void __init landisk_setup(char **cmdline_p) |
89 | { | 87 | { |
diff --git a/arch/sh/boards/mach-migor/setup.c b/arch/sh/boards/mach-migor/setup.c index c8acfec98695..03a7ffe729d5 100644 --- a/arch/sh/boards/mach-migor/setup.c +++ b/arch/sh/boards/mach-migor/setup.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/input.h> | 13 | #include <linux/input.h> |
14 | #include <linux/input/sh_keysc.h> | 14 | #include <linux/input/sh_keysc.h> |
15 | #include <linux/mfd/sh_mobile_sdhi.h> | 15 | #include <linux/mfd/sh_mobile_sdhi.h> |
16 | #include <linux/mmc/host.h> | ||
16 | #include <linux/mtd/physmap.h> | 17 | #include <linux/mtd/physmap.h> |
17 | #include <linux/mtd/nand.h> | 18 | #include <linux/mtd/nand.h> |
18 | #include <linux/i2c.h> | 19 | #include <linux/i2c.h> |
@@ -410,6 +411,7 @@ static struct resource sdhi_cn9_resources[] = { | |||
410 | static struct sh_mobile_sdhi_info sh7724_sdhi_data = { | 411 | static struct sh_mobile_sdhi_info sh7724_sdhi_data = { |
411 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | 412 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, |
412 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | 413 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, |
414 | .tmio_caps = MMC_CAP_SDIO_IRQ, | ||
413 | }; | 415 | }; |
414 | 416 | ||
415 | static struct platform_device sdhi_cn9_device = { | 417 | static struct platform_device sdhi_cn9_device = { |
diff --git a/arch/sh/boards/mach-r2d/setup.c b/arch/sh/boards/mach-r2d/setup.c index b84df6a3a93c..4b98a5251f83 100644 --- a/arch/sh/boards/mach-r2d/setup.c +++ b/arch/sh/boards/mach-r2d/setup.c | |||
@@ -258,7 +258,7 @@ static int __init rts7751r2d_devices_setup(void) | |||
258 | return platform_add_devices(rts7751r2d_devices, | 258 | return platform_add_devices(rts7751r2d_devices, |
259 | ARRAY_SIZE(rts7751r2d_devices)); | 259 | ARRAY_SIZE(rts7751r2d_devices)); |
260 | } | 260 | } |
261 | __initcall(rts7751r2d_devices_setup); | 261 | device_initcall(rts7751r2d_devices_setup); |
262 | 262 | ||
263 | static void rts7751r2d_power_off(void) | 263 | static void rts7751r2d_power_off(void) |
264 | { | 264 | { |
diff --git a/arch/sh/boards/mach-sdk7786/setup.c b/arch/sh/boards/mach-sdk7786/setup.c index 75e4ddbbec3e..1521aa75ee3a 100644 --- a/arch/sh/boards/mach-sdk7786/setup.c +++ b/arch/sh/boards/mach-sdk7786/setup.c | |||
@@ -15,13 +15,13 @@ | |||
15 | #include <linux/i2c.h> | 15 | #include <linux/i2c.h> |
16 | #include <linux/irq.h> | 16 | #include <linux/irq.h> |
17 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
18 | #include <linux/clkdev.h> | ||
18 | #include <mach/fpga.h> | 19 | #include <mach/fpga.h> |
19 | #include <mach/irq.h> | 20 | #include <mach/irq.h> |
20 | #include <asm/machvec.h> | 21 | #include <asm/machvec.h> |
21 | #include <asm/heartbeat.h> | 22 | #include <asm/heartbeat.h> |
22 | #include <asm/sizes.h> | 23 | #include <asm/sizes.h> |
23 | #include <asm/clock.h> | 24 | #include <asm/clock.h> |
24 | #include <asm/clkdev.h> | ||
25 | #include <asm/reboot.h> | 25 | #include <asm/reboot.h> |
26 | #include <asm/smp-ops.h> | 26 | #include <asm/smp-ops.h> |
27 | 27 | ||
@@ -135,7 +135,7 @@ static int __init sdk7786_devices_setup(void) | |||
135 | 135 | ||
136 | return sdk7786_i2c_setup(); | 136 | return sdk7786_i2c_setup(); |
137 | } | 137 | } |
138 | __initcall(sdk7786_devices_setup); | 138 | device_initcall(sdk7786_devices_setup); |
139 | 139 | ||
140 | static int sdk7786_mode_pins(void) | 140 | static int sdk7786_mode_pins(void) |
141 | { | 141 | { |
diff --git a/arch/sh/boards/mach-se/7206/setup.c b/arch/sh/boards/mach-se/7206/setup.c index 33039e0dc568..8ab8330e3fd1 100644 --- a/arch/sh/boards/mach-se/7206/setup.c +++ b/arch/sh/boards/mach-se/7206/setup.c | |||
@@ -77,7 +77,7 @@ static int __init se7206_devices_setup(void) | |||
77 | { | 77 | { |
78 | return platform_add_devices(se7206_devices, ARRAY_SIZE(se7206_devices)); | 78 | return platform_add_devices(se7206_devices, ARRAY_SIZE(se7206_devices)); |
79 | } | 79 | } |
80 | __initcall(se7206_devices_setup); | 80 | device_initcall(se7206_devices_setup); |
81 | 81 | ||
82 | static int se7206_mode_pins(void) | 82 | static int se7206_mode_pins(void) |
83 | { | 83 | { |
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index b710757c33c3..527679394a25 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/mfd/sh_mobile_sdhi.h> | 17 | #include <linux/mfd/sh_mobile_sdhi.h> |
18 | #include <linux/mmc/host.h> | ||
18 | #include <linux/mtd/physmap.h> | 19 | #include <linux/mtd/physmap.h> |
19 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
20 | #include <linux/smc91x.h> | 21 | #include <linux/smc91x.h> |
@@ -471,6 +472,7 @@ static struct resource sdhi0_cn7_resources[] = { | |||
471 | static struct sh_mobile_sdhi_info sh7724_sdhi0_data = { | 472 | static struct sh_mobile_sdhi_info sh7724_sdhi0_data = { |
472 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, | 473 | .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX, |
473 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, | 474 | .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX, |
475 | .tmio_caps = MMC_CAP_SDIO_IRQ, | ||
474 | }; | 476 | }; |
475 | 477 | ||
476 | static struct platform_device sdhi0_cn7_device = { | 478 | static struct platform_device sdhi0_cn7_device = { |
@@ -502,6 +504,7 @@ static struct resource sdhi1_cn8_resources[] = { | |||
502 | static struct sh_mobile_sdhi_info sh7724_sdhi1_data = { | 504 | static struct sh_mobile_sdhi_info sh7724_sdhi1_data = { |
503 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, | 505 | .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX, |
504 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, | 506 | .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX, |
507 | .tmio_caps = MMC_CAP_SDIO_IRQ, | ||
505 | }; | 508 | }; |
506 | 509 | ||
507 | static struct platform_device sdhi1_cn8_device = { | 510 | static struct platform_device sdhi1_cn8_device = { |
diff --git a/arch/sh/boards/mach-se/7751/setup.c b/arch/sh/boards/mach-se/7751/setup.c index 9fbc51beb181..4ed60c5e221f 100644 --- a/arch/sh/boards/mach-se/7751/setup.c +++ b/arch/sh/boards/mach-se/7751/setup.c | |||
@@ -48,7 +48,7 @@ static int __init se7751_devices_setup(void) | |||
48 | { | 48 | { |
49 | return platform_add_devices(se7751_devices, ARRAY_SIZE(se7751_devices)); | 49 | return platform_add_devices(se7751_devices, ARRAY_SIZE(se7751_devices)); |
50 | } | 50 | } |
51 | __initcall(se7751_devices_setup); | 51 | device_initcall(se7751_devices_setup); |
52 | 52 | ||
53 | /* | 53 | /* |
54 | * The Machine Vector | 54 | * The Machine Vector |
diff --git a/arch/sh/boards/mach-sh03/setup.c b/arch/sh/boards/mach-sh03/setup.c index af4a0c012a96..d4f79b2a6514 100644 --- a/arch/sh/boards/mach-sh03/setup.c +++ b/arch/sh/boards/mach-sh03/setup.c | |||
@@ -96,7 +96,7 @@ static int __init sh03_devices_setup(void) | |||
96 | 96 | ||
97 | return platform_add_devices(sh03_devices, ARRAY_SIZE(sh03_devices)); | 97 | return platform_add_devices(sh03_devices, ARRAY_SIZE(sh03_devices)); |
98 | } | 98 | } |
99 | __initcall(sh03_devices_setup); | 99 | device_initcall(sh03_devices_setup); |
100 | 100 | ||
101 | static struct sh_machine_vector mv_sh03 __initmv = { | 101 | static struct sh_machine_vector mv_sh03 __initmv = { |
102 | .mv_name = "Interface (CTP/PCI-SH03)", | 102 | .mv_name = "Interface (CTP/PCI-SH03)", |