Skip to content

Commit

Permalink
HID: Create a common generic driver
Browse files Browse the repository at this point in the history
Move the hid drivers of the bus drivers to a common generic hid
driver, and make it a proper module. This ought to simplify device
handling moving forward.

Cc: Gustavo Padovan <gustavo@padovan.org>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Henrik Rydberg authored and Jiri Kosina committed May 1, 2012
1 parent 4fa3a58 commit 8215d55
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 42 deletions.
12 changes: 12 additions & 0 deletions drivers/hid/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,18 @@ source "drivers/hid/usbhid/Kconfig"
menu "Special HID drivers"
depends on HID

config HID_GENERIC
tristate "Generic HID driver"
depends on HID
default y
---help---
Support for generic HID devices.

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

If unsure, say Y.

config HID_A4TECH
tristate "A4 tech mice" if EXPERT
depends on USB_HID
Expand Down
2 changes: 2 additions & 0 deletions drivers/hid/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ endif

obj-$(CONFIG_HID) += hid.o

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

hid-$(CONFIG_HIDRAW) += hidraw.o

hid-logitech-y := hid-lg.o
Expand Down
53 changes: 53 additions & 0 deletions drivers/hid/hid-generic.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* HID support for Linux
*
* Copyright (c) 1999 Andreas Gal
* Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
* Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
* Copyright (c) 2007-2008 Oliver Neukum
* Copyright (c) 2006-2012 Jiri Kosina
* Copyright (c) 2012 Henrik Rydberg
*/

/*
* 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/module.h>
#include <linux/slab.h>
#include <linux/kernel.h>
#include <asm/unaligned.h>
#include <asm/byteorder.h>

#include <linux/hid.h>

static const struct hid_device_id hid_table[] = {
{ HID_DEVICE(HID_BUS_ANY, HID_GROUP_GENERIC, HID_ANY_ID, HID_ANY_ID) },
{ }
};
MODULE_DEVICE_TABLE(hid, hid_table);

static struct hid_driver hid_generic = {
.name = "hid-generic",
.id_table = hid_table,
};

static int __init hid_init(void)
{
return hid_register_driver(&hid_generic);
}

static void __exit hid_exit(void)
{
hid_unregister_driver(&hid_generic);
}

module_init(hid_init);
module_exit(hid_exit);

MODULE_AUTHOR("Henrik Rydberg");
MODULE_DESCRIPTION("HID generic driver");
MODULE_LICENSE("GPL");
16 changes: 0 additions & 16 deletions drivers/hid/usbhid/hid-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1504,28 +1504,15 @@ static struct usb_driver hid_driver = {
.supports_autosuspend = 1,
};

static const struct hid_device_id hid_usb_table[] = {
{ HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, HID_ANY_ID, HID_ANY_ID) },
{ }
};

struct usb_interface *usbhid_find_interface(int minor)
{
return usb_find_interface(&hid_driver, minor);
}

static struct hid_driver hid_usb_driver = {
.name = "generic-usb",
.id_table = hid_usb_table,
};

static int __init hid_init(void)
{
int retval = -ENOMEM;

retval = hid_register_driver(&hid_usb_driver);
if (retval)
goto hid_register_fail;
retval = usbhid_quirks_init(quirks_param);
if (retval)
goto usbhid_quirks_init_fail;
Expand All @@ -1538,16 +1525,13 @@ static int __init hid_init(void)
usb_register_fail:
usbhid_quirks_exit();
usbhid_quirks_init_fail:
hid_unregister_driver(&hid_usb_driver);
hid_register_fail:
return retval;
}

static void __exit hid_exit(void)
{
usb_deregister(&hid_driver);
usbhid_quirks_exit();
hid_unregister_driver(&hid_usb_driver);
}

module_init(hid_init);
Expand Down
27 changes: 1 addition & 26 deletions net/bluetooth/hidp/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1195,41 +1195,16 @@ int hidp_get_conninfo(struct hidp_conninfo *ci)
return err;
}

static const struct hid_device_id hidp_table[] = {
{ HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_GENERIC, HID_ANY_ID, HID_ANY_ID) },
{ }
};

static struct hid_driver hidp_driver = {
.name = "generic-bluetooth",
.id_table = hidp_table,
};

static int __init hidp_init(void)
{
int ret;

BT_INFO("HIDP (Human Interface Emulation) ver %s", VERSION);

ret = hid_register_driver(&hidp_driver);
if (ret)
goto err;

ret = hidp_init_sockets();
if (ret)
goto err_drv;

return 0;
err_drv:
hid_unregister_driver(&hidp_driver);
err:
return ret;
return hidp_init_sockets();
}

static void __exit hidp_exit(void)
{
hidp_cleanup_sockets();
hid_unregister_driver(&hidp_driver);
}

module_init(hidp_init);
Expand Down

0 comments on commit 8215d55

Please sign in to comment.