Lines Matching full:data

48 /* CEIR Wake-Up Registers, relative to data->wbase                      */
55 #define WBCIR_REG_WCEIR_DATA 0x09 /* CEIR Receiver Data */
60 /* CEIR Enhanced Functionality Registers, relative to data->ebase */
67 /* SP3 Banked Registers, relative to data->sbase */
70 #define WBCIR_REG_SP3_RXDATA 0x00 /* FIFO RX data (r) */
71 #define WBCIR_REG_SP3_TXDATA 0x00 /* FIFO TX data (w) */
110 /* RX data bit for WBCIR_REG_SP3_IER and WBCIR_REG_SP3_EIR */
112 /* TX data low bit for WBCIR_REG_SP3_IER and WBCIR_REG_SP3_EIR */
116 /* TX data empty bit for WBCEIR_REG_SP3_IER and WBCIR_REG_SP3_EIR */
120 /* RX data available bit for WBCIR_REG_SP3_LSR */
122 /* RX data overrun error bit for WBCIR_REG_SP3_LSR */
128 /* TX data underrun error bit for WBCIR_REG_SP3_ASCR */
188 /* Per-device data */
242 wbcir_select_bank(struct wbcir_data *data, enum wbcir_bank bank) in wbcir_select_bank() argument
244 outb(bank, data->sbase + WBCIR_REG_SP3_BSR); in wbcir_select_bank()
248 wbcir_set_irqmask(struct wbcir_data *data, u8 irqmask) in wbcir_set_irqmask() argument
250 if (data->irqmask == irqmask) in wbcir_set_irqmask()
253 wbcir_select_bank(data, WBCIR_BANK_0); in wbcir_set_irqmask()
254 outb(irqmask, data->sbase + WBCIR_REG_SP3_IER); in wbcir_set_irqmask()
255 data->irqmask = irqmask; in wbcir_set_irqmask()
261 struct wbcir_data *data = container_of(led_cdev, in wbcir_led_brightness_get() local
265 if (inb(data->ebase + WBCIR_REG_ECEIR_CTS) & WBCIR_LED_ENABLE) in wbcir_led_brightness_get()
275 struct wbcir_data *data = container_of(led_cdev, in wbcir_led_brightness_set() local
279 wbcir_set_bits(data->ebase + WBCIR_REG_ECEIR_CTS, in wbcir_led_brightness_set()
310 wbcir_carrier_report(struct wbcir_data *data) in wbcir_carrier_report() argument
312 unsigned counter = inb(data->ebase + WBCIR_REG_ECEIR_CNT_LO) | in wbcir_carrier_report()
313 inb(data->ebase + WBCIR_REG_ECEIR_CNT_HI) << 8; in wbcir_carrier_report()
319 data->pulse_duration) in wbcir_carrier_report()
322 ir_raw_event_store(data->dev, &ev); in wbcir_carrier_report()
326 data->pulse_duration = 0; in wbcir_carrier_report()
327 wbcir_set_bits(data->ebase + WBCIR_REG_ECEIR_CCTL, WBCIR_CNTR_R, in wbcir_carrier_report()
329 wbcir_set_bits(data->ebase + WBCIR_REG_ECEIR_CCTL, WBCIR_CNTR_EN, in wbcir_carrier_report()
336 struct wbcir_data *data = dev->priv; in wbcir_idle_rx() local
338 if (!idle && data->rxstate == WBCIR_RXSTATE_INACTIVE) in wbcir_idle_rx()
339 data->rxstate = WBCIR_RXSTATE_ACTIVE; in wbcir_idle_rx()
341 if (idle && data->rxstate != WBCIR_RXSTATE_INACTIVE) { in wbcir_idle_rx()
342 data->rxstate = WBCIR_RXSTATE_INACTIVE; in wbcir_idle_rx()
344 if (data->carrier_report_enabled) in wbcir_idle_rx()
345 wbcir_carrier_report(data); in wbcir_idle_rx()
348 outb(WBCIR_RX_DISABLE, data->sbase + WBCIR_REG_SP3_ASCR); in wbcir_idle_rx()
353 wbcir_irq_rx(struct wbcir_data *data, struct pnp_dev *device) in wbcir_irq_rx() argument
360 while (inb(data->sbase + WBCIR_REG_SP3_LSR) & WBCIR_RX_AVAIL) { in wbcir_irq_rx()
361 irdata = inb(data->sbase + WBCIR_REG_SP3_RXDATA); in wbcir_irq_rx()
362 if (data->rxstate == WBCIR_RXSTATE_ERROR) in wbcir_irq_rx()
366 (data->carrier_report_enabled ? 2 : 10); in wbcir_irq_rx()
371 data->pulse_duration += duration; in wbcir_irq_rx()
373 ir_raw_event_store_with_filter(data->dev, &rawir); in wbcir_irq_rx()
376 ir_raw_event_handle(data->dev); in wbcir_irq_rx()
380 wbcir_irq_tx(struct wbcir_data *data) in wbcir_irq_tx() argument
387 if (!data->txbuf) in wbcir_irq_tx()
390 switch (data->txstate) { in wbcir_irq_tx()
407 * TX data is run-length coded in bytes: YXXXXXXX in wbcir_irq_tx()
411 for (used = 0; used < space && data->txoff != data->txlen; used++) { in wbcir_irq_tx()
412 if (data->txbuf[data->txoff] == 0) { in wbcir_irq_tx()
413 data->txoff++; in wbcir_irq_tx()
416 byte = min((u32)0x80, data->txbuf[data->txoff]); in wbcir_irq_tx()
417 data->txbuf[data->txoff] -= byte; in wbcir_irq_tx()
419 byte |= (data->txoff % 2 ? 0x80 : 0x00); /* pulse/space */ in wbcir_irq_tx()
423 while (data->txoff != data->txlen && data->txbuf[data->txoff] == 0) in wbcir_irq_tx()
424 data->txoff++; in wbcir_irq_tx()
428 if (data->txstate == WBCIR_TXSTATE_ERROR) in wbcir_irq_tx()
430 outb(WBCIR_TX_UNDERRUN, data->sbase + WBCIR_REG_SP3_ASCR); in wbcir_irq_tx()
431 wbcir_set_irqmask(data, WBCIR_IRQ_RX | WBCIR_IRQ_ERR); in wbcir_irq_tx()
432 kfree(data->txbuf); in wbcir_irq_tx()
433 data->txbuf = NULL; in wbcir_irq_tx()
434 data->txstate = WBCIR_TXSTATE_INACTIVE; in wbcir_irq_tx()
435 } else if (data->txoff == data->txlen) { in wbcir_irq_tx()
437 outsb(data->sbase + WBCIR_REG_SP3_TXDATA, bytes, used - 1); in wbcir_irq_tx()
438 outb(WBCIR_TX_EOT, data->sbase + WBCIR_REG_SP3_ASCR); in wbcir_irq_tx()
439 outb(bytes[used - 1], data->sbase + WBCIR_REG_SP3_TXDATA); in wbcir_irq_tx()
440 wbcir_set_irqmask(data, WBCIR_IRQ_RX | WBCIR_IRQ_ERR | in wbcir_irq_tx()
443 /* More data to follow... */ in wbcir_irq_tx()
444 outsb(data->sbase + WBCIR_REG_SP3_RXDATA, bytes, used); in wbcir_irq_tx()
445 if (data->txstate == WBCIR_TXSTATE_INACTIVE) { in wbcir_irq_tx()
446 wbcir_set_irqmask(data, WBCIR_IRQ_RX | WBCIR_IRQ_ERR | in wbcir_irq_tx()
448 data->txstate = WBCIR_TXSTATE_ACTIVE; in wbcir_irq_tx()
457 struct wbcir_data *data = pnp_get_drvdata(device); in wbcir_irq_handler() local
461 spin_lock_irqsave(&data->spinlock, flags); in wbcir_irq_handler()
462 wbcir_select_bank(data, WBCIR_BANK_0); in wbcir_irq_handler()
463 status = inb(data->sbase + WBCIR_REG_SP3_EIR); in wbcir_irq_handler()
464 status &= data->irqmask; in wbcir_irq_handler()
467 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_irq_handler()
473 if (inb(data->sbase + WBCIR_REG_SP3_LSR) & WBCIR_RX_OVERRUN) { in wbcir_irq_handler()
474 data->rxstate = WBCIR_RXSTATE_ERROR; in wbcir_irq_handler()
475 ir_raw_event_reset(data->dev); in wbcir_irq_handler()
479 if (inb(data->sbase + WBCIR_REG_SP3_ASCR) & WBCIR_TX_UNDERRUN) in wbcir_irq_handler()
480 data->txstate = WBCIR_TXSTATE_ERROR; in wbcir_irq_handler()
484 wbcir_irq_rx(data, device); in wbcir_irq_handler()
487 wbcir_irq_tx(data); in wbcir_irq_handler()
489 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_irq_handler()
502 struct wbcir_data *data = dev->priv; in wbcir_set_carrier_report() local
505 spin_lock_irqsave(&data->spinlock, flags); in wbcir_set_carrier_report()
507 if (data->carrier_report_enabled == enable) { in wbcir_set_carrier_report()
508 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_set_carrier_report()
512 data->pulse_duration = 0; in wbcir_set_carrier_report()
513 wbcir_set_bits(data->ebase + WBCIR_REG_ECEIR_CCTL, WBCIR_CNTR_R, in wbcir_set_carrier_report()
516 if (enable && data->dev->idle) in wbcir_set_carrier_report()
517 wbcir_set_bits(data->ebase + WBCIR_REG_ECEIR_CCTL, in wbcir_set_carrier_report()
521 wbcir_select_bank(data, WBCIR_BANK_2); in wbcir_set_carrier_report()
522 data->dev->rx_resolution = US_TO_NS(enable ? 2 : 10); in wbcir_set_carrier_report()
523 outb(enable ? 0x03 : 0x0f, data->sbase + WBCIR_REG_SP3_BGDL); in wbcir_set_carrier_report()
524 outb(0x00, data->sbase + WBCIR_REG_SP3_BGDH); in wbcir_set_carrier_report()
527 wbcir_select_bank(data, WBCIR_BANK_7); in wbcir_set_carrier_report()
528 wbcir_set_bits(data->sbase + WBCIR_REG_SP3_RCCFG, in wbcir_set_carrier_report()
531 data->carrier_report_enabled = enable; in wbcir_set_carrier_report()
532 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_set_carrier_report()
540 struct wbcir_data *data = dev->priv; in wbcir_txcarrier() local
566 spin_lock_irqsave(&data->spinlock, flags); in wbcir_txcarrier()
567 if (data->txstate != WBCIR_TXSTATE_INACTIVE) { in wbcir_txcarrier()
568 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_txcarrier()
572 if (data->txcarrier != freq) { in wbcir_txcarrier()
573 wbcir_select_bank(data, WBCIR_BANK_7); in wbcir_txcarrier()
574 wbcir_set_bits(data->sbase + WBCIR_REG_SP3_IRTXMC, val, 0x1F); in wbcir_txcarrier()
575 data->txcarrier = freq; in wbcir_txcarrier()
578 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_txcarrier()
585 struct wbcir_data *data = dev->priv; in wbcir_txmask() local
611 spin_lock_irqsave(&data->spinlock, flags); in wbcir_txmask()
612 if (data->txstate != WBCIR_TXSTATE_INACTIVE) { in wbcir_txmask()
613 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_txmask()
617 if (data->txmask != mask) { in wbcir_txmask()
618 wbcir_set_bits(data->ebase + WBCIR_REG_ECEIR_CTS, val, 0x0c); in wbcir_txmask()
619 data->txmask = mask; in wbcir_txmask()
622 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_txmask()
629 struct wbcir_data *data = dev->priv; in wbcir_tx() local
643 spin_lock_irqsave(&data->spinlock, flags); in wbcir_tx()
644 if (data->txstate != WBCIR_TXSTATE_INACTIVE) { in wbcir_tx()
645 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_tx()
651 data->txbuf = buf; in wbcir_tx()
652 data->txlen = count; in wbcir_tx()
653 data->txoff = 0; in wbcir_tx()
654 wbcir_irq_tx(data); in wbcir_tx()
657 spin_unlock_irqrestore(&data->spinlock, flags); in wbcir_tx()
671 struct wbcir_data *data = pnp_get_drvdata(device); in wbcir_shutdown() local
672 struct rc_dev *rc = data->dev; in wbcir_shutdown()
678 u32 wake_sc = rc->scancode_wakeup_filter.data; in wbcir_shutdown()
827 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_INDEX, in wbcir_shutdown()
830 outsb(data->wbase + WBCIR_REG_WCEIR_DATA, match, 11); in wbcir_shutdown()
831 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_INDEX, in wbcir_shutdown()
834 outsb(data->wbase + WBCIR_REG_WCEIR_DATA, mask, 11); in wbcir_shutdown()
837 outb(rc6_csl, data->wbase + WBCIR_REG_WCEIR_CSL); in wbcir_shutdown()
840 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_STS, 0x17, 0x17); in wbcir_shutdown()
843 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_EV_EN, 0x01, 0x07); in wbcir_shutdown()
846 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_CTL, in wbcir_shutdown()
851 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_EV_EN, 0x00, 0x07); in wbcir_shutdown()
854 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_CTL, 0x00, 0x01); in wbcir_shutdown()
863 wbcir_set_irqmask(data, WBCIR_IRQ_NONE); in wbcir_shutdown()
864 disable_irq(data->irq); in wbcir_shutdown()
879 struct wbcir_data *data = pnp_get_drvdata(device); in wbcir_suspend() local
880 led_classdev_suspend(&data->led); in wbcir_suspend()
886 wbcir_init_hw(struct wbcir_data *data) in wbcir_init_hw() argument
889 wbcir_set_irqmask(data, WBCIR_IRQ_NONE); in wbcir_init_hw()
892 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_CTL, invert ? 8 : 0, 0x09); in wbcir_init_hw()
895 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_STS, 0x17, 0x17); in wbcir_init_hw()
898 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_EV_EN, 0x00, 0x07); in wbcir_init_hw()
901 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_CFG1, 0x4A, 0x7F); in wbcir_init_hw()
905 outb(WBCIR_IRTX_INV, data->ebase + WBCIR_REG_ECEIR_CCTL); in wbcir_init_hw()
907 outb(0x00, data->ebase + WBCIR_REG_ECEIR_CCTL); in wbcir_init_hw()
913 outb(0x10, data->ebase + WBCIR_REG_ECEIR_CTS); in wbcir_init_hw()
914 data->txmask = 0x1; in wbcir_init_hw()
917 wbcir_select_bank(data, WBCIR_BANK_2); in wbcir_init_hw()
918 outb(WBCIR_EXT_ENABLE, data->sbase + WBCIR_REG_SP3_EXCR1); in wbcir_init_hw()
921 * Configure baud generator, IR data will be sampled at in wbcir_init_hw()
932 outb(0x30, data->sbase + WBCIR_REG_SP3_EXCR2); in wbcir_init_hw()
935 outb(0x0f, data->sbase + WBCIR_REG_SP3_BGDL); in wbcir_init_hw()
936 outb(0x00, data->sbase + WBCIR_REG_SP3_BGDH); in wbcir_init_hw()
939 wbcir_select_bank(data, WBCIR_BANK_0); in wbcir_init_hw()
940 outb(0xC0, data->sbase + WBCIR_REG_SP3_MCR); in wbcir_init_hw()
941 inb(data->sbase + WBCIR_REG_SP3_LSR); /* Clear LSR */ in wbcir_init_hw()
942 inb(data->sbase + WBCIR_REG_SP3_MSR); /* Clear MSR */ in wbcir_init_hw()
945 wbcir_select_bank(data, WBCIR_BANK_7); in wbcir_init_hw()
946 outb(0x90, data->sbase + WBCIR_REG_SP3_RCCFG); in wbcir_init_hw()
949 wbcir_select_bank(data, WBCIR_BANK_4); in wbcir_init_hw()
950 outb(0x00, data->sbase + WBCIR_REG_SP3_IRCR1); in wbcir_init_hw()
953 wbcir_select_bank(data, WBCIR_BANK_5); in wbcir_init_hw()
954 outb(txandrx ? 0x03 : 0x02, data->sbase + WBCIR_REG_SP3_IRCR2); in wbcir_init_hw()
957 wbcir_select_bank(data, WBCIR_BANK_6); in wbcir_init_hw()
958 outb(0x20, data->sbase + WBCIR_REG_SP3_IRCR3); in wbcir_init_hw()
961 wbcir_select_bank(data, WBCIR_BANK_7); in wbcir_init_hw()
962 outb(0xF2, data->sbase + WBCIR_REG_SP3_IRRXDC); in wbcir_init_hw()
965 outb(0x69, data->sbase + WBCIR_REG_SP3_IRTXMC); in wbcir_init_hw()
966 data->txcarrier = 36000; in wbcir_init_hw()
970 outb(0x10, data->sbase + WBCIR_REG_SP3_IRCFG4); in wbcir_init_hw()
972 outb(0x00, data->sbase + WBCIR_REG_SP3_IRCFG4); in wbcir_init_hw()
975 wbcir_select_bank(data, WBCIR_BANK_0); in wbcir_init_hw()
976 outb(0x97, data->sbase + WBCIR_REG_SP3_FCR); in wbcir_init_hw()
979 outb(0xE0, data->sbase + WBCIR_REG_SP3_ASCR); in wbcir_init_hw()
982 data->rxstate = WBCIR_RXSTATE_INACTIVE; in wbcir_init_hw()
983 wbcir_idle_rx(data->dev, true); in wbcir_init_hw()
986 if (data->txstate == WBCIR_TXSTATE_ACTIVE) { in wbcir_init_hw()
987 kfree(data->txbuf); in wbcir_init_hw()
988 data->txbuf = NULL; in wbcir_init_hw()
989 data->txstate = WBCIR_TXSTATE_INACTIVE; in wbcir_init_hw()
993 wbcir_set_irqmask(data, WBCIR_IRQ_RX | WBCIR_IRQ_ERR); in wbcir_init_hw()
999 struct wbcir_data *data = pnp_get_drvdata(device); in wbcir_resume() local
1001 wbcir_init_hw(data); in wbcir_resume()
1002 ir_raw_event_reset(data->dev); in wbcir_resume()
1003 enable_irq(data->irq); in wbcir_resume()
1004 led_classdev_resume(&data->led); in wbcir_resume()
1013 struct wbcir_data *data; in wbcir_probe() local
1023 data = kzalloc(sizeof(*data), GFP_KERNEL); in wbcir_probe()
1024 if (!data) { in wbcir_probe()
1029 pnp_set_drvdata(device, data); in wbcir_probe()
1031 spin_lock_init(&data->spinlock); in wbcir_probe()
1032 data->ebase = pnp_port_start(device, 0); in wbcir_probe()
1033 data->wbase = pnp_port_start(device, 1); in wbcir_probe()
1034 data->sbase = pnp_port_start(device, 2); in wbcir_probe()
1035 data->irq = pnp_irq(device, 0); in wbcir_probe()
1037 if (data->wbase == 0 || data->ebase == 0 || in wbcir_probe()
1038 data->sbase == 0 || data->irq == -1) { in wbcir_probe()
1045 data->wbase, data->ebase, data->sbase, data->irq); in wbcir_probe()
1047 data->led.name = "cir::activity"; in wbcir_probe()
1048 data->led.default_trigger = "rc-feedback"; in wbcir_probe()
1049 data->led.brightness_set = wbcir_led_brightness_set; in wbcir_probe()
1050 data->led.brightness_get = wbcir_led_brightness_get; in wbcir_probe()
1051 err = led_classdev_register(&device->dev, &data->led); in wbcir_probe()
1055 data->dev = rc_allocate_device(RC_DRIVER_IR_RAW); in wbcir_probe()
1056 if (!data->dev) { in wbcir_probe()
1061 data->dev->driver_name = DRVNAME; in wbcir_probe()
1062 data->dev->device_name = WBCIR_NAME; in wbcir_probe()
1063 data->dev->input_phys = "wbcir/cir0"; in wbcir_probe()
1064 data->dev->input_id.bustype = BUS_HOST; in wbcir_probe()
1065 data->dev->input_id.vendor = PCI_VENDOR_ID_WINBOND; in wbcir_probe()
1066 data->dev->input_id.product = WBCIR_ID_FAMILY; in wbcir_probe()
1067 data->dev->input_id.version = WBCIR_ID_CHIP; in wbcir_probe()
1068 data->dev->map_name = RC_MAP_RC6_MCE; in wbcir_probe()
1069 data->dev->s_idle = wbcir_idle_rx; in wbcir_probe()
1070 data->dev->s_carrier_report = wbcir_set_carrier_report; in wbcir_probe()
1071 data->dev->s_tx_mask = wbcir_txmask; in wbcir_probe()
1072 data->dev->s_tx_carrier = wbcir_txcarrier; in wbcir_probe()
1073 data->dev->tx_ir = wbcir_tx; in wbcir_probe()
1074 data->dev->priv = data; in wbcir_probe()
1075 data->dev->dev.parent = &device->dev; in wbcir_probe()
1076 data->dev->min_timeout = 1; in wbcir_probe()
1077 data->dev->timeout = IR_DEFAULT_TIMEOUT; in wbcir_probe()
1078 data->dev->max_timeout = 10 * IR_DEFAULT_TIMEOUT; in wbcir_probe()
1079 data->dev->rx_resolution = US_TO_NS(2); in wbcir_probe()
1080 data->dev->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER; in wbcir_probe()
1081 data->dev->allowed_wakeup_protocols = RC_PROTO_BIT_NEC | in wbcir_probe()
1086 data->dev->wakeup_protocol = RC_PROTO_RC6_MCE; in wbcir_probe()
1087 data->dev->scancode_wakeup_filter.data = 0x800f040c; in wbcir_probe()
1088 data->dev->scancode_wakeup_filter.mask = 0xffff7fff; in wbcir_probe()
1089 data->dev->s_wakeup_filter = wbcir_set_wakeup_filter; in wbcir_probe()
1091 err = rc_register_device(data->dev); in wbcir_probe()
1095 if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) { in wbcir_probe()
1097 data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1); in wbcir_probe()
1102 if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) { in wbcir_probe()
1104 data->ebase, data->ebase + EHFUNC_IOMEM_LEN - 1); in wbcir_probe()
1109 if (!request_region(data->sbase, SP_IOMEM_LEN, DRVNAME)) { in wbcir_probe()
1111 data->sbase, data->sbase + SP_IOMEM_LEN - 1); in wbcir_probe()
1116 err = request_irq(data->irq, wbcir_irq_handler, in wbcir_probe()
1119 dev_err(dev, "Failed to claim IRQ %u\n", data->irq); in wbcir_probe()
1126 wbcir_init_hw(data); in wbcir_probe()
1131 release_region(data->sbase, SP_IOMEM_LEN); in wbcir_probe()
1133 release_region(data->ebase, EHFUNC_IOMEM_LEN); in wbcir_probe()
1135 release_region(data->wbase, WAKEUP_IOMEM_LEN); in wbcir_probe()
1137 rc_unregister_device(data->dev); in wbcir_probe()
1138 data->dev = NULL; in wbcir_probe()
1140 rc_free_device(data->dev); in wbcir_probe()
1142 led_classdev_unregister(&data->led); in wbcir_probe()
1144 kfree(data); in wbcir_probe()
1153 struct wbcir_data *data = pnp_get_drvdata(device); in wbcir_remove() local
1156 wbcir_set_irqmask(data, WBCIR_IRQ_NONE); in wbcir_remove()
1157 free_irq(data->irq, device); in wbcir_remove()
1160 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_STS, 0x17, 0x17); in wbcir_remove()
1163 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_CTL, 0x00, 0x01); in wbcir_remove()
1166 wbcir_set_bits(data->wbase + WBCIR_REG_WCEIR_EV_EN, 0x00, 0x07); in wbcir_remove()
1168 rc_unregister_device(data->dev); in wbcir_remove()
1170 led_classdev_unregister(&data->led); in wbcir_remove()
1172 /* This is ok since &data->led isn't actually used */ in wbcir_remove()
1173 wbcir_led_brightness_set(&data->led, LED_OFF); in wbcir_remove()
1175 release_region(data->wbase, WAKEUP_IOMEM_LEN); in wbcir_remove()
1176 release_region(data->ebase, EHFUNC_IOMEM_LEN); in wbcir_remove()
1177 release_region(data->sbase, SP_IOMEM_LEN); in wbcir_remove()
1179 kfree(data); in wbcir_remove()