Commit 4a200c3b authored by Benjamin Tissoires's avatar Benjamin Tissoires Committed by Jiri Kosina
Browse files

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

Microsoft published the protocol specification of HID over i2c:

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: default avatarBenjamin Tissoires <>
Signed-off-by: default avatarJiri Kosina <>
parent 1a1e8c6f
......@@ -728,4 +728,6 @@ endif # HID
source "drivers/hid/usbhid/Kconfig"
source "drivers/hid/i2c-hid/Kconfig"
......@@ -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/
menu "I2C HID support"
depends on I2C
config I2C_HID
tristate "HID over I2C transport layer"
default n
depends on I2C && INPUT
select HID
Say Y here if you want to use the HID over i2c protocol
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
# Makefile for the I2C input drivers
obj-$(CONFIG_I2C_HID) += i2c-hid.o
This diff is collapsed.
* HID over I2C protocol implementation
* Copyright (c) 2012 Benjamin Tissoires <>
* 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 */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment