Palm USER_PINS driver
diff --git a/include/linux/user-pins.h b/include/linux/user-pins.h
new file mode 100644
index 0000000..499b250
--- /dev/null
+++ b/include/linux/user-pins.h
@@ -0,0 +1,44 @@
+#ifndef __USER_PINS_INCLUDED__
+#define __USER_PINS_INCLUDED__
+
+typedef enum {
+ PIN_MODE_ACTIVE,
+ PIN_MODE_SUSPENDED
+} PIN_MODE;
+
+struct user_pin {
+ const char *name; // pin name
+ int gpio; // gpio num/id
+ int options; // options
+ int act_level; // active level
+ int direction; // 1 - an input, 0 - output
+ int def_level; // default level: 0, 1 or -1 if undefined
+ int sysfs_mask; // sysfs file mode
+ char *pin_mode; // board specific pin mode
+ irqreturn_t (*irq_handler)(int irq, void *data);
+ int (*pinmux)(int gpio, int mode);
+ int irq_config;
+ int irq_handle_mode;
+};
+
+struct user_pin_set {
+ const char *set_name; // pin set name
+ int num_pins; // number of pins in the group
+ struct user_pin *pins; // pins array.
+};
+
+struct user_pins_platform_data {
+ int num_sets; // number of pin sets
+ struct user_pin_set *sets; // pin sets.
+};
+
+/* Pin option constants */
+#define PIN_READ_ONLY (1 << 0) // pin is read only
+#define PIN_WAKEUP_SOURCE (1 << 1) // pin is a wakeup source
+#define PIN_IRQ (1 << 2) // pin generates irq
+
+#define IRQ_HANDLE_NONE (0) // IRQ handling is not defined
+#define IRQ_HANDLE_AUTO (1 << 0) // IRQ handling is automatic
+#define IRQ_HANDLE_OFF (1 << 1) // IRQ handling is off
+
+#endif // __USER_PINS_INCLUDED__