Commit a469585b authored by David Härdeman's avatar David Härdeman Committed by Mauro Carvalho Chehab

V4L/DVB: ir-core: convert em28xx to not use ir-functions.c

Convert drivers/media/video/em28xx/em28xx-input.c to not use ir-functions.c
Signed-off-by: default avatarDavid Härdeman <david@hardeman.nu>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent f0bdee26
...@@ -65,17 +65,14 @@ struct em28xx_ir_poll_result { ...@@ -65,17 +65,14 @@ struct em28xx_ir_poll_result {
struct em28xx_IR { struct em28xx_IR {
struct em28xx *dev; struct em28xx *dev;
struct input_dev *input; struct input_dev *input;
struct ir_input_state ir;
char name[32]; char name[32];
char phys[32]; char phys[32];
/* poll external decoder */ /* poll external decoder */
int polling; int polling;
struct delayed_work work; struct delayed_work work;
unsigned int last_toggle:1;
unsigned int full_code:1; unsigned int full_code:1;
unsigned int last_readcount; unsigned int last_readcount;
unsigned int repeat_interval;
int (*get_key)(struct em28xx_IR *, struct em28xx_ir_poll_result *); int (*get_key)(struct em28xx_IR *, struct em28xx_ir_poll_result *);
...@@ -291,7 +288,6 @@ static int em2874_polling_getkey(struct em28xx_IR *ir, ...@@ -291,7 +288,6 @@ static int em2874_polling_getkey(struct em28xx_IR *ir,
static void em28xx_ir_handle_key(struct em28xx_IR *ir) static void em28xx_ir_handle_key(struct em28xx_IR *ir)
{ {
int result; int result;
int do_sendkey = 0;
struct em28xx_ir_poll_result poll_result; struct em28xx_ir_poll_result poll_result;
/* read the registers containing the IR status */ /* read the registers containing the IR status */
...@@ -306,52 +302,28 @@ static void em28xx_ir_handle_key(struct em28xx_IR *ir) ...@@ -306,52 +302,28 @@ static void em28xx_ir_handle_key(struct em28xx_IR *ir)
ir->last_readcount, poll_result.rc_address, ir->last_readcount, poll_result.rc_address,
poll_result.rc_data[0]); poll_result.rc_data[0]);
if (ir->dev->chip_id == CHIP_ID_EM2874) { if (poll_result.read_count > 0 &&
poll_result.read_count != ir->last_readcount) {
if (ir->full_code)
ir_keydown(ir->input,
poll_result.rc_address << 8 |
poll_result.rc_data[0],
poll_result.toggle_bit);
else
ir_keydown(ir->input,
poll_result.rc_data[0],
poll_result.toggle_bit);
}
if (ir->dev->chip_id == CHIP_ID_EM2874)
/* The em2874 clears the readcount field every time the /* The em2874 clears the readcount field every time the
register is read. The em2860/2880 datasheet says that it register is read. The em2860/2880 datasheet says that it
is supposed to clear the readcount, but it doesn't. So with is supposed to clear the readcount, but it doesn't. So with
the em2874, we are looking for a non-zero read count as the em2874, we are looking for a non-zero read count as
opposed to a readcount that is incrementing */ opposed to a readcount that is incrementing */
ir->last_readcount = 0; ir->last_readcount = 0;
} else
ir->last_readcount = poll_result.read_count;
if (poll_result.read_count == 0) {
/* The button has not been pressed since the last read */
} else if (ir->last_toggle != poll_result.toggle_bit) {
/* A button has been pressed */
dprintk("button has been pressed\n");
ir->last_toggle = poll_result.toggle_bit;
ir->repeat_interval = 0;
do_sendkey = 1;
} else if (poll_result.toggle_bit == ir->last_toggle &&
poll_result.read_count > 0 &&
poll_result.read_count != ir->last_readcount) {
/* The button is still being held down */
dprintk("button being held down\n");
/* Debouncer for first keypress */
if (ir->repeat_interval++ > 9) {
/* Start repeating after 1 second */
do_sendkey = 1;
}
}
if (do_sendkey) {
dprintk("sending keypress\n");
if (ir->full_code)
ir_input_keydown(ir->input, &ir->ir,
poll_result.rc_address << 8 |
poll_result.rc_data[0]);
else
ir_input_keydown(ir->input, &ir->ir,
poll_result.rc_data[0]);
ir_input_nokey(ir->input, &ir->ir);
}
ir->last_readcount = poll_result.read_count;
return;
} }
static void em28xx_ir_work(struct work_struct *work) static void em28xx_ir_work(struct work_struct *work)
...@@ -466,11 +438,6 @@ int em28xx_ir_init(struct em28xx *dev) ...@@ -466,11 +438,6 @@ int em28xx_ir_init(struct em28xx *dev)
usb_make_path(dev->udev, ir->phys, sizeof(ir->phys)); usb_make_path(dev->udev, ir->phys, sizeof(ir->phys));
strlcat(ir->phys, "/input0", sizeof(ir->phys)); strlcat(ir->phys, "/input0", sizeof(ir->phys));
/* Set IR protocol */
err = ir_input_init(input_dev, &ir->ir, IR_TYPE_OTHER);
if (err < 0)
goto err_out_free;
input_dev->name = ir->name; input_dev->name = ir->name;
input_dev->phys = ir->phys; input_dev->phys = ir->phys;
input_dev->id.bustype = BUS_USB; input_dev->id.bustype = BUS_USB;
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <media/ir-kbd-i2c.h> #include <media/ir-kbd-i2c.h>
#include <media/ir-core.h>
#if defined(CONFIG_VIDEO_EM28XX_DVB) || defined(CONFIG_VIDEO_EM28XX_DVB_MODULE) #if defined(CONFIG_VIDEO_EM28XX_DVB) || defined(CONFIG_VIDEO_EM28XX_DVB_MODULE)
#include <media/videobuf-dvb.h> #include <media/videobuf-dvb.h>
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment