]> git.ipfire.org Git - thirdparty/kernel/stable.git/blob - drivers/media/rc/ene_ir.c
Merge tag 'drm-intel-next-2019-03-20' of git://anongit.freedesktop.org/drm/drm-intel...
[thirdparty/kernel/stable.git] / drivers / media / rc / ene_ir.c
1 /*
2 * driver for ENE KB3926 B/C/D/E/F CIR (pnp id: ENE0XXX)
3 *
4 * Copyright (C) 2010 Maxim Levitsky <maximlevitsky@gmail.com>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * Special thanks to:
17 * Sami R. <maesesami@gmail.com> for lot of help in debugging and therefore
18 * bringing to life support for transmission & learning mode.
19 *
20 * Charlie Andrews <charliethepilot@googlemail.com> for lots of help in
21 * bringing up the support of new firmware buffer that is popular
22 * on latest notebooks
23 *
24 * ENE for partial device documentation
25 *
26 */
27
28 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
29
30 #include <linux/kernel.h>
31 #include <linux/module.h>
32 #include <linux/pnp.h>
33 #include <linux/io.h>
34 #include <linux/interrupt.h>
35 #include <linux/sched.h>
36 #include <linux/slab.h>
37 #include <media/rc-core.h>
38 #include "ene_ir.h"
39
40 static int sample_period;
41 static bool learning_mode_force;
42 static int debug;
43 static bool txsim;
44
45 static void ene_set_reg_addr(struct ene_device *dev, u16 reg)
46 {
47 outb(reg >> 8, dev->hw_io + ENE_ADDR_HI);
48 outb(reg & 0xFF, dev->hw_io + ENE_ADDR_LO);
49 }
50
51 /* read a hardware register */
52 static u8 ene_read_reg(struct ene_device *dev, u16 reg)
53 {
54 u8 retval;
55 ene_set_reg_addr(dev, reg);
56 retval = inb(dev->hw_io + ENE_IO);
57 dbg_regs("reg %04x == %02x", reg, retval);
58 return retval;
59 }
60
61 /* write a hardware register */
62 static void ene_write_reg(struct ene_device *dev, u16 reg, u8 value)
63 {
64 dbg_regs("reg %04x <- %02x", reg, value);
65 ene_set_reg_addr(dev, reg);
66 outb(value, dev->hw_io + ENE_IO);
67 }
68
69 /* Set bits in hardware register */
70 static void ene_set_reg_mask(struct ene_device *dev, u16 reg, u8 mask)
71 {
72 dbg_regs("reg %04x |= %02x", reg, mask);
73 ene_set_reg_addr(dev, reg);
74 outb(inb(dev->hw_io + ENE_IO) | mask, dev->hw_io + ENE_IO);
75 }
76
77 /* Clear bits in hardware register */
78 static void ene_clear_reg_mask(struct ene_device *dev, u16 reg, u8 mask)
79 {
80 dbg_regs("reg %04x &= ~%02x ", reg, mask);
81 ene_set_reg_addr(dev, reg);
82 outb(inb(dev->hw_io + ENE_IO) & ~mask, dev->hw_io + ENE_IO);
83 }
84
85 /* A helper to set/clear a bit in register according to boolean variable */
86 static void ene_set_clear_reg_mask(struct ene_device *dev, u16 reg, u8 mask,
87 bool set)
88 {
89 if (set)
90 ene_set_reg_mask(dev, reg, mask);
91 else
92 ene_clear_reg_mask(dev, reg, mask);
93 }
94
95 /* detect hardware features */
96 static int ene_hw_detect(struct ene_device *dev)
97 {
98 u8 chip_major, chip_minor;
99 u8 hw_revision, old_ver;
100 u8 fw_reg2, fw_reg1;
101
102 ene_clear_reg_mask(dev, ENE_ECSTS, ENE_ECSTS_RSRVD);
103 chip_major = ene_read_reg(dev, ENE_ECVER_MAJOR);
104 chip_minor = ene_read_reg(dev, ENE_ECVER_MINOR);
105 ene_set_reg_mask(dev, ENE_ECSTS, ENE_ECSTS_RSRVD);
106
107 hw_revision = ene_read_reg(dev, ENE_ECHV);
108 old_ver = ene_read_reg(dev, ENE_HW_VER_OLD);
109
110 dev->pll_freq = (ene_read_reg(dev, ENE_PLLFRH) << 4) +
111 (ene_read_reg(dev, ENE_PLLFRL) >> 4);
112
113 if (sample_period != ENE_DEFAULT_SAMPLE_PERIOD)
114 dev->rx_period_adjust =
115 dev->pll_freq == ENE_DEFAULT_PLL_FREQ ? 2 : 4;
116
117 if (hw_revision == 0xFF) {
118 pr_warn("device seems to be disabled\n");
119 pr_warn("send a mail to lirc-list@lists.sourceforge.net\n");
120 pr_warn("please attach output of acpidump and dmidecode\n");
121 return -ENODEV;
122 }
123
124 pr_notice("chip is 0x%02x%02x - kbver = 0x%02x, rev = 0x%02x\n",
125 chip_major, chip_minor, old_ver, hw_revision);
126
127 pr_notice("PLL freq = %d\n", dev->pll_freq);
128
129 if (chip_major == 0x33) {
130 pr_warn("chips 0x33xx aren't supported\n");
131 return -ENODEV;
132 }
133
134 if (chip_major == 0x39 && chip_minor == 0x26 && hw_revision == 0xC0) {
135 dev->hw_revision = ENE_HW_C;
136 pr_notice("KB3926C detected\n");
137 } else if (old_ver == 0x24 && hw_revision == 0xC0) {
138 dev->hw_revision = ENE_HW_B;
139 pr_notice("KB3926B detected\n");
140 } else {
141 dev->hw_revision = ENE_HW_D;
142 pr_notice("KB3926D or higher detected\n");
143 }
144
145 /* detect features hardware supports */
146 if (dev->hw_revision < ENE_HW_C)
147 return 0;
148
149 fw_reg1 = ene_read_reg(dev, ENE_FW1);
150 fw_reg2 = ene_read_reg(dev, ENE_FW2);
151
152 pr_notice("Firmware regs: %02x %02x\n", fw_reg1, fw_reg2);
153
154 dev->hw_use_gpio_0a = !!(fw_reg2 & ENE_FW2_GP0A);
155 dev->hw_learning_and_tx_capable = !!(fw_reg2 & ENE_FW2_LEARNING);
156 dev->hw_extra_buffer = !!(fw_reg1 & ENE_FW1_HAS_EXTRA_BUF);
157
158 if (dev->hw_learning_and_tx_capable)
159 dev->hw_fan_input = !!(fw_reg2 & ENE_FW2_FAN_INPUT);
160
161 pr_notice("Hardware features:\n");
162
163 if (dev->hw_learning_and_tx_capable) {
164 pr_notice("* Supports transmitting & learning mode\n");
165 pr_notice(" This feature is rare and therefore,\n");
166 pr_notice(" you are welcome to test it,\n");
167 pr_notice(" and/or contact the author via:\n");
168 pr_notice(" lirc-list@lists.sourceforge.net\n");
169 pr_notice(" or maximlevitsky@gmail.com\n");
170
171 pr_notice("* Uses GPIO %s for IR raw input\n",
172 dev->hw_use_gpio_0a ? "40" : "0A");
173
174 if (dev->hw_fan_input)
175 pr_notice("* Uses unused fan feedback input as source of demodulated IR data\n");
176 }
177
178 if (!dev->hw_fan_input)
179 pr_notice("* Uses GPIO %s for IR demodulated input\n",
180 dev->hw_use_gpio_0a ? "0A" : "40");
181
182 if (dev->hw_extra_buffer)
183 pr_notice("* Uses new style input buffer\n");
184 return 0;
185 }
186
187 /* Read properties of hw sample buffer */
188 static void ene_rx_setup_hw_buffer(struct ene_device *dev)
189 {
190 u16 tmp;
191
192 ene_rx_read_hw_pointer(dev);
193 dev->r_pointer = dev->w_pointer;
194
195 if (!dev->hw_extra_buffer) {
196 dev->buffer_len = ENE_FW_PACKET_SIZE * 2;
197 return;
198 }
199
200 tmp = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER);
201 tmp |= ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER+1) << 8;
202 dev->extra_buf1_address = tmp;
203
204 dev->extra_buf1_len = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 2);
205
206 tmp = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 3);
207 tmp |= ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 4) << 8;
208 dev->extra_buf2_address = tmp;
209
210 dev->extra_buf2_len = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 5);
211
212 dev->buffer_len = dev->extra_buf1_len + dev->extra_buf2_len + 8;
213
214 pr_notice("Hardware uses 2 extended buffers:\n");
215 pr_notice(" 0x%04x - len : %d\n",
216 dev->extra_buf1_address, dev->extra_buf1_len);
217 pr_notice(" 0x%04x - len : %d\n",
218 dev->extra_buf2_address, dev->extra_buf2_len);
219
220 pr_notice("Total buffer len = %d\n", dev->buffer_len);
221
222 if (dev->buffer_len > 64 || dev->buffer_len < 16)
223 goto error;
224
225 if (dev->extra_buf1_address > 0xFBFC ||
226 dev->extra_buf1_address < 0xEC00)
227 goto error;
228
229 if (dev->extra_buf2_address > 0xFBFC ||
230 dev->extra_buf2_address < 0xEC00)
231 goto error;
232
233 if (dev->r_pointer > dev->buffer_len)
234 goto error;
235
236 ene_set_reg_mask(dev, ENE_FW1, ENE_FW1_EXTRA_BUF_HND);
237 return;
238 error:
239 pr_warn("Error validating extra buffers, device probably won't work\n");
240 dev->hw_extra_buffer = false;
241 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_EXTRA_BUF_HND);
242 }
243
244
245 /* Restore the pointers to extra buffers - to make module reload work*/
246 static void ene_rx_restore_hw_buffer(struct ene_device *dev)
247 {
248 if (!dev->hw_extra_buffer)
249 return;
250
251 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 0,
252 dev->extra_buf1_address & 0xFF);
253 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 1,
254 dev->extra_buf1_address >> 8);
255 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 2, dev->extra_buf1_len);
256
257 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 3,
258 dev->extra_buf2_address & 0xFF);
259 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 4,
260 dev->extra_buf2_address >> 8);
261 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 5,
262 dev->extra_buf2_len);
263 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_EXTRA_BUF_HND);
264 }
265
266 /* Read hardware write pointer */
267 static void ene_rx_read_hw_pointer(struct ene_device *dev)
268 {
269 if (dev->hw_extra_buffer)
270 dev->w_pointer = ene_read_reg(dev, ENE_FW_RX_POINTER);
271 else
272 dev->w_pointer = ene_read_reg(dev, ENE_FW2)
273 & ENE_FW2_BUF_WPTR ? 0 : ENE_FW_PACKET_SIZE;
274
275 dbg_verbose("RB: HW write pointer: %02x, driver read pointer: %02x",
276 dev->w_pointer, dev->r_pointer);
277 }
278
279 /* Gets address of next sample from HW ring buffer */
280 static int ene_rx_get_sample_reg(struct ene_device *dev)
281 {
282 int r_pointer;
283
284 if (dev->r_pointer == dev->w_pointer) {
285 dbg_verbose("RB: hit end, try update w_pointer");
286 ene_rx_read_hw_pointer(dev);
287 }
288
289 if (dev->r_pointer == dev->w_pointer) {
290 dbg_verbose("RB: end of data at %d", dev->r_pointer);
291 return 0;
292 }
293
294 dbg_verbose("RB: reading at offset %d", dev->r_pointer);
295 r_pointer = dev->r_pointer;
296
297 dev->r_pointer++;
298 if (dev->r_pointer == dev->buffer_len)
299 dev->r_pointer = 0;
300
301 dbg_verbose("RB: next read will be from offset %d", dev->r_pointer);
302
303 if (r_pointer < 8) {
304 dbg_verbose("RB: read at main buffer at %d", r_pointer);
305 return ENE_FW_SAMPLE_BUFFER + r_pointer;
306 }
307
308 r_pointer -= 8;
309
310 if (r_pointer < dev->extra_buf1_len) {
311 dbg_verbose("RB: read at 1st extra buffer at %d", r_pointer);
312 return dev->extra_buf1_address + r_pointer;
313 }
314
315 r_pointer -= dev->extra_buf1_len;
316
317 if (r_pointer < dev->extra_buf2_len) {
318 dbg_verbose("RB: read at 2nd extra buffer at %d", r_pointer);
319 return dev->extra_buf2_address + r_pointer;
320 }
321
322 dbg("attempt to read beyond ring buffer end");
323 return 0;
324 }
325
326 /* Sense current received carrier */
327 static void ene_rx_sense_carrier(struct ene_device *dev)
328 {
329 int carrier, duty_cycle;
330 int period = ene_read_reg(dev, ENE_CIRCAR_PRD);
331 int hperiod = ene_read_reg(dev, ENE_CIRCAR_HPRD);
332
333 if (!(period & ENE_CIRCAR_PRD_VALID))
334 return;
335
336 period &= ~ENE_CIRCAR_PRD_VALID;
337
338 if (!period)
339 return;
340
341 dbg("RX: hardware carrier period = %02x", period);
342 dbg("RX: hardware carrier pulse period = %02x", hperiod);
343
344 carrier = 2000000 / period;
345 duty_cycle = (hperiod * 100) / period;
346 dbg("RX: sensed carrier = %d Hz, duty cycle %d%%",
347 carrier, duty_cycle);
348 if (dev->carrier_detect_enabled) {
349 struct ir_raw_event ev = {
350 .carrier_report = true,
351 .carrier = carrier,
352 .duty_cycle = duty_cycle
353 };
354 ir_raw_event_store(dev->rdev, &ev);
355 }
356 }
357
358 /* this enables/disables the CIR RX engine */
359 static void ene_rx_enable_cir_engine(struct ene_device *dev, bool enable)
360 {
361 ene_set_clear_reg_mask(dev, ENE_CIRCFG,
362 ENE_CIRCFG_RX_EN | ENE_CIRCFG_RX_IRQ, enable);
363 }
364
365 /* this selects input for CIR engine. Ether GPIO 0A or GPIO40*/
366 static void ene_rx_select_input(struct ene_device *dev, bool gpio_0a)
367 {
368 ene_set_clear_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_GPIO0A, gpio_0a);
369 }
370
371 /*
372 * this enables alternative input via fan tachometer sensor and bypasses
373 * the hw CIR engine
374 */
375 static void ene_rx_enable_fan_input(struct ene_device *dev, bool enable)
376 {
377 if (!dev->hw_fan_input)
378 return;
379
380 if (!enable)
381 ene_write_reg(dev, ENE_FAN_AS_IN1, 0);
382 else {
383 ene_write_reg(dev, ENE_FAN_AS_IN1, ENE_FAN_AS_IN1_EN);
384 ene_write_reg(dev, ENE_FAN_AS_IN2, ENE_FAN_AS_IN2_EN);
385 }
386 }
387
388 /* setup the receiver for RX*/
389 static void ene_rx_setup(struct ene_device *dev)
390 {
391 bool learning_mode = dev->learning_mode_enabled ||
392 dev->carrier_detect_enabled;
393 int sample_period_adjust = 0;
394
395 dbg("RX: setup receiver, learning mode = %d", learning_mode);
396
397
398 /* This selects RLC input and clears CFG2 settings */
399 ene_write_reg(dev, ENE_CIRCFG2, 0x00);
400
401 /* set sample period*/
402 if (sample_period == ENE_DEFAULT_SAMPLE_PERIOD)
403 sample_period_adjust =
404 dev->pll_freq == ENE_DEFAULT_PLL_FREQ ? 1 : 2;
405
406 ene_write_reg(dev, ENE_CIRRLC_CFG,
407 (sample_period + sample_period_adjust) |
408 ENE_CIRRLC_CFG_OVERFLOW);
409 /* revB doesn't support inputs */
410 if (dev->hw_revision < ENE_HW_C)
411 goto select_timeout;
412
413 if (learning_mode) {
414
415 WARN_ON(!dev->hw_learning_and_tx_capable);
416
417 /* Enable the opposite of the normal input
418 That means that if GPIO40 is normally used, use GPIO0A
419 and vice versa.
420 This input will carry non demodulated
421 signal, and we will tell the hw to demodulate it itself */
422 ene_rx_select_input(dev, !dev->hw_use_gpio_0a);
423 dev->rx_fan_input_inuse = false;
424
425 /* Enable carrier demodulation */
426 ene_set_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_CARR_DEMOD);
427
428 /* Enable carrier detection */
429 ene_write_reg(dev, ENE_CIRCAR_PULS, 0x63);
430 ene_set_clear_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_CARR_DETECT,
431 dev->carrier_detect_enabled || debug);
432 } else {
433 if (dev->hw_fan_input)
434 dev->rx_fan_input_inuse = true;
435 else
436 ene_rx_select_input(dev, dev->hw_use_gpio_0a);
437
438 /* Disable carrier detection & demodulation */
439 ene_clear_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_CARR_DEMOD);
440 ene_clear_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_CARR_DETECT);
441 }
442
443 select_timeout:
444 if (dev->rx_fan_input_inuse) {
445 dev->rdev->rx_resolution = US_TO_NS(ENE_FW_SAMPLE_PERIOD_FAN);
446
447 /* Fan input doesn't support timeouts, it just ends the
448 input with a maximum sample */
449 dev->rdev->min_timeout = dev->rdev->max_timeout =
450 US_TO_NS(ENE_FW_SMPL_BUF_FAN_MSK *
451 ENE_FW_SAMPLE_PERIOD_FAN);
452 } else {
453 dev->rdev->rx_resolution = US_TO_NS(sample_period);
454
455 /* Theoreticly timeout is unlimited, but we cap it
456 * because it was seen that on one device, it
457 * would stop sending spaces after around 250 msec.
458 * Besides, this is close to 2^32 anyway and timeout is u32.
459 */
460 dev->rdev->min_timeout = US_TO_NS(127 * sample_period);
461 dev->rdev->max_timeout = US_TO_NS(200000);
462 }
463
464 if (dev->hw_learning_and_tx_capable)
465 dev->rdev->tx_resolution = US_TO_NS(sample_period);
466
467 if (dev->rdev->timeout > dev->rdev->max_timeout)
468 dev->rdev->timeout = dev->rdev->max_timeout;
469 if (dev->rdev->timeout < dev->rdev->min_timeout)
470 dev->rdev->timeout = dev->rdev->min_timeout;
471 }
472
473 /* Enable the device for receive */
474 static void ene_rx_enable_hw(struct ene_device *dev)
475 {
476 u8 reg_value;
477
478 /* Enable system interrupt */
479 if (dev->hw_revision < ENE_HW_C) {
480 ene_write_reg(dev, ENEB_IRQ, dev->irq << 1);
481 ene_write_reg(dev, ENEB_IRQ_UNK1, 0x01);
482 } else {
483 reg_value = ene_read_reg(dev, ENE_IRQ) & 0xF0;
484 reg_value |= ENE_IRQ_UNK_EN;
485 reg_value &= ~ENE_IRQ_STATUS;
486 reg_value |= (dev->irq & ENE_IRQ_MASK);
487 ene_write_reg(dev, ENE_IRQ, reg_value);
488 }
489
490 /* Enable inputs */
491 ene_rx_enable_fan_input(dev, dev->rx_fan_input_inuse);
492 ene_rx_enable_cir_engine(dev, !dev->rx_fan_input_inuse);
493
494 /* ack any pending irqs - just in case */
495 ene_irq_status(dev);
496
497 /* enable firmware bits */
498 ene_set_reg_mask(dev, ENE_FW1, ENE_FW1_ENABLE | ENE_FW1_IRQ);
499
500 /* enter idle mode */
501 ir_raw_event_set_idle(dev->rdev, true);
502 }
503
504 /* Enable the device for receive - wrapper to track the state*/
505 static void ene_rx_enable(struct ene_device *dev)
506 {
507 ene_rx_enable_hw(dev);
508 dev->rx_enabled = true;
509 }
510
511 /* Disable the device receiver */
512 static void ene_rx_disable_hw(struct ene_device *dev)
513 {
514 /* disable inputs */
515 ene_rx_enable_cir_engine(dev, false);
516 ene_rx_enable_fan_input(dev, false);
517
518 /* disable hardware IRQ and firmware flag */
519 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_ENABLE | ENE_FW1_IRQ);
520 ir_raw_event_set_idle(dev->rdev, true);
521 }
522
523 /* Disable the device receiver - wrapper to track the state */
524 static void ene_rx_disable(struct ene_device *dev)
525 {
526 ene_rx_disable_hw(dev);
527 dev->rx_enabled = false;
528 }
529
530 /* This resets the receiver. Useful to stop stream of spaces at end of
531 * transmission
532 */
533 static void ene_rx_reset(struct ene_device *dev)
534 {
535 ene_clear_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_RX_EN);
536 ene_set_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_RX_EN);
537 }
538
539 /* Set up the TX carrier frequency and duty cycle */
540 static void ene_tx_set_carrier(struct ene_device *dev)
541 {
542 u8 tx_puls_width;
543 unsigned long flags;
544
545 spin_lock_irqsave(&dev->hw_lock, flags);
546
547 ene_set_clear_reg_mask(dev, ENE_CIRCFG,
548 ENE_CIRCFG_TX_CARR, dev->tx_period > 0);
549
550 if (!dev->tx_period)
551 goto unlock;
552
553 BUG_ON(dev->tx_duty_cycle >= 100 || dev->tx_duty_cycle <= 0);
554
555 tx_puls_width = dev->tx_period / (100 / dev->tx_duty_cycle);
556
557 if (!tx_puls_width)
558 tx_puls_width = 1;
559
560 dbg("TX: pulse distance = %d * 500 ns", dev->tx_period);
561 dbg("TX: pulse width = %d * 500 ns", tx_puls_width);
562
563 ene_write_reg(dev, ENE_CIRMOD_PRD, dev->tx_period | ENE_CIRMOD_PRD_POL);
564 ene_write_reg(dev, ENE_CIRMOD_HPRD, tx_puls_width);
565 unlock:
566 spin_unlock_irqrestore(&dev->hw_lock, flags);
567 }
568
569 /* Enable/disable transmitters */
570 static void ene_tx_set_transmitters(struct ene_device *dev)
571 {
572 unsigned long flags;
573
574 spin_lock_irqsave(&dev->hw_lock, flags);
575 ene_set_clear_reg_mask(dev, ENE_GPIOFS8, ENE_GPIOFS8_GPIO41,
576 !!(dev->transmitter_mask & 0x01));
577 ene_set_clear_reg_mask(dev, ENE_GPIOFS1, ENE_GPIOFS1_GPIO0D,
578 !!(dev->transmitter_mask & 0x02));
579 spin_unlock_irqrestore(&dev->hw_lock, flags);
580 }
581
582 /* prepare transmission */
583 static void ene_tx_enable(struct ene_device *dev)
584 {
585 u8 conf1 = ene_read_reg(dev, ENE_CIRCFG);
586 u8 fwreg2 = ene_read_reg(dev, ENE_FW2);
587
588 dev->saved_conf1 = conf1;
589
590 /* Show information about currently connected transmitter jacks */
591 if (fwreg2 & ENE_FW2_EMMITER1_CONN)
592 dbg("TX: Transmitter #1 is connected");
593
594 if (fwreg2 & ENE_FW2_EMMITER2_CONN)
595 dbg("TX: Transmitter #2 is connected");
596
597 if (!(fwreg2 & (ENE_FW2_EMMITER1_CONN | ENE_FW2_EMMITER2_CONN)))
598 pr_warn("TX: transmitter cable isn't connected!\n");
599
600 /* disable receive on revc */
601 if (dev->hw_revision == ENE_HW_C)
602 conf1 &= ~ENE_CIRCFG_RX_EN;
603
604 /* Enable TX engine */
605 conf1 |= ENE_CIRCFG_TX_EN | ENE_CIRCFG_TX_IRQ;
606 ene_write_reg(dev, ENE_CIRCFG, conf1);
607 }
608
609 /* end transmission */
610 static void ene_tx_disable(struct ene_device *dev)
611 {
612 ene_write_reg(dev, ENE_CIRCFG, dev->saved_conf1);
613 dev->tx_buffer = NULL;
614 }
615
616
617 /* TX one sample - must be called with dev->hw_lock*/
618 static void ene_tx_sample(struct ene_device *dev)
619 {
620 u8 raw_tx;
621 u32 sample;
622 bool pulse = dev->tx_sample_pulse;
623
624 if (!dev->tx_buffer) {
625 pr_warn("TX: BUG: attempt to transmit NULL buffer\n");
626 return;
627 }
628
629 /* Grab next TX sample */
630 if (!dev->tx_sample) {
631
632 if (dev->tx_pos == dev->tx_len) {
633 if (!dev->tx_done) {
634 dbg("TX: no more data to send");
635 dev->tx_done = true;
636 goto exit;
637 } else {
638 dbg("TX: last sample sent by hardware");
639 ene_tx_disable(dev);
640 complete(&dev->tx_complete);
641 return;
642 }
643 }
644
645 sample = dev->tx_buffer[dev->tx_pos++];
646 dev->tx_sample_pulse = !dev->tx_sample_pulse;
647
648 dev->tx_sample = DIV_ROUND_CLOSEST(sample, sample_period);
649
650 if (!dev->tx_sample)
651 dev->tx_sample = 1;
652 }
653
654 raw_tx = min(dev->tx_sample , (unsigned int)ENE_CIRRLC_OUT_MASK);
655 dev->tx_sample -= raw_tx;
656
657 dbg("TX: sample %8d (%s)", raw_tx * sample_period,
658 pulse ? "pulse" : "space");
659 if (pulse)
660 raw_tx |= ENE_CIRRLC_OUT_PULSE;
661
662 ene_write_reg(dev,
663 dev->tx_reg ? ENE_CIRRLC_OUT1 : ENE_CIRRLC_OUT0, raw_tx);
664
665 dev->tx_reg = !dev->tx_reg;
666 exit:
667 /* simulate TX done interrupt */
668 if (txsim)
669 mod_timer(&dev->tx_sim_timer, jiffies + HZ / 500);
670 }
671
672 /* timer to simulate tx done interrupt */
673 static void ene_tx_irqsim(struct timer_list *t)
674 {
675 struct ene_device *dev = from_timer(dev, t, tx_sim_timer);
676 unsigned long flags;
677
678 spin_lock_irqsave(&dev->hw_lock, flags);
679 ene_tx_sample(dev);
680 spin_unlock_irqrestore(&dev->hw_lock, flags);
681 }
682
683
684 /* read irq status and ack it */
685 static int ene_irq_status(struct ene_device *dev)
686 {
687 u8 irq_status;
688 u8 fw_flags1, fw_flags2;
689 int retval = 0;
690
691 fw_flags2 = ene_read_reg(dev, ENE_FW2);
692
693 if (dev->hw_revision < ENE_HW_C) {
694 irq_status = ene_read_reg(dev, ENEB_IRQ_STATUS);
695
696 if (!(irq_status & ENEB_IRQ_STATUS_IR))
697 return 0;
698
699 ene_clear_reg_mask(dev, ENEB_IRQ_STATUS, ENEB_IRQ_STATUS_IR);
700 return ENE_IRQ_RX;
701 }
702
703 irq_status = ene_read_reg(dev, ENE_IRQ);
704 if (!(irq_status & ENE_IRQ_STATUS))
705 return 0;
706
707 /* original driver does that twice - a workaround ? */
708 ene_write_reg(dev, ENE_IRQ, irq_status & ~ENE_IRQ_STATUS);
709 ene_write_reg(dev, ENE_IRQ, irq_status & ~ENE_IRQ_STATUS);
710
711 /* check RX interrupt */
712 if (fw_flags2 & ENE_FW2_RXIRQ) {
713 retval |= ENE_IRQ_RX;
714 ene_write_reg(dev, ENE_FW2, fw_flags2 & ~ENE_FW2_RXIRQ);
715 }
716
717 /* check TX interrupt */
718 fw_flags1 = ene_read_reg(dev, ENE_FW1);
719 if (fw_flags1 & ENE_FW1_TXIRQ) {
720 ene_write_reg(dev, ENE_FW1, fw_flags1 & ~ENE_FW1_TXIRQ);
721 retval |= ENE_IRQ_TX;
722 }
723
724 return retval;
725 }
726
727 /* interrupt handler */
728 static irqreturn_t ene_isr(int irq, void *data)
729 {
730 u16 hw_value, reg;
731 int hw_sample, irq_status;
732 bool pulse;
733 unsigned long flags;
734 irqreturn_t retval = IRQ_NONE;
735 struct ene_device *dev = (struct ene_device *)data;
736 struct ir_raw_event ev = {};
737
738 spin_lock_irqsave(&dev->hw_lock, flags);
739
740 dbg_verbose("ISR called");
741 ene_rx_read_hw_pointer(dev);
742 irq_status = ene_irq_status(dev);
743
744 if (!irq_status)
745 goto unlock;
746
747 retval = IRQ_HANDLED;
748
749 if (irq_status & ENE_IRQ_TX) {
750 dbg_verbose("TX interrupt");
751 if (!dev->hw_learning_and_tx_capable) {
752 dbg("TX interrupt on unsupported device!");
753 goto unlock;
754 }
755 ene_tx_sample(dev);
756 }
757
758 if (!(irq_status & ENE_IRQ_RX))
759 goto unlock;
760
761 dbg_verbose("RX interrupt");
762
763 if (dev->hw_learning_and_tx_capable)
764 ene_rx_sense_carrier(dev);
765
766 /* On hardware that don't support extra buffer we need to trust
767 the interrupt and not track the read pointer */
768 if (!dev->hw_extra_buffer)
769 dev->r_pointer = dev->w_pointer == 0 ? ENE_FW_PACKET_SIZE : 0;
770
771 while (1) {
772
773 reg = ene_rx_get_sample_reg(dev);
774
775 dbg_verbose("next sample to read at: %04x", reg);
776 if (!reg)
777 break;
778
779 hw_value = ene_read_reg(dev, reg);
780
781 if (dev->rx_fan_input_inuse) {
782
783 int offset = ENE_FW_SMPL_BUF_FAN - ENE_FW_SAMPLE_BUFFER;
784
785 /* read high part of the sample */
786 hw_value |= ene_read_reg(dev, reg + offset) << 8;
787 pulse = hw_value & ENE_FW_SMPL_BUF_FAN_PLS;
788
789 /* clear space bit, and other unused bits */
790 hw_value &= ENE_FW_SMPL_BUF_FAN_MSK;
791 hw_sample = hw_value * ENE_FW_SAMPLE_PERIOD_FAN;
792
793 } else {
794 pulse = !(hw_value & ENE_FW_SAMPLE_SPACE);
795 hw_value &= ~ENE_FW_SAMPLE_SPACE;
796 hw_sample = hw_value * sample_period;
797
798 if (dev->rx_period_adjust) {
799 hw_sample *= 100;
800 hw_sample /= (100 + dev->rx_period_adjust);
801 }
802 }
803
804 if (!dev->hw_extra_buffer && !hw_sample) {
805 dev->r_pointer = dev->w_pointer;
806 continue;
807 }
808
809 dbg("RX: %d (%s)", hw_sample, pulse ? "pulse" : "space");
810
811 ev.duration = US_TO_NS(hw_sample);
812 ev.pulse = pulse;
813 ir_raw_event_store_with_filter(dev->rdev, &ev);
814 }
815
816 ir_raw_event_handle(dev->rdev);
817 unlock:
818 spin_unlock_irqrestore(&dev->hw_lock, flags);
819 return retval;
820 }
821
822 /* Initialize default settings */
823 static void ene_setup_default_settings(struct ene_device *dev)
824 {
825 dev->tx_period = 32;
826 dev->tx_duty_cycle = 50; /*%*/
827 dev->transmitter_mask = 0x03;
828 dev->learning_mode_enabled = learning_mode_force;
829
830 /* Set reasonable default timeout */
831 dev->rdev->timeout = US_TO_NS(150000);
832 }
833
834 /* Upload all hardware settings at once. Used at load and resume time */
835 static void ene_setup_hw_settings(struct ene_device *dev)
836 {
837 if (dev->hw_learning_and_tx_capable) {
838 ene_tx_set_carrier(dev);
839 ene_tx_set_transmitters(dev);
840 }
841
842 ene_rx_setup(dev);
843 }
844
845 /* outside interface: called on first open*/
846 static int ene_open(struct rc_dev *rdev)
847 {
848 struct ene_device *dev = rdev->priv;
849 unsigned long flags;
850
851 spin_lock_irqsave(&dev->hw_lock, flags);
852 ene_rx_enable(dev);
853 spin_unlock_irqrestore(&dev->hw_lock, flags);
854 return 0;
855 }
856
857 /* outside interface: called on device close*/
858 static void ene_close(struct rc_dev *rdev)
859 {
860 struct ene_device *dev = rdev->priv;
861 unsigned long flags;
862 spin_lock_irqsave(&dev->hw_lock, flags);
863
864 ene_rx_disable(dev);
865 spin_unlock_irqrestore(&dev->hw_lock, flags);
866 }
867
868 /* outside interface: set transmitter mask */
869 static int ene_set_tx_mask(struct rc_dev *rdev, u32 tx_mask)
870 {
871 struct ene_device *dev = rdev->priv;
872 dbg("TX: attempt to set transmitter mask %02x", tx_mask);
873
874 /* invalid txmask */
875 if (!tx_mask || tx_mask & ~0x03) {
876 dbg("TX: invalid mask");
877 /* return count of transmitters */
878 return 2;
879 }
880
881 dev->transmitter_mask = tx_mask;
882 ene_tx_set_transmitters(dev);
883 return 0;
884 }
885
886 /* outside interface : set tx carrier */
887 static int ene_set_tx_carrier(struct rc_dev *rdev, u32 carrier)
888 {
889 struct ene_device *dev = rdev->priv;
890 u32 period;
891
892 dbg("TX: attempt to set tx carrier to %d kHz", carrier);
893 if (carrier == 0)
894 return -EINVAL;
895
896 period = 2000000 / carrier;
897 if (period && (period > ENE_CIRMOD_PRD_MAX ||
898 period < ENE_CIRMOD_PRD_MIN)) {
899
900 dbg("TX: out of range %d-%d kHz carrier",
901 2000 / ENE_CIRMOD_PRD_MIN, 2000 / ENE_CIRMOD_PRD_MAX);
902 return -EINVAL;
903 }
904
905 dev->tx_period = period;
906 ene_tx_set_carrier(dev);
907 return 0;
908 }
909
910 /*outside interface : set tx duty cycle */
911 static int ene_set_tx_duty_cycle(struct rc_dev *rdev, u32 duty_cycle)
912 {
913 struct ene_device *dev = rdev->priv;
914 dbg("TX: setting duty cycle to %d%%", duty_cycle);
915 dev->tx_duty_cycle = duty_cycle;
916 ene_tx_set_carrier(dev);
917 return 0;
918 }
919
920 /* outside interface: enable learning mode */
921 static int ene_set_learning_mode(struct rc_dev *rdev, int enable)
922 {
923 struct ene_device *dev = rdev->priv;
924 unsigned long flags;
925 if (enable == dev->learning_mode_enabled)
926 return 0;
927
928 spin_lock_irqsave(&dev->hw_lock, flags);
929 dev->learning_mode_enabled = enable;
930 ene_rx_disable(dev);
931 ene_rx_setup(dev);
932 ene_rx_enable(dev);
933 spin_unlock_irqrestore(&dev->hw_lock, flags);
934 return 0;
935 }
936
937 static int ene_set_carrier_report(struct rc_dev *rdev, int enable)
938 {
939 struct ene_device *dev = rdev->priv;
940 unsigned long flags;
941
942 if (enable == dev->carrier_detect_enabled)
943 return 0;
944
945 spin_lock_irqsave(&dev->hw_lock, flags);
946 dev->carrier_detect_enabled = enable;
947 ene_rx_disable(dev);
948 ene_rx_setup(dev);
949 ene_rx_enable(dev);
950 spin_unlock_irqrestore(&dev->hw_lock, flags);
951 return 0;
952 }
953
954 /* outside interface: enable or disable idle mode */
955 static void ene_set_idle(struct rc_dev *rdev, bool idle)
956 {
957 struct ene_device *dev = rdev->priv;
958
959 if (idle) {
960 ene_rx_reset(dev);
961 dbg("RX: end of data");
962 }
963 }
964
965 /* outside interface: transmit */
966 static int ene_transmit(struct rc_dev *rdev, unsigned *buf, unsigned n)
967 {
968 struct ene_device *dev = rdev->priv;
969 unsigned long flags;
970
971 dev->tx_buffer = buf;
972 dev->tx_len = n;
973 dev->tx_pos = 0;
974 dev->tx_reg = 0;
975 dev->tx_done = 0;
976 dev->tx_sample = 0;
977 dev->tx_sample_pulse = false;
978
979 dbg("TX: %d samples", dev->tx_len);
980
981 spin_lock_irqsave(&dev->hw_lock, flags);
982
983 ene_tx_enable(dev);
984
985 /* Transmit first two samples */
986 ene_tx_sample(dev);
987 ene_tx_sample(dev);
988
989 spin_unlock_irqrestore(&dev->hw_lock, flags);
990
991 if (wait_for_completion_timeout(&dev->tx_complete, 2 * HZ) == 0) {
992 dbg("TX: timeout");
993 spin_lock_irqsave(&dev->hw_lock, flags);
994 ene_tx_disable(dev);
995 spin_unlock_irqrestore(&dev->hw_lock, flags);
996 } else
997 dbg("TX: done");
998 return n;
999 }
1000
1001 /* probe entry */
1002 static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
1003 {
1004 int error = -ENOMEM;
1005 struct rc_dev *rdev;
1006 struct ene_device *dev;
1007
1008 /* allocate memory */
1009 dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
1010 rdev = rc_allocate_device(RC_DRIVER_IR_RAW);
1011 if (!dev || !rdev)
1012 goto exit_free_dev_rdev;
1013
1014 /* validate resources */
1015 error = -ENODEV;
1016
1017 /* init these to -1, as 0 is valid for both */
1018 dev->hw_io = -1;
1019 dev->irq = -1;
1020
1021 if (!pnp_port_valid(pnp_dev, 0) ||
1022 pnp_port_len(pnp_dev, 0) < ENE_IO_SIZE)
1023 goto exit_free_dev_rdev;
1024
1025 if (!pnp_irq_valid(pnp_dev, 0))
1026 goto exit_free_dev_rdev;
1027
1028 spin_lock_init(&dev->hw_lock);
1029
1030 dev->hw_io = pnp_port_start(pnp_dev, 0);
1031 dev->irq = pnp_irq(pnp_dev, 0);
1032
1033
1034 pnp_set_drvdata(pnp_dev, dev);
1035 dev->pnp_dev = pnp_dev;
1036
1037 /* don't allow too short/long sample periods */
1038 if (sample_period < 5 || sample_period > 0x7F)
1039 sample_period = ENE_DEFAULT_SAMPLE_PERIOD;
1040
1041 /* detect hardware version and features */
1042 error = ene_hw_detect(dev);
1043 if (error)
1044 goto exit_free_dev_rdev;
1045
1046 if (!dev->hw_learning_and_tx_capable && txsim) {
1047 dev->hw_learning_and_tx_capable = true;
1048 timer_setup(&dev->tx_sim_timer, ene_tx_irqsim, 0);
1049 pr_warn("Simulation of TX activated\n");
1050 }
1051
1052 if (!dev->hw_learning_and_tx_capable)
1053 learning_mode_force = false;
1054
1055 rdev->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER;
1056 rdev->priv = dev;
1057 rdev->open = ene_open;
1058 rdev->close = ene_close;
1059 rdev->s_idle = ene_set_idle;
1060 rdev->driver_name = ENE_DRIVER_NAME;
1061 rdev->map_name = RC_MAP_RC6_MCE;
1062 rdev->device_name = "ENE eHome Infrared Remote Receiver";
1063
1064 if (dev->hw_learning_and_tx_capable) {
1065 rdev->s_learning_mode = ene_set_learning_mode;
1066 init_completion(&dev->tx_complete);
1067 rdev->tx_ir = ene_transmit;
1068 rdev->s_tx_mask = ene_set_tx_mask;
1069 rdev->s_tx_carrier = ene_set_tx_carrier;
1070 rdev->s_tx_duty_cycle = ene_set_tx_duty_cycle;
1071 rdev->s_carrier_report = ene_set_carrier_report;
1072 rdev->device_name = "ENE eHome Infrared Remote Transceiver";
1073 }
1074
1075 dev->rdev = rdev;
1076
1077 ene_rx_setup_hw_buffer(dev);
1078 ene_setup_default_settings(dev);
1079 ene_setup_hw_settings(dev);
1080
1081 device_set_wakeup_capable(&pnp_dev->dev, true);
1082 device_set_wakeup_enable(&pnp_dev->dev, true);
1083
1084 error = rc_register_device(rdev);
1085 if (error < 0)
1086 goto exit_free_dev_rdev;
1087
1088 /* claim the resources */
1089 error = -EBUSY;
1090 if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
1091 goto exit_unregister_device;
1092 }
1093
1094 if (request_irq(dev->irq, ene_isr,
1095 IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
1096 goto exit_release_hw_io;
1097 }
1098
1099 pr_notice("driver has been successfully loaded\n");
1100 return 0;
1101
1102 exit_release_hw_io:
1103 release_region(dev->hw_io, ENE_IO_SIZE);
1104 exit_unregister_device:
1105 rc_unregister_device(rdev);
1106 rdev = NULL;
1107 exit_free_dev_rdev:
1108 rc_free_device(rdev);
1109 kfree(dev);
1110 return error;
1111 }
1112
1113 /* main unload function */
1114 static void ene_remove(struct pnp_dev *pnp_dev)
1115 {
1116 struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1117 unsigned long flags;
1118
1119 spin_lock_irqsave(&dev->hw_lock, flags);
1120 ene_rx_disable(dev);
1121 ene_rx_restore_hw_buffer(dev);
1122 spin_unlock_irqrestore(&dev->hw_lock, flags);
1123
1124 free_irq(dev->irq, dev);
1125 release_region(dev->hw_io, ENE_IO_SIZE);
1126 rc_unregister_device(dev->rdev);
1127 kfree(dev);
1128 }
1129
1130 /* enable wake on IR (wakes on specific button on original remote) */
1131 static void ene_enable_wake(struct ene_device *dev, bool enable)
1132 {
1133 dbg("wake on IR %s", enable ? "enabled" : "disabled");
1134 ene_set_clear_reg_mask(dev, ENE_FW1, ENE_FW1_WAKE, enable);
1135 }
1136
1137 #ifdef CONFIG_PM
1138 static int ene_suspend(struct pnp_dev *pnp_dev, pm_message_t state)
1139 {
1140 struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1141 bool wake = device_may_wakeup(&dev->pnp_dev->dev);
1142
1143 if (!wake && dev->rx_enabled)
1144 ene_rx_disable_hw(dev);
1145
1146 ene_enable_wake(dev, wake);
1147 return 0;
1148 }
1149
1150 static int ene_resume(struct pnp_dev *pnp_dev)
1151 {
1152 struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1153 ene_setup_hw_settings(dev);
1154
1155 if (dev->rx_enabled)
1156 ene_rx_enable(dev);
1157
1158 ene_enable_wake(dev, false);
1159 return 0;
1160 }
1161 #endif
1162
1163 static void ene_shutdown(struct pnp_dev *pnp_dev)
1164 {
1165 struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1166 ene_enable_wake(dev, true);
1167 }
1168
1169 static const struct pnp_device_id ene_ids[] = {
1170 {.id = "ENE0100",},
1171 {.id = "ENE0200",},
1172 {.id = "ENE0201",},
1173 {.id = "ENE0202",},
1174 {},
1175 };
1176
1177 static struct pnp_driver ene_driver = {
1178 .name = ENE_DRIVER_NAME,
1179 .id_table = ene_ids,
1180 .flags = PNP_DRIVER_RES_DO_NOT_CHANGE,
1181
1182 .probe = ene_probe,
1183 .remove = ene_remove,
1184 #ifdef CONFIG_PM
1185 .suspend = ene_suspend,
1186 .resume = ene_resume,
1187 #endif
1188 .shutdown = ene_shutdown,
1189 };
1190
1191 module_param(sample_period, int, S_IRUGO);
1192 MODULE_PARM_DESC(sample_period, "Hardware sample period (50 us default)");
1193
1194 module_param(learning_mode_force, bool, S_IRUGO);
1195 MODULE_PARM_DESC(learning_mode_force, "Enable learning mode by default");
1196
1197 module_param(debug, int, S_IRUGO | S_IWUSR);
1198 MODULE_PARM_DESC(debug, "Debug level");
1199
1200 module_param(txsim, bool, S_IRUGO);
1201 MODULE_PARM_DESC(txsim,
1202 "Simulate TX features on unsupported hardware (dangerous)");
1203
1204 MODULE_DEVICE_TABLE(pnp, ene_ids);
1205 MODULE_DESCRIPTION
1206 ("Infrared input driver for KB3926B/C/D/E/F (aka ENE0100/ENE0200/ENE0201/ENE0202) CIR port");
1207
1208 MODULE_AUTHOR("Maxim Levitsky");
1209 MODULE_LICENSE("GPL");
1210
1211 module_pnp_driver(ene_driver);