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