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