• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/input/misc/

Lines Matching refs:data

63 /* CEIR Wake-Up Registers, relative to data->wbase                      */
75 /* CEIR Enhanced Functionality Registers, relative to data->ebase */
82 /* SP3 Banked Registers, relative to data->sbase */
85 #define WBCIR_REG_SP3_RXDATA 0x00 /* FIFO RX data (r) */
86 #define WBCIR_REG_SP3_TXDATA 0x00 /* FIFO TX data (w) */
125 /* RX data bit for WBCIR_REG_SP3_IER and WBCIR_REG_SP3_EIR */
131 /* RX data available bit for WBCIR_REG_SP3_LSR */
310 wbcir_select_bank(struct wbcir_data *data, enum wbcir_bank bank)
312 outb(bank, data->sbase + WBCIR_REG_SP3_BSR);
318 struct wbcir_data *data = container_of(led_cdev,
322 if (inb(data->ebase + WBCIR_REG_ECEIR_CTS) & WBCIR_LED_ENABLE)
332 struct wbcir_data *data = container_of(led_cdev,
336 wbcir_set_bits(data->ebase + WBCIR_REG_ECEIR_CTS,
369 wbcir_do_getkeycode(struct wbcir_data *data, u32 scancode)
377 list_for_each_entry(keyentry, &data->keytable, list) {
392 struct wbcir_data *data = input_get_drvdata(dev);
394 *keycode = wbcir_do_getkeycode(data, scancode);
402 struct wbcir_data *data = input_get_drvdata(dev);
414 list_for_each_entry(keyentry, &data->keytable, list) {
434 list_add(&new_keyentry->list, &data->keytable);
438 list_for_each_entry(keyentry, &data->keytable, list) {
457 struct wbcir_data *data = (struct wbcir_data *)cookie;
461 * data->keyup_jiffies is used to prevent a race condition if a
473 if (time_is_after_eq_jiffies(data->keyup_jiffies) && data->keypressed) {
474 data->keypressed = 0;
475 led_trigger_event(data->rxtrigger, LED_OFF);
476 input_report_key(data->input_dev, data->last_keycode, 0);
477 input_sync(data->input_dev);
484 wbcir_keydown(struct wbcir_data *data, u32 scancode, u8 toggle)
489 if (data->last_scancode == scancode &&
490 data->last_toggle == toggle &&
491 data->keypressed)
493 data->last_scancode = scancode;
496 if (data->keypressed) {
497 input_report_key(data->input_dev, data->last_keycode, 0);
498 input_sync(data->input_dev);
499 data->keypressed = 0;
503 input_event(data->input_dev, EV_MSC, MSC_SCAN, (int)scancode);
506 keycode = wbcir_do_getkeycode(data, scancode);
511 input_report_key(data->input_dev, keycode, 1);
512 data->keypressed = 1;
513 data->last_keycode = keycode;
514 data->last_toggle = toggle;
517 input_sync(data->input_dev);
518 led_trigger_event(data->rxtrigger,
519 data->keypressed ? LED_FULL : LED_OFF);
520 data->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT);
521 mod_timer(&data->timer_keyup, data->keyup_jiffies);
534 wbcir_reset_irdata(struct wbcir_data *data)
536 memset(data->irdata, 0, sizeof(data->irdata));
537 data->irdata_count = 0;
538 data->irdata_off = 0;
539 data->irdata_error = 0;
540 data->idle_count = 0;
545 add_irdata_bit(struct wbcir_data *data, int set)
547 if (data->irdata_count >= sizeof(data->irdata) * 8) {
548 data->irdata_error = 1;
553 __set_bit(data->irdata_count, data->irdata);
554 data->irdata_count++;
559 get_bits(struct wbcir_data *data, int count)
563 if (data->irdata_count - data->irdata_off < count) {
564 data->irdata_error = 1;
570 if (test_bit(data->irdata_off, data->irdata))
573 data->irdata_off++;
581 wbcir_rc6cells_to_byte(struct wbcir_data *data)
583 u16 raw = get_bits(data, 16);
595 data->irdata_error = 1;
604 /* Decodes a number of bits from raw RC5 data */
606 wbcir_get_rc5bits(struct wbcir_data *data, unsigned int count)
608 u16 raw = get_bits(data, count * 2);
620 data->irdata_error = 1;
630 wbcir_parse_rc6(struct device *dev, struct wbcir_data *data)
691 while (get_bits(data, 1) && !data->irdata_error)
695 if (get_bits(data, 1)) {
701 if (get_bits(data, 2) != 0x02) {
707 mode = get_bits(data, 6);
721 toggle = get_bits(data, 4);
741 customer = wbcir_rc6cells_to_byte(data);
746 customer |= wbcir_rc6cells_to_byte(data);
751 address = wbcir_rc6cells_to_byte(data);
758 command = wbcir_rc6cells_to_byte(data);
766 if (data->irdata_error) {
780 wbcir_keydown(data, scancode, toggle);
784 wbcir_parse_rc5(struct device *dev, struct wbcir_data *data)
804 if (!get_bits(data, 1)) {
810 if (!wbcir_get_rc5bits(data, 1))
815 toggle = wbcir_get_rc5bits(data, 1);
816 address = wbcir_get_rc5bits(data, 5);
817 command |= wbcir_get_rc5bits(data, 6);
821 if (data->irdata_error) {
832 wbcir_keydown(data, scancode, toggle);
836 wbcir_parse_nec(struct device *dev, struct wbcir_data *data)
870 while (get_bits(data, 1) && !data->irdata_error)
874 if (get_bits(data, 4)) {
880 if (get_bits(data, 1)) {
881 if (!data->keypressed) {
887 (unsigned int)data->last_scancode);
889 wbcir_keydown(data, data->last_scancode, data->last_toggle);
894 if (get_bits(data, 3)) {
899 address1 = bitrev8(get_bits(data, 8));
900 address2 = bitrev8(get_bits(data, 8));
901 command1 = bitrev8(get_bits(data, 8));
902 command2 = bitrev8(get_bits(data, 8));
905 if (data->irdata_error) {
928 wbcir_keydown(data, scancode, !data->last_toggle);
943 struct wbcir_data *data = pnp_get_drvdata(device);
953 wbcir_select_bank(data, WBCIR_BANK_0);
955 status = inb(data->sbase + WBCIR_REG_SP3_EIR);
963 data->irdata_error = 1;
969 insb(data->sbase + WBCIR_REG_SP3_RXDATA, &irdata[0], 8);
974 add_irdata_bit(data, 0);
976 add_irdata_bit(data, 1);
979 data->idle_count++;
981 data->idle_count = 0;
984 if (data->idle_count > WBCIR_MAX_IDLE_BYTES) {
986 outb(WBCIR_RX_DISABLE, data->sbase + WBCIR_REG_SP3_ASCR);
989 while (inb(data->sbase + WBCIR_REG_SP3_LSR) & WBCIR_RX_AVAIL)
990 inb(data->sbase + WBCIR_REG_SP3_RXDATA);
993 for (i = 0; i < data->irdata_count; i += BITS_PER_LONG)
994 dev_dbg(dev, "0x%08lX\n", data->irdata[i/BITS_PER_LONG]);
998 wbcir_parse_rc5(dev, data);
1001 wbcir_parse_rc6(dev, data);
1004 wbcir_parse_nec(dev, data);
1008 wbcir_reset_irdata(data);
1028 struct wbcir_data *data = pnp_get_drvdata(device);
1169 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_INDEX,
1172 outsb(data->wbase + WBCIR_REG_WCEIR_DATA, match, 11);
1173 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_INDEX,
1176 outsb(data->wbase + WBCIR_REG_WCEIR_DATA, mask, 11);
1179 outb(rc6_csl, data->wbase + WBCIR_REG_WCEIR_CSL);
1182 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_STS, 0x17, 0x17);
1185 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_EV_EN, 0x01, 0x07);
1188 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_CTL, 0x01, 0x01);
1192 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_EV_EN, 0x00, 0x07);
1195 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_CTL, 0x00, 0x01);
1199 wbcir_select_bank(data, WBCIR_BANK_0);
1200 outb(WBCIR_IRQ_NONE, data->sbase + WBCIR_REG_SP3_IER);
1208 disable_irq(data->irq);
1219 wbcir_init_hw(struct wbcir_data *data)
1224 wbcir_select_bank(data, WBCIR_BANK_0);
1225 outb(WBCIR_IRQ_NONE, data->sbase + WBCIR_REG_SP3_IER);
1231 outb(tmp, data->wbase + WBCIR_REG_WCEIR_CTL);
1234 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_STS, 0x17, 0x17);
1237 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_EV_EN, 0x00, 0x07);
1240 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_CFG1, 0x4A, 0x7F);
1244 outb(0x04, data->ebase + WBCIR_REG_ECEIR_CCTL);
1246 outb(0x00, data->ebase + WBCIR_REG_ECEIR_CCTL);
1252 outb(0x10, data->ebase + WBCIR_REG_ECEIR_CTS);
1255 wbcir_select_bank(data, WBCIR_BANK_2);
1256 outb(WBCIR_EXT_ENABLE, data->sbase + WBCIR_REG_SP3_EXCR1);
1259 * Configure baud generator, IR data will be sampled at
1270 outb(0x30, data->sbase + WBCIR_REG_SP3_EXCR2);
1275 outb(0xA7, data->sbase + WBCIR_REG_SP3_BGDL);
1278 outb(0x53, data->sbase + WBCIR_REG_SP3_BGDL);
1281 outb(0x69, data->sbase + WBCIR_REG_SP3_BGDL);
1284 outb(0x00, data->sbase + WBCIR_REG_SP3_BGDH);
1287 wbcir_select_bank(data, WBCIR_BANK_0);
1288 outb(0xC0, data->sbase + WBCIR_REG_SP3_MCR);
1289 inb(data->sbase + WBCIR_REG_SP3_LSR); /* Clear LSR */
1290 inb(data->sbase + WBCIR_REG_SP3_MSR); /* Clear MSR */
1293 wbcir_select_bank(data, WBCIR_BANK_7);
1294 outb(0x10, data->sbase + WBCIR_REG_SP3_RCCFG);
1297 wbcir_select_bank(data, WBCIR_BANK_4);
1298 outb(0x00, data->sbase + WBCIR_REG_SP3_IRCR1);
1301 wbcir_select_bank(data, WBCIR_BANK_5);
1302 outb(0x00, data->sbase + WBCIR_REG_SP3_IRCR2);
1305 wbcir_select_bank(data, WBCIR_BANK_6);
1306 outb(0x20, data->sbase + WBCIR_REG_SP3_IRCR3);
1309 wbcir_select_bank(data, WBCIR_BANK_7);
1310 outb(0xF2, data->sbase + WBCIR_REG_SP3_IRRXDC);
1311 outb(0x69, data->sbase + WBCIR_REG_SP3_IRTXMC);
1315 outb(0x10, data->sbase + WBCIR_REG_SP3_IRCFG4);
1317 outb(0x00, data->sbase + WBCIR_REG_SP3_IRCFG4);
1320 wbcir_select_bank(data, WBCIR_BANK_0);
1321 outb(0x97, data->sbase + WBCIR_REG_SP3_FCR);
1324 outb(0xE0, data->sbase + WBCIR_REG_SP3_ASCR);
1327 wbcir_reset_irdata(data);
1328 outb(WBCIR_IRQ_RX | WBCIR_IRQ_ERR, data->sbase + WBCIR_REG_SP3_IER);
1334 struct wbcir_data *data = pnp_get_drvdata(device);
1336 wbcir_init_hw(data);
1337 enable_irq(data->irq);
1346 struct wbcir_data *data;
1356 data = kzalloc(sizeof(*data), GFP_KERNEL);
1357 if (!data) {
1362 pnp_set_drvdata(device, data);
1364 data->ebase = pnp_port_start(device, 0);
1365 data->wbase = pnp_port_start(device, 1);
1366 data->sbase = pnp_port_start(device, 2);
1367 data->irq = pnp_irq(device, 0);
1369 if (data->wbase == 0 || data->ebase == 0 ||
1370 data->sbase == 0 || data->irq == 0) {
1378 data->wbase, data->ebase, data->sbase, data->irq);
1380 if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) {
1382 data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1);
1387 if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) {
1389 data->ebase, data->ebase + EHFUNC_IOMEM_LEN - 1);
1394 if (!request_region(data->sbase, SP_IOMEM_LEN, DRVNAME)) {
1396 data->sbase, data->sbase + SP_IOMEM_LEN - 1);
1401 err = request_irq(data->irq, wbcir_irq_handler,
1404 dev_err(dev, "Failed to claim IRQ %u\n", data->irq);
1409 led_trigger_register_simple("cir-tx", &data->txtrigger);
1410 if (!data->txtrigger) {
1415 led_trigger_register_simple("cir-rx", &data->rxtrigger);
1416 if (!data->rxtrigger) {
1421 data->led.name = "cir::activity";
1422 data->led.default_trigger = "cir-rx";
1423 data->led.brightness_set = wbcir_led_brightness_set;
1424 data->led.brightness_get = wbcir_led_brightness_get;
1425 err = led_classdev_register(&device->dev, &data->led);
1429 data->input_dev = input_allocate_device();
1430 if (!data->input_dev) {
1435 data->input_dev->evbit[0] = BIT(EV_KEY);
1436 data->input_dev->name = WBCIR_NAME;
1437 data->input_dev->phys = "wbcir/cir0";
1438 data->input_dev->id.bustype = BUS_HOST;
1439 data->input_dev->id.vendor = PCI_VENDOR_ID_WINBOND;
1440 data->input_dev->id.product = WBCIR_ID_FAMILY;
1441 data->input_dev->id.version = WBCIR_ID_CHIP;
1442 data->input_dev->getkeycode = wbcir_getkeycode;
1443 data->input_dev->setkeycode = wbcir_setkeycode;
1444 input_set_capability(data->input_dev, EV_MSC, MSC_SCAN);
1445 input_set_drvdata(data->input_dev, data);
1447 err = input_register_device(data->input_dev);
1451 data->last_scancode = INVALID_SCANCODE;
1452 INIT_LIST_HEAD(&data->keytable);
1453 setup_timer(&data->timer_keyup, wbcir_keyup, (unsigned long)data);
1459 err = wbcir_setkeycode(data->input_dev,
1469 wbcir_init_hw(data);
1474 if (!list_empty(&data->keytable)) {
1478 list_for_each_entry_safe(key, keytmp, &data->keytable, list) {
1483 input_unregister_device(data->input_dev);
1485 data->input_dev = NULL;
1487 input_free_device(data->input_dev);
1489 led_classdev_unregister(&data->led);
1491 led_trigger_unregister_simple(data->rxtrigger);
1493 led_trigger_unregister_simple(data->txtrigger);
1495 free_irq(data->irq, device);
1497 release_region(data->sbase, SP_IOMEM_LEN);
1499 release_region(data->ebase, EHFUNC_IOMEM_LEN);
1501 release_region(data->wbase, WAKEUP_IOMEM_LEN);
1503 kfree(data);
1512 struct wbcir_data *data = pnp_get_drvdata(device);
1517 wbcir_select_bank(data, WBCIR_BANK_0);
1518 outb(WBCIR_IRQ_NONE, data->sbase + WBCIR_REG_SP3_IER);
1520 del_timer_sync(&data->timer_keyup);
1522 free_irq(data->irq, device);
1525 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_STS, 0x17, 0x17);
1528 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_CTL, 0x00, 0x01);
1531 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_EV_EN, 0x00, 0x07);
1534 input_unregister_device(data->input_dev);
1536 led_trigger_unregister_simple(data->rxtrigger);
1537 led_trigger_unregister_simple(data->txtrigger);
1538 led_classdev_unregister(&data->led);
1540 /* This is ok since &data->led isn't actually used */
1541 wbcir_led_brightness_set(&data->led, LED_OFF);
1543 release_region(data->wbase, WAKEUP_IOMEM_LEN);
1544 release_region(data->ebase, EHFUNC_IOMEM_LEN);
1545 release_region(data->sbase, SP_IOMEM_LEN);
1547 list_for_each_entry_safe(key, keytmp, &data->keytable, list) {
1552 kfree(data);