#include <linux/hw_random.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/platform_device.h>
#include <linux/delay.h>
#define RNG_CTRL_OFFSET …
#define RNG_CTRL_RNG_RBGEN_MASK …
#define RNG_CTRL_RNG_RBGEN_ENABLE …
#define RNG_SOFT_RESET_OFFSET …
#define RNG_SOFT_RESET …
#define RBG_SOFT_RESET_OFFSET …
#define RBG_SOFT_RESET …
#define RNG_INT_STATUS_OFFSET …
#define RNG_INT_STATUS_MASTER_FAIL_LOCKOUT_IRQ_MASK …
#define RNG_INT_STATUS_STARTUP_TRANSITIONS_MET_IRQ_MASK …
#define RNG_INT_STATUS_NIST_FAIL_IRQ_MASK …
#define RNG_INT_STATUS_TOTAL_BITS_COUNT_IRQ_MASK …
#define RNG_FIFO_DATA_OFFSET …
#define RNG_FIFO_COUNT_OFFSET …
#define RNG_FIFO_COUNT_RNG_FIFO_COUNT_MASK …
struct iproc_rng200_dev { … };
#define to_rng_priv(rng) …
static void iproc_rng200_enable_set(void __iomem *rng_base, bool enable)
{ … }
static void iproc_rng200_restart(void __iomem *rng_base)
{ … }
static int iproc_rng200_read(struct hwrng *rng, void *buf, size_t max,
bool wait)
{ … }
static int iproc_rng200_init(struct hwrng *rng)
{ … }
static void iproc_rng200_cleanup(struct hwrng *rng)
{ … }
static int iproc_rng200_probe(struct platform_device *pdev)
{ … }
static int __maybe_unused iproc_rng200_suspend(struct device *dev)
{ … }
static int __maybe_unused iproc_rng200_resume(struct device *dev)
{ … }
static const struct dev_pm_ops iproc_rng200_pm_ops = …;
static const struct of_device_id iproc_rng200_of_match[] = …;
MODULE_DEVICE_TABLE(of, iproc_rng200_of_match);
static struct platform_driver iproc_rng200_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;