misc: add a6 driver
diff --git a/include/linux/a6.h b/include/linux/a6.h
new file mode 100644
index 0000000..99361ed
--- /dev/null
+++ b/include/linux/a6.h
@@ -0,0 +1,76 @@
+/*
+ * linux/include/linux/a6.h
+ *
+ * Driver for the A6 TP.
+ *
+ * Copyright (C) 2008 Palm, Inc.
+ * Author: Raj Mojumder <raj.mojumder@palm.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License.
+ */
+
+#ifndef _A6_H
+#define _A6_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <mach/msm_hsusb.h>
+
+#define  A6_DEVICE_0   "a6_0"
+#define  A6_DEVICE_1   "a6_1"
+#define  A6_DRIVER     "a6"
+
+#define  A6_DEVICE     A6_DEVICE_0
+
+#define MAX8903B_CONNECTED_PS_AC	(1U << 1)
+#define MAX8903B_CONNECTED_PS_USB	(1U << 2)
+#define MAX8903B_CONNECTED_PS_DOCK	(1U << 3)
+#define MAX8903B_DOCK_DRAW_MA		1400
+
+/* IOCTLs */
+#define A6_IOCTL_SET_FW_DATA		_IOW('c', 0x01, int)
+#define A6_IOCTL_VERIFY_FW_DATA		_IOW('c', 0x02, int)
+
+/* Touch panel platform data structure */
+struct a6_platform_data {
+	char*	dev_name;   // device name
+	int	pwr_gpio;
+	int	sbw_tck_gpio;
+	int 	sbw_tdio_gpio;
+	int	sbw_wkup_gpio;
+	void*	sbw_ops;
+	void*	wake_ops;
+
+	void*	sbw_init_gpio_config;
+	int	sbw_init_gpio_config_size;
+	void*	sbw_deinit_gpio_config;
+	int	sbw_deinit_gpio_config_size;
+
+	int	(*sbw_init)(struct a6_platform_data*);
+	int	(*sbw_deinit)(struct a6_platform_data*);
+
+	int	pwr_gpio_wakeup_cap;  /* set if pwr_gpio is wakeup capable */
+	int	power_supply_connected;	/* Set to 1 if this is the a6 connected to battery, etc */
+};
+
+struct a6_wake_ops {
+	void*	data;
+	
+	// external periodic sleep/wake interface
+	int	(*enable_periodic_wake)(void *);
+	int	(*disable_periodic_wake)(void *);
+
+	// internal sleep/wake interface
+	int	(*internal_wake_enable_state)(void*);
+	int	(*internal_wake_period)(void*);
+
+	// force sleep/wake interface (needed to force-wake A6 when
+	// internal/external periodic sleep/wake in effect...
+	int	(*force_wake)(void *);
+	int	(*force_sleep)(void *);
+};
+
+void a6_charger_event (enum chg_type otg_chg_type);
+
+#endif // _A6_H
diff --git a/include/linux/a6_sbw_interface.h b/include/linux/a6_sbw_interface.h
new file mode 100644
index 0000000..2927684
--- /dev/null
+++ b/include/linux/a6_sbw_interface.h
@@ -0,0 +1,51 @@
+/*
+ * linux/include/linux/a6_sbw_interface.h
+ *
+ * Public interface for the SBW protocol layer. Declares callbacks used by the core protocol.
+ * Interfaces include:
+ * - per-A6-device interface: every A6 device must define its own implementation of this interface.
+ * - per-target interfaces : each board-type must define its own implementation of these interfaces.
+ * - per-host system: operating system specific implementations must be defined.
+ *
+ * Copyright (C) 2008 Palm, Inc.
+ * Author: Raj Mojumder <raj.mojumder@palm.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License.
+ */
+
+#ifndef _A6_SBW_INTERFACE_H_
+#define _A6_SBW_INTERFACE_H_
+
+struct a6_sbw_interface {
+        // per-A6-device interface (separate instantiation for every a6 device)
+	struct {
+		uint16_t (*SetSBWTCK)(void);
+		uint16_t (*ClrSBWTCK)(void);
+		uint16_t (*SetSBWTDIO)(void);
+		uint16_t (*ClrSBWTDIO)(void);
+		uint16_t (*SetInSBWTDIO)(void);
+		uint16_t (*SetOutSBWTDIO)(void);
+		uint16_t (*GetSBWTDIO)(void);
+		uint16_t (*SetSBWAKEUP)(void);
+		uint16_t (*ClrSBWAKEUP)(void);
+	} a6_per_device_interface;
+
+        // per-target interface (separate instantiation for every board)
+	struct {
+		void (*delay)(uint32_t delay_us);
+	} a6_per_target_interface;
+};
+
+
+// per-host system: (operating system specific)
+#ifdef __KERNEL__
+#define a6_disable_interrupts(flags) {flags=flags;local_irq_save(flags);}
+#define a6_enable_interrupts(flags)  {local_irq_restore(flags);}
+#else
+#define a6_disable_interrupts(flags) {i_need_definition();}
+#define a6_enable_interrupts(flags)  {i_need_definition();}
+#endif
+
+
+#endif // _A6_SBW_INTERFACE_H_