/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _IR_I2C
#define _IR_I2C

#include <media/rc-core.h>

#define DEFAULT_POLLING_INTERVAL	100	/* ms */

struct IR_i2c;

struct IR_i2c {
	char		       *ir_codes;
	struct i2c_client      *c;
	struct rc_dev          *rc;

	/* Used to avoid fast repeating */
	unsigned char          old;

	u32                    polling_interval; /* in ms */

	struct delayed_work    work;
	char                   phys[32];
	int                    (*get_key)(struct IR_i2c *ir,
					  enum rc_proto *protocol,
					  u32 *scancode, u8 *toggle);
	/* tx */
	struct i2c_client      *tx_c;
	struct mutex	       lock;	/* do not poll Rx during Tx */
	unsigned int	       carrier;
	unsigned int	       duty_cycle;
};

enum ir_kbd_get_key_fn {
	IR_KBD_GET_KEY_CUSTOM = 0,
	IR_KBD_GET_KEY_PIXELVIEW,
	IR_KBD_GET_KEY_HAUP,
	IR_KBD_GET_KEY_KNC1,
	IR_KBD_GET_KEY_FUSIONHDTV,
	IR_KBD_GET_KEY_HAUP_XVR,
	IR_KBD_GET_KEY_AVERMEDIA_CARDBUS,
};

/* Can be passed when instantiating an ir_video i2c device */
struct IR_i2c_init_data {
	char			*ir_codes;
	const char		*name;
	u64			type; /* RC_PROTO_BIT_RC5, etc */
	u32			polling_interval; /* 0 means DEFAULT_POLLING_INTERVAL */

	/*
	 * Specify either a function pointer or a value indicating one of
	 * ir_kbd_i2c's internal get_key functions
	 */
	int                    (*get_key)(struct IR_i2c *ir,
					  enum rc_proto *protocol,
					  u32 *scancode, u8 *toggle);
	enum ir_kbd_get_key_fn internal_get_key_func;

	struct rc_dev		*rc_dev;
};
#endif
