From: Tapio Vihuri <tapio.vihuri@nokia.com> Thank you for comments. ECI input driver changes: - Makefile and Kconfig sorted alphabetically - using sparse keymap library, much cleaner solution - correct string aligment with 80 column - debugfs initialization fix - sysfs cable entry using just 0/1 - using cheaper __set_bit - insane comments fixed - remove unneeded misc device Created against linux-2.6.37-rc8 at: 989d873 Merge master.kernel.org:/home/rmk/linux-2.6-arm --- v2 message --- Thank you for comments. In series two there Kconfig dependency problem fixed, preventing compilation if X86_MRST (Intel Moorestown) or INPUT_MISC is not selected. Also created against linux-2.6.37-rc8 --- v1 message --- Hi all This patch set introduce Multimedia Headset Accessory support for Nokia phones. Technically those are known as ECI (Enhancement Control Interface) If headset has many buttons, like play, vol+, vol- etc. then it is propably ECI accessory. Among several buttons ECI accessories contains memory for storing several parameters. This ECI input driver provides the following features: - reading ECI configuration memory - ECI buttons as input events Drive is constructed as follows: - ECI accessory input driver deals with headset accessory - ECI bus control driver deals the HW transfering data to/from headset - platform data match used HW In the future accessory detection logic will be added using ALSA jack reporting. Created against linux-2.6.37-rc6 Please review. Tapio Vihuri (3): ECI: input: introduce ECI accessory input driver ECI: introducing ECI bus driver ECI: adding platform data for ECI driver arch/x86/platform/mrst/mrst.c | 59 +++ drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/ecibus/Kconfig | 35 ++ drivers/ecibus/Makefile | 10 + drivers/ecibus/ecibus.c | 583 +++++++++++++++++++++++++ drivers/input/misc/Kconfig | 19 + ...
From: Tapio Vihuri <tapio.vihuri@nokia.com> ECI stands for (Enhancement Control Interface). ECI is better known as Multimedia Headset for Nokia phones. If headset has many buttons, like play, vol+, vol- etc. then it is propably ECI accessory. Among several buttons ECI accessory contains memory for storing several parameters. ECI input driver provides the following features: - reading ECI configuration memory - ECI buttons as input events Signed-off-by: Tapio Vihuri <tapio.vihuri@nokia.com> --- drivers/input/misc/Kconfig | 19 + drivers/input/misc/Makefile | 2 +- drivers/input/misc/eci.c | 945 +++++++++++++++++++++++++++++++++++++++++++ include/linux/input/eci.h | 157 +++++++ 4 files changed, 1122 insertions(+), 1 deletions(-) create mode 100644 drivers/input/misc/eci.c create mode 100644 include/linux/input/eci.h diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index b99b8cb..f106c5d 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -114,6 +114,25 @@ config INPUT_APANEL To compile this driver as a module, choose M here: the module will be called apanel. +config INPUT_ECI + tristate "AV ECI (Enhancement Control Interface) input driver" + select INPUT_SPARSEKMAP + help + The Enhancement Control Interface functionality + ECI is better known as Multimedia Headset for Nokia phones. + If headset has many buttons, like play, vol+, vol- etc. then + it is propably ECI accessory. + Among several buttons ECI accessory contains memory for storing + several parameters. + + ECI input driver provides the following features: + - reading ECI configuration memory + - ECI buttons as input events + + Say 'y' here to statically link this module into the kernel or 'm' + to build it as a dynamically loadable module. The module will be + called eci.ko + config INPUT_IXP4XX_BEEPER tristate "IXP4XX Beeper support" depends on ARCH_IXP4XX diff --git a/drivers/input/misc/Makefile ...
From: Tapio Vihuri <tapio.vihuri@nokia.com>
Gives platform data for ECI accessory input driver and
ECI bus controller driver.
Signed-off-by: Tapio Vihuri <tapio.vihuri@nokia.com>
---
arch/x86/platform/mrst/mrst.c | 59 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 59 insertions(+), 0 deletions(-)
diff --git a/arch/x86/platform/mrst/mrst.c b/arch/x86/platform/mrst/mrst.c
index 79ae681..60dca78 100644
--- a/arch/x86/platform/mrst/mrst.c
+++ b/arch/x86/platform/mrst/mrst.c
@@ -14,6 +14,7 @@
#include <linux/sfi.h>
#include <linux/irq.h>
#include <linux/module.h>
+#include <linux/platform_device.h>
#include <asm/setup.h>
#include <asm/mpspec_def.h>
@@ -309,3 +310,61 @@ static inline int __init setup_x86_mrst_timer(char *arg)
return 0;
}
__setup("x86_mrst_timer=", setup_x86_mrst_timer);
+
+#if defined(CONFIG_ECI) || defined(CONFIG_ECI_MODULE)
+#include <linux/input/eci.h>
+
+#define GPIO_ECI_RSTn 126 /* GP_CORE_030 + 96 */
+#define GPIO_ECI_SW_CTRL 178 /* GP_CORE_082 + 96 */
+#define GPIO_ECI_INT 16 /* GP_AON_016 */
+
+static struct ecibus_platform_data medfield_ecibus_control = {
+ .ecibus_rst_gpio = GPIO_ECI_RSTn,
+ .ecibus_sw_ctrl_gpio = GPIO_ECI_SW_CTRL,
+ .ecibus_int_gpio = GPIO_ECI_INT,
+};
+
+/*
+ * This is just example, should be used in platform audio driver
+ * hsmic_event->event(hsmic_event->private, true)
+ */
+static void medfield_register_hsmic_event_cb(struct audio_hsmic_event *event)
+{
+ struct audio_hsmic_event *hsmic_event;
+
+ hsmic_event = event;
+}
+
+static struct eci_platform_data medfield_eci_platform_data = {
+ .register_hsmic_event_cb = medfield_register_hsmic_event_cb,
+};
+
+static struct platform_device medfield_ecibus_device = {
+ .name = "ecibus",
+ .id = 1,
+ .dev = {
+ .platform_data = &medfield_ecibus_control,
+ },
+};
+
+static struct platform_device medfield_eci_device = {
+ .name = "ECI_accessory",
+ .dev = {
+ .platform_data = &medfield_eci_platform_data,
+ },
+};
+
+static ...From: Tapio Vihuri <tapio.vihuri@nokia.com> ECI bus controller is kind of bridge between host CPU I2C and ECI accessory ECI communication. Signed-off-by: Tapio Vihuri <tapio.vihuri@nokia.com> --- drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/ecibus/Kconfig | 35 +++ drivers/ecibus/Makefile | 10 + drivers/ecibus/ecibus.c | 583 +++++++++++++++++++++++++++++++++++++++++++++ include/linux/input/eci.h | 8 + 6 files changed, 639 insertions(+), 0 deletions(-) create mode 100644 drivers/ecibus/Kconfig create mode 100644 drivers/ecibus/Makefile create mode 100644 drivers/ecibus/ecibus.c diff --git a/drivers/Kconfig b/drivers/Kconfig index a2b902f..f450f98 100644 --- a/drivers/Kconfig +++ b/drivers/Kconfig @@ -111,4 +111,6 @@ source "drivers/xen/Kconfig" source "drivers/staging/Kconfig" source "drivers/platform/Kconfig" + +source "drivers/ecibus/Kconfig" endmenu diff --git a/drivers/Makefile b/drivers/Makefile index f3ebb30..11f5d57 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -113,5 +113,6 @@ obj-$(CONFIG_SSB) += ssb/ obj-$(CONFIG_VHOST_NET) += vhost/ obj-$(CONFIG_VLYNQ) += vlynq/ obj-$(CONFIG_STAGING) += staging/ +obj-$(CONFIG_ECI) += ecibus/ obj-y += platform/ obj-y += ieee802154/ diff --git a/drivers/ecibus/Kconfig b/drivers/ecibus/Kconfig new file mode 100644 index 0000000..f2fc8a4 --- /dev/null +++ b/drivers/ecibus/Kconfig @@ -0,0 +1,35 @@ +# +# ECI driver configuration +# +menuconfig ECI + bool "ECI support" + help + ECI (Enhancement Control Interface) accessory support + + The Enhancement Control Interface functionality + ECI is better known as Multimedia Headset for Nokia phones. + If headset has many buttons, like play, vol+, vol- etc. then + it is propably ECI accessory. + Among several buttons ECI accessory contains memory for storing + several parameters. + + Enable ECI support in terminal so that ECI input driver is able + to communicate ...
