ARM: OMAP: split OMAP1, OMAP2+ RNG device registration
authorPaul Walmsley <paul@pwsan.com>
Sun, 23 Sep 2012 23:28:27 +0000 (17:28 -0600)
committerPaul Walmsley <paul@pwsan.com>
Sun, 23 Sep 2012 23:28:27 +0000 (17:28 -0600)
Move the OMAP1-specific RNG device creation off to mach-omap1/devices.c,
and create a omap_device-backed registration function for OMAP2+ devices
in mach-omap2/devices.c.

As a nice side-benefit, we can also get rid of
arch/arm/plat-omap/devices.c, thanks to some recent changes from Tony.

One change from the previous behavior is that the RNG devices are now
registered unconditionally.  This should allow the RNG drivers to be
loaded as modules, even if the original kernel was not built that way.

Signed-off-by: Paul Walmsley <paul@pwsan.com>
arch/arm/mach-omap1/devices.c
arch/arm/mach-omap2/devices.c

index 05fdbd992c778eb044c6ec50911badcde887b35a..23a0b116b078c3ed1898fac3c22538c204df4599 100644 (file)
@@ -357,6 +357,30 @@ static inline void omap_init_uwire(void) {}
 #endif
 
 
+#define OMAP1_RNG_BASE         0xfffe5000
+
+static struct resource omap1_rng_resources[] = {
+       {
+               .start          = OMAP1_RNG_BASE,
+               .end            = OMAP1_RNG_BASE + 0x4f,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device omap1_rng_device = {
+       .name           = "omap_rng",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(omap1_rng_resources),
+       .resource       = omap1_rng_resources,
+};
+
+static void omap1_init_rng(void)
+{
+       (void) platform_device_register(&omap1_rng_device);
+}
+
+/*-------------------------------------------------------------------------*/
+
 /*
  * This gets called after board-specific INIT_MACHINE, and initializes most
  * on-chip peripherals accessible on this board (except for few like USB):
@@ -395,6 +419,7 @@ static int __init omap1_init_devices(void)
        omap_init_spi100k();
        omap_init_sti();
        omap_init_uwire();
+       omap1_init_rng();
 
        return 0;
 }
index 6ef401079480903c78b7bd06b56015fc2114da9f..33bdbe4633aaf1ff77db29cfa0c6b99c182b4202 100644 (file)
@@ -462,6 +462,23 @@ static void omap_init_pmu(void)
        platform_device_register(&omap_pmu_device);
 }
 
+/**
+ * omap_init_rng - bind the RNG hwmod to the RNG omap_device
+ *
+ * Bind the RNG hwmod to the RNG omap_device.  No return value.
+ */
+static void omap_init_rng(void)
+{
+       struct omap_hwmod *oh;
+       struct platform_device *pdev;
+
+       oh = omap_hwmod_lookup("rng");
+       if (!oh)
+               return;
+
+       pdev = omap_device_build("omap_rng", -1, oh, NULL, 0, NULL, 0, 0);
+       WARN(IS_ERR(pdev), "Can't build omap_device for omap_rng\n");
+}
 
 #if defined(CONFIG_CRYPTO_DEV_OMAP_SHAM) || defined(CONFIG_CRYPTO_DEV_OMAP_SHAM_MODULE)
 
@@ -649,6 +666,7 @@ static int __init omap2_init_devices(void)
        }
        omap_init_pmu();
        omap_init_sti();
+       omap_init_rng();
        omap_init_sham();
        omap_init_aes();
        omap_init_vout();
This page took 0.030945 seconds and 5 git commands to generate.