git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rt2x00: Rework rt61 antenna selection.
[safe/jmp/linux-2.6]
/
drivers
/
char
/
hw_random
/
pasemi-rng.c
diff --git
a/drivers/char/hw_random/pasemi-rng.c
b/drivers/char/hw_random/pasemi-rng.c
index
fa6040b
..
e2ea210
100644
(file)
--- a/
drivers/char/hw_random/pasemi-rng.c
+++ b/
drivers/char/hw_random/pasemi-rng.c
@@
-23,6
+23,7
@@
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/hw_random.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/hw_random.h>
+#include <linux/delay.h>
#include <asm/of_platform.h>
#include <asm/io.h>
#include <asm/of_platform.h>
#include <asm/io.h>
@@
-41,12
+42,19
@@
#define MODULE_NAME "pasemi_rng"
#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;
{
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)
}
static int pasemi_rng_data_read(struct hwrng *rng, u32 *data)