linux/include/media/i2c/ir-kbd-i2c.h
<<
>>
Prefs
   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
   9struct IR_i2c;
  10
  11struct 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
  33enum 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_FUSIONHDTV,
  39        IR_KBD_GET_KEY_HAUP_XVR,
  40        IR_KBD_GET_KEY_AVERMEDIA_CARDBUS,
  41};
  42
  43/* Can be passed when instantiating an ir_video i2c device */
  44struct IR_i2c_init_data {
  45        char                    *ir_codes;
  46        const char              *name;
  47        u64                     type; /* RC_PROTO_BIT_RC5, etc */
  48        u32                     polling_interval; /* 0 means DEFAULT_POLLING_INTERVAL */
  49
  50        /*
  51         * Specify either a function pointer or a value indicating one of
  52         * ir_kbd_i2c's internal get_key functions
  53         */
  54        int                    (*get_key)(struct IR_i2c *ir,
  55                                          enum rc_proto *protocol,
  56                                          u32 *scancode, u8 *toggle);
  57        enum ir_kbd_get_key_fn internal_get_key_func;
  58
  59        struct rc_dev           *rc_dev;
  60};
  61#endif
  62