18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _IR_I2C 38c2ecf20Sopenharmony_ci#define _IR_I2C 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <media/rc-core.h> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#define DEFAULT_POLLING_INTERVAL 100 /* ms */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_cistruct IR_i2c; 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistruct IR_i2c { 128c2ecf20Sopenharmony_ci char *ir_codes; 138c2ecf20Sopenharmony_ci struct i2c_client *c; 148c2ecf20Sopenharmony_ci struct rc_dev *rc; 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci /* Used to avoid fast repeating */ 178c2ecf20Sopenharmony_ci unsigned char old; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci u32 polling_interval; /* in ms */ 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci struct delayed_work work; 228c2ecf20Sopenharmony_ci char phys[32]; 238c2ecf20Sopenharmony_ci int (*get_key)(struct IR_i2c *ir, 248c2ecf20Sopenharmony_ci enum rc_proto *protocol, 258c2ecf20Sopenharmony_ci u32 *scancode, u8 *toggle); 268c2ecf20Sopenharmony_ci /* tx */ 278c2ecf20Sopenharmony_ci struct i2c_client *tx_c; 288c2ecf20Sopenharmony_ci struct mutex lock; /* do not poll Rx during Tx */ 298c2ecf20Sopenharmony_ci unsigned int carrier; 308c2ecf20Sopenharmony_ci unsigned int duty_cycle; 318c2ecf20Sopenharmony_ci}; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cienum ir_kbd_get_key_fn { 348c2ecf20Sopenharmony_ci IR_KBD_GET_KEY_CUSTOM = 0, 358c2ecf20Sopenharmony_ci IR_KBD_GET_KEY_PIXELVIEW, 368c2ecf20Sopenharmony_ci IR_KBD_GET_KEY_HAUP, 378c2ecf20Sopenharmony_ci IR_KBD_GET_KEY_KNC1, 388c2ecf20Sopenharmony_ci IR_KBD_GET_KEY_FUSIONHDTV, 398c2ecf20Sopenharmony_ci IR_KBD_GET_KEY_HAUP_XVR, 408c2ecf20Sopenharmony_ci IR_KBD_GET_KEY_AVERMEDIA_CARDBUS, 418c2ecf20Sopenharmony_ci}; 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci/* Can be passed when instantiating an ir_video i2c device */ 448c2ecf20Sopenharmony_cistruct IR_i2c_init_data { 458c2ecf20Sopenharmony_ci char *ir_codes; 468c2ecf20Sopenharmony_ci const char *name; 478c2ecf20Sopenharmony_ci u64 type; /* RC_PROTO_BIT_RC5, etc */ 488c2ecf20Sopenharmony_ci u32 polling_interval; /* 0 means DEFAULT_POLLING_INTERVAL */ 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci /* 518c2ecf20Sopenharmony_ci * Specify either a function pointer or a value indicating one of 528c2ecf20Sopenharmony_ci * ir_kbd_i2c's internal get_key functions 538c2ecf20Sopenharmony_ci */ 548c2ecf20Sopenharmony_ci int (*get_key)(struct IR_i2c *ir, 558c2ecf20Sopenharmony_ci enum rc_proto *protocol, 568c2ecf20Sopenharmony_ci u32 *scancode, u8 *toggle); 578c2ecf20Sopenharmony_ci enum ir_kbd_get_key_fn internal_get_key_func; 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci struct rc_dev *rc_dev; 608c2ecf20Sopenharmony_ci}; 618c2ecf20Sopenharmony_ci#endif 62