diff options
| -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: |
