Lines Matching +full:0 +full:x01008000
10 * 0xffdc iMON devices, and for sending me one to hack on, without
12 * also to the numerous 0xffdc device owners that tested auto-config
84 #define IMON_NO_FLAGS 0
100 bool dev_present_intf0; /* USB device presence, interface 0 */
140 bool pad_mouse; /* toggle kbd(0)/mouse(1) mode */
179 IMON_DISPLAY_TYPE_AUTO = 0,
187 IMON_KEY_IMON = 0,
208 { 0x000000000f00ffeell, KEY_MEDIA }, /* Go */
209 { 0x000000001200ffeell, KEY_UP },
210 { 0x000000001300ffeell, KEY_DOWN },
211 { 0x000000001400ffeell, KEY_LEFT },
212 { 0x000000001500ffeell, KEY_RIGHT },
213 { 0x000000001600ffeell, KEY_ENTER },
214 { 0x000000001700ffeell, KEY_ESC },
215 { 0x000000001f00ffeell, KEY_AUDIO },
216 { 0x000000002000ffeell, KEY_VIDEO },
217 { 0x000000002100ffeell, KEY_CAMERA },
218 { 0x000000002700ffeell, KEY_DVD },
219 { 0x000000002300ffeell, KEY_TV },
220 { 0x000000002b00ffeell, KEY_EXIT },
221 { 0x000000002c00ffeell, KEY_SELECT },
222 { 0x000000002d00ffeell, KEY_MENU },
223 { 0x000000000500ffeell, KEY_PREVIOUS },
224 { 0x000000000700ffeell, KEY_REWIND },
225 { 0x000000000400ffeell, KEY_STOP },
226 { 0x000000003c00ffeell, KEY_PLAYPAUSE },
227 { 0x000000000800ffeell, KEY_FASTFORWARD },
228 { 0x000000000600ffeell, KEY_NEXT },
229 { 0x000000010000ffeell, KEY_RIGHT },
230 { 0x000001000000ffeell, KEY_LEFT },
231 { 0x000000003d00ffeell, KEY_SELECT },
232 { 0x000100000000ffeell, KEY_VOLUMEUP },
233 { 0x010000000000ffeell, KEY_VOLUMEDOWN },
234 { 0x000000000100ffeell, KEY_MUTE },
235 /* 0xffdc iMON MCE VFD */
236 { 0x00010000ffffffeell, KEY_VOLUMEUP },
237 { 0x01000000ffffffeell, KEY_VOLUMEDOWN },
238 { 0x00000001ffffffeell, KEY_MUTE },
239 { 0x0000000fffffffeell, KEY_MEDIA },
240 { 0x00000012ffffffeell, KEY_UP },
241 { 0x00000013ffffffeell, KEY_DOWN },
242 { 0x00000014ffffffeell, KEY_LEFT },
243 { 0x00000015ffffffeell, KEY_RIGHT },
244 { 0x00000016ffffffeell, KEY_ENTER },
245 { 0x00000017ffffffeell, KEY_ESC },
247 { 0x000100ffffffffeell, KEY_VOLUMEUP },
248 { 0x010000ffffffffeell, KEY_VOLUMEDOWN },
249 { 0x000008ffffffffeell, KEY_MUTE },
250 { 0, KEY_RESERVED },
257 { 0x000000000f00ffeell, KEY_MEDIA }, /* Go */
258 { 0x000000001200ffeell, KEY_UP },
259 { 0x000000001300ffeell, KEY_DOWN },
260 { 0x000000001400ffeell, KEY_LEFT },
261 { 0x000000001500ffeell, KEY_RIGHT },
262 { 0x000000001600ffeell, KEY_ENTER },
263 { 0x000000001700ffeell, KEY_ESC },
264 { 0x000000001f00ffeell, KEY_AUDIO },
265 { 0x000000002b00ffeell, KEY_EXIT },
266 { 0x000000002c00ffeell, KEY_SELECT },
267 { 0x000000002d00ffeell, KEY_MENU },
268 { 0x000000000500ffeell, KEY_PREVIOUS },
269 { 0x000000000700ffeell, KEY_REWIND },
270 { 0x000000000400ffeell, KEY_STOP },
271 { 0x000000003c00ffeell, KEY_PLAYPAUSE },
272 { 0x000000000800ffeell, KEY_FASTFORWARD },
273 { 0x000000000600ffeell, KEY_NEXT },
274 { 0x000000010000ffeell, KEY_RIGHT },
275 { 0x000001000000ffeell, KEY_LEFT },
276 { 0x000000003d00ffeell, KEY_SELECT },
277 { 0x000100000000ffeell, KEY_VOLUMEUP },
278 { 0x010000000000ffeell, KEY_VOLUMEDOWN },
279 { 0x000000000100ffeell, KEY_MUTE },
280 /* 0xffdc iMON MCE VFD */
281 { 0x00010000ffffffeell, KEY_VOLUMEUP },
282 { 0x01000000ffffffeell, KEY_VOLUMEDOWN },
283 { 0x00000001ffffffeell, KEY_MUTE },
284 { 0x0000000fffffffeell, KEY_MEDIA },
285 { 0x00000012ffffffeell, KEY_UP },
286 { 0x00000013ffffffeell, KEY_DOWN },
287 { 0x00000014ffffffeell, KEY_LEFT },
288 { 0x00000015ffffffeell, KEY_RIGHT },
289 { 0x00000016ffffffeell, KEY_ENTER },
290 { 0x00000017ffffffeell, KEY_ESC },
292 { 0x000100ffffffffeell, KEY_VOLUMEUP },
293 { 0x010000ffffffffeell, KEY_VOLUMEDOWN },
294 { 0x000008ffffffffeell, KEY_MUTE },
295 { 0, KEY_RESERVED },
303 { 0x000100000000ffeell, KEY_VOLUMEUP },
304 { 0x010000000000ffeell, KEY_VOLUMEDOWN },
305 { 0x000000010000ffeell, KEY_MUTE },
306 { 0x0000000f0000ffeell, KEY_MEDIA },
307 { 0x000000120000ffeell, KEY_UP },
308 { 0x000000130000ffeell, KEY_DOWN },
309 { 0x000000140000ffeell, KEY_LEFT },
310 { 0x000000150000ffeell, KEY_RIGHT },
311 { 0x000000160000ffeell, KEY_ENTER },
312 { 0x000000170000ffeell, KEY_ESC },
313 { 0x0000002b0000ffeell, KEY_EXIT },
314 { 0x0000002c0000ffeell, KEY_SELECT },
315 { 0x0000002d0000ffeell, KEY_MENU },
316 { 0, KEY_RESERVED }
324 { 0x0000000f0000ffeell, KEY_MEDIA }, /* Go */
325 { 0x000000000100ffeell, KEY_UP },
326 { 0x000000000001ffeell, KEY_DOWN },
327 { 0x000000160000ffeell, KEY_ENTER },
328 { 0x0000001f0000ffeell, KEY_AUDIO }, /* Music */
329 { 0x000000200000ffeell, KEY_VIDEO }, /* Movie */
330 { 0x000000210000ffeell, KEY_CAMERA }, /* Photo */
331 { 0x000000270000ffeell, KEY_DVD }, /* DVD */
332 { 0x000000230000ffeell, KEY_TV }, /* TV */
333 { 0x000000050000ffeell, KEY_PREVIOUS }, /* Previous */
334 { 0x000000070000ffeell, KEY_REWIND },
335 { 0x000000040000ffeell, KEY_STOP },
336 { 0x000000020000ffeell, KEY_PLAYPAUSE },
337 { 0x000000080000ffeell, KEY_FASTFORWARD },
338 { 0x000000060000ffeell, KEY_NEXT }, /* Next */
339 { 0x000100000000ffeell, KEY_VOLUMEUP },
340 { 0x010000000000ffeell, KEY_VOLUMEDOWN },
341 { 0x000000010000ffeell, KEY_MUTE },
342 { 0, KEY_RESERVED },
350 * each new device until the 0x0034-0x0046 devices, which all use the same
353 * Samsung vendor ID (0x0aa8 and 0x04e8 respectively), while all later
354 * devices use the SoundGraph vendor ID (0x15c2). This driver only supports
364 { USB_DEVICE(0x15c2, 0xffdc),
373 { USB_DEVICE(0x15c2, 0x0034),
376 { USB_DEVICE(0x15c2, 0x0035),
379 { USB_DEVICE(0x15c2, 0x0036),
382 { USB_DEVICE(0x15c2, 0x0037),
385 { USB_DEVICE(0x15c2, 0x0038),
388 { USB_DEVICE(0x15c2, 0x0039),
391 { USB_DEVICE(0x15c2, 0x003a),
394 { USB_DEVICE(0x15c2, 0x003b),
397 { USB_DEVICE(0x15c2, 0x003c),
400 { USB_DEVICE(0x15c2, 0x003d),
403 { USB_DEVICE(0x15c2, 0x003e),
406 { USB_DEVICE(0x15c2, 0x003f),
409 { USB_DEVICE(0x15c2, 0x0040),
412 { USB_DEVICE(0x15c2, 0x0041),
415 { USB_DEVICE(0x15c2, 0x0042),
418 { USB_DEVICE(0x15c2, 0x0043),
421 { USB_DEVICE(0x15c2, 0x0044),
424 { USB_DEVICE(0x15c2, 0x0045),
427 { USB_DEVICE(0x15c2, 0x0046),
454 MODULE_PARM_DESC(debug, "Debug messages: 0=no, 1=yes (default: no)");
459 MODULE_PARM_DESC(display_type, "Type of attached display. 0=autodetect, 1=vfd, 2=lcd, 3=vga, 4=none…
463 …lize, "Apply stabilization algorithm to iMON PAD presses in arrow key mode. 0=disable, 1=enable (d…
471 MODULE_PARM_DESC(nomouse, "Disable mouse input device mode when IR device is open. 0=don't disable,…
500 int retval = 0; in display_open()
548 int retval = 0; in display_close()
583 int interval = 0; in send_packet()
584 int retval = 0; in send_packet()
598 ictx->tx_urb->actual_length = 0; in send_packet()
606 control_req->bRequestType = 0x21; in send_packet()
607 control_req->bRequest = 0x09; in send_packet()
608 control_req->wValue = cpu_to_le16(0x0200); in send_packet()
609 control_req->wIndex = cpu_to_le16(0x0001); in send_packet()
610 control_req->wLength = cpu_to_le16(0x0008); in send_packet()
612 /* control pipe is endpoint 0x00 */ in send_packet()
613 pipe = usb_sndctrlpipe(ictx->usbdev_intf0, 0); in send_packet()
621 ictx->tx_urb->actual_length = 0; in send_packet()
674 const unsigned char packet[8] = { 0x01, 0x00, 0x00, 0x00, in send_associate_24g()
675 0x00, 0x00, 0x00, 0x20 }; in send_associate_24g()
697 * day - 1..31, dow - day of the week (0-Sun...6-Sat),
698 * hour - 0..23, minute - 0..59, second - 0..59
707 int retval = 0; in send_set_imon_clock()
717 clock_enable_pkt[0][0] = 0x80; in send_set_imon_clock()
718 clock_enable_pkt[0][1] = year; in send_set_imon_clock()
719 clock_enable_pkt[0][2] = month-1; in send_set_imon_clock()
720 clock_enable_pkt[0][3] = day; in send_set_imon_clock()
721 clock_enable_pkt[0][4] = hour; in send_set_imon_clock()
722 clock_enable_pkt[0][5] = minute; in send_set_imon_clock()
723 clock_enable_pkt[0][6] = second; in send_set_imon_clock()
725 clock_enable_pkt[1][0] = 0x80; in send_set_imon_clock()
726 clock_enable_pkt[1][1] = 0; in send_set_imon_clock()
727 clock_enable_pkt[1][2] = 0; in send_set_imon_clock()
728 clock_enable_pkt[1][3] = 0; in send_set_imon_clock()
729 clock_enable_pkt[1][4] = 0; in send_set_imon_clock()
730 clock_enable_pkt[1][5] = 0; in send_set_imon_clock()
731 clock_enable_pkt[1][6] = 0; in send_set_imon_clock()
733 if (ictx->product == 0xffdc) { in send_set_imon_clock()
734 clock_enable_pkt[0][7] = 0x50; in send_set_imon_clock()
735 clock_enable_pkt[1][7] = 0x51; in send_set_imon_clock()
737 clock_enable_pkt[0][7] = 0x88; in send_set_imon_clock()
738 clock_enable_pkt[1][7] = 0x8a; in send_set_imon_clock()
744 clock_enable_pkt[0][0] = year; in send_set_imon_clock()
745 clock_enable_pkt[0][1] = month-1; in send_set_imon_clock()
746 clock_enable_pkt[0][2] = day; in send_set_imon_clock()
747 clock_enable_pkt[0][3] = dow; in send_set_imon_clock()
748 clock_enable_pkt[0][4] = hour; in send_set_imon_clock()
749 clock_enable_pkt[0][5] = minute; in send_set_imon_clock()
750 clock_enable_pkt[0][6] = second; in send_set_imon_clock()
751 clock_enable_pkt[0][7] = 0x40; in send_set_imon_clock()
753 clock_enable_pkt[1][0] = 0; in send_set_imon_clock()
754 clock_enable_pkt[1][1] = 0; in send_set_imon_clock()
756 clock_enable_pkt[1][3] = 0; in send_set_imon_clock()
757 clock_enable_pkt[1][4] = 0; in send_set_imon_clock()
758 clock_enable_pkt[1][5] = 0; in send_set_imon_clock()
759 clock_enable_pkt[1][6] = 0; in send_set_imon_clock()
760 clock_enable_pkt[1][7] = 0x42; in send_set_imon_clock()
768 for (i = 0; i < IMON_CLOCK_ENABLE_PACKETS; i++) { in send_set_imon_clock()
936 int retval = 0; in vfd_write()
939 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF }; in vfd_write()
955 if (n_bytes <= 0 || n_bytes > 32) { in vfd_write()
971 ictx->tx.data_buf[i] = 0xFF; in vfd_write()
973 offset = 0; in vfd_write()
974 seq = 0; in vfd_write()
1020 int retval = 0; in lcd_write()
1095 input_report_key(ictx->touch, BTN_TOUCH, 0x00); in imon_touch_display_timeout()
1120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86 }; in imon_ir_change_protocol()
1127 ir_proto_packet[0] = 0x01; in imon_ir_change_protocol()
1133 /* ir_proto_packet[0] = 0x00; // already the default */ in imon_ir_change_protocol()
1139 /* ir_proto_packet[0] = 0x00; // already the default */ in imon_ir_change_protocol()
1178 int result = 0; in stabilize()
1186 x = 0; in stabilize()
1187 y = 0; in stabilize()
1188 hits = 0; in stabilize()
1198 result = (y > 0) ? 0x7F : 0x80; in stabilize()
1200 result = (x > 0) ? 0x7F00 : 0x8000; in stabilize()
1202 x = 0; in stabilize()
1203 y = 0; in stabilize()
1210 case 0x7F: in stabilize()
1213 case 0x80: in stabilize()
1216 case 0x7F00: in stabilize()
1219 case 0x8000: in stabilize()
1226 result = 0; in stabilize()
1247 ictx->rc_toggle = 0x0; in imon_remote_key_lookup()
1252 release = scancode & ~0x4000; in imon_remote_key_lookup()
1267 #define MCE_KEY_MASK 0x7000 in imon_mce_key_lookup()
1268 #define MCE_TOGGLE_BIT 0x8000 in imon_mce_key_lookup()
1271 * On some receivers, mce keys decode to 0x8000f04xx and 0x8000f84xx in imon_mce_key_lookup()
1273 * on other receivers, we see 0x8000f74xx and 0x8000ff4xx. To keep in imon_mce_key_lookup()
1274 * the table trim, we always or in the bits to look up 0x8000ff4xx, in imon_mce_key_lookup()
1278 if (scancode & 0x80000000) in imon_mce_key_lookup()
1298 for (i = 0; key_table[i].hw_code != 0; i++) { in imon_panel_key_lookup()
1299 if (key_table[i].hw_code == (code | 0xffee)) { in imon_panel_key_lookup()
1311 signed char rel_x = 0x00, rel_y = 0x00; in imon_mouse_event()
1314 int dir = 0; in imon_mouse_event()
1320 if (ictx->product != 0xffdc && (buf[0] & 0x01) && len == 5) { in imon_mouse_event()
1324 /* 0xffdc iMON PAD or mouse button input */ in imon_mouse_event()
1325 } else if (ictx->product == 0xffdc && (buf[0] & 0x40) && in imon_mouse_event()
1326 !((buf[1] & 0x01) || ((buf[1] >> 2) & 0x01))) { in imon_mouse_event()
1327 rel_x = (buf[1] & 0x08) | (buf[1] & 0x10) >> 2 | in imon_mouse_event()
1328 (buf[1] & 0x20) >> 4 | (buf[1] & 0x40) >> 6; in imon_mouse_event()
1329 if (buf[0] & 0x02) in imon_mouse_event()
1330 rel_x |= ~0x0f; in imon_mouse_event()
1332 rel_y = (buf[2] & 0x08) | (buf[2] & 0x10) >> 2 | in imon_mouse_event()
1333 (buf[2] & 0x20) >> 4 | (buf[2] & 0x40) >> 6; in imon_mouse_event()
1334 if (buf[0] & 0x01) in imon_mouse_event()
1335 rel_y |= ~0x0f; in imon_mouse_event()
1339 } else if (ictx->product == 0xffdc && (buf[0] == 0x68)) { in imon_mouse_event()
1342 } else if (ictx->kc == KEY_CHANNELUP && (buf[2] & 0x40) != 0x40) { in imon_mouse_event()
1344 } else if (ictx->kc == KEY_CHANNELDOWN && (buf[2] & 0x40) != 0x40) { in imon_mouse_event()
1360 input_report_key(ictx->idev, BTN_LEFT, buf[1] & 0x1); in imon_mouse_event()
1362 buf[1] >> right_shift & 0x1); in imon_mouse_event()
1376 ictx->touch_x = (buf[0] << 4) | (buf[1] >> 4); in imon_touch_event()
1377 ictx->touch_y = 0xfff - ((buf[2] << 4) | (buf[1] & 0xf)); in imon_touch_event()
1380 input_report_key(ictx->touch, BTN_TOUCH, 0x01); in imon_touch_event()
1386 int dir = 0; in imon_pad_to_keys()
1387 signed char rel_x = 0x00, rel_y = 0x00; in imon_pad_to_keys()
1400 if (ictx->product != 0xffdc) { in imon_pad_to_keys()
1402 buf[5] = buf[6] = buf[7] = 0; in imon_pad_to_keys()
1410 if ((buf[1] == 0) && ((rel_x != 0) || (rel_y != 0))) { in imon_pad_to_keys()
1421 buf[2] = dir & 0xFF; in imon_pad_to_keys()
1422 buf[3] = (dir >> 8) & 0xFF; in imon_pad_to_keys()
1431 buf[2] = (rel_y > 0) ? 0x7F : 0x80; in imon_pad_to_keys()
1432 buf[3] = 0; in imon_pad_to_keys()
1433 if (rel_y > 0) in imon_pad_to_keys()
1434 scancode = 0x01007f00; /* KEY_DOWN */ in imon_pad_to_keys()
1436 scancode = 0x01008000; /* KEY_UP */ in imon_pad_to_keys()
1438 buf[2] = 0; in imon_pad_to_keys()
1439 buf[3] = (rel_x > 0) ? 0x7F : 0x80; in imon_pad_to_keys()
1440 if (rel_x > 0) in imon_pad_to_keys()
1441 scancode = 0x0100007f; /* KEY_RIGHT */ in imon_pad_to_keys()
1443 scancode = 0x01000080; /* KEY_LEFT */ in imon_pad_to_keys()
1450 * 0x68nnnnB7 to 0x6AnnnnB7, the left mouse button generates in imon_pad_to_keys()
1451 * 0x688301b7 and the right one 0x688481b7. All other keys generate in imon_pad_to_keys()
1452 * 0x2nnnnnnn. Position coordinate is encoded in buf[1] and buf[2] with in imon_pad_to_keys()
1455 * will be 0x01008000, 0x01007F00, which match the newer devices. in imon_pad_to_keys()
1463 rel_x = (buf[1] & 0x08) | (buf[1] & 0x10) >> 2 | in imon_pad_to_keys()
1464 (buf[1] & 0x20) >> 4 | (buf[1] & 0x40) >> 6; in imon_pad_to_keys()
1465 if (buf[0] & 0x02) in imon_pad_to_keys()
1466 rel_x |= ~0x10+1; in imon_pad_to_keys()
1468 rel_y = (buf[2] & 0x08) | (buf[2] & 0x10) >> 2 | in imon_pad_to_keys()
1469 (buf[2] & 0x20) >> 4 | (buf[2] & 0x40) >> 6; in imon_pad_to_keys()
1470 if (buf[0] & 0x01) in imon_pad_to_keys()
1471 rel_y |= ~0x10+1; in imon_pad_to_keys()
1473 buf[0] = 0x01; in imon_pad_to_keys()
1474 buf[1] = buf[4] = buf[5] = buf[6] = buf[7] = 0; in imon_pad_to_keys()
1485 buf[2] = dir & 0xFF; in imon_pad_to_keys()
1486 buf[3] = (dir >> 8) & 0xFF; in imon_pad_to_keys()
1494 buf[2] = (rel_y > 0) ? 0x7F : 0x80; in imon_pad_to_keys()
1495 buf[3] = 0; in imon_pad_to_keys()
1496 if (rel_y > 0) in imon_pad_to_keys()
1497 scancode = 0x01007f00; /* KEY_DOWN */ in imon_pad_to_keys()
1499 scancode = 0x01008000; /* KEY_UP */ in imon_pad_to_keys()
1501 buf[2] = 0; in imon_pad_to_keys()
1502 buf[3] = (rel_x > 0) ? 0x7F : 0x80; in imon_pad_to_keys()
1503 if (rel_x > 0) in imon_pad_to_keys()
1504 scancode = 0x0100007f; /* KEY_RIGHT */ in imon_pad_to_keys()
1506 scancode = 0x01000080; /* KEY_LEFT */ in imon_pad_to_keys()
1526 int press_type = 0; in imon_parse_press_type()
1531 /* key release of 0x02XXXXXX key */ in imon_parse_press_type()
1532 if (ictx->kc == KEY_RESERVED && buf[0] == 0x02 && buf[3] == 0x00) in imon_parse_press_type()
1535 /* mouse button release on (some) 0xffdc devices */ in imon_parse_press_type()
1536 else if (ictx->kc == KEY_RESERVED && buf[0] == 0x68 && buf[1] == 0x82 && in imon_parse_press_type()
1537 buf[2] == 0x81 && buf[3] == 0xb7) in imon_parse_press_type()
1540 /* mouse button release on (some other) 0xffdc devices */ in imon_parse_press_type()
1541 else if (ictx->kc == KEY_RESERVED && buf[0] == 0x01 && buf[1] == 0x00 && in imon_parse_press_type()
1542 buf[2] == 0x81 && buf[3] == 0xb7) in imon_parse_press_type()
1554 /* key release of 0xXXXXXXb7 key */ in imon_parse_press_type()
1556 press_type = 0; in imon_parse_press_type()
1579 int press_type = 0; in imon_incoming_packet()
1584 /* filter out junk data on the older 0xffdc imon devices */ in imon_incoming_packet()
1585 if ((buf[0] == 0xff) && (buf[1] == 0xff) && (buf[2] == 0xff)) in imon_incoming_packet()
1589 if (len == 8 && buf[7] == 0xee) { in imon_incoming_packet()
1598 if (buf[0] == 0x80) in imon_incoming_packet()
1627 if (ictx->touch && len == 8 && buf[7] == 0x86) { in imon_incoming_packet()
1638 if (((len == 5) && (buf[0] == 0x01) && (buf[4] == 0x00)) || in imon_incoming_packet()
1639 ((len == 8) && (buf[0] & 0x40) && in imon_incoming_packet()
1640 !(buf[1] & 0x1 || buf[1] >> 2 & 0x1))) { in imon_incoming_packet()
1651 if (press_type < 0) in imon_incoming_packet()
1655 if (press_type == 0) in imon_incoming_packet()
1700 input_report_key(ictx->idev, kc, 0); in imon_incoming_packet()
1717 if (buf[0] == 0x00 && in imon_incoming_packet()
1718 buf[2] == 0xFF && /* REFID */ in imon_incoming_packet()
1719 buf[3] == 0xFF && in imon_incoming_packet()
1720 buf[4] == 0xFF && in imon_incoming_packet()
1721 buf[5] == 0xFF && /* iMON 2.4G */ in imon_incoming_packet()
1722 ((buf[6] == 0x4E && buf[7] == 0xDF) || /* LT */ in imon_incoming_packet()
1723 (buf[6] == 0x5E && buf[7] == 0xDF))) { /* DT */ in imon_incoming_packet()
1736 int intfnum = 0; in usb_rx_callback_intf0()
1760 case 0: in usb_rx_callback_intf0()
1801 case 0: in usb_rx_callback_intf1()
1816 * The 0x15c2:0xffdc device ID was used for umpteen different imon
1832 case 0x21: in imon_get_ffdc_type()
1833 dev_info(ictx->dev, "0xffdc iMON Knob, iMON IR"); in imon_get_ffdc_type()
1837 case 0x4e: in imon_get_ffdc_type()
1838 dev_info(ictx->dev, "0xffdc iMON 2.4G LT, iMON RF"); in imon_get_ffdc_type()
1843 case 0x35: in imon_get_ffdc_type()
1844 dev_info(ictx->dev, "0xffdc iMON VFD + knob, no IR"); in imon_get_ffdc_type()
1848 case 0x24: in imon_get_ffdc_type()
1849 case 0x30: in imon_get_ffdc_type()
1850 case 0x85: in imon_get_ffdc_type()
1851 dev_info(ictx->dev, "0xffdc iMON VFD, iMON IR"); in imon_get_ffdc_type()
1855 case 0x46: in imon_get_ffdc_type()
1856 case 0x9e: in imon_get_ffdc_type()
1857 dev_info(ictx->dev, "0xffdc iMON VFD, MCE IR"); in imon_get_ffdc_type()
1862 case 0x7e: in imon_get_ffdc_type()
1863 dev_info(ictx->dev, "0xffdc iMON VFD, iMON or MCE IR"); in imon_get_ffdc_type()
1868 case 0x9f: in imon_get_ffdc_type()
1869 dev_info(ictx->dev, "0xffdc iMON LCD, MCE IR"); in imon_get_ffdc_type()
1874 case 0x26: in imon_get_ffdc_type()
1875 dev_info(ictx->dev, "0xffdc iMON Inside, iMON IR"); in imon_get_ffdc_type()
1879 case 0x98: in imon_get_ffdc_type()
1880 dev_info(ictx->dev, "0xffdc iMON UltraBay, LCD + IR"); in imon_get_ffdc_type()
1887 dev_info(ictx->dev, "Unknown 0xffdc device, defaulting to VFD and iMON IR"); in imon_get_ffdc_type()
1897 printk(KERN_CONT " (id 0x%02x)\n", ffdc_cfg_byte); in imon_get_ffdc_type()
1914 case 0xffdc: in imon_set_display_type()
1918 case 0x0034: in imon_set_display_type()
1919 case 0x0035: in imon_set_display_type()
1922 case 0x0038: in imon_set_display_type()
1923 case 0x0039: in imon_set_display_type()
1924 case 0x0045: in imon_set_display_type()
1927 case 0x003c: in imon_set_display_type()
1928 case 0x0041: in imon_set_display_type()
1929 case 0x0042: in imon_set_display_type()
1930 case 0x0043: in imon_set_display_type()
1934 case 0x0036: in imon_set_display_type()
1935 case 0x0044: in imon_set_display_type()
1958 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88 }; in imon_init_rdev()
1990 if (ictx->product == 0xffdc) { in imon_init_rdev()
2003 if (ret < 0) { in imon_init_rdev()
2037 idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | BIT_MASK(EV_REL); in imon_init_idev()
2041 idev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) | in imon_init_idev()
2045 for (i = 0; key_table[i].hw_code != 0; i++) { in imon_init_idev()
2055 if (ret < 0) { in imon_init_idev()
2086 touch->evbit[0] = in imon_init_touch()
2091 0x00, 0xfff, 0, 0); in imon_init_touch()
2093 0x00, 0xfff, 0, 0); in imon_init_touch()
2100 if (ret < 0) { in imon_init_touch()
2132 for (i = 0; i < num_endpts && !(ir_ep_found && display_ep_found); ++i) { in imon_find_endpoints()
2152 if (ifnum == 0) { in imon_find_endpoints()
2220 rx_urb = usb_alloc_urb(0, GFP_KERNEL); in imon_init_intf0()
2223 tx_urb = usb_alloc_urb(0, GFP_KERNEL); in imon_init_intf0()
2311 rx_urb = usb_alloc_urb(0, GFP_KERNEL); in imon_init_intf1()
2318 timer_setup(&ictx->ttimer, imon_touch_display_timeout, 0); in imon_init_intf1()
2403 int ret = 0; in imon_probe()
2420 first_if = usb_ifnum_to_if(usbdev, 0); in imon_probe()
2428 if (ifnum == 0) { in imon_probe()
2456 if (ifnum == 0) { in imon_probe()
2459 if (product == 0xffdc && ictx->rf_device) { in imon_probe()
2480 return 0; in imon_probe()
2521 if (ifnum == 0) { in imon_disconnect()
2557 if (ifnum == 0) in imon_suspend()
2562 return 0; in imon_suspend()
2567 int rc = 0; in imon_resume()
2571 if (ifnum == 0) { in imon_resume()