0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0019
0020 #include <linux/kernel.h>
0021 #include <linux/module.h>
0022 #include <linux/pnp.h>
0023 #include <linux/io.h>
0024 #include <linux/interrupt.h>
0025 #include <linux/sched.h>
0026 #include <linux/slab.h>
0027 #include <media/rc-core.h>
0028 #include "ene_ir.h"
0029
0030 static int sample_period;
0031 static bool learning_mode_force;
0032 static int debug;
0033 static bool txsim;
0034
0035 static void ene_set_reg_addr(struct ene_device *dev, u16 reg)
0036 {
0037 outb(reg >> 8, dev->hw_io + ENE_ADDR_HI);
0038 outb(reg & 0xFF, dev->hw_io + ENE_ADDR_LO);
0039 }
0040
0041
0042 static u8 ene_read_reg(struct ene_device *dev, u16 reg)
0043 {
0044 u8 retval;
0045 ene_set_reg_addr(dev, reg);
0046 retval = inb(dev->hw_io + ENE_IO);
0047 dbg_regs("reg %04x == %02x", reg, retval);
0048 return retval;
0049 }
0050
0051
0052 static void ene_write_reg(struct ene_device *dev, u16 reg, u8 value)
0053 {
0054 dbg_regs("reg %04x <- %02x", reg, value);
0055 ene_set_reg_addr(dev, reg);
0056 outb(value, dev->hw_io + ENE_IO);
0057 }
0058
0059
0060 static void ene_set_reg_mask(struct ene_device *dev, u16 reg, u8 mask)
0061 {
0062 dbg_regs("reg %04x |= %02x", reg, mask);
0063 ene_set_reg_addr(dev, reg);
0064 outb(inb(dev->hw_io + ENE_IO) | mask, dev->hw_io + ENE_IO);
0065 }
0066
0067
0068 static void ene_clear_reg_mask(struct ene_device *dev, u16 reg, u8 mask)
0069 {
0070 dbg_regs("reg %04x &= ~%02x ", reg, mask);
0071 ene_set_reg_addr(dev, reg);
0072 outb(inb(dev->hw_io + ENE_IO) & ~mask, dev->hw_io + ENE_IO);
0073 }
0074
0075
0076 static void ene_set_clear_reg_mask(struct ene_device *dev, u16 reg, u8 mask,
0077 bool set)
0078 {
0079 if (set)
0080 ene_set_reg_mask(dev, reg, mask);
0081 else
0082 ene_clear_reg_mask(dev, reg, mask);
0083 }
0084
0085
0086 static int ene_hw_detect(struct ene_device *dev)
0087 {
0088 u8 chip_major, chip_minor;
0089 u8 hw_revision, old_ver;
0090 u8 fw_reg2, fw_reg1;
0091
0092 ene_clear_reg_mask(dev, ENE_ECSTS, ENE_ECSTS_RSRVD);
0093 chip_major = ene_read_reg(dev, ENE_ECVER_MAJOR);
0094 chip_minor = ene_read_reg(dev, ENE_ECVER_MINOR);
0095 ene_set_reg_mask(dev, ENE_ECSTS, ENE_ECSTS_RSRVD);
0096
0097 hw_revision = ene_read_reg(dev, ENE_ECHV);
0098 old_ver = ene_read_reg(dev, ENE_HW_VER_OLD);
0099
0100 dev->pll_freq = (ene_read_reg(dev, ENE_PLLFRH) << 4) +
0101 (ene_read_reg(dev, ENE_PLLFRL) >> 4);
0102
0103 if (sample_period != ENE_DEFAULT_SAMPLE_PERIOD)
0104 dev->rx_period_adjust =
0105 dev->pll_freq == ENE_DEFAULT_PLL_FREQ ? 2 : 4;
0106
0107 if (hw_revision == 0xFF) {
0108 pr_warn("device seems to be disabled\n");
0109 pr_warn("send a mail to lirc-list@lists.sourceforge.net\n");
0110 pr_warn("please attach output of acpidump and dmidecode\n");
0111 return -ENODEV;
0112 }
0113
0114 pr_notice("chip is 0x%02x%02x - kbver = 0x%02x, rev = 0x%02x\n",
0115 chip_major, chip_minor, old_ver, hw_revision);
0116
0117 pr_notice("PLL freq = %d\n", dev->pll_freq);
0118
0119 if (chip_major == 0x33) {
0120 pr_warn("chips 0x33xx aren't supported\n");
0121 return -ENODEV;
0122 }
0123
0124 if (chip_major == 0x39 && chip_minor == 0x26 && hw_revision == 0xC0) {
0125 dev->hw_revision = ENE_HW_C;
0126 pr_notice("KB3926C detected\n");
0127 } else if (old_ver == 0x24 && hw_revision == 0xC0) {
0128 dev->hw_revision = ENE_HW_B;
0129 pr_notice("KB3926B detected\n");
0130 } else {
0131 dev->hw_revision = ENE_HW_D;
0132 pr_notice("KB3926D or higher detected\n");
0133 }
0134
0135
0136 if (dev->hw_revision < ENE_HW_C)
0137 return 0;
0138
0139 fw_reg1 = ene_read_reg(dev, ENE_FW1);
0140 fw_reg2 = ene_read_reg(dev, ENE_FW2);
0141
0142 pr_notice("Firmware regs: %02x %02x\n", fw_reg1, fw_reg2);
0143
0144 dev->hw_use_gpio_0a = !!(fw_reg2 & ENE_FW2_GP0A);
0145 dev->hw_learning_and_tx_capable = !!(fw_reg2 & ENE_FW2_LEARNING);
0146 dev->hw_extra_buffer = !!(fw_reg1 & ENE_FW1_HAS_EXTRA_BUF);
0147
0148 if (dev->hw_learning_and_tx_capable)
0149 dev->hw_fan_input = !!(fw_reg2 & ENE_FW2_FAN_INPUT);
0150
0151 pr_notice("Hardware features:\n");
0152
0153 if (dev->hw_learning_and_tx_capable) {
0154 pr_notice("* Supports transmitting & learning mode\n");
0155 pr_notice(" This feature is rare and therefore,\n");
0156 pr_notice(" you are welcome to test it,\n");
0157 pr_notice(" and/or contact the author via:\n");
0158 pr_notice(" lirc-list@lists.sourceforge.net\n");
0159 pr_notice(" or maximlevitsky@gmail.com\n");
0160
0161 pr_notice("* Uses GPIO %s for IR raw input\n",
0162 dev->hw_use_gpio_0a ? "40" : "0A");
0163
0164 if (dev->hw_fan_input)
0165 pr_notice("* Uses unused fan feedback input as source of demodulated IR data\n");
0166 }
0167
0168 if (!dev->hw_fan_input)
0169 pr_notice("* Uses GPIO %s for IR demodulated input\n",
0170 dev->hw_use_gpio_0a ? "0A" : "40");
0171
0172 if (dev->hw_extra_buffer)
0173 pr_notice("* Uses new style input buffer\n");
0174 return 0;
0175 }
0176
0177
0178 static void ene_rx_setup_hw_buffer(struct ene_device *dev)
0179 {
0180 u16 tmp;
0181
0182 ene_rx_read_hw_pointer(dev);
0183 dev->r_pointer = dev->w_pointer;
0184
0185 if (!dev->hw_extra_buffer) {
0186 dev->buffer_len = ENE_FW_PACKET_SIZE * 2;
0187 return;
0188 }
0189
0190 tmp = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER);
0191 tmp |= ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER+1) << 8;
0192 dev->extra_buf1_address = tmp;
0193
0194 dev->extra_buf1_len = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 2);
0195
0196 tmp = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 3);
0197 tmp |= ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 4) << 8;
0198 dev->extra_buf2_address = tmp;
0199
0200 dev->extra_buf2_len = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 5);
0201
0202 dev->buffer_len = dev->extra_buf1_len + dev->extra_buf2_len + 8;
0203
0204 pr_notice("Hardware uses 2 extended buffers:\n");
0205 pr_notice(" 0x%04x - len : %d\n",
0206 dev->extra_buf1_address, dev->extra_buf1_len);
0207 pr_notice(" 0x%04x - len : %d\n",
0208 dev->extra_buf2_address, dev->extra_buf2_len);
0209
0210 pr_notice("Total buffer len = %d\n", dev->buffer_len);
0211
0212 if (dev->buffer_len > 64 || dev->buffer_len < 16)
0213 goto error;
0214
0215 if (dev->extra_buf1_address > 0xFBFC ||
0216 dev->extra_buf1_address < 0xEC00)
0217 goto error;
0218
0219 if (dev->extra_buf2_address > 0xFBFC ||
0220 dev->extra_buf2_address < 0xEC00)
0221 goto error;
0222
0223 if (dev->r_pointer > dev->buffer_len)
0224 goto error;
0225
0226 ene_set_reg_mask(dev, ENE_FW1, ENE_FW1_EXTRA_BUF_HND);
0227 return;
0228 error:
0229 pr_warn("Error validating extra buffers, device probably won't work\n");
0230 dev->hw_extra_buffer = false;
0231 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_EXTRA_BUF_HND);
0232 }
0233
0234
0235
0236 static void ene_rx_restore_hw_buffer(struct ene_device *dev)
0237 {
0238 if (!dev->hw_extra_buffer)
0239 return;
0240
0241 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 0,
0242 dev->extra_buf1_address & 0xFF);
0243 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 1,
0244 dev->extra_buf1_address >> 8);
0245 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 2, dev->extra_buf1_len);
0246
0247 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 3,
0248 dev->extra_buf2_address & 0xFF);
0249 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 4,
0250 dev->extra_buf2_address >> 8);
0251 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 5,
0252 dev->extra_buf2_len);
0253 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_EXTRA_BUF_HND);
0254 }
0255
0256
0257 static void ene_rx_read_hw_pointer(struct ene_device *dev)
0258 {
0259 if (dev->hw_extra_buffer)
0260 dev->w_pointer = ene_read_reg(dev, ENE_FW_RX_POINTER);
0261 else
0262 dev->w_pointer = ene_read_reg(dev, ENE_FW2)
0263 & ENE_FW2_BUF_WPTR ? 0 : ENE_FW_PACKET_SIZE;
0264
0265 dbg_verbose("RB: HW write pointer: %02x, driver read pointer: %02x",
0266 dev->w_pointer, dev->r_pointer);
0267 }
0268
0269
0270 static int ene_rx_get_sample_reg(struct ene_device *dev)
0271 {
0272 int r_pointer;
0273
0274 if (dev->r_pointer == dev->w_pointer) {
0275 dbg_verbose("RB: hit end, try update w_pointer");
0276 ene_rx_read_hw_pointer(dev);
0277 }
0278
0279 if (dev->r_pointer == dev->w_pointer) {
0280 dbg_verbose("RB: end of data at %d", dev->r_pointer);
0281 return 0;
0282 }
0283
0284 dbg_verbose("RB: reading at offset %d", dev->r_pointer);
0285 r_pointer = dev->r_pointer;
0286
0287 dev->r_pointer++;
0288 if (dev->r_pointer == dev->buffer_len)
0289 dev->r_pointer = 0;
0290
0291 dbg_verbose("RB: next read will be from offset %d", dev->r_pointer);
0292
0293 if (r_pointer < 8) {
0294 dbg_verbose("RB: read at main buffer at %d", r_pointer);
0295 return ENE_FW_SAMPLE_BUFFER + r_pointer;
0296 }
0297
0298 r_pointer -= 8;
0299
0300 if (r_pointer < dev->extra_buf1_len) {
0301 dbg_verbose("RB: read at 1st extra buffer at %d", r_pointer);
0302 return dev->extra_buf1_address + r_pointer;
0303 }
0304
0305 r_pointer -= dev->extra_buf1_len;
0306
0307 if (r_pointer < dev->extra_buf2_len) {
0308 dbg_verbose("RB: read at 2nd extra buffer at %d", r_pointer);
0309 return dev->extra_buf2_address + r_pointer;
0310 }
0311
0312 dbg("attempt to read beyond ring buffer end");
0313 return 0;
0314 }
0315
0316
0317 static void ene_rx_sense_carrier(struct ene_device *dev)
0318 {
0319 int carrier, duty_cycle;
0320 int period = ene_read_reg(dev, ENE_CIRCAR_PRD);
0321 int hperiod = ene_read_reg(dev, ENE_CIRCAR_HPRD);
0322
0323 if (!(period & ENE_CIRCAR_PRD_VALID))
0324 return;
0325
0326 period &= ~ENE_CIRCAR_PRD_VALID;
0327
0328 if (!period)
0329 return;
0330
0331 dbg("RX: hardware carrier period = %02x", period);
0332 dbg("RX: hardware carrier pulse period = %02x", hperiod);
0333
0334 carrier = 2000000 / period;
0335 duty_cycle = (hperiod * 100) / period;
0336 dbg("RX: sensed carrier = %d Hz, duty cycle %d%%",
0337 carrier, duty_cycle);
0338 if (dev->carrier_detect_enabled) {
0339 struct ir_raw_event ev = {
0340 .carrier_report = true,
0341 .carrier = carrier,
0342 .duty_cycle = duty_cycle
0343 };
0344 ir_raw_event_store(dev->rdev, &ev);
0345 }
0346 }
0347
0348
0349 static void ene_rx_enable_cir_engine(struct ene_device *dev, bool enable)
0350 {
0351 ene_set_clear_reg_mask(dev, ENE_CIRCFG,
0352 ENE_CIRCFG_RX_EN | ENE_CIRCFG_RX_IRQ, enable);
0353 }
0354
0355
0356 static void ene_rx_select_input(struct ene_device *dev, bool gpio_0a)
0357 {
0358 ene_set_clear_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_GPIO0A, gpio_0a);
0359 }
0360
0361
0362
0363
0364
0365 static void ene_rx_enable_fan_input(struct ene_device *dev, bool enable)
0366 {
0367 if (!dev->hw_fan_input)
0368 return;
0369
0370 if (!enable)
0371 ene_write_reg(dev, ENE_FAN_AS_IN1, 0);
0372 else {
0373 ene_write_reg(dev, ENE_FAN_AS_IN1, ENE_FAN_AS_IN1_EN);
0374 ene_write_reg(dev, ENE_FAN_AS_IN2, ENE_FAN_AS_IN2_EN);
0375 }
0376 }
0377
0378
0379 static void ene_rx_setup(struct ene_device *dev)
0380 {
0381 bool learning_mode = dev->learning_mode_enabled ||
0382 dev->carrier_detect_enabled;
0383 int sample_period_adjust = 0;
0384
0385 dbg("RX: setup receiver, learning mode = %d", learning_mode);
0386
0387
0388
0389 ene_write_reg(dev, ENE_CIRCFG2, 0x00);
0390
0391
0392 if (sample_period == ENE_DEFAULT_SAMPLE_PERIOD)
0393 sample_period_adjust =
0394 dev->pll_freq == ENE_DEFAULT_PLL_FREQ ? 1 : 2;
0395
0396 ene_write_reg(dev, ENE_CIRRLC_CFG,
0397 (sample_period + sample_period_adjust) |
0398 ENE_CIRRLC_CFG_OVERFLOW);
0399
0400 if (dev->hw_revision < ENE_HW_C)
0401 goto select_timeout;
0402
0403 if (learning_mode) {
0404
0405 WARN_ON(!dev->hw_learning_and_tx_capable);
0406
0407
0408
0409
0410
0411
0412 ene_rx_select_input(dev, !dev->hw_use_gpio_0a);
0413 dev->rx_fan_input_inuse = false;
0414
0415
0416 ene_set_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_CARR_DEMOD);
0417
0418
0419 ene_write_reg(dev, ENE_CIRCAR_PULS, 0x63);
0420 ene_set_clear_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_CARR_DETECT,
0421 dev->carrier_detect_enabled || debug);
0422 } else {
0423 if (dev->hw_fan_input)
0424 dev->rx_fan_input_inuse = true;
0425 else
0426 ene_rx_select_input(dev, dev->hw_use_gpio_0a);
0427
0428
0429 ene_clear_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_CARR_DEMOD);
0430 ene_clear_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_CARR_DETECT);
0431 }
0432
0433 select_timeout:
0434 if (dev->rx_fan_input_inuse) {
0435 dev->rdev->rx_resolution = ENE_FW_SAMPLE_PERIOD_FAN;
0436
0437
0438
0439 dev->rdev->min_timeout = dev->rdev->max_timeout =
0440 ENE_FW_SMPL_BUF_FAN_MSK *
0441 ENE_FW_SAMPLE_PERIOD_FAN;
0442 } else {
0443 dev->rdev->rx_resolution = sample_period;
0444
0445
0446
0447
0448
0449
0450 dev->rdev->min_timeout = 127 * sample_period;
0451 dev->rdev->max_timeout = 200000;
0452 }
0453
0454 if (dev->hw_learning_and_tx_capable)
0455 dev->rdev->tx_resolution = sample_period;
0456
0457 if (dev->rdev->timeout > dev->rdev->max_timeout)
0458 dev->rdev->timeout = dev->rdev->max_timeout;
0459 if (dev->rdev->timeout < dev->rdev->min_timeout)
0460 dev->rdev->timeout = dev->rdev->min_timeout;
0461 }
0462
0463
0464 static void ene_rx_enable_hw(struct ene_device *dev)
0465 {
0466 u8 reg_value;
0467
0468
0469 if (dev->hw_revision < ENE_HW_C) {
0470 ene_write_reg(dev, ENEB_IRQ, dev->irq << 1);
0471 ene_write_reg(dev, ENEB_IRQ_UNK1, 0x01);
0472 } else {
0473 reg_value = ene_read_reg(dev, ENE_IRQ) & 0xF0;
0474 reg_value |= ENE_IRQ_UNK_EN;
0475 reg_value &= ~ENE_IRQ_STATUS;
0476 reg_value |= (dev->irq & ENE_IRQ_MASK);
0477 ene_write_reg(dev, ENE_IRQ, reg_value);
0478 }
0479
0480
0481 ene_rx_enable_fan_input(dev, dev->rx_fan_input_inuse);
0482 ene_rx_enable_cir_engine(dev, !dev->rx_fan_input_inuse);
0483
0484
0485 ene_irq_status(dev);
0486
0487
0488 ene_set_reg_mask(dev, ENE_FW1, ENE_FW1_ENABLE | ENE_FW1_IRQ);
0489
0490
0491 ir_raw_event_set_idle(dev->rdev, true);
0492 }
0493
0494
0495 static void ene_rx_enable(struct ene_device *dev)
0496 {
0497 ene_rx_enable_hw(dev);
0498 dev->rx_enabled = true;
0499 }
0500
0501
0502 static void ene_rx_disable_hw(struct ene_device *dev)
0503 {
0504
0505 ene_rx_enable_cir_engine(dev, false);
0506 ene_rx_enable_fan_input(dev, false);
0507
0508
0509 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_ENABLE | ENE_FW1_IRQ);
0510 ir_raw_event_set_idle(dev->rdev, true);
0511 }
0512
0513
0514 static void ene_rx_disable(struct ene_device *dev)
0515 {
0516 ene_rx_disable_hw(dev);
0517 dev->rx_enabled = false;
0518 }
0519
0520
0521
0522
0523 static void ene_rx_reset(struct ene_device *dev)
0524 {
0525 ene_clear_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_RX_EN);
0526 ene_set_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_RX_EN);
0527 }
0528
0529
0530 static void ene_tx_set_carrier(struct ene_device *dev)
0531 {
0532 u8 tx_puls_width;
0533 unsigned long flags;
0534
0535 spin_lock_irqsave(&dev->hw_lock, flags);
0536
0537 ene_set_clear_reg_mask(dev, ENE_CIRCFG,
0538 ENE_CIRCFG_TX_CARR, dev->tx_period > 0);
0539
0540 if (!dev->tx_period)
0541 goto unlock;
0542
0543 BUG_ON(dev->tx_duty_cycle >= 100 || dev->tx_duty_cycle <= 0);
0544
0545 tx_puls_width = dev->tx_period / (100 / dev->tx_duty_cycle);
0546
0547 if (!tx_puls_width)
0548 tx_puls_width = 1;
0549
0550 dbg("TX: pulse distance = %d * 500 ns", dev->tx_period);
0551 dbg("TX: pulse width = %d * 500 ns", tx_puls_width);
0552
0553 ene_write_reg(dev, ENE_CIRMOD_PRD, dev->tx_period | ENE_CIRMOD_PRD_POL);
0554 ene_write_reg(dev, ENE_CIRMOD_HPRD, tx_puls_width);
0555 unlock:
0556 spin_unlock_irqrestore(&dev->hw_lock, flags);
0557 }
0558
0559
0560 static void ene_tx_set_transmitters(struct ene_device *dev)
0561 {
0562 unsigned long flags;
0563
0564 spin_lock_irqsave(&dev->hw_lock, flags);
0565 ene_set_clear_reg_mask(dev, ENE_GPIOFS8, ENE_GPIOFS8_GPIO41,
0566 !!(dev->transmitter_mask & 0x01));
0567 ene_set_clear_reg_mask(dev, ENE_GPIOFS1, ENE_GPIOFS1_GPIO0D,
0568 !!(dev->transmitter_mask & 0x02));
0569 spin_unlock_irqrestore(&dev->hw_lock, flags);
0570 }
0571
0572
0573 static void ene_tx_enable(struct ene_device *dev)
0574 {
0575 u8 conf1 = ene_read_reg(dev, ENE_CIRCFG);
0576 u8 fwreg2 = ene_read_reg(dev, ENE_FW2);
0577
0578 dev->saved_conf1 = conf1;
0579
0580
0581 if (fwreg2 & ENE_FW2_EMMITER1_CONN)
0582 dbg("TX: Transmitter #1 is connected");
0583
0584 if (fwreg2 & ENE_FW2_EMMITER2_CONN)
0585 dbg("TX: Transmitter #2 is connected");
0586
0587 if (!(fwreg2 & (ENE_FW2_EMMITER1_CONN | ENE_FW2_EMMITER2_CONN)))
0588 pr_warn("TX: transmitter cable isn't connected!\n");
0589
0590
0591 if (dev->hw_revision == ENE_HW_C)
0592 conf1 &= ~ENE_CIRCFG_RX_EN;
0593
0594
0595 conf1 |= ENE_CIRCFG_TX_EN | ENE_CIRCFG_TX_IRQ;
0596 ene_write_reg(dev, ENE_CIRCFG, conf1);
0597 }
0598
0599
0600 static void ene_tx_disable(struct ene_device *dev)
0601 {
0602 ene_write_reg(dev, ENE_CIRCFG, dev->saved_conf1);
0603 dev->tx_buffer = NULL;
0604 }
0605
0606
0607
0608 static void ene_tx_sample(struct ene_device *dev)
0609 {
0610 u8 raw_tx;
0611 u32 sample;
0612 bool pulse = dev->tx_sample_pulse;
0613
0614 if (!dev->tx_buffer) {
0615 pr_warn("TX: BUG: attempt to transmit NULL buffer\n");
0616 return;
0617 }
0618
0619
0620 if (!dev->tx_sample) {
0621
0622 if (dev->tx_pos == dev->tx_len) {
0623 if (!dev->tx_done) {
0624 dbg("TX: no more data to send");
0625 dev->tx_done = true;
0626 goto exit;
0627 } else {
0628 dbg("TX: last sample sent by hardware");
0629 ene_tx_disable(dev);
0630 complete(&dev->tx_complete);
0631 return;
0632 }
0633 }
0634
0635 sample = dev->tx_buffer[dev->tx_pos++];
0636 dev->tx_sample_pulse = !dev->tx_sample_pulse;
0637
0638 dev->tx_sample = DIV_ROUND_CLOSEST(sample, sample_period);
0639
0640 if (!dev->tx_sample)
0641 dev->tx_sample = 1;
0642 }
0643
0644 raw_tx = min(dev->tx_sample , (unsigned int)ENE_CIRRLC_OUT_MASK);
0645 dev->tx_sample -= raw_tx;
0646
0647 dbg("TX: sample %8d (%s)", raw_tx * sample_period,
0648 pulse ? "pulse" : "space");
0649 if (pulse)
0650 raw_tx |= ENE_CIRRLC_OUT_PULSE;
0651
0652 ene_write_reg(dev,
0653 dev->tx_reg ? ENE_CIRRLC_OUT1 : ENE_CIRRLC_OUT0, raw_tx);
0654
0655 dev->tx_reg = !dev->tx_reg;
0656 exit:
0657
0658 if (txsim)
0659 mod_timer(&dev->tx_sim_timer, jiffies + HZ / 500);
0660 }
0661
0662
0663 static void ene_tx_irqsim(struct timer_list *t)
0664 {
0665 struct ene_device *dev = from_timer(dev, t, tx_sim_timer);
0666 unsigned long flags;
0667
0668 spin_lock_irqsave(&dev->hw_lock, flags);
0669 ene_tx_sample(dev);
0670 spin_unlock_irqrestore(&dev->hw_lock, flags);
0671 }
0672
0673
0674
0675 static int ene_irq_status(struct ene_device *dev)
0676 {
0677 u8 irq_status;
0678 u8 fw_flags1, fw_flags2;
0679 int retval = 0;
0680
0681 fw_flags2 = ene_read_reg(dev, ENE_FW2);
0682
0683 if (dev->hw_revision < ENE_HW_C) {
0684 irq_status = ene_read_reg(dev, ENEB_IRQ_STATUS);
0685
0686 if (!(irq_status & ENEB_IRQ_STATUS_IR))
0687 return 0;
0688
0689 ene_clear_reg_mask(dev, ENEB_IRQ_STATUS, ENEB_IRQ_STATUS_IR);
0690 return ENE_IRQ_RX;
0691 }
0692
0693 irq_status = ene_read_reg(dev, ENE_IRQ);
0694 if (!(irq_status & ENE_IRQ_STATUS))
0695 return 0;
0696
0697
0698 ene_write_reg(dev, ENE_IRQ, irq_status & ~ENE_IRQ_STATUS);
0699 ene_write_reg(dev, ENE_IRQ, irq_status & ~ENE_IRQ_STATUS);
0700
0701
0702 if (fw_flags2 & ENE_FW2_RXIRQ) {
0703 retval |= ENE_IRQ_RX;
0704 ene_write_reg(dev, ENE_FW2, fw_flags2 & ~ENE_FW2_RXIRQ);
0705 }
0706
0707
0708 fw_flags1 = ene_read_reg(dev, ENE_FW1);
0709 if (fw_flags1 & ENE_FW1_TXIRQ) {
0710 ene_write_reg(dev, ENE_FW1, fw_flags1 & ~ENE_FW1_TXIRQ);
0711 retval |= ENE_IRQ_TX;
0712 }
0713
0714 return retval;
0715 }
0716
0717
0718 static irqreturn_t ene_isr(int irq, void *data)
0719 {
0720 u16 hw_value, reg;
0721 int hw_sample, irq_status;
0722 bool pulse;
0723 unsigned long flags;
0724 irqreturn_t retval = IRQ_NONE;
0725 struct ene_device *dev = (struct ene_device *)data;
0726 struct ir_raw_event ev = {};
0727
0728 spin_lock_irqsave(&dev->hw_lock, flags);
0729
0730 dbg_verbose("ISR called");
0731 ene_rx_read_hw_pointer(dev);
0732 irq_status = ene_irq_status(dev);
0733
0734 if (!irq_status)
0735 goto unlock;
0736
0737 retval = IRQ_HANDLED;
0738
0739 if (irq_status & ENE_IRQ_TX) {
0740 dbg_verbose("TX interrupt");
0741 if (!dev->hw_learning_and_tx_capable) {
0742 dbg("TX interrupt on unsupported device!");
0743 goto unlock;
0744 }
0745 ene_tx_sample(dev);
0746 }
0747
0748 if (!(irq_status & ENE_IRQ_RX))
0749 goto unlock;
0750
0751 dbg_verbose("RX interrupt");
0752
0753 if (dev->hw_learning_and_tx_capable)
0754 ene_rx_sense_carrier(dev);
0755
0756
0757
0758 if (!dev->hw_extra_buffer)
0759 dev->r_pointer = dev->w_pointer == 0 ? ENE_FW_PACKET_SIZE : 0;
0760
0761 while (1) {
0762
0763 reg = ene_rx_get_sample_reg(dev);
0764
0765 dbg_verbose("next sample to read at: %04x", reg);
0766 if (!reg)
0767 break;
0768
0769 hw_value = ene_read_reg(dev, reg);
0770
0771 if (dev->rx_fan_input_inuse) {
0772
0773 int offset = ENE_FW_SMPL_BUF_FAN - ENE_FW_SAMPLE_BUFFER;
0774
0775
0776 hw_value |= ene_read_reg(dev, reg + offset) << 8;
0777 pulse = hw_value & ENE_FW_SMPL_BUF_FAN_PLS;
0778
0779
0780 hw_value &= ENE_FW_SMPL_BUF_FAN_MSK;
0781 hw_sample = hw_value * ENE_FW_SAMPLE_PERIOD_FAN;
0782
0783 } else {
0784 pulse = !(hw_value & ENE_FW_SAMPLE_SPACE);
0785 hw_value &= ~ENE_FW_SAMPLE_SPACE;
0786 hw_sample = hw_value * sample_period;
0787
0788 if (dev->rx_period_adjust) {
0789 hw_sample *= 100;
0790 hw_sample /= (100 + dev->rx_period_adjust);
0791 }
0792 }
0793
0794 if (!dev->hw_extra_buffer && !hw_sample) {
0795 dev->r_pointer = dev->w_pointer;
0796 continue;
0797 }
0798
0799 dbg("RX: %d (%s)", hw_sample, pulse ? "pulse" : "space");
0800
0801 ev.duration = hw_sample;
0802 ev.pulse = pulse;
0803 ir_raw_event_store_with_filter(dev->rdev, &ev);
0804 }
0805
0806 ir_raw_event_handle(dev->rdev);
0807 unlock:
0808 spin_unlock_irqrestore(&dev->hw_lock, flags);
0809 return retval;
0810 }
0811
0812
0813 static void ene_setup_default_settings(struct ene_device *dev)
0814 {
0815 dev->tx_period = 32;
0816 dev->tx_duty_cycle = 50;
0817 dev->transmitter_mask = 0x03;
0818 dev->learning_mode_enabled = learning_mode_force;
0819
0820
0821 dev->rdev->timeout = MS_TO_US(150);
0822 }
0823
0824
0825 static void ene_setup_hw_settings(struct ene_device *dev)
0826 {
0827 if (dev->hw_learning_and_tx_capable) {
0828 ene_tx_set_carrier(dev);
0829 ene_tx_set_transmitters(dev);
0830 }
0831
0832 ene_rx_setup(dev);
0833 }
0834
0835
0836 static int ene_open(struct rc_dev *rdev)
0837 {
0838 struct ene_device *dev = rdev->priv;
0839 unsigned long flags;
0840
0841 spin_lock_irqsave(&dev->hw_lock, flags);
0842 ene_rx_enable(dev);
0843 spin_unlock_irqrestore(&dev->hw_lock, flags);
0844 return 0;
0845 }
0846
0847
0848 static void ene_close(struct rc_dev *rdev)
0849 {
0850 struct ene_device *dev = rdev->priv;
0851 unsigned long flags;
0852 spin_lock_irqsave(&dev->hw_lock, flags);
0853
0854 ene_rx_disable(dev);
0855 spin_unlock_irqrestore(&dev->hw_lock, flags);
0856 }
0857
0858
0859 static int ene_set_tx_mask(struct rc_dev *rdev, u32 tx_mask)
0860 {
0861 struct ene_device *dev = rdev->priv;
0862 dbg("TX: attempt to set transmitter mask %02x", tx_mask);
0863
0864
0865 if (!tx_mask || tx_mask & ~0x03) {
0866 dbg("TX: invalid mask");
0867
0868 return 2;
0869 }
0870
0871 dev->transmitter_mask = tx_mask;
0872 ene_tx_set_transmitters(dev);
0873 return 0;
0874 }
0875
0876
0877 static int ene_set_tx_carrier(struct rc_dev *rdev, u32 carrier)
0878 {
0879 struct ene_device *dev = rdev->priv;
0880 u32 period;
0881
0882 dbg("TX: attempt to set tx carrier to %d kHz", carrier);
0883 if (carrier == 0)
0884 return -EINVAL;
0885
0886 period = 2000000 / carrier;
0887 if (period && (period > ENE_CIRMOD_PRD_MAX ||
0888 period < ENE_CIRMOD_PRD_MIN)) {
0889
0890 dbg("TX: out of range %d-%d kHz carrier",
0891 2000 / ENE_CIRMOD_PRD_MIN, 2000 / ENE_CIRMOD_PRD_MAX);
0892 return -EINVAL;
0893 }
0894
0895 dev->tx_period = period;
0896 ene_tx_set_carrier(dev);
0897 return 0;
0898 }
0899
0900
0901 static int ene_set_tx_duty_cycle(struct rc_dev *rdev, u32 duty_cycle)
0902 {
0903 struct ene_device *dev = rdev->priv;
0904 dbg("TX: setting duty cycle to %d%%", duty_cycle);
0905 dev->tx_duty_cycle = duty_cycle;
0906 ene_tx_set_carrier(dev);
0907 return 0;
0908 }
0909
0910
0911 static int ene_set_learning_mode(struct rc_dev *rdev, int enable)
0912 {
0913 struct ene_device *dev = rdev->priv;
0914 unsigned long flags;
0915 if (enable == dev->learning_mode_enabled)
0916 return 0;
0917
0918 spin_lock_irqsave(&dev->hw_lock, flags);
0919 dev->learning_mode_enabled = enable;
0920 ene_rx_disable(dev);
0921 ene_rx_setup(dev);
0922 ene_rx_enable(dev);
0923 spin_unlock_irqrestore(&dev->hw_lock, flags);
0924 return 0;
0925 }
0926
0927 static int ene_set_carrier_report(struct rc_dev *rdev, int enable)
0928 {
0929 struct ene_device *dev = rdev->priv;
0930 unsigned long flags;
0931
0932 if (enable == dev->carrier_detect_enabled)
0933 return 0;
0934
0935 spin_lock_irqsave(&dev->hw_lock, flags);
0936 dev->carrier_detect_enabled = enable;
0937 ene_rx_disable(dev);
0938 ene_rx_setup(dev);
0939 ene_rx_enable(dev);
0940 spin_unlock_irqrestore(&dev->hw_lock, flags);
0941 return 0;
0942 }
0943
0944
0945 static void ene_set_idle(struct rc_dev *rdev, bool idle)
0946 {
0947 struct ene_device *dev = rdev->priv;
0948
0949 if (idle) {
0950 ene_rx_reset(dev);
0951 dbg("RX: end of data");
0952 }
0953 }
0954
0955
0956 static int ene_transmit(struct rc_dev *rdev, unsigned *buf, unsigned n)
0957 {
0958 struct ene_device *dev = rdev->priv;
0959 unsigned long flags;
0960
0961 dev->tx_buffer = buf;
0962 dev->tx_len = n;
0963 dev->tx_pos = 0;
0964 dev->tx_reg = 0;
0965 dev->tx_done = 0;
0966 dev->tx_sample = 0;
0967 dev->tx_sample_pulse = false;
0968
0969 dbg("TX: %d samples", dev->tx_len);
0970
0971 spin_lock_irqsave(&dev->hw_lock, flags);
0972
0973 ene_tx_enable(dev);
0974
0975
0976 ene_tx_sample(dev);
0977 ene_tx_sample(dev);
0978
0979 spin_unlock_irqrestore(&dev->hw_lock, flags);
0980
0981 if (wait_for_completion_timeout(&dev->tx_complete, 2 * HZ) == 0) {
0982 dbg("TX: timeout");
0983 spin_lock_irqsave(&dev->hw_lock, flags);
0984 ene_tx_disable(dev);
0985 spin_unlock_irqrestore(&dev->hw_lock, flags);
0986 } else
0987 dbg("TX: done");
0988 return n;
0989 }
0990
0991
0992 static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
0993 {
0994 int error = -ENOMEM;
0995 struct rc_dev *rdev;
0996 struct ene_device *dev;
0997
0998
0999 dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
1000 rdev = rc_allocate_device(RC_DRIVER_IR_RAW);
1001 if (!dev || !rdev)
1002 goto exit_free_dev_rdev;
1003
1004
1005 error = -ENODEV;
1006
1007
1008 dev->hw_io = -1;
1009 dev->irq = -1;
1010
1011 if (!pnp_port_valid(pnp_dev, 0) ||
1012 pnp_port_len(pnp_dev, 0) < ENE_IO_SIZE)
1013 goto exit_free_dev_rdev;
1014
1015 if (!pnp_irq_valid(pnp_dev, 0))
1016 goto exit_free_dev_rdev;
1017
1018 spin_lock_init(&dev->hw_lock);
1019
1020 dev->hw_io = pnp_port_start(pnp_dev, 0);
1021 dev->irq = pnp_irq(pnp_dev, 0);
1022
1023
1024 pnp_set_drvdata(pnp_dev, dev);
1025 dev->pnp_dev = pnp_dev;
1026
1027
1028 if (sample_period < 5 || sample_period > 0x7F)
1029 sample_period = ENE_DEFAULT_SAMPLE_PERIOD;
1030
1031
1032 error = ene_hw_detect(dev);
1033 if (error)
1034 goto exit_free_dev_rdev;
1035
1036 if (!dev->hw_learning_and_tx_capable && txsim) {
1037 dev->hw_learning_and_tx_capable = true;
1038 timer_setup(&dev->tx_sim_timer, ene_tx_irqsim, 0);
1039 pr_warn("Simulation of TX activated\n");
1040 }
1041
1042 if (!dev->hw_learning_and_tx_capable)
1043 learning_mode_force = false;
1044
1045 rdev->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER;
1046 rdev->priv = dev;
1047 rdev->open = ene_open;
1048 rdev->close = ene_close;
1049 rdev->s_idle = ene_set_idle;
1050 rdev->driver_name = ENE_DRIVER_NAME;
1051 rdev->map_name = RC_MAP_RC6_MCE;
1052 rdev->device_name = "ENE eHome Infrared Remote Receiver";
1053
1054 if (dev->hw_learning_and_tx_capable) {
1055 rdev->s_wideband_receiver = ene_set_learning_mode;
1056 init_completion(&dev->tx_complete);
1057 rdev->tx_ir = ene_transmit;
1058 rdev->s_tx_mask = ene_set_tx_mask;
1059 rdev->s_tx_carrier = ene_set_tx_carrier;
1060 rdev->s_tx_duty_cycle = ene_set_tx_duty_cycle;
1061 rdev->s_carrier_report = ene_set_carrier_report;
1062 rdev->device_name = "ENE eHome Infrared Remote Transceiver";
1063 }
1064
1065 dev->rdev = rdev;
1066
1067 ene_rx_setup_hw_buffer(dev);
1068 ene_setup_default_settings(dev);
1069 ene_setup_hw_settings(dev);
1070
1071 device_set_wakeup_capable(&pnp_dev->dev, true);
1072 device_set_wakeup_enable(&pnp_dev->dev, true);
1073
1074 error = rc_register_device(rdev);
1075 if (error < 0)
1076 goto exit_free_dev_rdev;
1077
1078
1079 error = -EBUSY;
1080 if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
1081 goto exit_unregister_device;
1082 }
1083
1084 if (request_irq(dev->irq, ene_isr,
1085 IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
1086 goto exit_release_hw_io;
1087 }
1088
1089 pr_notice("driver has been successfully loaded\n");
1090 return 0;
1091
1092 exit_release_hw_io:
1093 release_region(dev->hw_io, ENE_IO_SIZE);
1094 exit_unregister_device:
1095 rc_unregister_device(rdev);
1096 rdev = NULL;
1097 exit_free_dev_rdev:
1098 rc_free_device(rdev);
1099 kfree(dev);
1100 return error;
1101 }
1102
1103
1104 static void ene_remove(struct pnp_dev *pnp_dev)
1105 {
1106 struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1107 unsigned long flags;
1108
1109 spin_lock_irqsave(&dev->hw_lock, flags);
1110 ene_rx_disable(dev);
1111 ene_rx_restore_hw_buffer(dev);
1112 spin_unlock_irqrestore(&dev->hw_lock, flags);
1113
1114 free_irq(dev->irq, dev);
1115 release_region(dev->hw_io, ENE_IO_SIZE);
1116 rc_unregister_device(dev->rdev);
1117 kfree(dev);
1118 }
1119
1120
1121 static void ene_enable_wake(struct ene_device *dev, bool enable)
1122 {
1123 dbg("wake on IR %s", enable ? "enabled" : "disabled");
1124 ene_set_clear_reg_mask(dev, ENE_FW1, ENE_FW1_WAKE, enable);
1125 }
1126
1127 #ifdef CONFIG_PM
1128 static int ene_suspend(struct pnp_dev *pnp_dev, pm_message_t state)
1129 {
1130 struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1131 bool wake = device_may_wakeup(&dev->pnp_dev->dev);
1132
1133 if (!wake && dev->rx_enabled)
1134 ene_rx_disable_hw(dev);
1135
1136 ene_enable_wake(dev, wake);
1137 return 0;
1138 }
1139
1140 static int ene_resume(struct pnp_dev *pnp_dev)
1141 {
1142 struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1143 ene_setup_hw_settings(dev);
1144
1145 if (dev->rx_enabled)
1146 ene_rx_enable(dev);
1147
1148 ene_enable_wake(dev, false);
1149 return 0;
1150 }
1151 #endif
1152
1153 static void ene_shutdown(struct pnp_dev *pnp_dev)
1154 {
1155 struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1156 ene_enable_wake(dev, true);
1157 }
1158
1159 static const struct pnp_device_id ene_ids[] = {
1160 {.id = "ENE0100",},
1161 {.id = "ENE0200",},
1162 {.id = "ENE0201",},
1163 {.id = "ENE0202",},
1164 {},
1165 };
1166
1167 static struct pnp_driver ene_driver = {
1168 .name = ENE_DRIVER_NAME,
1169 .id_table = ene_ids,
1170 .flags = PNP_DRIVER_RES_DO_NOT_CHANGE,
1171
1172 .probe = ene_probe,
1173 .remove = ene_remove,
1174 #ifdef CONFIG_PM
1175 .suspend = ene_suspend,
1176 .resume = ene_resume,
1177 #endif
1178 .shutdown = ene_shutdown,
1179 };
1180
1181 module_param(sample_period, int, S_IRUGO);
1182 MODULE_PARM_DESC(sample_period, "Hardware sample period (50 us default)");
1183
1184 module_param(learning_mode_force, bool, S_IRUGO);
1185 MODULE_PARM_DESC(learning_mode_force, "Enable learning mode by default");
1186
1187 module_param(debug, int, S_IRUGO | S_IWUSR);
1188 MODULE_PARM_DESC(debug, "Debug level");
1189
1190 module_param(txsim, bool, S_IRUGO);
1191 MODULE_PARM_DESC(txsim,
1192 "Simulate TX features on unsupported hardware (dangerous)");
1193
1194 MODULE_DEVICE_TABLE(pnp, ene_ids);
1195 MODULE_DESCRIPTION
1196 ("Infrared input driver for KB3926B/C/D/E/F (aka ENE0100/ENE0200/ENE0201/ENE0202) CIR port");
1197
1198 MODULE_AUTHOR("Maxim Levitsky");
1199 MODULE_LICENSE("GPL");
1200
1201 module_pnp_driver(ene_driver);