#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/hw_random.h>
#include <linux/platform_device.h>
#define TRNG_KEY 0x524e4700
static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
struct atmel_trng *trng = container_of(rng, struct atmel_trng, rng);
if (readl(trng->base + TRNG_ISR) & 1) {
*data = readl(trng->base + TRNG_ODATA);
readl(trng->base + TRNG_ISR);
static void atmel_trng_enable(struct atmel_trng *trng)
writel(TRNG_KEY | 1, trng->base + TRNG_CR);
static void atmel_trng_disable(struct atmel_trng *trng)
writel(TRNG_KEY, trng->base + TRNG_CR);
static int atmel_trng_probe(struct platform_device *pdev)