2019-05-27 09:55:01 +03:00
// SPDX-License-Identifier: GPL-2.0-or-later
2012-04-23 14:07:07 +04:00
/*
* 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
*/
/*
*/
# include <linux/module.h>
# include <linux/slab.h>
# include <linux/kernel.h>
# include <asm/unaligned.h>
# include <asm/byteorder.h>
# include <linux/hid.h>
2017-11-20 13:48:44 +03:00
static struct hid_driver hid_generic ;
static int __check_hid_generic ( struct device_driver * drv , void * data )
{
struct hid_driver * hdrv = to_hid_driver ( drv ) ;
struct hid_device * hdev = data ;
if ( hdrv = = & hid_generic )
return 0 ;
return hid_match_device ( hdev , hdrv ) ! = NULL ;
}
static bool hid_generic_match ( struct hid_device * hdev ,
bool ignore_special_driver )
{
if ( ignore_special_driver )
return true ;
if ( hdev - > quirks & HID_QUIRK_HAVE_SPECIAL_DRIVER )
return false ;
/*
* If any other driver wants the device , leave the device to this other
* driver .
*/
if ( bus_for_each_drv ( & hid_bus_type , NULL , hdev , __check_hid_generic ) )
return false ;
return true ;
}
2018-04-24 11:04:33 +03:00
static int hid_generic_probe ( struct hid_device * hdev ,
const struct hid_device_id * id )
{
int ret ;
hdev - > quirks | = HID_QUIRK_INPUT_PER_APP ;
ret = hid_parse ( hdev ) ;
if ( ret )
return ret ;
return hid_hw_start ( hdev , HID_CONNECT_DEFAULT ) ;
}
2012-04-23 14:07:07 +04:00
static const struct hid_device_id hid_table [ ] = {
2017-11-20 13:48:44 +03:00
{ HID_DEVICE ( HID_BUS_ANY , HID_GROUP_ANY , HID_ANY_ID , HID_ANY_ID ) } ,
2012-04-23 14:07:07 +04:00
{ }
} ;
MODULE_DEVICE_TABLE ( hid , hid_table ) ;
static struct hid_driver hid_generic = {
. name = " hid-generic " ,
. id_table = hid_table ,
2017-11-20 13:48:44 +03:00
. match = hid_generic_match ,
2018-04-24 11:04:33 +03:00
. probe = hid_generic_probe ,
2012-04-23 14:07:07 +04:00
} ;
2012-12-18 02:28:26 +04:00
module_hid_driver ( hid_generic ) ;
2012-04-23 14:07:07 +04:00
MODULE_AUTHOR ( " Henrik Rydberg " ) ;
MODULE_DESCRIPTION ( " HID generic driver " ) ;
MODULE_LICENSE ( " GPL " ) ;