of: Remove duplicate fields from of_platform_driver
[linux-2.6-block.git] / drivers / char / hw_random / pasemi-rng.c
index 24ae3073991fee365fe0533863adb2e097dc8b97..261ba8f22b8ba57872d4b15f1f71b5da05b009bd 100644 (file)
@@ -23,7 +23,8 @@
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
 #include <linux/hw_random.h>
-#include <asm/of_platform.h>
+#include <linux/delay.h>
+#include <linux/of_platform.h>
 #include <asm/io.h>
 
 #define SDCRNG_CTL_REG                 0x00
 
 #define MODULE_NAME "pasemi_rng"
 
-static int pasemi_rng_data_present(struct hwrng *rng)
+static int pasemi_rng_data_present(struct hwrng *rng, int wait)
 {
        void __iomem *rng_regs = (void __iomem *)rng->priv;
-
-       return (in_le32(rng_regs + SDCRNG_CTL_REG)
-               & SDCRNG_CTL_FVLD_M) ? 1 : 0;
+       int data, i;
+
+       for (i = 0; i < 20; i++) {
+               data = (in_le32(rng_regs + SDCRNG_CTL_REG)
+                       & SDCRNG_CTL_FVLD_M) ? 1 : 0;
+               if (data || !wait)
+                       break;
+               udelay(10);
+       }
+       return data;
 }
 
 static int pasemi_rng_data_read(struct hwrng *rng, u32 *data)
@@ -90,7 +98,7 @@ static int __devinit rng_probe(struct of_device *ofdev,
                               const struct of_device_id *match)
 {
        void __iomem *rng_regs;
-       struct device_node *rng_np = ofdev->node;
+       struct device_node *rng_np = ofdev->dev.of_node;
        struct resource res;
        int err = 0;
 
@@ -132,8 +140,11 @@ static struct of_device_id rng_match[] = {
 };
 
 static struct of_platform_driver rng_driver = {
-       .name           = "pasemi-rng",
-       .match_table    = rng_match,
+       .driver = {
+               .name = "pasemi-rng",
+               .owner = THIS_MODULE,
+               .of_match_table = rng_match,
+       },
        .probe          = rng_probe,
        .remove         = rng_remove,
 };