summaryrefslogtreecommitdiffstats
path: root/include/linux/mfd/ucb1x00.h
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2012-01-21 14:58:28 +0000
committerRussell King <rmk+kernel@arm.linux.org.uk>2012-02-18 23:15:43 +0000
commita3364409c4af8bae42d04def48dc11409787e503 (patch)
tree317d68920998bc5823d2879a49d49f27a8aed279 /include/linux/mfd/ucb1x00.h
parentcf4abfcc0df2985ff6061f74e63b8353f2a1d0bc (diff)
downloadtalos-op-linux-a3364409c4af8bae42d04def48dc11409787e503.tar.gz
talos-op-linux-a3364409c4af8bae42d04def48dc11409787e503.zip
MFD: ucb1x00: convert to use genirq
Convert the ucb1x00 driver to use genirq's interrupt services, rather than its own private implementation. This allows a wider range of drivers to use the GPIO interrupts (such as the gpio_keys driver) without being aware of the UCB1x00's private IRQ system. This prevents the UCB1x00 core driver from being built as a module, so adjust the configuration to add that restriction. Acked-by: Jochen Friedrich <jochen@scram.de> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'include/linux/mfd/ucb1x00.h')
-rw-r--r--include/linux/mfd/ucb1x00.h22
1 files changed, 4 insertions, 18 deletions
diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h
index 253c12c157a6..6fb907446c33 100644
--- a/include/linux/mfd/ucb1x00.h
+++ b/include/linux/mfd/ucb1x00.h
@@ -112,18 +112,15 @@ enum ucb1x00_reset {
struct ucb1x00_plat_data {
void (*reset)(enum ucb1x00_reset);
+ unsigned irq_base;
int gpio_base;
};
-struct ucb1x00_irq {
- void *devid;
- void (*fn)(int, void *);
-};
-
struct ucb1x00 {
- spinlock_t lock;
+ raw_spinlock_t irq_lock;
struct mcp *mcp;
unsigned int irq;
+ int irq_base;
struct mutex adc_mutex;
spinlock_t io_lock;
u16 id;
@@ -132,7 +129,7 @@ struct ucb1x00 {
u16 adc_cr;
u16 irq_fal_enbl;
u16 irq_ris_enbl;
- struct ucb1x00_irq irq_handler[16];
+ u16 irq_mask;
struct device dev;
struct list_head node;
struct list_head devs;
@@ -255,15 +252,4 @@ unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync);
void ucb1x00_adc_enable(struct ucb1x00 *ucb);
void ucb1x00_adc_disable(struct ucb1x00 *ucb);
-/*
- * Which edges of the IRQ do you want to control today?
- */
-#define UCB_RISING (1 << 0)
-#define UCB_FALLING (1 << 1)
-
-int ucb1x00_hook_irq(struct ucb1x00 *ucb, unsigned int idx, void (*fn)(int, void *), void *devid);
-void ucb1x00_enable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
-void ucb1x00_disable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges);
-int ucb1x00_free_irq(struct ucb1x00 *ucb, unsigned int idx, void *devid);
-
#endif
OpenPOWER on IntegriCloud