Commit 2071db48 authored by Linus Walleij's avatar Linus Walleij Committed by Samuel Ortiz

mfd: Use AB3100 MFD core IRQ for interrupt randomness

This reintroduces the entropy sampling of the AB3100 IRQ as the
IRQF_SAMPLE_RANDOM is going out according to the feature removal
schedule. I'm trying to do this the right way then, so CC:ing some
random people for a quick review. We add entropy for interrupt
events in the AB3100 which are truly random in nature, like
external cables being connected, voltages on batteries dropping
below certain ranges, ADC triggers or overheating.
Signed-off-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
Cc: Robin Getz <rgetz@blackfin.uclinux.org>
Acked-by: default avatarMatt Mackall <mpm@selenic.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 6048a3dd
...@@ -329,8 +329,8 @@ config PCF50633_GPIO ...@@ -329,8 +329,8 @@ config PCF50633_GPIO
the PCF50633 chip. the PCF50633 chip.
config AB3100_CORE config AB3100_CORE
tristate "ST-Ericsson AB3100 Mixed Signal Circuit core functions" bool "ST-Ericsson AB3100 Mixed Signal Circuit core functions"
depends on I2C depends on I2C=y
default y if ARCH_U300 default y if ARCH_U300
help help
Select this to enable the AB3100 Mixed Signal IC core Select this to enable the AB3100 Mixed Signal IC core
......
/* /*
* Copyright (C) 2007-2009 ST-Ericsson * Copyright (C) 2007-2010 ST-Ericsson
* License terms: GNU General Public License (GPL) version 2 * License terms: GNU General Public License (GPL) version 2
* Low-level core for exclusive access to the AB3100 IC on the I2C bus * Low-level core for exclusive access to the AB3100 IC on the I2C bus
* and some basic chip-configuration. * and some basic chip-configuration.
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/random.h>
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
...@@ -376,6 +377,8 @@ static irqreturn_t ab3100_irq_handler(int irq, void *data) ...@@ -376,6 +377,8 @@ static irqreturn_t ab3100_irq_handler(int irq, void *data)
u32 fatevent; u32 fatevent;
int err; int err;
add_interrupt_randomness(irq);
err = ab3100_get_register_page_interruptible(ab3100, AB3100_EVENTA1, err = ab3100_get_register_page_interruptible(ab3100, AB3100_EVENTA1,
event_regs, 3); event_regs, 3);
if (err) if (err)
...@@ -720,10 +723,7 @@ static struct platform_device ab3100_##devname##_device = { \ ...@@ -720,10 +723,7 @@ static struct platform_device ab3100_##devname##_device = { \
.id = -1, \ .id = -1, \
} }
/* /* This lists all the subdevices */
* This lists all the subdevices and corresponding register
* ranges.
*/
AB3100_DEVICE(dac, "ab3100-dac"); AB3100_DEVICE(dac, "ab3100-dac");
AB3100_DEVICE(leds, "ab3100-leds"); AB3100_DEVICE(leds, "ab3100-leds");
AB3100_DEVICE(power, "ab3100-power"); AB3100_DEVICE(power, "ab3100-power");
...@@ -889,10 +889,11 @@ static int __init ab3100_probe(struct i2c_client *client, ...@@ -889,10 +889,11 @@ static int __init ab3100_probe(struct i2c_client *client,
if (err) if (err)
goto exit_no_setup; goto exit_no_setup;
/* This real unpredictable IRQ is of course sampled for entropy */
err = request_threaded_irq(client->irq, NULL, ab3100_irq_handler, err = request_threaded_irq(client->irq, NULL, ab3100_irq_handler,
IRQF_ONESHOT, IRQF_ONESHOT, "ab3100-core", ab3100);
"ab3100-core", ab3100); /* This real unpredictable IRQ is of course sampled for entropy */
rand_initialize_irq(client->irq);
if (err) if (err)
goto exit_no_irq; goto exit_no_irq;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment