diff options
Diffstat (limited to 'drivers/media/video/em28xx')
-rw-r--r-- | drivers/media/video/em28xx/em28xx-cards.c | 2 | ||||
-rw-r--r-- | drivers/media/video/em28xx/em28xx-input.c | 18 |
2 files changed, 16 insertions, 4 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c index ed5acc3a2b5a..82da205047be 100644 --- a/drivers/media/video/em28xx/em28xx-cards.c +++ b/drivers/media/video/em28xx/em28xx-cards.c | |||
@@ -837,7 +837,7 @@ struct em28xx_board em28xx_boards[] = { | |||
837 | .mts_firmware = 1, | 837 | .mts_firmware = 1, |
838 | .has_dvb = 1, | 838 | .has_dvb = 1, |
839 | .dvb_gpio = hauppauge_wintv_hvr_900_digital, | 839 | .dvb_gpio = hauppauge_wintv_hvr_900_digital, |
840 | .ir_codes = &ir_codes_hauppauge_new_table, | 840 | .ir_codes = &ir_codes_rc5_hauppauge_new_table, |
841 | .decoder = EM28XX_TVP5150, | 841 | .decoder = EM28XX_TVP5150, |
842 | .input = { { | 842 | .input = { { |
843 | .type = EM28XX_VMUX_TELEVISION, | 843 | .type = EM28XX_VMUX_TELEVISION, |
diff --git a/drivers/media/video/em28xx/em28xx-input.c b/drivers/media/video/em28xx/em28xx-input.c index 990ee04bbd5e..5550de9c669f 100644 --- a/drivers/media/video/em28xx/em28xx-input.c +++ b/drivers/media/video/em28xx/em28xx-input.c | |||
@@ -70,6 +70,7 @@ struct em28xx_IR { | |||
70 | int polling; | 70 | int polling; |
71 | struct delayed_work work; | 71 | struct delayed_work work; |
72 | unsigned int last_toggle:1; | 72 | unsigned int last_toggle:1; |
73 | unsigned int full_code:1; | ||
73 | unsigned int last_readcount; | 74 | unsigned int last_readcount; |
74 | unsigned int repeat_interval; | 75 | unsigned int repeat_interval; |
75 | 76 | ||
@@ -246,9 +247,10 @@ static void em28xx_ir_handle_key(struct em28xx_IR *ir) | |||
246 | return; | 247 | return; |
247 | } | 248 | } |
248 | 249 | ||
249 | dprintk("ir->get_key result tb=%02x rc=%02x lr=%02x data=%02x\n", | 250 | dprintk("ir->get_key result tb=%02x rc=%02x lr=%02x data=%02x%02x\n", |
250 | poll_result.toggle_bit, poll_result.read_count, | 251 | poll_result.toggle_bit, poll_result.read_count, |
251 | ir->last_readcount, poll_result.rc_data[0]); | 252 | ir->last_readcount, poll_result.rc_address, |
253 | poll_result.rc_data[0]); | ||
252 | 254 | ||
253 | if (ir->dev->chip_id == CHIP_ID_EM2874) { | 255 | if (ir->dev->chip_id == CHIP_ID_EM2874) { |
254 | /* The em2874 clears the readcount field every time the | 256 | /* The em2874 clears the readcount field every time the |
@@ -282,7 +284,15 @@ static void em28xx_ir_handle_key(struct em28xx_IR *ir) | |||
282 | 284 | ||
283 | if (do_sendkey) { | 285 | if (do_sendkey) { |
284 | dprintk("sending keypress\n"); | 286 | dprintk("sending keypress\n"); |
285 | ir_input_keydown(ir->input, &ir->ir, poll_result.rc_data[0]); | 287 | |
288 | if (ir->full_code) | ||
289 | ir_input_keydown(ir->input, &ir->ir, | ||
290 | poll_result.rc_address << 8 | | ||
291 | poll_result.rc_data[0]); | ||
292 | else | ||
293 | ir_input_keydown(ir->input, &ir->ir, | ||
294 | poll_result.rc_data[0]); | ||
295 | |||
286 | ir_input_nokey(ir->input, &ir->ir); | 296 | ir_input_nokey(ir->input, &ir->ir); |
287 | } | 297 | } |
288 | 298 | ||
@@ -332,6 +342,8 @@ int em28xx_ir_init(struct em28xx *dev) | |||
332 | switch (dev->chip_id) { | 342 | switch (dev->chip_id) { |
333 | case CHIP_ID_EM2860: | 343 | case CHIP_ID_EM2860: |
334 | case CHIP_ID_EM2883: | 344 | case CHIP_ID_EM2883: |
345 | if (dev->model == EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950) | ||
346 | ir->full_code = 1; | ||
335 | ir->get_key = default_polling_getkey; | 347 | ir->get_key = default_polling_getkey; |
336 | break; | 348 | break; |
337 | case CHIP_ID_EM2874: | 349 | case CHIP_ID_EM2874: |