1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _IR_I2C |
3 | #define _IR_I2C |
4 | |
5 | #include <media/rc-core.h> |
6 | |
7 | #define DEFAULT_POLLING_INTERVAL 100 /* ms */ |
8 | |
9 | struct IR_i2c; |
10 | |
11 | struct IR_i2c { |
12 | char *ir_codes; |
13 | struct i2c_client *c; |
14 | struct rc_dev *rc; |
15 | |
16 | /* Used to avoid fast repeating */ |
17 | unsigned char old; |
18 | |
19 | u32 polling_interval; /* in ms */ |
20 | |
21 | struct delayed_work work; |
22 | char phys[32]; |
23 | int (*get_key)(struct IR_i2c *ir, |
24 | enum rc_proto *protocol, |
25 | u32 *scancode, u8 *toggle); |
26 | /* tx */ |
27 | struct i2c_client *tx_c; |
28 | struct mutex lock; /* do not poll Rx during Tx */ |
29 | unsigned int carrier; |
30 | unsigned int duty_cycle; |
31 | }; |
32 | |
33 | enum ir_kbd_get_key_fn { |
34 | IR_KBD_GET_KEY_CUSTOM = 0, |
35 | IR_KBD_GET_KEY_PIXELVIEW, |
36 | IR_KBD_GET_KEY_HAUP, |
37 | IR_KBD_GET_KEY_KNC1, |
38 | IR_KBD_GET_KEY_GENIATECH, |
39 | IR_KBD_GET_KEY_FUSIONHDTV, |
40 | IR_KBD_GET_KEY_HAUP_XVR, |
41 | IR_KBD_GET_KEY_AVERMEDIA_CARDBUS, |
42 | }; |
43 | |
44 | /* Can be passed when instantiating an ir_video i2c device */ |
45 | struct IR_i2c_init_data { |
46 | char *ir_codes; |
47 | const char *name; |
48 | u64 type; /* RC_PROTO_BIT_RC5, etc */ |
49 | u32 polling_interval; /* 0 means DEFAULT_POLLING_INTERVAL */ |
50 | |
51 | /* |
52 | * Specify either a function pointer or a value indicating one of |
53 | * ir_kbd_i2c's internal get_key functions |
54 | */ |
55 | int (*get_key)(struct IR_i2c *ir, |
56 | enum rc_proto *protocol, |
57 | u32 *scancode, u8 *toggle); |
58 | enum ir_kbd_get_key_fn internal_get_key_func; |
59 | |
60 | struct rc_dev *rc_dev; |
61 | }; |
62 | #endif |
63 | |