1d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab#ifndef _IR_I2C
2d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab#define _IR_I2C
3d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab
46bda96447cef24fbf97a798b1ea664224d5fdc25Mauro Carvalho Chehab#include <media/rc-core.h>
5d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab
6c72ba8e6ae7376d20e509a9a54a2dd45fb483fc2Mauro Carvalho Chehab#define DEFAULT_POLLING_INTERVAL	100	/* ms */
7c72ba8e6ae7376d20e509a9a54a2dd45fb483fc2Mauro Carvalho Chehab
8d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehabstruct IR_i2c;
9d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab
10d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehabstruct IR_i2c {
1102858eedcb78a664215b918d98cdb753ce432ce6Mauro Carvalho Chehab	char		       *ir_codes;
12c668f32dca105d876e51862a003a302fa61e4ae4Jean Delvare	struct i2c_client      *c;
13d8b4b5822f51e2142b731b42c81e3f03eec475b2David Härdeman	struct rc_dev          *rc;
1462c6503125389763a74911408d984c5dd09eeb97David Härdeman
15d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab	/* Used to avoid fast repeating */
16d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab	unsigned char          old;
17d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab
18c72ba8e6ae7376d20e509a9a54a2dd45fb483fc2Mauro Carvalho Chehab	u32                    polling_interval; /* in ms */
19c72ba8e6ae7376d20e509a9a54a2dd45fb483fc2Mauro Carvalho Chehab
20c1089bdc07f06b90f0bc50d0789c2a4833097df7Jean Delvare	struct delayed_work    work;
211df8e9861cf9fac5737ccb61c7f7fefa77711d40Jean Delvare	char                   name[32];
22d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab	char                   phys[32];
234dd9bb91bb5dc44e3f8c23c60a0ba432e50d7488David Härdeman	int                    (*get_key)(struct IR_i2c *ir, enum rc_type *protocol,
244dd9bb91bb5dc44e3f8c23c60a0ba432e50d7488David Härdeman					  u32 *scancode, u8 *toggle);
25d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab};
264d7a2d6721a6380d4ffc26d81d2c8232fd0d2dfcJean Delvare
271b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Wallsenum ir_kbd_get_key_fn {
281b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	IR_KBD_GET_KEY_CUSTOM = 0,
291b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	IR_KBD_GET_KEY_PIXELVIEW,
301b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	IR_KBD_GET_KEY_HAUP,
311b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	IR_KBD_GET_KEY_KNC1,
321b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	IR_KBD_GET_KEY_FUSIONHDTV,
331b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	IR_KBD_GET_KEY_HAUP_XVR,
341b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	IR_KBD_GET_KEY_AVERMEDIA_CARDBUS,
351b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls};
361b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls
374d7a2d6721a6380d4ffc26d81d2c8232fd0d2dfcJean Delvare/* Can be passed when instantiating an ir_video i2c device */
384d7a2d6721a6380d4ffc26d81d2c8232fd0d2dfcJean Delvarestruct IR_i2c_init_data {
3902858eedcb78a664215b918d98cdb753ce432ce6Mauro Carvalho Chehab	char			*ir_codes;
40c72ba8e6ae7376d20e509a9a54a2dd45fb483fc2Mauro Carvalho Chehab	const char		*name;
41c003ab1bedf028db15b0185b683d5c387204e8f5David Härdeman	u64			type; /* RC_BIT_RC5, etc */
42c72ba8e6ae7376d20e509a9a54a2dd45fb483fc2Mauro Carvalho Chehab	u32			polling_interval; /* 0 means DEFAULT_POLLING_INTERVAL */
4362c6503125389763a74911408d984c5dd09eeb97David Härdeman
441b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	/*
451b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	 * Specify either a function pointer or a value indicating one of
461b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	 * ir_kbd_i2c's internal get_key functions
471b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	 */
484dd9bb91bb5dc44e3f8c23c60a0ba432e50d7488David Härdeman	int                    (*get_key)(struct IR_i2c *ir, enum rc_type *protocol,
494dd9bb91bb5dc44e3f8c23c60a0ba432e50d7488David Härdeman					  u32 *scancode, u8 *toggle);
501b6e59e3f48eecdab97bdd1568422e22f7d2f4f5Andy Walls	enum ir_kbd_get_key_fn internal_get_key_func;
512eb258327722de3ed4d84ce1b9add2bad21a0ec4Mauro Carvalho Chehab
522eb258327722de3ed4d84ce1b9add2bad21a0ec4Mauro Carvalho Chehab	struct rc_dev		*rc_dev;
534d7a2d6721a6380d4ffc26d81d2c8232fd0d2dfcJean Delvare};
54d5e5265315770bda46c50ecaa64e2b9790f2064cMauro Carvalho Chehab#endif
55