HID: i2c-hid: introduce HID over i2c specification implementation

Microsoft published the protocol specification of HID over i2c:
http://msdn.microsoft.com/en-us/library/windows/hardware/hh852380.aspx

This patch introduces an implementation of this protocol.

This implementation does not includes the ACPI part of the specification.
This will come when ACPI 5.0 devices enumeration will be available.

Once the ACPI part is done, OEM will not have to declare HID over I2C
devices in their platform specific driver.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
Benjamin Tissoires
2012-11-12 15:42:59 +01:00
committed by Jiri Kosina
parent 1a1e8c6fad
commit 4a200c3b9a
6 changed files with 1038 additions and 0 deletions

View File

@@ -728,4 +728,6 @@ endif # HID
source "drivers/hid/usbhid/Kconfig"
source "drivers/hid/i2c-hid/Kconfig"
endmenu

View File

@@ -118,3 +118,4 @@ obj-$(CONFIG_USB_HID) += usbhid/
obj-$(CONFIG_USB_MOUSE) += usbhid/
obj-$(CONFIG_USB_KBD) += usbhid/
obj-$(CONFIG_I2C_HID) += i2c-hid/

View File

@@ -0,0 +1,21 @@
menu "I2C HID support"
depends on I2C
config I2C_HID
tristate "HID over I2C transport layer"
default n
depends on I2C && INPUT
select HID
---help---
Say Y here if you want to use the HID over i2c protocol
implementation.
If unsure, say N.
This support is also available as a module. If so, the module
will be called i2c-hid.
comment "Input core support is needed for HID over I2C input layer"
depends on I2C_HID && INPUT=n
endmenu

View File

@@ -0,0 +1,5 @@
#
# Makefile for the I2C input drivers
#
obj-$(CONFIG_I2C_HID) += i2c-hid.o

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,35 @@
/*
* HID over I2C protocol implementation
*
* Copyright (c) 2012 Benjamin Tissoires <benjamin.tissoires@gmail.com>
* Copyright (c) 2012 Ecole Nationale de l'Aviation Civile, France
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive for
* more details.
*/
#ifndef __LINUX_I2C_HID_H
#define __LINUX_I2C_HID_H
#include <linux/types.h>
/**
* struct i2chid_platform_data - used by hid over i2c implementation.
* @hid_descriptor_address: i2c register where the HID descriptor is stored.
*
* Note that it is the responsibility of the platform driver (or the acpi 5.0
* driver) to setup the irq related to the gpio in the struct i2c_board_info.
* The platform driver should also setup the gpio according to the device:
*
* A typical example is the following:
* irq = gpio_to_irq(intr_gpio);
* hkdk4412_i2c_devs5[0].irq = irq; // store the irq in i2c_board_info
* gpio_request(intr_gpio, "elan-irq");
* s3c_gpio_setpull(intr_gpio, S3C_GPIO_PULL_UP);
*/
struct i2c_hid_platform_data {
u16 hid_descriptor_address;
};
#endif /* __LINUX_I2C_HID_H */