V4L/DVB (3390): Added remote control support for pinnacle pctv

- Added remote control support for pinnacle pctv

Signed-off-by: Markus Rechberger <mrechberger@gmail.com>
Signed-off-by: Michael Krufky <mkrufky@m1k.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

authored by Markus Rechberger and committed by Mauro Carvalho Chehab 366cc64b 17c37efb

+77
+77
drivers/media/video/em28xx/em28xx-input.c
··· 76 [ 0x40 ] = KEY_ZOOM, 77 }; 78 79 /* ----------------------------------------------------------------------- */ 80 81 static int get_key_terratec(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) ··· 190 return 1; 191 } 192 193 /* ----------------------------------------------------------------------- */ 194 void em28xx_set_ir(struct em28xx * dev,struct IR_i2c *ir) 195 { ··· 233 snprintf(ir->c.name, sizeof(ir->c.name), "i2c IR (EM28XX Terratec)"); 234 break; 235 case (EM2820_BOARD_PINNACLE_USB_2): 236 break; 237 case (EM2820_BOARD_HAUPPAUGE_WINTV_USB_2): 238 ir->ir_codes = ir_codes_hauppauge_new;
··· 76 [ 0x40 ] = KEY_ZOOM, 77 }; 78 79 + static IR_KEYTAB_TYPE ir_codes_em_pinnacle_usb[IR_KEYTAB_SIZE] = { 80 + [ 0x3a ] = KEY_KP0, 81 + [ 0x31 ] = KEY_KP1, 82 + [ 0x32 ] = KEY_KP2, 83 + [ 0x33 ] = KEY_KP3, 84 + [ 0x34 ] = KEY_KP4, 85 + [ 0x35 ] = KEY_KP5, 86 + [ 0x36 ] = KEY_KP6, 87 + [ 0x37 ] = KEY_KP7, 88 + [ 0x38 ] = KEY_KP8, 89 + [ 0x39 ] = KEY_KP9, 90 + 91 + [ 0x2f ] = KEY_POWER, 92 + 93 + [ 0x2e ] = KEY_P, 94 + [ 0x1f ] = KEY_L, 95 + [ 0x2b ] = KEY_I, 96 + 97 + [ 0x2d ] = KEY_ZOOM, 98 + [ 0x1e ] = KEY_ZOOM, 99 + [ 0x1b ] = KEY_VOLUMEUP, 100 + [ 0x0f ] = KEY_VOLUMEDOWN, 101 + [ 0x17 ] = KEY_CHANNELUP, 102 + [ 0x1c ] = KEY_CHANNELDOWN, 103 + [ 0x25 ] = KEY_INFO, 104 + 105 + [ 0x3c ] = KEY_MUTE, 106 + 107 + [ 0x3d ] = KEY_LEFT, 108 + [ 0x3b ] = KEY_RIGHT, 109 + 110 + [ 0x3f ] = KEY_UP, 111 + [ 0x3e ] = KEY_DOWN, 112 + [ 0x1a ] = KEY_PAUSE, 113 + 114 + [ 0x1d ] = KEY_MENU, 115 + [ 0x19 ] = KEY_PLAY, 116 + [ 0x16 ] = KEY_REWIND, 117 + [ 0x13 ] = KEY_FORWARD, 118 + [ 0x15 ] = KEY_PAUSE, 119 + [ 0x0e ] = KEY_REWIND, 120 + [ 0x0d ] = KEY_PLAY, 121 + [ 0x0b ] = KEY_STOP, 122 + [ 0x07 ] = KEY_FORWARD, 123 + [ 0x27 ] = KEY_RECORD, 124 + [ 0x26 ] = KEY_TUNER, 125 + [ 0x29 ] = KEY_TEXT, 126 + [ 0x2a ] = KEY_MEDIA, 127 + [ 0x18 ] = KEY_EPG, 128 + [ 0x27 ] = KEY_RECORD, 129 + }; 130 + 131 /* ----------------------------------------------------------------------- */ 132 133 static int get_key_terratec(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) ··· 138 return 1; 139 } 140 141 + static int get_key_pinnacle_usb(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) 142 + { 143 + unsigned char buf[3]; 144 + 145 + /* poll IR chip */ 146 + 147 + if (3 != i2c_master_recv(&ir->c,buf,3)) { 148 + dprintk("read error\n"); 149 + return -EIO; 150 + } 151 + 152 + dprintk("key %02x\n", buf[2]&0x3f); 153 + if (buf[0]!=0x00){ 154 + return 0; 155 + } 156 + 157 + *ir_key = buf[2]&0x3f; 158 + *ir_raw = buf[2]&0x3f; 159 + 160 + return 1; 161 + } 162 + 163 /* ----------------------------------------------------------------------- */ 164 void em28xx_set_ir(struct em28xx * dev,struct IR_i2c *ir) 165 { ··· 159 snprintf(ir->c.name, sizeof(ir->c.name), "i2c IR (EM28XX Terratec)"); 160 break; 161 case (EM2820_BOARD_PINNACLE_USB_2): 162 + ir->ir_codes = ir_codes_em_pinnacle_usb; 163 + ir->get_key = get_key_pinnacle_usb; 164 + snprintf(ir->c.name, sizeof(ir->c.name), "i2c IR (EM28XX Pinnacle PCTV)"); 165 break; 166 case (EM2820_BOARD_HAUPPAUGE_WINTV_USB_2): 167 ir->ir_codes = ir_codes_hauppauge_new;