@@ -690,6 +690,34 @@ static struct platform_device camera_devices[] = {
},
};
+/*
+ * SPU2
+ *
+ * used to clock core of FSI,
+ * set close to 12.288MHz,
+ * see
+ * Table 45.9 point 4 of 7724 manual (English ver)
+ * Table 45.11 point 4 of 7724 manual (Japanese ver)
+ */
+#define SPUCLKCR 0xA415003C
+static void spuclkcr_init(struct clk *clk)
+{
+ /* 333 MHz / (27 + 1) = 11.9 MHz */
+ ctrl_outl(0x000001B, clk->enable_reg);
+}
+
+static struct clk_ops spuclkcr_clk_ops = {
+ .init = spuclkcr_init,
+};
+
+static struct clk spuclkcr_clk = {
+ .name = "spuclkcr_clk",
+ .id = -1,
+ .ops = &spuclkcr_clk_ops,
+ .enable_reg = (void __iomem *)SPUCLKCR,
+ .rate = 11904761, /* 11.9 MHz */
+};
+
/* FSI */
/*
* FSI-B use external clock which came from da7210.
@@ -1107,6 +1135,12 @@ static int __init arch_setup(void)
gpio_request(GPIO_FN_FSIOBLRCK, NULL);
gpio_request(GPIO_FN_CLKAUDIOBO, NULL);
+ /* change parent of SPU2 */
+ clk = clk_get(NULL, "spu_clk");
+ clk_register(&spuclkcr_clk);
+ clk_set_parent(clk, &spuclkcr_clk);
+ clk_put(clk);
+
/* change parent of FSI B */
clk = clk_get(NULL, "fsib_clk");
clk_register(&fsimckb_clk);
@@ -257,6 +257,34 @@ static struct platform_device ceu1_device = {
},
};
+/*
+ * SPU2
+ *
+ * used to clock core of FSI,
+ * set close to 12.288MHz,
+ * see
+ * Table 45.9 point 4 of 7724 manual (English ver)
+ * Table 45.11 point 4 of 7724 manual (Japanese ver)
+ */
+#define SPUCLKCR 0xA415003C
+static void spuclkcr_init(struct clk *clk)
+{
+ /* 333 MHz / (27 + 1) = 11.9 MHz */
+ ctrl_outl(0x000001B, clk->enable_reg);
+}
+
+static struct clk_ops spuclkcr_clk_ops = {
+ .init = spuclkcr_init,
+};
+
+static struct clk spuclkcr_clk = {
+ .name = "spuclkcr_clk",
+ .id = -1,
+ .ops = &spuclkcr_clk_ops,
+ .enable_reg = (void __iomem *)SPUCLKCR,
+ .rate = 11904761, /* 11.9 MHz */
+};
+
/* FSI */
/*
* FSI-A use external clock which came from ak464x.
@@ -595,7 +623,7 @@ arch_initcall(arch_setup);
static int __init devices_setup(void)
{
u16 sw = ctrl_inw(SW4140); /* select camera, monitor */
- struct clk *fsia_clk;
+ struct clk *clk;
/* register board specific self-refresh code */
sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF,
@@ -764,13 +792,19 @@ static int __init devices_setup(void)
gpio_request(GPIO_FN_CLKAUDIOBO, NULL);
gpio_request(GPIO_FN_FSIIASD, NULL);
+ /* change parent of SPU2 */
+ clk = clk_get(NULL, "spu_clk");
+ clk_register(&spuclkcr_clk);
+ clk_set_parent(clk, &spuclkcr_clk);
+ clk_put(clk);
+
/* change parent of FSI A */
- fsia_clk = clk_get(NULL, "fsia_clk");
+ clk = clk_get(NULL, "fsia_clk");
clk_register(&fsimcka_clk);
- clk_set_parent(fsia_clk, &fsimcka_clk);
- clk_set_rate(fsia_clk, 11000);
+ clk_set_parent(clk, &fsimcka_clk);
+ clk_set_rate(clk, 11000);
clk_set_rate(&fsimcka_clk, 11000);
- clk_put(fsia_clk);
+ clk_put(clk);
/* SDHI0 connected to cn7 */
gpio_request(GPIO_FN_SDHI0CD, NULL);