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
This commit is contained in:
commit
72784134ce
|
@ -607,6 +607,7 @@ struct sys_timer ag5evm_timer = {
|
||||||
|
|
||||||
MACHINE_START(AG5EVM, "ag5evm")
|
MACHINE_START(AG5EVM, "ag5evm")
|
||||||
.map_io = ag5evm_map_io,
|
.map_io = ag5evm_map_io,
|
||||||
|
.nr_irqs = NR_IRQS_LEGACY,
|
||||||
.init_irq = sh73a0_init_irq,
|
.init_irq = sh73a0_init_irq,
|
||||||
.handle_irq = shmobile_handle_irq_gic,
|
.handle_irq = shmobile_handle_irq_gic,
|
||||||
.init_machine = ag5evm_init,
|
.init_machine = ag5evm_init,
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include <linux/input/sh_keysc.h>
|
#include <linux/input/sh_keysc.h>
|
||||||
#include <linux/gpio_keys.h>
|
#include <linux/gpio_keys.h>
|
||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
|
#include <linux/platform_data/leds-renesas-tpu.h>
|
||||||
#include <linux/mmc/host.h>
|
#include <linux/mmc/host.h>
|
||||||
#include <linux/mmc/sh_mmcif.h>
|
#include <linux/mmc/sh_mmcif.h>
|
||||||
#include <linux/mfd/tmio.h>
|
#include <linux/mfd/tmio.h>
|
||||||
|
@ -56,7 +57,7 @@ static struct resource smsc9220_resources[] = {
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
.start = gic_spi(33), /* PINTA2 @ PORT144 */
|
.start = SH73A0_PINT0_IRQ(2), /* PINTA2 */
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -157,10 +158,6 @@ static struct platform_device gpio_keys_device = {
|
||||||
#define GPIO_LED(n, g) { .name = n, .gpio = g }
|
#define GPIO_LED(n, g) { .name = n, .gpio = g }
|
||||||
|
|
||||||
static struct gpio_led gpio_leds[] = {
|
static struct gpio_led gpio_leds[] = {
|
||||||
GPIO_LED("V2513", GPIO_PORT153), /* PORT153 [TPU1T02] -> V2513 */
|
|
||||||
GPIO_LED("V2514", GPIO_PORT199), /* PORT199 [TPU4TO1] -> V2514 */
|
|
||||||
GPIO_LED("V2515", GPIO_PORT197), /* PORT197 [TPU2TO1] -> V2515 */
|
|
||||||
GPIO_LED("KEYLED", GPIO_PORT163), /* PORT163 [TPU3TO0] -> KEYLED */
|
|
||||||
GPIO_LED("G", GPIO_PORT20), /* PORT20 [GPO0] -> LED7 -> "G" */
|
GPIO_LED("G", GPIO_PORT20), /* PORT20 [GPO0] -> LED7 -> "G" */
|
||||||
GPIO_LED("H", GPIO_PORT21), /* PORT21 [GPO1] -> LED8 -> "H" */
|
GPIO_LED("H", GPIO_PORT21), /* PORT21 [GPO1] -> LED8 -> "H" */
|
||||||
GPIO_LED("J", GPIO_PORT22), /* PORT22 [GPO2] -> LED9 -> "J" */
|
GPIO_LED("J", GPIO_PORT22), /* PORT22 [GPO2] -> LED9 -> "J" */
|
||||||
|
@ -179,6 +176,119 @@ static struct platform_device gpio_leds_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* TPU LED */
|
||||||
|
static struct led_renesas_tpu_config led_renesas_tpu12_pdata = {
|
||||||
|
.name = "V2513",
|
||||||
|
.pin_gpio_fn = GPIO_FN_TPU1TO2,
|
||||||
|
.pin_gpio = GPIO_PORT153,
|
||||||
|
.channel_offset = 0x90,
|
||||||
|
.timer_bit = 2,
|
||||||
|
.max_brightness = 1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource tpu12_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "TPU12",
|
||||||
|
.start = 0xe6610090,
|
||||||
|
.end = 0xe66100b5,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device leds_tpu12_device = {
|
||||||
|
.name = "leds-renesas-tpu",
|
||||||
|
.id = 12,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &led_renesas_tpu12_pdata,
|
||||||
|
},
|
||||||
|
.num_resources = ARRAY_SIZE(tpu12_resources),
|
||||||
|
.resource = tpu12_resources,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct led_renesas_tpu_config led_renesas_tpu41_pdata = {
|
||||||
|
.name = "V2514",
|
||||||
|
.pin_gpio_fn = GPIO_FN_TPU4TO1,
|
||||||
|
.pin_gpio = GPIO_PORT199,
|
||||||
|
.channel_offset = 0x50,
|
||||||
|
.timer_bit = 1,
|
||||||
|
.max_brightness = 1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource tpu41_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "TPU41",
|
||||||
|
.start = 0xe6640050,
|
||||||
|
.end = 0xe6640075,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device leds_tpu41_device = {
|
||||||
|
.name = "leds-renesas-tpu",
|
||||||
|
.id = 41,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &led_renesas_tpu41_pdata,
|
||||||
|
},
|
||||||
|
.num_resources = ARRAY_SIZE(tpu41_resources),
|
||||||
|
.resource = tpu41_resources,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct led_renesas_tpu_config led_renesas_tpu21_pdata = {
|
||||||
|
.name = "V2515",
|
||||||
|
.pin_gpio_fn = GPIO_FN_TPU2TO1,
|
||||||
|
.pin_gpio = GPIO_PORT197,
|
||||||
|
.channel_offset = 0x50,
|
||||||
|
.timer_bit = 1,
|
||||||
|
.max_brightness = 1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource tpu21_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "TPU21",
|
||||||
|
.start = 0xe6620050,
|
||||||
|
.end = 0xe6620075,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device leds_tpu21_device = {
|
||||||
|
.name = "leds-renesas-tpu",
|
||||||
|
.id = 21,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &led_renesas_tpu21_pdata,
|
||||||
|
},
|
||||||
|
.num_resources = ARRAY_SIZE(tpu21_resources),
|
||||||
|
.resource = tpu21_resources,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct led_renesas_tpu_config led_renesas_tpu30_pdata = {
|
||||||
|
.name = "KEYLED",
|
||||||
|
.pin_gpio_fn = GPIO_FN_TPU3TO0,
|
||||||
|
.pin_gpio = GPIO_PORT163,
|
||||||
|
.channel_offset = 0x10,
|
||||||
|
.timer_bit = 0,
|
||||||
|
.max_brightness = 1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource tpu30_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.name = "TPU30",
|
||||||
|
.start = 0xe6630010,
|
||||||
|
.end = 0xe6630035,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device leds_tpu30_device = {
|
||||||
|
.name = "leds-renesas-tpu",
|
||||||
|
.id = 30,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &led_renesas_tpu30_pdata,
|
||||||
|
},
|
||||||
|
.num_resources = ARRAY_SIZE(tpu30_resources),
|
||||||
|
.resource = tpu30_resources,
|
||||||
|
};
|
||||||
|
|
||||||
/* MMCIF */
|
/* MMCIF */
|
||||||
static struct resource mmcif_resources[] = {
|
static struct resource mmcif_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -291,6 +401,10 @@ static struct platform_device *kota2_devices[] __initdata = {
|
||||||
&keysc_device,
|
&keysc_device,
|
||||||
&gpio_keys_device,
|
&gpio_keys_device,
|
||||||
&gpio_leds_device,
|
&gpio_leds_device,
|
||||||
|
&leds_tpu12_device,
|
||||||
|
&leds_tpu41_device,
|
||||||
|
&leds_tpu21_device,
|
||||||
|
&leds_tpu30_device,
|
||||||
&mmcif_device,
|
&mmcif_device,
|
||||||
&sdhi0_device,
|
&sdhi0_device,
|
||||||
&sdhi1_device,
|
&sdhi1_device,
|
||||||
|
@ -317,18 +431,6 @@ static void __init kota2_map_io(void)
|
||||||
shmobile_setup_console();
|
shmobile_setup_console();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PINTER0A 0xe69000a0
|
|
||||||
#define PINTCR0A 0xe69000b0
|
|
||||||
|
|
||||||
void __init kota2_init_irq(void)
|
|
||||||
{
|
|
||||||
sh73a0_init_irq();
|
|
||||||
|
|
||||||
/* setup PINT: enable PINTA2 as active low */
|
|
||||||
__raw_writel(1 << 29, PINTER0A);
|
|
||||||
__raw_writew(2 << 10, PINTCR0A);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init kota2_init(void)
|
static void __init kota2_init(void)
|
||||||
{
|
{
|
||||||
sh73a0_pinmux_init();
|
sh73a0_pinmux_init();
|
||||||
|
@ -447,7 +549,8 @@ struct sys_timer kota2_timer = {
|
||||||
|
|
||||||
MACHINE_START(KOTA2, "kota2")
|
MACHINE_START(KOTA2, "kota2")
|
||||||
.map_io = kota2_map_io,
|
.map_io = kota2_map_io,
|
||||||
.init_irq = kota2_init_irq,
|
.nr_irqs = NR_IRQS_LEGACY,
|
||||||
|
.init_irq = sh73a0_init_irq,
|
||||||
.handle_irq = shmobile_handle_irq_gic,
|
.handle_irq = shmobile_handle_irq_gic,
|
||||||
.init_machine = kota2_init,
|
.init_machine = kota2_init,
|
||||||
.timer = &kota2_timer,
|
.timer = &kota2_timer,
|
||||||
|
|
|
@ -113,6 +113,12 @@ static struct clk main_clk = {
|
||||||
.ops = &main_clk_ops,
|
.ops = &main_clk_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Divide Main clock by two */
|
||||||
|
static struct clk main_div2_clk = {
|
||||||
|
.ops = &div2_clk_ops,
|
||||||
|
.parent = &main_clk,
|
||||||
|
};
|
||||||
|
|
||||||
/* PLL0, PLL1, PLL2, PLL3 */
|
/* PLL0, PLL1, PLL2, PLL3 */
|
||||||
static unsigned long pll_recalc(struct clk *clk)
|
static unsigned long pll_recalc(struct clk *clk)
|
||||||
{
|
{
|
||||||
|
@ -181,6 +187,7 @@ static struct clk *main_clks[] = {
|
||||||
&extal1_div2_clk,
|
&extal1_div2_clk,
|
||||||
&extal2_div2_clk,
|
&extal2_div2_clk,
|
||||||
&main_clk,
|
&main_clk,
|
||||||
|
&main_div2_clk,
|
||||||
&pll0_clk,
|
&pll0_clk,
|
||||||
&pll1_clk,
|
&pll1_clk,
|
||||||
&pll2_clk,
|
&pll2_clk,
|
||||||
|
@ -243,7 +250,7 @@ static struct clk div6_clks[DIV6_NR] = {
|
||||||
[DIV6_VCK1] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR1, 0),
|
[DIV6_VCK1] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR1, 0),
|
||||||
[DIV6_VCK2] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR2, 0),
|
[DIV6_VCK2] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR2, 0),
|
||||||
[DIV6_VCK3] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR3, 0),
|
[DIV6_VCK3] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR3, 0),
|
||||||
[DIV6_ZB1] = SH_CLK_DIV6(&pll1_div2_clk, ZBCKCR, 0),
|
[DIV6_ZB1] = SH_CLK_DIV6(&pll1_div2_clk, ZBCKCR, CLK_ENABLE_ON_INIT),
|
||||||
[DIV6_FLCTL] = SH_CLK_DIV6(&pll1_div2_clk, FLCKCR, 0),
|
[DIV6_FLCTL] = SH_CLK_DIV6(&pll1_div2_clk, FLCKCR, 0),
|
||||||
[DIV6_SDHI0] = SH_CLK_DIV6(&pll1_div2_clk, SD0CKCR, 0),
|
[DIV6_SDHI0] = SH_CLK_DIV6(&pll1_div2_clk, SD0CKCR, 0),
|
||||||
[DIV6_SDHI1] = SH_CLK_DIV6(&pll1_div2_clk, SD1CKCR, 0),
|
[DIV6_SDHI1] = SH_CLK_DIV6(&pll1_div2_clk, SD1CKCR, 0),
|
||||||
|
@ -268,6 +275,7 @@ enum { MSTP001,
|
||||||
MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
|
MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
|
||||||
MSTP331, MSTP329, MSTP325, MSTP323, MSTP318,
|
MSTP331, MSTP329, MSTP325, MSTP323, MSTP318,
|
||||||
MSTP314, MSTP313, MSTP312, MSTP311,
|
MSTP314, MSTP313, MSTP312, MSTP311,
|
||||||
|
MSTP303, MSTP302, MSTP301, MSTP300,
|
||||||
MSTP411, MSTP410, MSTP403,
|
MSTP411, MSTP410, MSTP403,
|
||||||
MSTP_NR };
|
MSTP_NR };
|
||||||
|
|
||||||
|
@ -301,6 +309,10 @@ static struct clk mstp_clks[MSTP_NR] = {
|
||||||
[MSTP313] = MSTP(&div6_clks[DIV6_SDHI1], SMSTPCR3, 13, 0), /* SDHI1 */
|
[MSTP313] = MSTP(&div6_clks[DIV6_SDHI1], SMSTPCR3, 13, 0), /* SDHI1 */
|
||||||
[MSTP312] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMCIF0 */
|
[MSTP312] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMCIF0 */
|
||||||
[MSTP311] = MSTP(&div6_clks[DIV6_SDHI2], SMSTPCR3, 11, 0), /* SDHI2 */
|
[MSTP311] = MSTP(&div6_clks[DIV6_SDHI2], SMSTPCR3, 11, 0), /* SDHI2 */
|
||||||
|
[MSTP303] = MSTP(&main_div2_clk, SMSTPCR3, 3, 0), /* TPU1 */
|
||||||
|
[MSTP302] = MSTP(&main_div2_clk, SMSTPCR3, 2, 0), /* TPU2 */
|
||||||
|
[MSTP301] = MSTP(&main_div2_clk, SMSTPCR3, 1, 0), /* TPU3 */
|
||||||
|
[MSTP300] = MSTP(&main_div2_clk, SMSTPCR3, 0, 0), /* TPU4 */
|
||||||
[MSTP411] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 11, 0), /* IIC3 */
|
[MSTP411] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 11, 0), /* IIC3 */
|
||||||
[MSTP410] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 10, 0), /* IIC4 */
|
[MSTP410] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 10, 0), /* IIC4 */
|
||||||
[MSTP403] = MSTP(&r_clk, SMSTPCR4, 3, 0), /* KEYSC */
|
[MSTP403] = MSTP(&r_clk, SMSTPCR4, 3, 0), /* KEYSC */
|
||||||
|
@ -350,6 +362,10 @@ static struct clk_lookup lookups[] = {
|
||||||
CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */
|
CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */
|
||||||
CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMCIF0 */
|
CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMCIF0 */
|
||||||
CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP311]), /* SDHI2 */
|
CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP311]), /* SDHI2 */
|
||||||
|
CLKDEV_DEV_ID("leds-renesas-tpu.12", &mstp_clks[MSTP303]), /* TPU1 */
|
||||||
|
CLKDEV_DEV_ID("leds-renesas-tpu.21", &mstp_clks[MSTP302]), /* TPU2 */
|
||||||
|
CLKDEV_DEV_ID("leds-renesas-tpu.30", &mstp_clks[MSTP301]), /* TPU3 */
|
||||||
|
CLKDEV_DEV_ID("leds-renesas-tpu.41", &mstp_clks[MSTP300]), /* TPU4 */
|
||||||
CLKDEV_DEV_ID("i2c-sh_mobile.3", &mstp_clks[MSTP411]), /* I2C3 */
|
CLKDEV_DEV_ID("i2c-sh_mobile.3", &mstp_clks[MSTP411]), /* I2C3 */
|
||||||
CLKDEV_DEV_ID("i2c-sh_mobile.4", &mstp_clks[MSTP410]), /* I2C4 */
|
CLKDEV_DEV_ID("i2c-sh_mobile.4", &mstp_clks[MSTP410]), /* I2C4 */
|
||||||
CLKDEV_DEV_ID("sh_keysc.0", &mstp_clks[MSTP403]), /* KEYSC */
|
CLKDEV_DEV_ID("sh_keysc.0", &mstp_clks[MSTP403]), /* KEYSC */
|
||||||
|
|
Loading…
Reference in New Issue