Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
hid
hid-tivo.c
Go to the documentation of this file.
1
/*
2
* HID driver for TiVo Slide Bluetooth remote
3
*
4
* Copyright (c) 2011 Jarod Wilson <
[email protected]
>
5
* based on the hid-topseed driver, which is in turn, based on hid-cherry...
6
*/
7
8
/*
9
* This program is free software; you can redistribute it and/or modify it
10
* under the terms of the GNU General Public License as published by the Free
11
* Software Foundation; either version 2 of the License, or (at your option)
12
* any later version.
13
*/
14
15
#include <linux/device.h>
16
#include <linux/hid.h>
17
#include <linux/module.h>
18
19
#include "
hid-ids.h
"
20
21
#define HID_UP_TIVOVENDOR 0xffff0000
22
#define tivo_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, \
23
EV_KEY, (c))
24
25
static
int
tivo_input_mapping(
struct
hid_device
*hdev,
struct
hid_input
*hi,
26
struct
hid_field
*
field
,
struct
hid_usage
*
usage
,
27
unsigned
long
**
bit
,
int
*
max
)
28
{
29
switch
(usage->
hid
&
HID_USAGE_PAGE
) {
30
case
HID_UP_TIVOVENDOR
:
31
switch
(usage->
hid
&
HID_USAGE
) {
32
/* TiVo button */
33
case
0x3d:
tivo_map_key_clear
(
KEY_MEDIA
);
break
;
34
/* Live TV */
35
case
0x3e:
tivo_map_key_clear
(
KEY_TV
);
break
;
36
/* Red thumbs down */
37
case
0x41:
tivo_map_key_clear
(
KEY_KPMINUS
);
break
;
38
/* Green thumbs up */
39
case
0x42:
tivo_map_key_clear
(
KEY_KPPLUS
);
break
;
40
default
:
41
return
0;
42
}
43
break
;
44
case
HID_UP_CONSUMER
:
45
switch
(usage->
hid
&
HID_USAGE
) {
46
/* Enter/Last (default mapping: KEY_LAST) */
47
case
0x083:
tivo_map_key_clear
(
KEY_ENTER
);
break
;
48
/* Info (default mapping: KEY_PROPS) */
49
case
0x209:
tivo_map_key_clear
(
KEY_INFO
);
break
;
50
default
:
51
return
0;
52
}
53
break
;
54
default
:
55
return
0;
56
}
57
58
/* This means we found a matching mapping here, else, look in the
59
* standard hid mappings in hid-input.c */
60
return
1;
61
}
62
63
static
const
struct
hid_device_id
tivo_devices[] = {
64
/* TiVo Slide Bluetooth remote, pairs with a Broadcom dongle */
65
{
HID_BLUETOOTH_DEVICE
(
USB_VENDOR_ID_TIVO
,
USB_DEVICE_ID_TIVO_SLIDE_BT
) },
66
{
HID_USB_DEVICE
(
USB_VENDOR_ID_TIVO
,
USB_DEVICE_ID_TIVO_SLIDE
) },
67
{ }
68
};
69
MODULE_DEVICE_TABLE
(hid, tivo_devices);
70
71
static
struct
hid_driver
tivo_driver = {
72
.name =
"tivo_slide"
,
73
.id_table = tivo_devices,
74
.input_mapping = tivo_input_mapping,
75
};
76
77
static
int
__init
tivo_init(
void
)
78
{
79
return
hid_register_driver
(&tivo_driver);
80
}
81
82
static
void
__exit
tivo_exit(
void
)
83
{
84
hid_unregister_driver
(&tivo_driver);
85
}
86
87
module_init
(tivo_init);
88
module_exit
(tivo_exit);
89
MODULE_LICENSE
(
"GPL"
);
90
MODULE_AUTHOR
(
"Jarod Wilson <
[email protected]
>"
);
Generated on Thu Jan 10 2013 13:34:14 for Linux Kernel by
1.8.2