diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-12-20 14:32:18 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-12-20 14:32:18 -0500 |
| commit | 72784134ce53b8e40deb8c9981ec52122d9f6208 (patch) | |
| tree | 262dc26dae6000684ee9cf6981206aeec4188a5a | |
| parent | 822a5d313197c059924d394e6851be3cb312caa7 (diff) | |
| parent | be09d1dcf21eb3121bed3ee4dadacdea1805d7f8 (diff) | |
Merge branch 'rmobile-fixes-for-linus' of git://github.com/pmundt/linux-sh
* 'rmobile-fixes-for-linus' of git://github.com/pmundt/linux-sh:
ARM: mach-shmobile: SH73A0 external Ethernet fix
ARM: mach-shmobile: AG5EVM GIC Sparse IRQ fix
ARM: mach-shmobile: Kota2 TPU LED platform data
ARM: mach-shmobile: Kota2 GIC Sparse IRQ fix
ARM: mach-shmobile: Kota2 PINT fix
| -rw-r--r-- | arch/arm/mach-shmobile/board-ag5evm.c | 1 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/board-kota2.c | 139 | ||||
| -rw-r--r-- | arch/arm/mach-shmobile/clock-sh73a0.c | 18 |
3 files changed, 139 insertions, 19 deletions
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index b862e9f81e3e..7119b87cbfa0 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c | |||
| @@ -607,6 +607,7 @@ struct sys_timer ag5evm_timer = { | |||
| 607 | 607 | ||
| 608 | MACHINE_START(AG5EVM, "ag5evm") | 608 | MACHINE_START(AG5EVM, "ag5evm") |
| 609 | .map_io = ag5evm_map_io, | 609 | .map_io = ag5evm_map_io, |
| 610 | .nr_irqs = NR_IRQS_LEGACY, | ||
| 610 | .init_irq = sh73a0_init_irq, | 611 | .init_irq = sh73a0_init_irq, |
| 611 | .handle_irq = shmobile_handle_irq_gic, | 612 | .handle_irq = shmobile_handle_irq_gic, |
| 612 | .init_machine = ag5evm_init, | 613 | .init_machine = ag5evm_init, |
diff --git a/arch/arm/mach-shmobile/board-kota2.c b/arch/arm/mach-shmobile/board-kota2.c index bd9a78424d6b..f44150b5ae46 100644 --- a/arch/arm/mach-shmobile/board-kota2.c +++ b/arch/arm/mach-shmobile/board-kota2.c | |||
| @@ -33,6 +33,7 @@ | |||
| 33 | #include <linux/input/sh_keysc.h> | 33 | #include <linux/input/sh_keysc.h> |
| 34 | #include <linux/gpio_keys.h> | 34 | #include <linux/gpio_keys.h> |
| 35 | #include <linux/leds.h> | 35 | #include <linux/leds.h> |
| 36 | #include <linux/platform_data/leds-renesas-tpu.h> | ||
| 36 | #include <linux/mmc/host.h> | 37 | #include <linux/mmc/host.h> |
| 37 | #include <linux/mmc/sh_mmcif.h> | 38 | #include <linux/mmc/sh_mmcif.h> |
| 38 | #include <linux/mfd/tmio.h> | 39 | #include <linux/mfd/tmio.h> |
| @@ -56,7 +57,7 @@ static struct resource smsc9220_resources[] = { | |||
| 56 | .flags = IORESOURCE_MEM, | 57 | .flags = IORESOURCE_MEM, |
| 57 | }, | 58 | }, |
| 58 | [1] = { | 59 | [1] = { |
| 59 | .start = gic_spi(33), /* PINTA2 @ PORT144 */ | 60 | .start = SH73A0_PINT0_IRQ(2), /* PINTA2 */ |
| 60 | .flags = IORESOURCE_IRQ, | 61 | .flags = IORESOURCE_IRQ, |
| 61 | }, | 62 | }, |
| 62 | }; | 63 | }; |
| @@ -157,10 +158,6 @@ static struct platform_device gpio_keys_device = { | |||
| 157 | #define GPIO_LED(n, g) { .name = n, .gpio = g } | 158 | #define GPIO_LED(n, g) { .name = n, .gpio = g } |
| 158 | 159 | ||
| 159 | static struct gpio_led gpio_leds[] = { | 160 | static struct gpio_led gpio_leds[] = { |
| 160 | GPIO_LED("V2513", GPIO_PORT153), /* PORT153 [TPU1T02] -> V2513 */ | ||
| 161 | GPIO_LED("V2514", GPIO_PORT199), /* PORT199 [TPU4TO1] -> V2514 */ | ||
| 162 | GPIO_LED("V2515", GPIO_PORT197), /* PORT197 [TPU2TO1] -> V2515 */ | ||
| 163 | GPIO_LED("KEYLED", GPIO_PORT163), /* PORT163 [TPU3TO0] -> KEYLED */ | ||
| 164 | GPIO_LED("G", GPIO_PORT20), /* PORT20 [GPO0] -> LED7 -> "G" */ | 161 | GPIO_LED("G", GPIO_PORT20), /* PORT20 [GPO0] -> LED7 -> "G" */ |
| 165 | GPIO_LED("H", GPIO_PORT21), /* PORT21 [GPO1] -> LED8 -> "H" */ | 162 | GPIO_LED("H", GPIO_PORT21), /* PORT21 [GPO1] -> LED8 -> "H" */ |
| 166 | GPIO_LED("J", GPIO_PORT22), /* PORT22 [GPO2] -> LED9 -> "J" */ | 163 | GPIO_LED("J", GPIO_PORT22), /* PORT22 [GPO2] -> LED9 -> "J" */ |
| @@ -179,6 +176,119 @@ static struct platform_device gpio_leds_device = { | |||
| 179 | }, | 176 | }, |
| 180 | }; | 177 | }; |
| 181 | 178 | ||
| 179 | /* TPU LED */ | ||
| 180 | static struct led_renesas_tpu_config led_renesas_tpu12_pdata = { | ||
| 181 | .name = "V2513", | ||
| 182 | .pin_gpio_fn = GPIO_FN_TPU1TO2, | ||
| 183 | .pin_gpio = GPIO_PORT153, | ||
| 184 | .channel_offset = 0x90, | ||
| 185 | .timer_bit = 2, | ||
| 186 | .max_brightness = 1000, | ||
| 187 | }; | ||
| 188 | |||
| 189 | static struct resource tpu12_resources[] = { | ||
| 190 | [0] = { | ||
| 191 | .name = "TPU12", | ||
| 192 | .start = 0xe6610090, | ||
| 193 | .end = 0xe66100b5, | ||
| 194 | .flags = IORESOURCE_MEM, | ||
| 195 | }, | ||
| 196 | }; | ||
| 197 | |||
| 198 | static struct platform_device leds_tpu12_device = { | ||
| 199 | .name = "leds-renesas-tpu", | ||
| 200 | .id = 12, | ||
| 201 | .dev = { | ||
| 202 | .platform_data = &led_renesas_tpu12_pdata, | ||
| 203 | }, | ||
| 204 | .num_resources = ARRAY_SIZE(tpu12_resources), | ||
| 205 | .resource = tpu12_resources, | ||
| 206 | }; | ||
| 207 | |||
| 208 | static struct led_renesas_tpu_config led_renesas_tpu41_pdata = { | ||
| 209 | .name = "V2514", | ||
| 210 | .pin_gpio_fn = GPIO_FN_TPU4TO1, | ||
| 211 | .pin_gpio = GPIO_PORT199, | ||
| 212 | .channel_offset = 0x50, | ||
| 213 | .timer_bit = 1, | ||
| 214 | .max_brightness = 1000, | ||
| 215 | }; | ||
| 216 | |||
| 217 | static struct resource tpu41_resources[] = { | ||
| 218 | [0] = { | ||
| 219 | .name = "TPU41", | ||
| 220 | .start = 0xe6640050, | ||
| 221 | .end = 0xe6640075, | ||
| 222 | .flags = IORESOURCE_MEM, | ||
| 223 | }, | ||
| 224 | }; | ||
| 225 | |||
| 226 | static struct platform_device leds_tpu41_device = { | ||
| 227 | .name = "leds-renesas-tpu", | ||
| 228 | .id = 41, | ||
| 229 | .dev = { | ||
| 230 | .platform_data = &led_renesas_tpu41_pdata, | ||
| 231 | }, | ||
| 232 | .num_resources = ARRAY_SIZE(tpu41_resources), | ||
| 233 | .resource = tpu41_resources, | ||
| 234 | }; | ||
| 235 | |||
| 236 | static struct led_renesas_tpu_config led_renesas_tpu21_pdata = { | ||
| 237 | .name = "V2515", | ||
| 238 | .pin_gpio_fn = GPIO_FN_TPU2TO1, | ||
| 239 | .pin_gpio = GPIO_PORT197, | ||
| 240 | .channel_offset = 0x50, | ||
| 241 | .timer_bit = 1, | ||
| 242 | .max_brightness = 1000, | ||
| 243 | }; | ||
| 244 | |||
| 245 | static struct resource tpu21_resources[] = { | ||
| 246 | [0] = { | ||
| 247 | .name = "TPU21", | ||
| 248 | .start = 0xe6620050, | ||
| 249 | .end = 0xe6620075, | ||
| 250 | .flags = IORESOURCE_MEM, | ||
| 251 | }, | ||
| 252 | }; | ||
| 253 | |||
| 254 | static struct platform_device leds_tpu21_device = { | ||
| 255 | .name = "leds-renesas-tpu", | ||
| 256 | .id = 21, | ||
| 257 | .dev = { | ||
| 258 | .platform_data = &led_renesas_tpu21_pdata, | ||
| 259 | }, | ||
| 260 | .num_resources = ARRAY_SIZE(tpu21_resources), | ||
| 261 | .resource = tpu21_resources, | ||
| 262 | }; | ||
| 263 | |||
| 264 | static struct led_renesas_tpu_config led_renesas_tpu30_pdata = { | ||
| 265 | .name = "KEYLED", | ||
| 266 | .pin_gpio_fn = GPIO_FN_TPU3TO0, | ||
| 267 | .pin_gpio = GPIO_PORT163, | ||
| 268 | .channel_offset = 0x10, | ||
| 269 | .timer_bit = 0, | ||
| 270 | .max_brightness = 1000, | ||
| 271 | }; | ||
| 272 | |||
| 273 | static struct resource tpu30_resources[] = { | ||
| 274 | [0] = { | ||
| 275 | .name = "TPU30", | ||
| 276 | .start = 0xe6630010, | ||
| 277 | .end = 0xe6630035, | ||
| 278 | .flags = IORESOURCE_MEM, | ||
| 279 | }, | ||
| 280 | }; | ||
| 281 | |||
| 282 | static struct platform_device leds_tpu30_device = { | ||
| 283 | .name = "leds-renesas-tpu", | ||
| 284 | .id = 30, | ||
| 285 | .dev = { | ||
| 286 | .platform_data = &led_renesas_tpu30_pdata, | ||
| 287 | }, | ||
| 288 | .num_resources = ARRAY_SIZE(tpu30_resources), | ||
| 289 | .resource = tpu30_resources, | ||
| 290 | }; | ||
| 291 | |||
| 182 | /* MMCIF */ | 292 | /* MMCIF */ |
| 183 | static struct resource mmcif_resources[] = { | 293 | static struct resource mmcif_resources[] = { |
| 184 | [0] = { | 294 | [0] = { |
| @@ -291,6 +401,10 @@ static struct platform_device *kota2_devices[] __initdata = { | |||
| 291 | &keysc_device, | 401 | &keysc_device, |
| 292 | &gpio_keys_device, | 402 | &gpio_keys_device, |
| 293 | &gpio_leds_device, | 403 | &gpio_leds_device, |
| 404 | &leds_tpu12_device, | ||
| 405 | &leds_tpu41_device, | ||
| 406 | &leds_tpu21_device, | ||
| 407 | &leds_tpu30_device, | ||
| 294 | &mmcif_device, | 408 | &mmcif_device, |
| 295 | &sdhi0_device, | 409 | &sdhi0_device, |
| 296 | &sdhi1_device, | 410 | &sdhi1_device, |
| @@ -317,18 +431,6 @@ static void __init kota2_map_io(void) | |||
| 317 | shmobile_setup_console(); | 431 | shmobile_setup_console(); |
| 318 | } | 432 | } |
| 319 | 433 | ||
| 320 | #define PINTER0A 0xe69000a0 | ||
| 321 | #define PINTCR0A 0xe69000b0 | ||
| 322 | |||
| 323 | void __init kota2_init_irq(void) | ||
| 324 | { | ||
| 325 | sh73a0_init_irq(); | ||
| 326 | |||
| 327 | /* setup PINT: enable PINTA2 as active low */ | ||
| 328 | __raw_writel(1 << 29, PINTER0A); | ||
| 329 | __raw_writew(2 << 10, PINTCR0A); | ||
| 330 | } | ||
| 331 | |||
| 332 | static void __init kota2_init(void) | 434 | static void __init kota2_init(void) |
| 333 | { | 435 | { |
| 334 | sh73a0_pinmux_init(); | 436 | sh73a0_pinmux_init(); |
| @@ -447,7 +549,8 @@ struct sys_timer kota2_timer = { | |||
| 447 | 549 | ||
| 448 | MACHINE_START(KOTA2, "kota2") | 550 | MACHINE_START(KOTA2, "kota2") |
| 449 | .map_io = kota2_map_io, | 551 | .map_io = kota2_map_io, |
| 450 | .init_irq = kota2_init_irq, | 552 | .nr_irqs = NR_IRQS_LEGACY, |
| 553 | .init_irq = sh73a0_init_irq, | ||
| 451 | .handle_irq = shmobile_handle_irq_gic, | 554 | .handle_irq = shmobile_handle_irq_gic, |
| 452 | .init_machine = kota2_init, | 555 | .init_machine = kota2_init, |
| 453 | .timer = &kota2_timer, | 556 | .timer = &kota2_timer, |
diff --git a/arch/arm/mach-shmobile/clock-sh73a0.c b/arch/arm/mach-shmobile/clock-sh73a0.c index 61a846bb30f2..1370a89ca358 100644 --- a/arch/arm/mach-shmobile/clock-sh73a0.c +++ b/arch/arm/mach-shmobile/clock-sh73a0.c | |||
| @@ -113,6 +113,12 @@ static struct clk main_clk = { | |||
| 113 | .ops = &main_clk_ops, | 113 | .ops = &main_clk_ops, |
| 114 | }; | 114 | }; |
| 115 | 115 | ||
| 116 | /* Divide Main clock by two */ | ||
| 117 | static struct clk main_div2_clk = { | ||
| 118 | .ops = &div2_clk_ops, | ||
| 119 | .parent = &main_clk, | ||
| 120 | }; | ||
| 121 | |||
| 116 | /* PLL0, PLL1, PLL2, PLL3 */ | 122 | /* PLL0, PLL1, PLL2, PLL3 */ |
| 117 | static unsigned long pll_recalc(struct clk *clk) | 123 | static unsigned long pll_recalc(struct clk *clk) |
| 118 | { | 124 | { |
| @@ -181,6 +187,7 @@ static struct clk *main_clks[] = { | |||
| 181 | &extal1_div2_clk, | 187 | &extal1_div2_clk, |
| 182 | &extal2_div2_clk, | 188 | &extal2_div2_clk, |
| 183 | &main_clk, | 189 | &main_clk, |
| 190 | &main_div2_clk, | ||
| 184 | &pll0_clk, | 191 | &pll0_clk, |
| 185 | &pll1_clk, | 192 | &pll1_clk, |
| 186 | &pll2_clk, | 193 | &pll2_clk, |
| @@ -243,7 +250,7 @@ static struct clk div6_clks[DIV6_NR] = { | |||
| 243 | [DIV6_VCK1] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR1, 0), | 250 | [DIV6_VCK1] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR1, 0), |
| 244 | [DIV6_VCK2] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR2, 0), | 251 | [DIV6_VCK2] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR2, 0), |
| 245 | [DIV6_VCK3] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR3, 0), | 252 | [DIV6_VCK3] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR3, 0), |
| 246 | [DIV6_ZB1] = SH_CLK_DIV6(&pll1_div2_clk, ZBCKCR, 0), | 253 | [DIV6_ZB1] = SH_CLK_DIV6(&pll1_div2_clk, ZBCKCR, CLK_ENABLE_ON_INIT), |
| 247 | [DIV6_FLCTL] = SH_CLK_DIV6(&pll1_div2_clk, FLCKCR, 0), | 254 | [DIV6_FLCTL] = SH_CLK_DIV6(&pll1_div2_clk, FLCKCR, 0), |
| 248 | [DIV6_SDHI0] = SH_CLK_DIV6(&pll1_div2_clk, SD0CKCR, 0), | 255 | [DIV6_SDHI0] = SH_CLK_DIV6(&pll1_div2_clk, SD0CKCR, 0), |
| 249 | [DIV6_SDHI1] = SH_CLK_DIV6(&pll1_div2_clk, SD1CKCR, 0), | 256 | [DIV6_SDHI1] = SH_CLK_DIV6(&pll1_div2_clk, SD1CKCR, 0), |
| @@ -268,6 +275,7 @@ enum { MSTP001, | |||
| 268 | MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200, | 275 | MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200, |
| 269 | MSTP331, MSTP329, MSTP325, MSTP323, MSTP318, | 276 | MSTP331, MSTP329, MSTP325, MSTP323, MSTP318, |
| 270 | MSTP314, MSTP313, MSTP312, MSTP311, | 277 | MSTP314, MSTP313, MSTP312, MSTP311, |
| 278 | MSTP303, MSTP302, MSTP301, MSTP300, | ||
| 271 | MSTP411, MSTP410, MSTP403, | 279 | MSTP411, MSTP410, MSTP403, |
| 272 | MSTP_NR }; | 280 | MSTP_NR }; |
| 273 | 281 | ||
| @@ -301,6 +309,10 @@ static struct clk mstp_clks[MSTP_NR] = { | |||
| 301 | [MSTP313] = MSTP(&div6_clks[DIV6_SDHI1], SMSTPCR3, 13, 0), /* SDHI1 */ | 309 | [MSTP313] = MSTP(&div6_clks[DIV6_SDHI1], SMSTPCR3, 13, 0), /* SDHI1 */ |
| 302 | [MSTP312] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMCIF0 */ | 310 | [MSTP312] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMCIF0 */ |
| 303 | [MSTP311] = MSTP(&div6_clks[DIV6_SDHI2], SMSTPCR3, 11, 0), /* SDHI2 */ | 311 | [MSTP311] = MSTP(&div6_clks[DIV6_SDHI2], SMSTPCR3, 11, 0), /* SDHI2 */ |
| 312 | [MSTP303] = MSTP(&main_div2_clk, SMSTPCR3, 3, 0), /* TPU1 */ | ||
| 313 | [MSTP302] = MSTP(&main_div2_clk, SMSTPCR3, 2, 0), /* TPU2 */ | ||
| 314 | [MSTP301] = MSTP(&main_div2_clk, SMSTPCR3, 1, 0), /* TPU3 */ | ||
| 315 | [MSTP300] = MSTP(&main_div2_clk, SMSTPCR3, 0, 0), /* TPU4 */ | ||
| 304 | [MSTP411] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 11, 0), /* IIC3 */ | 316 | [MSTP411] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 11, 0), /* IIC3 */ |
| 305 | [MSTP410] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 10, 0), /* IIC4 */ | 317 | [MSTP410] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 10, 0), /* IIC4 */ |
| 306 | [MSTP403] = MSTP(&r_clk, SMSTPCR4, 3, 0), /* KEYSC */ | 318 | [MSTP403] = MSTP(&r_clk, SMSTPCR4, 3, 0), /* KEYSC */ |
| @@ -350,6 +362,10 @@ static struct clk_lookup lookups[] = { | |||
| 350 | CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */ | 362 | CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */ |
| 351 | CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMCIF0 */ | 363 | CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMCIF0 */ |
| 352 | CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP311]), /* SDHI2 */ | 364 | CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP311]), /* SDHI2 */ |
| 365 | CLKDEV_DEV_ID("leds-renesas-tpu.12", &mstp_clks[MSTP303]), /* TPU1 */ | ||
| 366 | CLKDEV_DEV_ID("leds-renesas-tpu.21", &mstp_clks[MSTP302]), /* TPU2 */ | ||
| 367 | CLKDEV_DEV_ID("leds-renesas-tpu.30", &mstp_clks[MSTP301]), /* TPU3 */ | ||
| 368 | CLKDEV_DEV_ID("leds-renesas-tpu.41", &mstp_clks[MSTP300]), /* TPU4 */ | ||
| 353 | CLKDEV_DEV_ID("i2c-sh_mobile.3", &mstp_clks[MSTP411]), /* I2C3 */ | 369 | CLKDEV_DEV_ID("i2c-sh_mobile.3", &mstp_clks[MSTP411]), /* I2C3 */ |
| 354 | CLKDEV_DEV_ID("i2c-sh_mobile.4", &mstp_clks[MSTP410]), /* I2C4 */ | 370 | CLKDEV_DEV_ID("i2c-sh_mobile.4", &mstp_clks[MSTP410]), /* I2C4 */ |
| 355 | CLKDEV_DEV_ID("sh_keysc.0", &mstp_clks[MSTP403]), /* KEYSC */ | 371 | CLKDEV_DEV_ID("sh_keysc.0", &mstp_clks[MSTP403]), /* KEYSC */ |
