Merge branch 'akpm' (Andrew's patch-bomb)
[firefly-linux-kernel-4.4.55.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  * 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 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(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         dev->rx_enabled = true;
508 }
509
510 /* Disable the device receiver */
511 static void ene_rx_disable(struct ene_device *dev)
512 {
513         /* disable inputs */
514         ene_rx_enable_cir_engine(dev, false);
515         ene_rx_enable_fan_input(dev, false);
516
517         /* disable hardware IRQ and firmware flag */
518         ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_ENABLE | ENE_FW1_IRQ);
519
520         ir_raw_event_set_idle(dev->rdev, true);
521         dev->rx_enabled = false;
522 }
523
524 /* This resets the receiver. Useful to stop stream of spaces at end of
525  * transmission
526  */
527 static void ene_rx_reset(struct ene_device *dev)
528 {
529         ene_clear_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_RX_EN);
530         ene_set_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_RX_EN);
531 }
532
533 /* Set up the TX carrier frequency and duty cycle */
534 static void ene_tx_set_carrier(struct ene_device *dev)
535 {
536         u8 tx_puls_width;
537         unsigned long flags;
538
539         spin_lock_irqsave(&dev->hw_lock, flags);
540
541         ene_set_clear_reg_mask(dev, ENE_CIRCFG,
542                 ENE_CIRCFG_TX_CARR, dev->tx_period > 0);
543
544         if (!dev->tx_period)
545                 goto unlock;
546
547         BUG_ON(dev->tx_duty_cycle >= 100 || dev->tx_duty_cycle <= 0);
548
549         tx_puls_width = dev->tx_period / (100 / dev->tx_duty_cycle);
550
551         if (!tx_puls_width)
552                 tx_puls_width = 1;
553
554         dbg("TX: pulse distance = %d * 500 ns", dev->tx_period);
555         dbg("TX: pulse width = %d * 500 ns", tx_puls_width);
556
557         ene_write_reg(dev, ENE_CIRMOD_PRD, dev->tx_period | ENE_CIRMOD_PRD_POL);
558         ene_write_reg(dev, ENE_CIRMOD_HPRD, tx_puls_width);
559 unlock:
560         spin_unlock_irqrestore(&dev->hw_lock, flags);
561 }
562
563 /* Enable/disable transmitters */
564 static void ene_tx_set_transmitters(struct ene_device *dev)
565 {
566         unsigned long flags;
567
568         spin_lock_irqsave(&dev->hw_lock, flags);
569         ene_set_clear_reg_mask(dev, ENE_GPIOFS8, ENE_GPIOFS8_GPIO41,
570                                         !!(dev->transmitter_mask & 0x01));
571         ene_set_clear_reg_mask(dev, ENE_GPIOFS1, ENE_GPIOFS1_GPIO0D,
572                                         !!(dev->transmitter_mask & 0x02));
573         spin_unlock_irqrestore(&dev->hw_lock, flags);
574 }
575
576 /* prepare transmission */
577 static void ene_tx_enable(struct ene_device *dev)
578 {
579         u8 conf1 = ene_read_reg(dev, ENE_CIRCFG);
580         u8 fwreg2 = ene_read_reg(dev, ENE_FW2);
581
582         dev->saved_conf1 = conf1;
583
584         /* Show information about currently connected transmitter jacks */
585         if (fwreg2 & ENE_FW2_EMMITER1_CONN)
586                 dbg("TX: Transmitter #1 is connected");
587
588         if (fwreg2 & ENE_FW2_EMMITER2_CONN)
589                 dbg("TX: Transmitter #2 is connected");
590
591         if (!(fwreg2 & (ENE_FW2_EMMITER1_CONN | ENE_FW2_EMMITER2_CONN)))
592                 pr_warn("TX: transmitter cable isn't connected!\n");
593
594         /* disable receive on revc */
595         if (dev->hw_revision == ENE_HW_C)
596                 conf1 &= ~ENE_CIRCFG_RX_EN;
597
598         /* Enable TX engine */
599         conf1 |= ENE_CIRCFG_TX_EN | ENE_CIRCFG_TX_IRQ;
600         ene_write_reg(dev, ENE_CIRCFG, conf1);
601 }
602
603 /* end transmission */
604 static void ene_tx_disable(struct ene_device *dev)
605 {
606         ene_write_reg(dev, ENE_CIRCFG, dev->saved_conf1);
607         dev->tx_buffer = NULL;
608 }
609
610
611 /* TX one sample - must be called with dev->hw_lock*/
612 static void ene_tx_sample(struct ene_device *dev)
613 {
614         u8 raw_tx;
615         u32 sample;
616         bool pulse = dev->tx_sample_pulse;
617
618         if (!dev->tx_buffer) {
619                 pr_warn("TX: BUG: attempt to transmit NULL buffer\n");
620                 return;
621         }
622
623         /* Grab next TX sample */
624         if (!dev->tx_sample) {
625
626                 if (dev->tx_pos == dev->tx_len) {
627                         if (!dev->tx_done) {
628                                 dbg("TX: no more data to send");
629                                 dev->tx_done = true;
630                                 goto exit;
631                         } else {
632                                 dbg("TX: last sample sent by hardware");
633                                 ene_tx_disable(dev);
634                                 complete(&dev->tx_complete);
635                                 return;
636                         }
637                 }
638
639                 sample = dev->tx_buffer[dev->tx_pos++];
640                 dev->tx_sample_pulse = !dev->tx_sample_pulse;
641
642                 dev->tx_sample = DIV_ROUND_CLOSEST(sample, sample_period);
643
644                 if (!dev->tx_sample)
645                         dev->tx_sample = 1;
646         }
647
648         raw_tx = min(dev->tx_sample , (unsigned int)ENE_CIRRLC_OUT_MASK);
649         dev->tx_sample -= raw_tx;
650
651         dbg("TX: sample %8d (%s)", raw_tx * sample_period,
652                                                 pulse ? "pulse" : "space");
653         if (pulse)
654                 raw_tx |= ENE_CIRRLC_OUT_PULSE;
655
656         ene_write_reg(dev,
657                 dev->tx_reg ? ENE_CIRRLC_OUT1 : ENE_CIRRLC_OUT0, raw_tx);
658
659         dev->tx_reg = !dev->tx_reg;
660 exit:
661         /* simulate TX done interrupt */
662         if (txsim)
663                 mod_timer(&dev->tx_sim_timer, jiffies + HZ / 500);
664 }
665
666 /* timer to simulate tx done interrupt */
667 static void ene_tx_irqsim(unsigned long data)
668 {
669         struct ene_device *dev = (struct ene_device *)data;
670         unsigned long flags;
671
672         spin_lock_irqsave(&dev->hw_lock, flags);
673         ene_tx_sample(dev);
674         spin_unlock_irqrestore(&dev->hw_lock, flags);
675 }
676
677
678 /* read irq status and ack it */
679 static int ene_irq_status(struct ene_device *dev)
680 {
681         u8 irq_status;
682         u8 fw_flags1, fw_flags2;
683         int retval = 0;
684
685         fw_flags2 = ene_read_reg(dev, ENE_FW2);
686
687         if (dev->hw_revision < ENE_HW_C) {
688                 irq_status = ene_read_reg(dev, ENEB_IRQ_STATUS);
689
690                 if (!(irq_status & ENEB_IRQ_STATUS_IR))
691                         return 0;
692
693                 ene_clear_reg_mask(dev, ENEB_IRQ_STATUS, ENEB_IRQ_STATUS_IR);
694                 return ENE_IRQ_RX;
695         }
696
697         irq_status = ene_read_reg(dev, ENE_IRQ);
698         if (!(irq_status & ENE_IRQ_STATUS))
699                 return 0;
700
701         /* original driver does that twice - a workaround ? */
702         ene_write_reg(dev, ENE_IRQ, irq_status & ~ENE_IRQ_STATUS);
703         ene_write_reg(dev, ENE_IRQ, irq_status & ~ENE_IRQ_STATUS);
704
705         /* check RX interrupt */
706         if (fw_flags2 & ENE_FW2_RXIRQ) {
707                 retval |= ENE_IRQ_RX;
708                 ene_write_reg(dev, ENE_FW2, fw_flags2 & ~ENE_FW2_RXIRQ);
709         }
710
711         /* check TX interrupt */
712         fw_flags1 = ene_read_reg(dev, ENE_FW1);
713         if (fw_flags1 & ENE_FW1_TXIRQ) {
714                 ene_write_reg(dev, ENE_FW1, fw_flags1 & ~ENE_FW1_TXIRQ);
715                 retval |= ENE_IRQ_TX;
716         }
717
718         return retval;
719 }
720
721 /* interrupt handler */
722 static irqreturn_t ene_isr(int irq, void *data)
723 {
724         u16 hw_value, reg;
725         int hw_sample, irq_status;
726         bool pulse;
727         unsigned long flags;
728         irqreturn_t retval = IRQ_NONE;
729         struct ene_device *dev = (struct ene_device *)data;
730         DEFINE_IR_RAW_EVENT(ev);
731
732         spin_lock_irqsave(&dev->hw_lock, flags);
733
734         dbg_verbose("ISR called");
735         ene_rx_read_hw_pointer(dev);
736         irq_status = ene_irq_status(dev);
737
738         if (!irq_status)
739                 goto unlock;
740
741         retval = IRQ_HANDLED;
742
743         if (irq_status & ENE_IRQ_TX) {
744                 dbg_verbose("TX interrupt");
745                 if (!dev->hw_learning_and_tx_capable) {
746                         dbg("TX interrupt on unsupported device!");
747                         goto unlock;
748                 }
749                 ene_tx_sample(dev);
750         }
751
752         if (!(irq_status & ENE_IRQ_RX))
753                 goto unlock;
754
755         dbg_verbose("RX interrupt");
756
757         if (dev->hw_learning_and_tx_capable)
758                 ene_rx_sense_carrier(dev);
759
760         /* On hardware that don't support extra buffer we need to trust
761                 the interrupt and not track the read pointer */
762         if (!dev->hw_extra_buffer)
763                 dev->r_pointer = dev->w_pointer == 0 ? ENE_FW_PACKET_SIZE : 0;
764
765         while (1) {
766
767                 reg = ene_rx_get_sample_reg(dev);
768
769                 dbg_verbose("next sample to read at: %04x", reg);
770                 if (!reg)
771                         break;
772
773                 hw_value = ene_read_reg(dev, reg);
774
775                 if (dev->rx_fan_input_inuse) {
776
777                         int offset = ENE_FW_SMPL_BUF_FAN - ENE_FW_SAMPLE_BUFFER;
778
779                         /* read high part of the sample */
780                         hw_value |= ene_read_reg(dev, reg + offset) << 8;
781                         pulse = hw_value & ENE_FW_SMPL_BUF_FAN_PLS;
782
783                         /* clear space bit, and other unused bits */
784                         hw_value &= ENE_FW_SMPL_BUF_FAN_MSK;
785                         hw_sample = hw_value * ENE_FW_SAMPLE_PERIOD_FAN;
786
787                 } else {
788                         pulse = !(hw_value & ENE_FW_SAMPLE_SPACE);
789                         hw_value &= ~ENE_FW_SAMPLE_SPACE;
790                         hw_sample = hw_value * sample_period;
791
792                         if (dev->rx_period_adjust) {
793                                 hw_sample *= 100;
794                                 hw_sample /= (100 + dev->rx_period_adjust);
795                         }
796                 }
797
798                 if (!dev->hw_extra_buffer && !hw_sample) {
799                         dev->r_pointer = dev->w_pointer;
800                         continue;
801                 }
802
803                 dbg("RX: %d (%s)", hw_sample, pulse ? "pulse" : "space");
804
805                 ev.duration = US_TO_NS(hw_sample);
806                 ev.pulse = pulse;
807                 ir_raw_event_store_with_filter(dev->rdev, &ev);
808         }
809
810         ir_raw_event_handle(dev->rdev);
811 unlock:
812         spin_unlock_irqrestore(&dev->hw_lock, flags);
813         return retval;
814 }
815
816 /* Initialize default settings */
817 static void ene_setup_default_settings(struct ene_device *dev)
818 {
819         dev->tx_period = 32;
820         dev->tx_duty_cycle = 50; /*%*/
821         dev->transmitter_mask = 0x03;
822         dev->learning_mode_enabled = learning_mode_force;
823
824         /* Set reasonable default timeout */
825         dev->rdev->timeout = US_TO_NS(150000);
826 }
827
828 /* Upload all hardware settings at once. Used at load and resume time */
829 static void ene_setup_hw_settings(struct ene_device *dev)
830 {
831         if (dev->hw_learning_and_tx_capable) {
832                 ene_tx_set_carrier(dev);
833                 ene_tx_set_transmitters(dev);
834         }
835
836         ene_rx_setup(dev);
837 }
838
839 /* outside interface: called on first open*/
840 static int ene_open(struct rc_dev *rdev)
841 {
842         struct ene_device *dev = rdev->priv;
843         unsigned long flags;
844
845         spin_lock_irqsave(&dev->hw_lock, flags);
846         ene_rx_enable(dev);
847         spin_unlock_irqrestore(&dev->hw_lock, flags);
848         return 0;
849 }
850
851 /* outside interface: called on device close*/
852 static void ene_close(struct rc_dev *rdev)
853 {
854         struct ene_device *dev = rdev->priv;
855         unsigned long flags;
856         spin_lock_irqsave(&dev->hw_lock, flags);
857
858         ene_rx_disable(dev);
859         spin_unlock_irqrestore(&dev->hw_lock, flags);
860 }
861
862 /* outside interface: set transmitter mask */
863 static int ene_set_tx_mask(struct rc_dev *rdev, u32 tx_mask)
864 {
865         struct ene_device *dev = rdev->priv;
866         dbg("TX: attempt to set transmitter mask %02x", tx_mask);
867
868         /* invalid txmask */
869         if (!tx_mask || tx_mask & ~0x03) {
870                 dbg("TX: invalid mask");
871                 /* return count of transmitters */
872                 return 2;
873         }
874
875         dev->transmitter_mask = tx_mask;
876         ene_tx_set_transmitters(dev);
877         return 0;
878 }
879
880 /* outside interface : set tx carrier */
881 static int ene_set_tx_carrier(struct rc_dev *rdev, u32 carrier)
882 {
883         struct ene_device *dev = rdev->priv;
884         u32 period = 2000000 / carrier;
885
886         dbg("TX: attempt to set tx carrier to %d kHz", carrier);
887
888         if (period && (period > ENE_CIRMOD_PRD_MAX ||
889                         period < ENE_CIRMOD_PRD_MIN)) {
890
891                 dbg("TX: out of range %d-%d kHz carrier",
892                         2000 / ENE_CIRMOD_PRD_MIN, 2000 / ENE_CIRMOD_PRD_MAX);
893                 return -1;
894         }
895
896         dev->tx_period = period;
897         ene_tx_set_carrier(dev);
898         return 0;
899 }
900
901 /*outside interface : set tx duty cycle */
902 static int ene_set_tx_duty_cycle(struct rc_dev *rdev, u32 duty_cycle)
903 {
904         struct ene_device *dev = rdev->priv;
905         dbg("TX: setting duty cycle to %d%%", duty_cycle);
906         dev->tx_duty_cycle = duty_cycle;
907         ene_tx_set_carrier(dev);
908         return 0;
909 }
910
911 /* outside interface: enable learning mode */
912 static int ene_set_learning_mode(struct rc_dev *rdev, int enable)
913 {
914         struct ene_device *dev = rdev->priv;
915         unsigned long flags;
916         if (enable == dev->learning_mode_enabled)
917                 return 0;
918
919         spin_lock_irqsave(&dev->hw_lock, flags);
920         dev->learning_mode_enabled = enable;
921         ene_rx_disable(dev);
922         ene_rx_setup(dev);
923         ene_rx_enable(dev);
924         spin_unlock_irqrestore(&dev->hw_lock, flags);
925         return 0;
926 }
927
928 static int ene_set_carrier_report(struct rc_dev *rdev, int enable)
929 {
930         struct ene_device *dev = rdev->priv;
931         unsigned long flags;
932
933         if (enable == dev->carrier_detect_enabled)
934                 return 0;
935
936         spin_lock_irqsave(&dev->hw_lock, flags);
937         dev->carrier_detect_enabled = enable;
938         ene_rx_disable(dev);
939         ene_rx_setup(dev);
940         ene_rx_enable(dev);
941         spin_unlock_irqrestore(&dev->hw_lock, flags);
942         return 0;
943 }
944
945 /* outside interface: enable or disable idle mode */
946 static void ene_set_idle(struct rc_dev *rdev, bool idle)
947 {
948         struct ene_device *dev = rdev->priv;
949
950         if (idle) {
951                 ene_rx_reset(dev);
952                 dbg("RX: end of data");
953         }
954 }
955
956 /* outside interface: transmit */
957 static int ene_transmit(struct rc_dev *rdev, unsigned *buf, unsigned n)
958 {
959         struct ene_device *dev = rdev->priv;
960         unsigned long flags;
961
962         dev->tx_buffer = buf;
963         dev->tx_len = n;
964         dev->tx_pos = 0;
965         dev->tx_reg = 0;
966         dev->tx_done = 0;
967         dev->tx_sample = 0;
968         dev->tx_sample_pulse = 0;
969
970         dbg("TX: %d samples", dev->tx_len);
971
972         spin_lock_irqsave(&dev->hw_lock, flags);
973
974         ene_tx_enable(dev);
975
976         /* Transmit first two samples */
977         ene_tx_sample(dev);
978         ene_tx_sample(dev);
979
980         spin_unlock_irqrestore(&dev->hw_lock, flags);
981
982         if (wait_for_completion_timeout(&dev->tx_complete, 2 * HZ) == 0) {
983                 dbg("TX: timeout");
984                 spin_lock_irqsave(&dev->hw_lock, flags);
985                 ene_tx_disable(dev);
986                 spin_unlock_irqrestore(&dev->hw_lock, flags);
987         } else
988                 dbg("TX: done");
989         return n;
990 }
991
992 /* probe entry */
993 static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
994 {
995         int error = -ENOMEM;
996         struct rc_dev *rdev;
997         struct ene_device *dev;
998
999         /* allocate memory */
1000         dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
1001         rdev = rc_allocate_device();
1002         if (!dev || !rdev)
1003                 goto error1;
1004
1005         /* validate resources */
1006         error = -ENODEV;
1007
1008         /* init these to -1, as 0 is valid for both */
1009         dev->hw_io = -1;
1010         dev->irq = -1;
1011
1012         if (!pnp_port_valid(pnp_dev, 0) ||
1013             pnp_port_len(pnp_dev, 0) < ENE_IO_SIZE)
1014                 goto error;
1015
1016         if (!pnp_irq_valid(pnp_dev, 0))
1017                 goto error;
1018
1019         spin_lock_init(&dev->hw_lock);
1020
1021         pnp_set_drvdata(pnp_dev, dev);
1022         dev->pnp_dev = pnp_dev;
1023
1024         /* don't allow too short/long sample periods */
1025         if (sample_period < 5 || sample_period > 0x7F)
1026                 sample_period = ENE_DEFAULT_SAMPLE_PERIOD;
1027
1028         /* detect hardware version and features */
1029         error = ene_hw_detect(dev);
1030         if (error)
1031                 goto error;
1032
1033         if (!dev->hw_learning_and_tx_capable && txsim) {
1034                 dev->hw_learning_and_tx_capable = true;
1035                 setup_timer(&dev->tx_sim_timer, ene_tx_irqsim,
1036                                                 (long unsigned int)dev);
1037                 pr_warn("Simulation of TX activated\n");
1038         }
1039
1040         if (!dev->hw_learning_and_tx_capable)
1041                 learning_mode_force = false;
1042
1043         rdev->driver_type = RC_DRIVER_IR_RAW;
1044         rdev->allowed_protos = RC_TYPE_ALL;
1045         rdev->priv = dev;
1046         rdev->open = ene_open;
1047         rdev->close = ene_close;
1048         rdev->s_idle = ene_set_idle;
1049         rdev->driver_name = ENE_DRIVER_NAME;
1050         rdev->map_name = RC_MAP_RC6_MCE;
1051         rdev->input_name = "ENE eHome Infrared Remote Receiver";
1052
1053         if (dev->hw_learning_and_tx_capable) {
1054                 rdev->s_learning_mode = ene_set_learning_mode;
1055                 init_completion(&dev->tx_complete);
1056                 rdev->tx_ir = ene_transmit;
1057                 rdev->s_tx_mask = ene_set_tx_mask;
1058                 rdev->s_tx_carrier = ene_set_tx_carrier;
1059                 rdev->s_tx_duty_cycle = ene_set_tx_duty_cycle;
1060                 rdev->s_carrier_report = ene_set_carrier_report;
1061                 rdev->input_name = "ENE eHome Infrared Remote Transceiver";
1062         }
1063
1064         dev->rdev = rdev;
1065
1066         ene_rx_setup_hw_buffer(dev);
1067         ene_setup_default_settings(dev);
1068         ene_setup_hw_settings(dev);
1069
1070         device_set_wakeup_capable(&pnp_dev->dev, true);
1071         device_set_wakeup_enable(&pnp_dev->dev, true);
1072
1073         /* claim the resources */
1074         error = -EBUSY;
1075         dev->hw_io = pnp_port_start(pnp_dev, 0);
1076         if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
1077                 dev->hw_io = -1;
1078                 dev->irq = -1;
1079                 goto error;
1080         }
1081
1082         dev->irq = pnp_irq(pnp_dev, 0);
1083         if (request_irq(dev->irq, ene_isr,
1084                         IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
1085                 dev->irq = -1;
1086                 goto error;
1087         }
1088
1089         error = rc_register_device(rdev);
1090         if (error < 0)
1091                 goto error;
1092
1093         pr_notice("driver has been successfully loaded\n");
1094         return 0;
1095 error:
1096         if (dev && dev->irq >= 0)
1097                 free_irq(dev->irq, dev);
1098         if (dev && dev->hw_io >= 0)
1099                 release_region(dev->hw_io, ENE_IO_SIZE);
1100 error1:
1101         rc_free_device(rdev);
1102         kfree(dev);
1103         return error;
1104 }
1105
1106 /* main unload function */
1107 static void ene_remove(struct pnp_dev *pnp_dev)
1108 {
1109         struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1110         unsigned long flags;
1111
1112         spin_lock_irqsave(&dev->hw_lock, flags);
1113         ene_rx_disable(dev);
1114         ene_rx_restore_hw_buffer(dev);
1115         spin_unlock_irqrestore(&dev->hw_lock, flags);
1116
1117         free_irq(dev->irq, dev);
1118         release_region(dev->hw_io, ENE_IO_SIZE);
1119         rc_unregister_device(dev->rdev);
1120         kfree(dev);
1121 }
1122
1123 /* enable wake on IR (wakes on specific button on original remote) */
1124 static void ene_enable_wake(struct ene_device *dev, int enable)
1125 {
1126         enable = enable && device_may_wakeup(&dev->pnp_dev->dev);
1127         dbg("wake on IR %s", enable ? "enabled" : "disabled");
1128         ene_set_clear_reg_mask(dev, ENE_FW1, ENE_FW1_WAKE, enable);
1129 }
1130
1131 #ifdef CONFIG_PM
1132 static int ene_suspend(struct pnp_dev *pnp_dev, pm_message_t state)
1133 {
1134         struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1135         ene_enable_wake(dev, true);
1136
1137         /* TODO: add support for wake pattern */
1138         return 0;
1139 }
1140
1141 static int ene_resume(struct pnp_dev *pnp_dev)
1142 {
1143         struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1144         ene_setup_hw_settings(dev);
1145
1146         if (dev->rx_enabled)
1147                 ene_rx_enable(dev);
1148
1149         ene_enable_wake(dev, false);
1150         return 0;
1151 }
1152 #endif
1153
1154 static void ene_shutdown(struct pnp_dev *pnp_dev)
1155 {
1156         struct ene_device *dev = pnp_get_drvdata(pnp_dev);
1157         ene_enable_wake(dev, true);
1158 }
1159
1160 static const struct pnp_device_id ene_ids[] = {
1161         {.id = "ENE0100",},
1162         {.id = "ENE0200",},
1163         {.id = "ENE0201",},
1164         {.id = "ENE0202",},
1165         {},
1166 };
1167
1168 static struct pnp_driver ene_driver = {
1169         .name = ENE_DRIVER_NAME,
1170         .id_table = ene_ids,
1171         .flags = PNP_DRIVER_RES_DO_NOT_CHANGE,
1172
1173         .probe = ene_probe,
1174         .remove = __devexit_p(ene_remove),
1175 #ifdef CONFIG_PM
1176         .suspend = ene_suspend,
1177         .resume = ene_resume,
1178 #endif
1179         .shutdown = ene_shutdown,
1180 };
1181
1182 static int __init ene_init(void)
1183 {
1184         return pnp_register_driver(&ene_driver);
1185 }
1186
1187 static void ene_exit(void)
1188 {
1189         pnp_unregister_driver(&ene_driver);
1190 }
1191
1192 module_param(sample_period, int, S_IRUGO);
1193 MODULE_PARM_DESC(sample_period, "Hardware sample period (50 us default)");
1194
1195 module_param(learning_mode_force, bool, S_IRUGO);
1196 MODULE_PARM_DESC(learning_mode_force, "Enable learning mode by default");
1197
1198 module_param(debug, int, S_IRUGO | S_IWUSR);
1199 MODULE_PARM_DESC(debug, "Debug level");
1200
1201 module_param(txsim, bool, S_IRUGO);
1202 MODULE_PARM_DESC(txsim,
1203         "Simulate TX features on unsupported hardware (dangerous)");
1204
1205 MODULE_DEVICE_TABLE(pnp, ene_ids);
1206 MODULE_DESCRIPTION
1207         ("Infrared input driver for KB3926B/C/D/E/F "
1208         "(aka ENE0100/ENE0200/ENE0201/ENE0202) CIR port");
1209
1210 MODULE_AUTHOR("Maxim Levitsky");
1211 MODULE_LICENSE("GPL");
1212
1213 module_init(ene_init);
1214 module_exit(ene_exit);