|
@@ -19,12 +19,32 @@
|
|
|
#include <linux/mv643xx_eth.h>
|
|
|
#include <linux/mv643xx_i2c.h>
|
|
|
#include <net/dsa.h>
|
|
|
-#include <linux/spi/orion_spi.h>
|
|
|
#include <plat/orion_wdt.h>
|
|
|
#include <plat/mv_xor.h>
|
|
|
#include <plat/ehci-orion.h>
|
|
|
#include <mach/bridge-regs.h>
|
|
|
|
|
|
+/* Create a clkdev entry for a given device/clk */
|
|
|
+void __init orion_clkdev_add(const char *con_id, const char *dev_id,
|
|
|
+ struct clk *clk)
|
|
|
+{
|
|
|
+ struct clk_lookup *cl;
|
|
|
+
|
|
|
+ cl = clkdev_alloc(clk, con_id, dev_id);
|
|
|
+ if (cl)
|
|
|
+ clkdev_add(cl);
|
|
|
+}
|
|
|
+
|
|
|
+/* Create clkdev entries for all orion platforms except kirkwood.
|
|
|
+ Kirkwood has gated clocks for some of its peripherals, so creates
|
|
|
+ its own clkdev entries. For all the other orion devices, create
|
|
|
+ clkdev entries to the tclk. */
|
|
|
+void __init orion_clkdev_init(struct clk *tclk)
|
|
|
+{
|
|
|
+ orion_clkdev_add(NULL, "orion_spi.0", tclk);
|
|
|
+ orion_clkdev_add(NULL, "orion_spi.1", tclk);
|
|
|
+}
|
|
|
+
|
|
|
/* Fill in the resources structure and link it into the platform
|
|
|
device structure. There is always a memory region, and nearly
|
|
|
always an interrupt.*/
|
|
@@ -523,44 +543,32 @@ void __init orion_i2c_1_init(unsigned long mapbase,
|
|
|
/*****************************************************************************
|
|
|
* SPI
|
|
|
****************************************************************************/
|
|
|
-static struct orion_spi_info orion_spi_plat_data;
|
|
|
static struct resource orion_spi_resources;
|
|
|
|
|
|
static struct platform_device orion_spi = {
|
|
|
.name = "orion_spi",
|
|
|
.id = 0,
|
|
|
- .dev = {
|
|
|
- .platform_data = &orion_spi_plat_data,
|
|
|
- },
|
|
|
};
|
|
|
|
|
|
-static struct orion_spi_info orion_spi_1_plat_data;
|
|
|
static struct resource orion_spi_1_resources;
|
|
|
|
|
|
static struct platform_device orion_spi_1 = {
|
|
|
.name = "orion_spi",
|
|
|
.id = 1,
|
|
|
- .dev = {
|
|
|
- .platform_data = &orion_spi_1_plat_data,
|
|
|
- },
|
|
|
};
|
|
|
|
|
|
/* Note: The SPI silicon core does have interrupts. However the
|
|
|
* current Linux software driver does not use interrupts. */
|
|
|
|
|
|
-void __init orion_spi_init(unsigned long mapbase,
|
|
|
- unsigned long tclk)
|
|
|
+void __init orion_spi_init(unsigned long mapbase)
|
|
|
{
|
|
|
- orion_spi_plat_data.tclk = tclk;
|
|
|
fill_resources(&orion_spi, &orion_spi_resources,
|
|
|
mapbase, SZ_512 - 1, NO_IRQ);
|
|
|
platform_device_register(&orion_spi);
|
|
|
}
|
|
|
|
|
|
-void __init orion_spi_1_init(unsigned long mapbase,
|
|
|
- unsigned long tclk)
|
|
|
+void __init orion_spi_1_init(unsigned long mapbase)
|
|
|
{
|
|
|
- orion_spi_1_plat_data.tclk = tclk;
|
|
|
fill_resources(&orion_spi_1, &orion_spi_1_resources,
|
|
|
mapbase, SZ_512 - 1, NO_IRQ);
|
|
|
platform_device_register(&orion_spi_1);
|