Skip to content

Commit

Permalink
HID: uhid: introduce user-space I/O driver support for HID
Browse files Browse the repository at this point in the history
This adds a dummy driver that will support user-space I/O drivers for the
HID subsystem. This allows to write transport-level drivers like USB-HID
and Bluetooth-HID in user-space.

Low-Energy Bluetooth needs this to feed HID data that is parsed in
user-space back into the kernel.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
David Herrmann authored and Jiri Kosina committed Jun 18, 2012
1 parent 3c2c4b7 commit 1ccd7a2
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 0 deletions.
21 changes: 21 additions & 0 deletions drivers/hid/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,27 @@ config HIDRAW

If unsure, say Y.

config UHID
tristate "User-space I/O driver support for HID subsystem"
depends on HID
default n
---help---
Say Y here if you want to provide HID I/O Drivers from user-space.
This allows to write I/O drivers in user-space and feed the data from
the device into the kernel. The kernel parses the HID reports, loads the
corresponding HID Device Driver or provides input devices on top of your
user-space device.

This driver cannot be used to parse HID-reports in user-space and write
special HID-drivers. You should use hidraw for that.
Instead, this driver allows to write the transport-layer driver in
user-space like USB-HID and Bluetooth-HID do in kernel-space.

If unsure, say N.

To compile this driver as a module, choose M here: the
module will be called uhid.

source "drivers/hid/usbhid/Kconfig"

menu "Special HID drivers"
Expand Down
1 change: 1 addition & 0 deletions drivers/hid/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ ifdef CONFIG_DEBUG_FS
endif

obj-$(CONFIG_HID) += hid.o
obj-$(CONFIG_UHID) += uhid.o

obj-$(CONFIG_HID_GENERIC) += hid-generic.o

Expand Down
88 changes: 88 additions & 0 deletions drivers/hid/uhid.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
* User-space I/O driver support for HID subsystem
* Copyright (c) 2012 David Herrmann
*/

/*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*/

#include <linux/atomic.h>
#include <linux/device.h>
#include <linux/fs.h>
#include <linux/hid.h>
#include <linux/input.h>
#include <linux/miscdevice.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/poll.h>
#include <linux/sched.h>
#include <linux/spinlock.h>
#include <linux/uhid.h>
#include <linux/wait.h>

#define UHID_NAME "uhid"

static struct miscdevice uhid_misc;

static int uhid_char_open(struct inode *inode, struct file *file)
{
return 0;
}

static int uhid_char_release(struct inode *inode, struct file *file)
{
return 0;
}

static ssize_t uhid_char_read(struct file *file, char __user *buffer,
size_t count, loff_t *ppos)
{
return 0;
}

static ssize_t uhid_char_write(struct file *file, const char __user *buffer,
size_t count, loff_t *ppos)
{
return 0;
}

static unsigned int uhid_char_poll(struct file *file, poll_table *wait)
{
return 0;
}

static const struct file_operations uhid_fops = {
.owner = THIS_MODULE,
.open = uhid_char_open,
.release = uhid_char_release,
.read = uhid_char_read,
.write = uhid_char_write,
.poll = uhid_char_poll,
.llseek = no_llseek,
};

static struct miscdevice uhid_misc = {
.fops = &uhid_fops,
.minor = MISC_DYNAMIC_MINOR,
.name = UHID_NAME,
};

static int __init uhid_init(void)
{
return misc_register(&uhid_misc);
}

static void __exit uhid_exit(void)
{
misc_deregister(&uhid_misc);
}

module_init(uhid_init);
module_exit(uhid_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("David Herrmann <dh.herrmann@gmail.com>");
MODULE_DESCRIPTION("User-space I/O driver support for HID subsystem");

0 comments on commit 1ccd7a2

Please sign in to comment.