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