diff options
Diffstat (limited to 'drivers/media/video/cx88/cx88-input.c')
-rw-r--r-- | drivers/media/video/cx88/cx88-input.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c index c25564648993..83ebf7a3c054 100644 --- a/drivers/media/video/cx88/cx88-input.c +++ b/drivers/media/video/cx88/cx88-input.c | |||
@@ -107,7 +107,15 @@ static void cx88_ir_handle_key(struct cx88_IR *ir) | |||
107 | (gpio & ir->mask_keydown) ? " down" : "", | 107 | (gpio & ir->mask_keydown) ? " down" : "", |
108 | (gpio & ir->mask_keyup) ? " up" : ""); | 108 | (gpio & ir->mask_keyup) ? " up" : ""); |
109 | 109 | ||
110 | if (ir->mask_keydown) { | 110 | if (ir->core->board == CX88_BOARD_NORWOOD_MICRO) { |
111 | u32 gpio_key = cx_read(MO_GP0_IO); | ||
112 | |||
113 | data = (data << 4) | ((gpio_key & 0xf0) >> 4); | ||
114 | |||
115 | ir_input_keydown(ir->input, &ir->ir, data, data); | ||
116 | ir_input_nokey(ir->input, &ir->ir); | ||
117 | |||
118 | } else if (ir->mask_keydown) { | ||
111 | /* bit set on keydown */ | 119 | /* bit set on keydown */ |
112 | if (gpio & ir->mask_keydown) { | 120 | if (gpio & ir->mask_keydown) { |
113 | ir_input_keydown(ir->input, &ir->ir, data, data); | 121 | ir_input_keydown(ir->input, &ir->ir, data, data); |
@@ -187,6 +195,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
187 | case CX88_BOARD_HAUPPAUGE_NOVASE2_S1: | 195 | case CX88_BOARD_HAUPPAUGE_NOVASE2_S1: |
188 | case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: | 196 | case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: |
189 | case CX88_BOARD_HAUPPAUGE_HVR1100: | 197 | case CX88_BOARD_HAUPPAUGE_HVR1100: |
198 | case CX88_BOARD_HAUPPAUGE_HVR1300: | ||
190 | ir_codes = ir_codes_hauppauge_new; | 199 | ir_codes = ir_codes_hauppauge_new; |
191 | ir_type = IR_TYPE_RC5; | 200 | ir_type = IR_TYPE_RC5; |
192 | ir->sampling = 1; | 201 | ir->sampling = 1; |
@@ -248,6 +257,13 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
248 | ir_type = IR_TYPE_PD; | 257 | ir_type = IR_TYPE_PD; |
249 | ir->sampling = 0xff00; /* address */ | 258 | ir->sampling = 0xff00; /* address */ |
250 | break; | 259 | break; |
260 | case CX88_BOARD_NORWOOD_MICRO: | ||
261 | ir_codes = ir_codes_norwood; | ||
262 | ir->gpio_addr = MO_GP1_IO; | ||
263 | ir->mask_keycode = 0x0e; | ||
264 | ir->mask_keyup = 0x80; | ||
265 | ir->polling = 50; /* ms */ | ||
266 | break; | ||
251 | case CX88_BOARD_NPGTECH_REALTV_TOP10FM: | 267 | case CX88_BOARD_NPGTECH_REALTV_TOP10FM: |
252 | ir_codes = ir_codes_npgtech; | 268 | ir_codes = ir_codes_npgtech; |
253 | ir->gpio_addr = MO_GP0_IO; | 269 | ir->gpio_addr = MO_GP0_IO; |
@@ -402,6 +418,7 @@ void cx88_ir_irq(struct cx88_core *core) | |||
402 | case CX88_BOARD_HAUPPAUGE_NOVASE2_S1: | 418 | case CX88_BOARD_HAUPPAUGE_NOVASE2_S1: |
403 | case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: | 419 | case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: |
404 | case CX88_BOARD_HAUPPAUGE_HVR1100: | 420 | case CX88_BOARD_HAUPPAUGE_HVR1100: |
421 | case CX88_BOARD_HAUPPAUGE_HVR1300: | ||
405 | ircode = ir_decode_biphase(ir->samples, ir->scount, 5, 7); | 422 | ircode = ir_decode_biphase(ir->samples, ir->scount, 5, 7); |
406 | ir_dprintk("biphase decoded: %x\n", ircode); | 423 | ir_dprintk("biphase decoded: %x\n", ircode); |
407 | if ((ircode & 0xfffff000) != 0x3000) | 424 | if ((ircode & 0xfffff000) != 0x3000) |