mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
[media] rc-core: improve ir-kbd-i2c get_key functions
The arguments used for ir-kbd-i2c's get_key() functions are not really suited for rc-core and the ir_raw/ir_key distinction is just confusing. Convert all of them to return a protocol/scancode/toggle triple instead. Signed-off-by: David Härdeman <david@hardeman.nu> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
2886f013c3
commit
4dd9bb91bb
@ -62,8 +62,8 @@ module_param(debug, int, 0644); /* debug level (0,1,2) */
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static int get_key_haup_common(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw,
|
||||
int size, int offset)
|
||||
static int get_key_haup_common(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *ptoggle, int size, int offset)
|
||||
{
|
||||
unsigned char buf[6];
|
||||
int start, range, toggle, dev, code, ircode;
|
||||
@ -86,19 +86,10 @@ static int get_key_haup_common(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw,
|
||||
if (!start)
|
||||
/* no key pressed */
|
||||
return 0;
|
||||
/*
|
||||
* Hauppauge remotes (black/silver) always use
|
||||
* specific device ids. If we do not filter the
|
||||
* device ids then messages destined for devices
|
||||
* such as TVs (id=0) will get through causing
|
||||
* mis-fired events.
|
||||
*
|
||||
* We also filter out invalid key presses which
|
||||
* produce annoying debug log entries.
|
||||
*/
|
||||
ircode= (start << 12) | (toggle << 11) | (dev << 6) | code;
|
||||
if ((ircode & 0x1fff)==0x1fff)
|
||||
/* invalid key press */
|
||||
|
||||
/* filter out invalid key presses */
|
||||
ircode = (start << 12) | (toggle << 11) | (dev << 6) | code;
|
||||
if ((ircode & 0x1fff) == 0x1fff)
|
||||
return 0;
|
||||
|
||||
if (!range)
|
||||
@ -107,18 +98,20 @@ static int get_key_haup_common(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw,
|
||||
dprintk(1,"ir hauppauge (rc5): s%d r%d t%d dev=%d code=%d\n",
|
||||
start, range, toggle, dev, code);
|
||||
|
||||
/* return key */
|
||||
*ir_key = (dev << 8) | code;
|
||||
*ir_raw = ircode;
|
||||
*protocol = RC_TYPE_RC5;
|
||||
*scancode = RC_SCANCODE_RC5(dev, code);
|
||||
*ptoggle = toggle;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int get_key_haup(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_haup(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
return get_key_haup_common (ir, ir_key, ir_raw, 3, 0);
|
||||
return get_key_haup_common (ir, protocol, scancode, toggle, 3, 0);
|
||||
}
|
||||
|
||||
static int get_key_haup_xvr(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_haup_xvr(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
int ret;
|
||||
unsigned char buf[1] = { 0 };
|
||||
@ -133,10 +126,11 @@ static int get_key_haup_xvr(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
if (ret != 1)
|
||||
return (ret < 0) ? ret : -EINVAL;
|
||||
|
||||
return get_key_haup_common (ir, ir_key, ir_raw, 6, 3);
|
||||
return get_key_haup_common(ir, protocol, scancode, toggle, 6, 3);
|
||||
}
|
||||
|
||||
static int get_key_pixelview(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_pixelview(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char b;
|
||||
|
||||
@ -145,12 +139,15 @@ static int get_key_pixelview(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
dprintk(1,"read error\n");
|
||||
return -EIO;
|
||||
}
|
||||
*ir_key = b;
|
||||
*ir_raw = b;
|
||||
|
||||
*protocol = RC_TYPE_OTHER;
|
||||
*scancode = b;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int get_key_fusionhdtv(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_fusionhdtv(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char buf[4];
|
||||
|
||||
@ -168,13 +165,14 @@ static int get_key_fusionhdtv(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
if(buf[0] != 0x1 || buf[1] != 0xfe)
|
||||
return 0;
|
||||
|
||||
*ir_key = buf[2];
|
||||
*ir_raw = (buf[2] << 8) | buf[3];
|
||||
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = buf[2];
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int get_key_knc1(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_knc1(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char b;
|
||||
|
||||
@ -197,13 +195,14 @@ static int get_key_knc1(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
/* keep old data */
|
||||
return 1;
|
||||
|
||||
*ir_key = b;
|
||||
*ir_raw = b;
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = b;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int get_key_avermedia_cardbus(struct IR_i2c *ir,
|
||||
u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_avermedia_cardbus(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char subaddr, key, keygroup;
|
||||
struct i2c_msg msg[] = { { .addr = ir->c->addr, .flags = 0,
|
||||
@ -237,12 +236,11 @@ static int get_key_avermedia_cardbus(struct IR_i2c *ir,
|
||||
}
|
||||
key |= (keygroup & 1) << 6;
|
||||
|
||||
*ir_key = key;
|
||||
*ir_raw = key;
|
||||
if (!strcmp(ir->ir_codes, RC_MAP_AVERMEDIA_M733A_RM_K6)) {
|
||||
*ir_key |= keygroup << 8;
|
||||
*ir_raw |= keygroup << 8;
|
||||
}
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = key;
|
||||
if (ir->c->addr == 0x41) /* AVerMedia EM78P153 */
|
||||
*scancode |= keygroup << 8;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -250,19 +248,21 @@ static int get_key_avermedia_cardbus(struct IR_i2c *ir,
|
||||
|
||||
static int ir_key_poll(struct IR_i2c *ir)
|
||||
{
|
||||
static u32 ir_key, ir_raw;
|
||||
enum rc_type protocol;
|
||||
u32 scancode;
|
||||
u8 toggle;
|
||||
int rc;
|
||||
|
||||
dprintk(3, "%s\n", __func__);
|
||||
rc = ir->get_key(ir, &ir_key, &ir_raw);
|
||||
rc = ir->get_key(ir, &protocol, &scancode, &toggle);
|
||||
if (rc < 0) {
|
||||
dprintk(2,"error\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (rc) {
|
||||
dprintk(1, "%s: keycode = 0x%04x\n", __func__, ir_key);
|
||||
rc_keydown(ir->rc, ir_key, 0);
|
||||
dprintk(1, "%s: scancode = 0x%08x\n", __func__, scancode);
|
||||
rc_keydown(ir->rc, scancode, toggle);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -327,7 +327,7 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
case 0x6b:
|
||||
name = "FusionHDTV";
|
||||
ir->get_key = get_key_fusionhdtv;
|
||||
rc_type = RC_BIT_RC5;
|
||||
rc_type = RC_BIT_UNKNOWN;
|
||||
ir_codes = RC_MAP_FUSIONHDTV_MCE;
|
||||
break;
|
||||
case 0x40:
|
||||
|
@ -336,7 +336,8 @@ static void bttv_ir_stop(struct bttv *btv)
|
||||
* Get_key functions used by I2C remotes
|
||||
*/
|
||||
|
||||
static int get_key_pv951(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_pv951(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char b;
|
||||
|
||||
@ -363,8 +364,9 @@ static int get_key_pv951(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
* the device is bound to the vendor-provided RC.
|
||||
*/
|
||||
|
||||
*ir_key = b;
|
||||
*ir_raw = b;
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = b;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -539,7 +539,8 @@ void cx88_ir_irq(struct cx88_core *core)
|
||||
ir_raw_event_handle(ir->dev);
|
||||
}
|
||||
|
||||
static int get_key_pvr2000(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_pvr2000(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
int flags, code;
|
||||
|
||||
@ -563,8 +564,9 @@ static int get_key_pvr2000(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
dprintk("IR Key/Flags: (0x%02x/0x%02x)\n",
|
||||
code & 0xff, flags & 0xff);
|
||||
|
||||
*ir_key = code & 0xff;
|
||||
*ir_raw = code;
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = code & 0xff;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -148,7 +148,8 @@ static const char * const hw_devicenames[] = {
|
||||
"ir_video", /* IVTV_HW_I2C_IR_RX_ADAPTEC */
|
||||
};
|
||||
|
||||
static int get_key_adaptec(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_adaptec(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char keybuf[4];
|
||||
|
||||
@ -167,9 +168,9 @@ static int get_key_adaptec(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
keybuf[2] &= 0x7f;
|
||||
keybuf[3] |= 0x80;
|
||||
|
||||
*ir_key = keybuf[3] | keybuf[2] << 8 | keybuf[1] << 16 |keybuf[0] << 24;
|
||||
*ir_raw = *ir_key;
|
||||
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = keybuf[3] | keybuf[2] << 8 | keybuf[1] << 16 |keybuf[0] << 24;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -108,7 +108,8 @@ static int build_key(struct saa7134_dev *dev)
|
||||
|
||||
/* --------------------- Chip specific I2C key builders ----------------- */
|
||||
|
||||
static int get_key_flydvb_trio(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_flydvb_trio(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
int gpio;
|
||||
int attempt = 0;
|
||||
@ -158,13 +159,14 @@ static int get_key_flydvb_trio(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
*ir_key = b;
|
||||
*ir_raw = b;
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = b;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, u32 *ir_key,
|
||||
u32 *ir_raw)
|
||||
static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char b;
|
||||
int gpio;
|
||||
@ -205,14 +207,15 @@ static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, u32 *ir_key,
|
||||
/* Button pressed */
|
||||
|
||||
dprintk("get_key_msi_tvanywhere_plus: Key = 0x%02X\n", b);
|
||||
*ir_key = b;
|
||||
*ir_raw = b;
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = b;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* copied and modified from get_key_msi_tvanywhere_plus() */
|
||||
static int get_key_kworld_pc150u(struct IR_i2c *ir, u32 *ir_key,
|
||||
u32 *ir_raw)
|
||||
static int get_key_kworld_pc150u(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char b;
|
||||
unsigned int gpio;
|
||||
@ -253,12 +256,14 @@ static int get_key_kworld_pc150u(struct IR_i2c *ir, u32 *ir_key,
|
||||
/* Button pressed */
|
||||
|
||||
dprintk("get_key_kworld_pc150u: Key = 0x%02X\n", b);
|
||||
*ir_key = b;
|
||||
*ir_raw = b;
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = b;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int get_key_purpletv(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_purpletv(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char b;
|
||||
|
||||
@ -276,12 +281,14 @@ static int get_key_purpletv(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
if (b & 0x80)
|
||||
return 1;
|
||||
|
||||
*ir_key = b;
|
||||
*ir_raw = b;
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = b;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int get_key_hvr1110(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_hvr1110(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char buf[5];
|
||||
|
||||
@ -299,14 +306,20 @@ static int get_key_hvr1110(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
* by preserving it into two separate readings
|
||||
* buf[4] bits 0 and 1, and buf[1] and buf[2] are always
|
||||
* zero.
|
||||
*
|
||||
* Note that the keymap which the hvr1110 uses is RC5.
|
||||
*
|
||||
* FIXME: start bits could maybe be used...?
|
||||
*/
|
||||
*ir_key = 0x1fff & ((buf[3] << 8) | (buf[4] >> 2));
|
||||
*ir_raw = *ir_key;
|
||||
*protocol = RC_TYPE_RC5;
|
||||
*scancode = RC_SCANCODE_RC5(buf[3] & 0x1f, buf[4] >> 2);
|
||||
*toggle = !!(buf[3] & 0x40);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static int get_key_beholdm6xx(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_beholdm6xx(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
unsigned char data[12];
|
||||
u32 gpio;
|
||||
@ -332,17 +345,18 @@ static int get_key_beholdm6xx(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
if (data[9] != (unsigned char)(~data[8]))
|
||||
return 0;
|
||||
|
||||
*ir_raw = ((data[10] << 16) | (data[11] << 8) | (data[9] << 0));
|
||||
*ir_key = *ir_raw;
|
||||
|
||||
*protocol = RC_TYPE_NEC;
|
||||
*scancode = RC_SCANCODE_NECX(((data[10] << 8) | data[11]), data[9]);
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Common (grey or coloured) pinnacle PCTV remote handling
|
||||
*
|
||||
*/
|
||||
static int get_key_pinnacle(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw,
|
||||
int parity_offset, int marker, int code_modulo)
|
||||
static int get_key_pinnacle(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle, int parity_offset,
|
||||
int marker, int code_modulo)
|
||||
{
|
||||
unsigned char b[4];
|
||||
unsigned int start = 0,parity = 0,code = 0;
|
||||
@ -377,11 +391,11 @@ static int get_key_pinnacle(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw,
|
||||
|
||||
code %= code_modulo;
|
||||
|
||||
*ir_raw = code;
|
||||
*ir_key = code;
|
||||
*protocol = RC_TYPE_UNKNOWN;
|
||||
*scancode = code;
|
||||
*toggle = 0;
|
||||
|
||||
i2cdprintk("Pinnacle PCTV key %02x\n", code);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -394,10 +408,11 @@ static int get_key_pinnacle(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw,
|
||||
*
|
||||
* Sylvain Pasche <sylvain.pasche@gmail.com>
|
||||
*/
|
||||
static int get_key_pinnacle_grey(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_pinnacle_grey(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
|
||||
return get_key_pinnacle(ir, ir_key, ir_raw, 1, 0xfe, 0xff);
|
||||
return get_key_pinnacle(ir, protocol, scancode, toggle, 1, 0xfe, 0xff);
|
||||
}
|
||||
|
||||
|
||||
@ -405,7 +420,8 @@ static int get_key_pinnacle_grey(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
*
|
||||
* Ricardo Cerqueira <v4l@cerqueira.org>
|
||||
*/
|
||||
static int get_key_pinnacle_color(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
static int get_key_pinnacle_color(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle)
|
||||
{
|
||||
/* code_modulo parameter (0x88) is used to reduce code value to fit inside IR_KEYTAB_SIZE
|
||||
*
|
||||
@ -413,7 +429,7 @@ static int get_key_pinnacle_color(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
* codes < 128
|
||||
*/
|
||||
|
||||
return get_key_pinnacle(ir, ir_key, ir_raw, 2, 0x80, 0x88);
|
||||
return get_key_pinnacle(ir, protocol, scancode, toggle, 2, 0x80, 0x88);
|
||||
}
|
||||
|
||||
void saa7134_input_irq(struct saa7134_dev *dev)
|
||||
|
@ -21,11 +21,12 @@
|
||||
#include "cx231xx.h"
|
||||
#include <linux/usb.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/bitrev.h>
|
||||
|
||||
#define MODULE_NAME "cx231xx-input"
|
||||
|
||||
static int get_key_isdbt(struct IR_i2c *ir, u32 *ir_key,
|
||||
u32 *ir_raw)
|
||||
static int get_key_isdbt(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *pscancode, u8 *toggle)
|
||||
{
|
||||
int rc;
|
||||
u8 cmd, scancode;
|
||||
@ -46,21 +47,14 @@ static int get_key_isdbt(struct IR_i2c *ir, u32 *ir_key,
|
||||
if (cmd == 0xff)
|
||||
return 0;
|
||||
|
||||
scancode =
|
||||
((cmd & 0x01) ? 0x80 : 0) |
|
||||
((cmd & 0x02) ? 0x40 : 0) |
|
||||
((cmd & 0x04) ? 0x20 : 0) |
|
||||
((cmd & 0x08) ? 0x10 : 0) |
|
||||
((cmd & 0x10) ? 0x08 : 0) |
|
||||
((cmd & 0x20) ? 0x04 : 0) |
|
||||
((cmd & 0x40) ? 0x02 : 0) |
|
||||
((cmd & 0x80) ? 0x01 : 0);
|
||||
scancode = bitrev8(cmd);
|
||||
|
||||
dev_dbg(&ir->rc->input_dev->dev, "cmd %02x, scan = %02x\n",
|
||||
cmd, scancode);
|
||||
|
||||
*ir_key = scancode;
|
||||
*ir_raw = scancode;
|
||||
*protocol = RC_TYPE_OTHER;
|
||||
*pscancode = scancode;
|
||||
*toggle = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,8 @@ struct IR_i2c {
|
||||
struct delayed_work work;
|
||||
char name[32];
|
||||
char phys[32];
|
||||
int (*get_key)(struct IR_i2c*, u32*, u32*);
|
||||
int (*get_key)(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle);
|
||||
};
|
||||
|
||||
enum ir_kbd_get_key_fn {
|
||||
@ -44,7 +45,8 @@ struct IR_i2c_init_data {
|
||||
* 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*, u32*, u32*);
|
||||
int (*get_key)(struct IR_i2c *ir, enum rc_type *protocol,
|
||||
u32 *scancode, u8 *toggle);
|
||||
enum ir_kbd_get_key_fn internal_get_key_func;
|
||||
|
||||
struct rc_dev *rc_dev;
|
||||
|
@ -62,6 +62,16 @@ enum rc_type {
|
||||
RC_BIT_RC6_0 | RC_BIT_RC6_6A_20 | RC_BIT_RC6_6A_24 | \
|
||||
RC_BIT_RC6_6A_32 | RC_BIT_RC6_MCE | RC_BIT_SHARP)
|
||||
|
||||
#define RC_SCANCODE_UNKNOWN(x) (x)
|
||||
#define RC_SCANCODE_OTHER(x) (x)
|
||||
#define RC_SCANCODE_NEC(addr, cmd) (((addr) << 8) | (cmd))
|
||||
#define RC_SCANCODE_NECX(addr, cmd) (((addr) << 8) | (cmd))
|
||||
#define RC_SCANCODE_NEC32(data) ((data) & 0xffffffff)
|
||||
#define RC_SCANCODE_RC5(sys, cmd) (((sys) << 8) | (cmd))
|
||||
#define RC_SCANCODE_RC5_SZ(sys, cmd) (((sys) << 8) | (cmd))
|
||||
#define RC_SCANCODE_RC6_0(sys, cmd) (((sys) << 8) | (cmd))
|
||||
#define RC_SCANCODE_RC6_6A(vendor, sys, cmd) (((vendor) << 16) | ((sys) << 8) | (cmd))
|
||||
|
||||
struct rc_map_table {
|
||||
u32 scancode;
|
||||
u32 keycode;
|
||||
|
Loading…
Reference in New Issue
Block a user