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