Merge tag 'auxdisplay-for-linus-v5.1-rc2' of git://github.com/ojeda/linux
[sfrench/cifs-2.6.git] / drivers / media / rc / ite-cir.c
1 /*
2  * Driver for ITE Tech Inc. IT8712F/IT8512 CIR
3  *
4  * Copyright (C) 2010 Juan Jesús García de Soria <skandalfo@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  * Inspired by the original lirc_it87 and lirc_ite8709 drivers, on top of the
17  * skeleton provided by the nuvoton-cir driver.
18  *
19  * The lirc_it87 driver was originally written by Hans-Gunter Lutke Uphues
20  * <hg_lu@web.de> in 2001, with enhancements by Christoph Bartelmus
21  * <lirc@bartelmus.de>, Andrew Calkin <r_tay@hotmail.com> and James Edwards
22  * <jimbo-lirc@edwardsclan.net>.
23  *
24  * The lirc_ite8709 driver was written by Grégory Lardière
25  * <spmf2004-lirc@yahoo.fr> in 2008.
26  */
27
28 #include <linux/kernel.h>
29 #include <linux/module.h>
30 #include <linux/pnp.h>
31 #include <linux/io.h>
32 #include <linux/interrupt.h>
33 #include <linux/sched.h>
34 #include <linux/delay.h>
35 #include <linux/slab.h>
36 #include <linux/input.h>
37 #include <linux/bitops.h>
38 #include <media/rc-core.h>
39 #include <linux/pci_ids.h>
40
41 #include "ite-cir.h"
42
43 /* module parameters */
44
45 /* debug level */
46 static int debug;
47 module_param(debug, int, S_IRUGO | S_IWUSR);
48 MODULE_PARM_DESC(debug, "Enable debugging output");
49
50 /* low limit for RX carrier freq, Hz, 0 for no RX demodulation */
51 static int rx_low_carrier_freq;
52 module_param(rx_low_carrier_freq, int, S_IRUGO | S_IWUSR);
53 MODULE_PARM_DESC(rx_low_carrier_freq, "Override low RX carrier frequency, Hz, 0 for no RX demodulation");
54
55 /* high limit for RX carrier freq, Hz, 0 for no RX demodulation */
56 static int rx_high_carrier_freq;
57 module_param(rx_high_carrier_freq, int, S_IRUGO | S_IWUSR);
58 MODULE_PARM_DESC(rx_high_carrier_freq, "Override high RX carrier frequency, Hz, 0 for no RX demodulation");
59
60 /* override tx carrier frequency */
61 static int tx_carrier_freq;
62 module_param(tx_carrier_freq, int, S_IRUGO | S_IWUSR);
63 MODULE_PARM_DESC(tx_carrier_freq, "Override TX carrier frequency, Hz");
64
65 /* override tx duty cycle */
66 static int tx_duty_cycle;
67 module_param(tx_duty_cycle, int, S_IRUGO | S_IWUSR);
68 MODULE_PARM_DESC(tx_duty_cycle, "Override TX duty cycle, 1-100");
69
70 /* override default sample period */
71 static long sample_period;
72 module_param(sample_period, long, S_IRUGO | S_IWUSR);
73 MODULE_PARM_DESC(sample_period, "Override carrier sample period, us");
74
75 /* override detected model id */
76 static int model_number = -1;
77 module_param(model_number, int, S_IRUGO | S_IWUSR);
78 MODULE_PARM_DESC(model_number, "Use this model number, don't autodetect");
79
80
81 /* HW-independent code functions */
82
83 /* check whether carrier frequency is high frequency */
84 static inline bool ite_is_high_carrier_freq(unsigned int freq)
85 {
86         return freq >= ITE_HCF_MIN_CARRIER_FREQ;
87 }
88
89 /* get the bits required to program the carrier frequency in CFQ bits,
90  * unshifted */
91 static u8 ite_get_carrier_freq_bits(unsigned int freq)
92 {
93         if (ite_is_high_carrier_freq(freq)) {
94                 if (freq < 425000)
95                         return ITE_CFQ_400;
96
97                 else if (freq < 465000)
98                         return ITE_CFQ_450;
99
100                 else if (freq < 490000)
101                         return ITE_CFQ_480;
102
103                 else
104                         return ITE_CFQ_500;
105         } else {
106                         /* trim to limits */
107                 if (freq < ITE_LCF_MIN_CARRIER_FREQ)
108                         freq = ITE_LCF_MIN_CARRIER_FREQ;
109                 if (freq > ITE_LCF_MAX_CARRIER_FREQ)
110                         freq = ITE_LCF_MAX_CARRIER_FREQ;
111
112                 /* convert to kHz and subtract the base freq */
113                 freq =
114                     DIV_ROUND_CLOSEST(freq - ITE_LCF_MIN_CARRIER_FREQ,
115                                       1000);
116
117                 return (u8) freq;
118         }
119 }
120
121 /* get the bits required to program the pulse with in TXMPW */
122 static u8 ite_get_pulse_width_bits(unsigned int freq, int duty_cycle)
123 {
124         unsigned long period_ns, on_ns;
125
126         /* sanitize freq into range */
127         if (freq < ITE_LCF_MIN_CARRIER_FREQ)
128                 freq = ITE_LCF_MIN_CARRIER_FREQ;
129         if (freq > ITE_HCF_MAX_CARRIER_FREQ)
130                 freq = ITE_HCF_MAX_CARRIER_FREQ;
131
132         period_ns = 1000000000UL / freq;
133         on_ns = period_ns * duty_cycle / 100;
134
135         if (ite_is_high_carrier_freq(freq)) {
136                 if (on_ns < 750)
137                         return ITE_TXMPW_A;
138
139                 else if (on_ns < 850)
140                         return ITE_TXMPW_B;
141
142                 else if (on_ns < 950)
143                         return ITE_TXMPW_C;
144
145                 else if (on_ns < 1080)
146                         return ITE_TXMPW_D;
147
148                 else
149                         return ITE_TXMPW_E;
150         } else {
151                 if (on_ns < 6500)
152                         return ITE_TXMPW_A;
153
154                 else if (on_ns < 7850)
155                         return ITE_TXMPW_B;
156
157                 else if (on_ns < 9650)
158                         return ITE_TXMPW_C;
159
160                 else if (on_ns < 11950)
161                         return ITE_TXMPW_D;
162
163                 else
164                         return ITE_TXMPW_E;
165         }
166 }
167
168 /* decode raw bytes as received by the hardware, and push them to the ir-core
169  * layer */
170 static void ite_decode_bytes(struct ite_dev *dev, const u8 * data, int
171                              length)
172 {
173         u32 sample_period;
174         unsigned long *ldata;
175         unsigned int next_one, next_zero, size;
176         struct ir_raw_event ev = {};
177
178         if (length == 0)
179                 return;
180
181         sample_period = dev->params.sample_period;
182         ldata = (unsigned long *)data;
183         size = length << 3;
184         next_one = find_next_bit_le(ldata, size, 0);
185         if (next_one > 0) {
186                 ev.pulse = true;
187                 ev.duration =
188                     ITE_BITS_TO_NS(next_one, sample_period);
189                 ir_raw_event_store_with_filter(dev->rdev, &ev);
190         }
191
192         while (next_one < size) {
193                 next_zero = find_next_zero_bit_le(ldata, size, next_one + 1);
194                 ev.pulse = false;
195                 ev.duration = ITE_BITS_TO_NS(next_zero - next_one, sample_period);
196                 ir_raw_event_store_with_filter(dev->rdev, &ev);
197
198                 if (next_zero < size) {
199                         next_one =
200                             find_next_bit_le(ldata,
201                                                      size,
202                                                      next_zero + 1);
203                         ev.pulse = true;
204                         ev.duration =
205                             ITE_BITS_TO_NS(next_one - next_zero,
206                                            sample_period);
207                         ir_raw_event_store_with_filter
208                             (dev->rdev, &ev);
209                 } else
210                         next_one = size;
211         }
212
213         ir_raw_event_handle(dev->rdev);
214
215         ite_dbg_verbose("decoded %d bytes.", length);
216 }
217
218 /* set all the rx/tx carrier parameters; this must be called with the device
219  * spinlock held */
220 static void ite_set_carrier_params(struct ite_dev *dev)
221 {
222         unsigned int freq, low_freq, high_freq;
223         int allowance;
224         bool use_demodulator;
225         bool for_tx = dev->transmitting;
226
227         ite_dbg("%s called", __func__);
228
229         if (for_tx) {
230                 /* we don't need no stinking calculations */
231                 freq = dev->params.tx_carrier_freq;
232                 allowance = ITE_RXDCR_DEFAULT;
233                 use_demodulator = false;
234         } else {
235                 low_freq = dev->params.rx_low_carrier_freq;
236                 high_freq = dev->params.rx_high_carrier_freq;
237
238                 if (low_freq == 0) {
239                         /* don't demodulate */
240                         freq =
241                         ITE_DEFAULT_CARRIER_FREQ;
242                         allowance = ITE_RXDCR_DEFAULT;
243                         use_demodulator = false;
244                 } else {
245                         /* calculate the middle freq */
246                         freq = (low_freq + high_freq) / 2;
247
248                         /* calculate the allowance */
249                         allowance =
250                             DIV_ROUND_CLOSEST(10000 * (high_freq - low_freq),
251                                               ITE_RXDCR_PER_10000_STEP
252                                               * (high_freq + low_freq));
253
254                         if (allowance < 1)
255                                 allowance = 1;
256
257                         if (allowance > ITE_RXDCR_MAX)
258                                 allowance = ITE_RXDCR_MAX;
259
260                         use_demodulator = true;
261                 }
262         }
263
264         /* set the carrier parameters in a device-dependent way */
265         dev->params.set_carrier_params(dev, ite_is_high_carrier_freq(freq),
266                  use_demodulator, ite_get_carrier_freq_bits(freq), allowance,
267                  ite_get_pulse_width_bits(freq, dev->params.tx_duty_cycle));
268 }
269
270 /* interrupt service routine for incoming and outgoing CIR data */
271 static irqreturn_t ite_cir_isr(int irq, void *data)
272 {
273         struct ite_dev *dev = data;
274         unsigned long flags;
275         irqreturn_t ret = IRQ_RETVAL(IRQ_NONE);
276         u8 rx_buf[ITE_RX_FIFO_LEN];
277         int rx_bytes;
278         int iflags;
279
280         ite_dbg_verbose("%s firing", __func__);
281
282         /* grab the spinlock */
283         spin_lock_irqsave(&dev->lock, flags);
284
285         /* read the interrupt flags */
286         iflags = dev->params.get_irq_causes(dev);
287
288         /* check for the receive interrupt */
289         if (iflags & (ITE_IRQ_RX_FIFO | ITE_IRQ_RX_FIFO_OVERRUN)) {
290                 /* read the FIFO bytes */
291                 rx_bytes =
292                         dev->params.get_rx_bytes(dev, rx_buf,
293                                              ITE_RX_FIFO_LEN);
294
295                 if (rx_bytes > 0) {
296                         /* drop the spinlock, since the ir-core layer
297                          * may call us back again through
298                          * ite_s_idle() */
299                         spin_unlock_irqrestore(&dev->
300                                                                          lock,
301                                                                          flags);
302
303                         /* decode the data we've just received */
304                         ite_decode_bytes(dev, rx_buf,
305                                                                    rx_bytes);
306
307                         /* reacquire the spinlock */
308                         spin_lock_irqsave(&dev->lock,
309                                                                     flags);
310
311                         /* mark the interrupt as serviced */
312                         ret = IRQ_RETVAL(IRQ_HANDLED);
313                 }
314         } else if (iflags & ITE_IRQ_TX_FIFO) {
315                 /* FIFO space available interrupt */
316                 ite_dbg_verbose("got interrupt for TX FIFO");
317
318                 /* wake any sleeping transmitter */
319                 wake_up_interruptible(&dev->tx_queue);
320
321                 /* mark the interrupt as serviced */
322                 ret = IRQ_RETVAL(IRQ_HANDLED);
323         }
324
325         /* drop the spinlock */
326         spin_unlock_irqrestore(&dev->lock, flags);
327
328         ite_dbg_verbose("%s done returning %d", __func__, (int)ret);
329
330         return ret;
331 }
332
333 /* set the rx carrier freq range, guess it's in Hz... */
334 static int ite_set_rx_carrier_range(struct rc_dev *rcdev, u32 carrier_low, u32
335                                     carrier_high)
336 {
337         unsigned long flags;
338         struct ite_dev *dev = rcdev->priv;
339
340         spin_lock_irqsave(&dev->lock, flags);
341         dev->params.rx_low_carrier_freq = carrier_low;
342         dev->params.rx_high_carrier_freq = carrier_high;
343         ite_set_carrier_params(dev);
344         spin_unlock_irqrestore(&dev->lock, flags);
345
346         return 0;
347 }
348
349 /* set the tx carrier freq, guess it's in Hz... */
350 static int ite_set_tx_carrier(struct rc_dev *rcdev, u32 carrier)
351 {
352         unsigned long flags;
353         struct ite_dev *dev = rcdev->priv;
354
355         spin_lock_irqsave(&dev->lock, flags);
356         dev->params.tx_carrier_freq = carrier;
357         ite_set_carrier_params(dev);
358         spin_unlock_irqrestore(&dev->lock, flags);
359
360         return 0;
361 }
362
363 /* set the tx duty cycle by controlling the pulse width */
364 static int ite_set_tx_duty_cycle(struct rc_dev *rcdev, u32 duty_cycle)
365 {
366         unsigned long flags;
367         struct ite_dev *dev = rcdev->priv;
368
369         spin_lock_irqsave(&dev->lock, flags);
370         dev->params.tx_duty_cycle = duty_cycle;
371         ite_set_carrier_params(dev);
372         spin_unlock_irqrestore(&dev->lock, flags);
373
374         return 0;
375 }
376
377 /* transmit out IR pulses; what you get here is a batch of alternating
378  * pulse/space/pulse/space lengths that we should write out completely through
379  * the FIFO, blocking on a full FIFO */
380 static int ite_tx_ir(struct rc_dev *rcdev, unsigned *txbuf, unsigned n)
381 {
382         unsigned long flags;
383         struct ite_dev *dev = rcdev->priv;
384         bool is_pulse = false;
385         int remaining_us, fifo_avail, fifo_remaining, last_idx = 0;
386         int max_rle_us, next_rle_us;
387         int ret = n;
388         u8 last_sent[ITE_TX_FIFO_LEN];
389         u8 val;
390
391         ite_dbg("%s called", __func__);
392
393         /* clear the array just in case */
394         memset(last_sent, 0, ARRAY_SIZE(last_sent));
395
396         spin_lock_irqsave(&dev->lock, flags);
397
398         /* let everybody know we're now transmitting */
399         dev->transmitting = true;
400
401         /* and set the carrier values for transmission */
402         ite_set_carrier_params(dev);
403
404         /* calculate how much time we can send in one byte */
405         max_rle_us =
406             (ITE_BAUDRATE_DIVISOR * dev->params.sample_period *
407              ITE_TX_MAX_RLE) / 1000;
408
409         /* disable the receiver */
410         dev->params.disable_rx(dev);
411
412         /* this is where we'll begin filling in the FIFO, until it's full.
413          * then we'll just activate the interrupt, wait for it to wake us up
414          * again, disable it, continue filling the FIFO... until everything
415          * has been pushed out */
416         fifo_avail =
417             ITE_TX_FIFO_LEN - dev->params.get_tx_used_slots(dev);
418
419         while (n > 0 && dev->in_use) {
420                 /* transmit the next sample */
421                 is_pulse = !is_pulse;
422                 remaining_us = *(txbuf++);
423                 n--;
424
425                 ite_dbg("%s: %ld",
426                                       ((is_pulse) ? "pulse" : "space"),
427                                       (long int)
428                                       remaining_us);
429
430                 /* repeat while the pulse is non-zero length */
431                 while (remaining_us > 0 && dev->in_use) {
432                         if (remaining_us > max_rle_us)
433                                 next_rle_us = max_rle_us;
434
435                         else
436                                 next_rle_us = remaining_us;
437
438                         remaining_us -= next_rle_us;
439
440                         /* check what's the length we have to pump out */
441                         val = (ITE_TX_MAX_RLE * next_rle_us) / max_rle_us;
442
443                         /* put it into the sent buffer */
444                         last_sent[last_idx++] = val;
445                         last_idx &= (ITE_TX_FIFO_LEN);
446
447                         /* encode it for 7 bits */
448                         val = (val - 1) & ITE_TX_RLE_MASK;
449
450                         /* take into account pulse/space prefix */
451                         if (is_pulse)
452                                 val |= ITE_TX_PULSE;
453
454                         else
455                                 val |= ITE_TX_SPACE;
456
457                         /*
458                          * if we get to 0 available, read again, just in case
459                          * some other slot got freed
460                          */
461                         if (fifo_avail <= 0)
462                                 fifo_avail = ITE_TX_FIFO_LEN - dev->params.get_tx_used_slots(dev);
463
464                         /* if it's still full */
465                         if (fifo_avail <= 0) {
466                                 /* enable the tx interrupt */
467                                 dev->params.
468                                 enable_tx_interrupt(dev);
469
470                                 /* drop the spinlock */
471                                 spin_unlock_irqrestore(&dev->lock, flags);
472
473                                 /* wait for the FIFO to empty enough */
474                                 wait_event_interruptible(dev->tx_queue, (fifo_avail = ITE_TX_FIFO_LEN - dev->params.get_tx_used_slots(dev)) >= 8);
475
476                                 /* get the spinlock again */
477                                 spin_lock_irqsave(&dev->lock, flags);
478
479                                 /* disable the tx interrupt again. */
480                                 dev->params.
481                                 disable_tx_interrupt(dev);
482                         }
483
484                         /* now send the byte through the FIFO */
485                         dev->params.put_tx_byte(dev, val);
486                         fifo_avail--;
487                 }
488         }
489
490         /* wait and don't return until the whole FIFO has been sent out;
491          * otherwise we could configure the RX carrier params instead of the
492          * TX ones while the transmission is still being performed! */
493         fifo_remaining = dev->params.get_tx_used_slots(dev);
494         remaining_us = 0;
495         while (fifo_remaining > 0) {
496                 fifo_remaining--;
497                 last_idx--;
498                 last_idx &= (ITE_TX_FIFO_LEN - 1);
499                 remaining_us += last_sent[last_idx];
500         }
501         remaining_us = (remaining_us * max_rle_us) / (ITE_TX_MAX_RLE);
502
503         /* drop the spinlock while we sleep */
504         spin_unlock_irqrestore(&dev->lock, flags);
505
506         /* sleep remaining_us microseconds */
507         mdelay(DIV_ROUND_UP(remaining_us, 1000));
508
509         /* reacquire the spinlock */
510         spin_lock_irqsave(&dev->lock, flags);
511
512         /* now we're not transmitting anymore */
513         dev->transmitting = false;
514
515         /* and set the carrier values for reception */
516         ite_set_carrier_params(dev);
517
518         /* re-enable the receiver */
519         if (dev->in_use)
520                 dev->params.enable_rx(dev);
521
522         /* notify transmission end */
523         wake_up_interruptible(&dev->tx_ended);
524
525         spin_unlock_irqrestore(&dev->lock, flags);
526
527         return ret;
528 }
529
530 /* idle the receiver if needed */
531 static void ite_s_idle(struct rc_dev *rcdev, bool enable)
532 {
533         unsigned long flags;
534         struct ite_dev *dev = rcdev->priv;
535
536         ite_dbg("%s called", __func__);
537
538         if (enable) {
539                 spin_lock_irqsave(&dev->lock, flags);
540                 dev->params.idle_rx(dev);
541                 spin_unlock_irqrestore(&dev->lock, flags);
542         }
543 }
544
545
546 /* IT8712F HW-specific functions */
547
548 /* retrieve a bitmask of the current causes for a pending interrupt; this may
549  * be composed of ITE_IRQ_TX_FIFO, ITE_IRQ_RX_FIFO and ITE_IRQ_RX_FIFO_OVERRUN
550  * */
551 static int it87_get_irq_causes(struct ite_dev *dev)
552 {
553         u8 iflags;
554         int ret = 0;
555
556         ite_dbg("%s called", __func__);
557
558         /* read the interrupt flags */
559         iflags = inb(dev->cir_addr + IT87_IIR) & IT87_II;
560
561         switch (iflags) {
562         case IT87_II_RXDS:
563                 ret = ITE_IRQ_RX_FIFO;
564                 break;
565         case IT87_II_RXFO:
566                 ret = ITE_IRQ_RX_FIFO_OVERRUN;
567                 break;
568         case IT87_II_TXLDL:
569                 ret = ITE_IRQ_TX_FIFO;
570                 break;
571         }
572
573         return ret;
574 }
575
576 /* set the carrier parameters; to be called with the spinlock held */
577 static void it87_set_carrier_params(struct ite_dev *dev, bool high_freq,
578                                     bool use_demodulator,
579                                     u8 carrier_freq_bits, u8 allowance_bits,
580                                     u8 pulse_width_bits)
581 {
582         u8 val;
583
584         ite_dbg("%s called", __func__);
585
586         /* program the RCR register */
587         val = inb(dev->cir_addr + IT87_RCR)
588                 & ~(IT87_HCFS | IT87_RXEND | IT87_RXDCR);
589
590         if (high_freq)
591                 val |= IT87_HCFS;
592
593         if (use_demodulator)
594                 val |= IT87_RXEND;
595
596         val |= allowance_bits;
597
598         outb(val, dev->cir_addr + IT87_RCR);
599
600         /* program the TCR2 register */
601         outb((carrier_freq_bits << IT87_CFQ_SHIFT) | pulse_width_bits,
602                 dev->cir_addr + IT87_TCR2);
603 }
604
605 /* read up to buf_size bytes from the RX FIFO; to be called with the spinlock
606  * held */
607 static int it87_get_rx_bytes(struct ite_dev *dev, u8 * buf, int buf_size)
608 {
609         int fifo, read = 0;
610
611         ite_dbg("%s called", __func__);
612
613         /* read how many bytes are still in the FIFO */
614         fifo = inb(dev->cir_addr + IT87_RSR) & IT87_RXFBC;
615
616         while (fifo > 0 && buf_size > 0) {
617                 *(buf++) = inb(dev->cir_addr + IT87_DR);
618                 fifo--;
619                 read++;
620                 buf_size--;
621         }
622
623         return read;
624 }
625
626 /* return how many bytes are still in the FIFO; this will be called
627  * with the device spinlock NOT HELD while waiting for the TX FIFO to get
628  * empty; let's expect this won't be a problem */
629 static int it87_get_tx_used_slots(struct ite_dev *dev)
630 {
631         ite_dbg("%s called", __func__);
632
633         return inb(dev->cir_addr + IT87_TSR) & IT87_TXFBC;
634 }
635
636 /* put a byte to the TX fifo; this should be called with the spinlock held */
637 static void it87_put_tx_byte(struct ite_dev *dev, u8 value)
638 {
639         outb(value, dev->cir_addr + IT87_DR);
640 }
641
642 /* idle the receiver so that we won't receive samples until another
643   pulse is detected; this must be called with the device spinlock held */
644 static void it87_idle_rx(struct ite_dev *dev)
645 {
646         ite_dbg("%s called", __func__);
647
648         /* disable streaming by clearing RXACT writing it as 1 */
649         outb(inb(dev->cir_addr + IT87_RCR) | IT87_RXACT,
650                 dev->cir_addr + IT87_RCR);
651
652         /* clear the FIFO */
653         outb(inb(dev->cir_addr + IT87_TCR1) | IT87_FIFOCLR,
654                 dev->cir_addr + IT87_TCR1);
655 }
656
657 /* disable the receiver; this must be called with the device spinlock held */
658 static void it87_disable_rx(struct ite_dev *dev)
659 {
660         ite_dbg("%s called", __func__);
661
662         /* disable the receiver interrupts */
663         outb(inb(dev->cir_addr + IT87_IER) & ~(IT87_RDAIE | IT87_RFOIE),
664                 dev->cir_addr + IT87_IER);
665
666         /* disable the receiver */
667         outb(inb(dev->cir_addr + IT87_RCR) & ~IT87_RXEN,
668                 dev->cir_addr + IT87_RCR);
669
670         /* clear the FIFO and RXACT (actually RXACT should have been cleared
671         * in the previous outb() call) */
672         it87_idle_rx(dev);
673 }
674
675 /* enable the receiver; this must be called with the device spinlock held */
676 static void it87_enable_rx(struct ite_dev *dev)
677 {
678         ite_dbg("%s called", __func__);
679
680         /* enable the receiver by setting RXEN */
681         outb(inb(dev->cir_addr + IT87_RCR) | IT87_RXEN,
682                 dev->cir_addr + IT87_RCR);
683
684         /* just prepare it to idle for the next reception */
685         it87_idle_rx(dev);
686
687         /* enable the receiver interrupts and master enable flag */
688         outb(inb(dev->cir_addr + IT87_IER) | IT87_RDAIE | IT87_RFOIE | IT87_IEC,
689                 dev->cir_addr + IT87_IER);
690 }
691
692 /* disable the transmitter interrupt; this must be called with the device
693  * spinlock held */
694 static void it87_disable_tx_interrupt(struct ite_dev *dev)
695 {
696         ite_dbg("%s called", __func__);
697
698         /* disable the transmitter interrupts */
699         outb(inb(dev->cir_addr + IT87_IER) & ~IT87_TLDLIE,
700                 dev->cir_addr + IT87_IER);
701 }
702
703 /* enable the transmitter interrupt; this must be called with the device
704  * spinlock held */
705 static void it87_enable_tx_interrupt(struct ite_dev *dev)
706 {
707         ite_dbg("%s called", __func__);
708
709         /* enable the transmitter interrupts and master enable flag */
710         outb(inb(dev->cir_addr + IT87_IER) | IT87_TLDLIE | IT87_IEC,
711                 dev->cir_addr + IT87_IER);
712 }
713
714 /* disable the device; this must be called with the device spinlock held */
715 static void it87_disable(struct ite_dev *dev)
716 {
717         ite_dbg("%s called", __func__);
718
719         /* clear out all interrupt enable flags */
720         outb(inb(dev->cir_addr + IT87_IER) &
721                 ~(IT87_IEC | IT87_RFOIE | IT87_RDAIE | IT87_TLDLIE),
722                 dev->cir_addr + IT87_IER);
723
724         /* disable the receiver */
725         it87_disable_rx(dev);
726
727         /* erase the FIFO */
728         outb(IT87_FIFOCLR | inb(dev->cir_addr + IT87_TCR1),
729                 dev->cir_addr + IT87_TCR1);
730 }
731
732 /* initialize the hardware */
733 static void it87_init_hardware(struct ite_dev *dev)
734 {
735         ite_dbg("%s called", __func__);
736
737         /* enable just the baud rate divisor register,
738         disabling all the interrupts at the same time */
739         outb((inb(dev->cir_addr + IT87_IER) &
740                 ~(IT87_IEC | IT87_RFOIE | IT87_RDAIE | IT87_TLDLIE)) | IT87_BR,
741                 dev->cir_addr + IT87_IER);
742
743         /* write out the baud rate divisor */
744         outb(ITE_BAUDRATE_DIVISOR & 0xff, dev->cir_addr + IT87_BDLR);
745         outb((ITE_BAUDRATE_DIVISOR >> 8) & 0xff, dev->cir_addr + IT87_BDHR);
746
747         /* disable the baud rate divisor register again */
748         outb(inb(dev->cir_addr + IT87_IER) & ~IT87_BR,
749                 dev->cir_addr + IT87_IER);
750
751         /* program the RCR register defaults */
752         outb(ITE_RXDCR_DEFAULT, dev->cir_addr + IT87_RCR);
753
754         /* program the TCR1 register */
755         outb(IT87_TXMPM_DEFAULT | IT87_TXENDF | IT87_TXRLE
756                 | IT87_FIFOTL_DEFAULT | IT87_FIFOCLR,
757                 dev->cir_addr + IT87_TCR1);
758
759         /* program the carrier parameters */
760         ite_set_carrier_params(dev);
761 }
762
763 /* IT8512F on ITE8708 HW-specific functions */
764
765 /* retrieve a bitmask of the current causes for a pending interrupt; this may
766  * be composed of ITE_IRQ_TX_FIFO, ITE_IRQ_RX_FIFO and ITE_IRQ_RX_FIFO_OVERRUN
767  * */
768 static int it8708_get_irq_causes(struct ite_dev *dev)
769 {
770         u8 iflags;
771         int ret = 0;
772
773         ite_dbg("%s called", __func__);
774
775         /* read the interrupt flags */
776         iflags = inb(dev->cir_addr + IT8708_C0IIR);
777
778         if (iflags & IT85_TLDLI)
779                 ret |= ITE_IRQ_TX_FIFO;
780         if (iflags & IT85_RDAI)
781                 ret |= ITE_IRQ_RX_FIFO;
782         if (iflags & IT85_RFOI)
783                 ret |= ITE_IRQ_RX_FIFO_OVERRUN;
784
785         return ret;
786 }
787
788 /* set the carrier parameters; to be called with the spinlock held */
789 static void it8708_set_carrier_params(struct ite_dev *dev, bool high_freq,
790                                       bool use_demodulator,
791                                       u8 carrier_freq_bits, u8 allowance_bits,
792                                       u8 pulse_width_bits)
793 {
794         u8 val;
795
796         ite_dbg("%s called", __func__);
797
798         /* program the C0CFR register, with HRAE=1 */
799         outb(inb(dev->cir_addr + IT8708_BANKSEL) | IT8708_HRAE,
800                 dev->cir_addr + IT8708_BANKSEL);
801
802         val = (inb(dev->cir_addr + IT8708_C0CFR)
803                 & ~(IT85_HCFS | IT85_CFQ)) | carrier_freq_bits;
804
805         if (high_freq)
806                 val |= IT85_HCFS;
807
808         outb(val, dev->cir_addr + IT8708_C0CFR);
809
810         outb(inb(dev->cir_addr + IT8708_BANKSEL) & ~IT8708_HRAE,
811                    dev->cir_addr + IT8708_BANKSEL);
812
813         /* program the C0RCR register */
814         val = inb(dev->cir_addr + IT8708_C0RCR)
815                 & ~(IT85_RXEND | IT85_RXDCR);
816
817         if (use_demodulator)
818                 val |= IT85_RXEND;
819
820         val |= allowance_bits;
821
822         outb(val, dev->cir_addr + IT8708_C0RCR);
823
824         /* program the C0TCR register */
825         val = inb(dev->cir_addr + IT8708_C0TCR) & ~IT85_TXMPW;
826         val |= pulse_width_bits;
827         outb(val, dev->cir_addr + IT8708_C0TCR);
828 }
829
830 /* read up to buf_size bytes from the RX FIFO; to be called with the spinlock
831  * held */
832 static int it8708_get_rx_bytes(struct ite_dev *dev, u8 * buf, int buf_size)
833 {
834         int fifo, read = 0;
835
836         ite_dbg("%s called", __func__);
837
838         /* read how many bytes are still in the FIFO */
839         fifo = inb(dev->cir_addr + IT8708_C0RFSR) & IT85_RXFBC;
840
841         while (fifo > 0 && buf_size > 0) {
842                 *(buf++) = inb(dev->cir_addr + IT8708_C0DR);
843                 fifo--;
844                 read++;
845                 buf_size--;
846         }
847
848         return read;
849 }
850
851 /* return how many bytes are still in the FIFO; this will be called
852  * with the device spinlock NOT HELD while waiting for the TX FIFO to get
853  * empty; let's expect this won't be a problem */
854 static int it8708_get_tx_used_slots(struct ite_dev *dev)
855 {
856         ite_dbg("%s called", __func__);
857
858         return inb(dev->cir_addr + IT8708_C0TFSR) & IT85_TXFBC;
859 }
860
861 /* put a byte to the TX fifo; this should be called with the spinlock held */
862 static void it8708_put_tx_byte(struct ite_dev *dev, u8 value)
863 {
864         outb(value, dev->cir_addr + IT8708_C0DR);
865 }
866
867 /* idle the receiver so that we won't receive samples until another
868   pulse is detected; this must be called with the device spinlock held */
869 static void it8708_idle_rx(struct ite_dev *dev)
870 {
871         ite_dbg("%s called", __func__);
872
873         /* disable streaming by clearing RXACT writing it as 1 */
874         outb(inb(dev->cir_addr + IT8708_C0RCR) | IT85_RXACT,
875                 dev->cir_addr + IT8708_C0RCR);
876
877         /* clear the FIFO */
878         outb(inb(dev->cir_addr + IT8708_C0MSTCR) | IT85_FIFOCLR,
879                 dev->cir_addr + IT8708_C0MSTCR);
880 }
881
882 /* disable the receiver; this must be called with the device spinlock held */
883 static void it8708_disable_rx(struct ite_dev *dev)
884 {
885         ite_dbg("%s called", __func__);
886
887         /* disable the receiver interrupts */
888         outb(inb(dev->cir_addr + IT8708_C0IER) &
889                 ~(IT85_RDAIE | IT85_RFOIE),
890                 dev->cir_addr + IT8708_C0IER);
891
892         /* disable the receiver */
893         outb(inb(dev->cir_addr + IT8708_C0RCR) & ~IT85_RXEN,
894                 dev->cir_addr + IT8708_C0RCR);
895
896         /* clear the FIFO and RXACT (actually RXACT should have been cleared
897          * in the previous outb() call) */
898         it8708_idle_rx(dev);
899 }
900
901 /* enable the receiver; this must be called with the device spinlock held */
902 static void it8708_enable_rx(struct ite_dev *dev)
903 {
904         ite_dbg("%s called", __func__);
905
906         /* enable the receiver by setting RXEN */
907         outb(inb(dev->cir_addr + IT8708_C0RCR) | IT85_RXEN,
908                 dev->cir_addr + IT8708_C0RCR);
909
910         /* just prepare it to idle for the next reception */
911         it8708_idle_rx(dev);
912
913         /* enable the receiver interrupts and master enable flag */
914         outb(inb(dev->cir_addr + IT8708_C0IER)
915                 |IT85_RDAIE | IT85_RFOIE | IT85_IEC,
916                 dev->cir_addr + IT8708_C0IER);
917 }
918
919 /* disable the transmitter interrupt; this must be called with the device
920  * spinlock held */
921 static void it8708_disable_tx_interrupt(struct ite_dev *dev)
922 {
923         ite_dbg("%s called", __func__);
924
925         /* disable the transmitter interrupts */
926         outb(inb(dev->cir_addr + IT8708_C0IER) & ~IT85_TLDLIE,
927                 dev->cir_addr + IT8708_C0IER);
928 }
929
930 /* enable the transmitter interrupt; this must be called with the device
931  * spinlock held */
932 static void it8708_enable_tx_interrupt(struct ite_dev *dev)
933 {
934         ite_dbg("%s called", __func__);
935
936         /* enable the transmitter interrupts and master enable flag */
937         outb(inb(dev->cir_addr + IT8708_C0IER)
938                 |IT85_TLDLIE | IT85_IEC,
939                 dev->cir_addr + IT8708_C0IER);
940 }
941
942 /* disable the device; this must be called with the device spinlock held */
943 static void it8708_disable(struct ite_dev *dev)
944 {
945         ite_dbg("%s called", __func__);
946
947         /* clear out all interrupt enable flags */
948         outb(inb(dev->cir_addr + IT8708_C0IER) &
949                 ~(IT85_IEC | IT85_RFOIE | IT85_RDAIE | IT85_TLDLIE),
950                 dev->cir_addr + IT8708_C0IER);
951
952         /* disable the receiver */
953         it8708_disable_rx(dev);
954
955         /* erase the FIFO */
956         outb(IT85_FIFOCLR | inb(dev->cir_addr + IT8708_C0MSTCR),
957                 dev->cir_addr + IT8708_C0MSTCR);
958 }
959
960 /* initialize the hardware */
961 static void it8708_init_hardware(struct ite_dev *dev)
962 {
963         ite_dbg("%s called", __func__);
964
965         /* disable all the interrupts */
966         outb(inb(dev->cir_addr + IT8708_C0IER) &
967                 ~(IT85_IEC | IT85_RFOIE | IT85_RDAIE | IT85_TLDLIE),
968                 dev->cir_addr + IT8708_C0IER);
969
970         /* program the baud rate divisor */
971         outb(inb(dev->cir_addr + IT8708_BANKSEL) | IT8708_HRAE,
972                 dev->cir_addr + IT8708_BANKSEL);
973
974         outb(ITE_BAUDRATE_DIVISOR & 0xff, dev->cir_addr + IT8708_C0BDLR);
975         outb((ITE_BAUDRATE_DIVISOR >> 8) & 0xff,
976                    dev->cir_addr + IT8708_C0BDHR);
977
978         outb(inb(dev->cir_addr + IT8708_BANKSEL) & ~IT8708_HRAE,
979                    dev->cir_addr + IT8708_BANKSEL);
980
981         /* program the C0MSTCR register defaults */
982         outb((inb(dev->cir_addr + IT8708_C0MSTCR) &
983                         ~(IT85_ILSEL | IT85_ILE | IT85_FIFOTL |
984                           IT85_FIFOCLR | IT85_RESET)) |
985                        IT85_FIFOTL_DEFAULT,
986                        dev->cir_addr + IT8708_C0MSTCR);
987
988         /* program the C0RCR register defaults */
989         outb((inb(dev->cir_addr + IT8708_C0RCR) &
990                         ~(IT85_RXEN | IT85_RDWOS | IT85_RXEND |
991                           IT85_RXACT | IT85_RXDCR)) |
992                        ITE_RXDCR_DEFAULT,
993                        dev->cir_addr + IT8708_C0RCR);
994
995         /* program the C0TCR register defaults */
996         outb((inb(dev->cir_addr + IT8708_C0TCR) &
997                         ~(IT85_TXMPM | IT85_TXMPW))
998                        |IT85_TXRLE | IT85_TXENDF |
999                        IT85_TXMPM_DEFAULT | IT85_TXMPW_DEFAULT,
1000                        dev->cir_addr + IT8708_C0TCR);
1001
1002         /* program the carrier parameters */
1003         ite_set_carrier_params(dev);
1004 }
1005
1006 /* IT8512F on ITE8709 HW-specific functions */
1007
1008 /* read a byte from the SRAM module */
1009 static inline u8 it8709_rm(struct ite_dev *dev, int index)
1010 {
1011         outb(index, dev->cir_addr + IT8709_RAM_IDX);
1012         return inb(dev->cir_addr + IT8709_RAM_VAL);
1013 }
1014
1015 /* write a byte to the SRAM module */
1016 static inline void it8709_wm(struct ite_dev *dev, u8 val, int index)
1017 {
1018         outb(index, dev->cir_addr + IT8709_RAM_IDX);
1019         outb(val, dev->cir_addr + IT8709_RAM_VAL);
1020 }
1021
1022 static void it8709_wait(struct ite_dev *dev)
1023 {
1024         int i = 0;
1025         /*
1026          * loop until device tells it's ready to continue
1027          * iterations count is usually ~750 but can sometimes achieve 13000
1028          */
1029         for (i = 0; i < 15000; i++) {
1030                 udelay(2);
1031                 if (it8709_rm(dev, IT8709_MODE) == IT8709_IDLE)
1032                         break;
1033         }
1034 }
1035
1036 /* read the value of a CIR register */
1037 static u8 it8709_rr(struct ite_dev *dev, int index)
1038 {
1039         /* just wait in case the previous access was a write */
1040         it8709_wait(dev);
1041         it8709_wm(dev, index, IT8709_REG_IDX);
1042         it8709_wm(dev, IT8709_READ, IT8709_MODE);
1043
1044         /* wait for the read data to be available */
1045         it8709_wait(dev);
1046
1047         /* return the read value */
1048         return it8709_rm(dev, IT8709_REG_VAL);
1049 }
1050
1051 /* write the value of a CIR register */
1052 static void it8709_wr(struct ite_dev *dev, u8 val, int index)
1053 {
1054         /* we wait before writing, and not afterwards, since this allows us to
1055          * pipeline the host CPU with the microcontroller */
1056         it8709_wait(dev);
1057         it8709_wm(dev, val, IT8709_REG_VAL);
1058         it8709_wm(dev, index, IT8709_REG_IDX);
1059         it8709_wm(dev, IT8709_WRITE, IT8709_MODE);
1060 }
1061
1062 /* retrieve a bitmask of the current causes for a pending interrupt; this may
1063  * be composed of ITE_IRQ_TX_FIFO, ITE_IRQ_RX_FIFO and ITE_IRQ_RX_FIFO_OVERRUN
1064  * */
1065 static int it8709_get_irq_causes(struct ite_dev *dev)
1066 {
1067         u8 iflags;
1068         int ret = 0;
1069
1070         ite_dbg("%s called", __func__);
1071
1072         /* read the interrupt flags */
1073         iflags = it8709_rm(dev, IT8709_IIR);
1074
1075         if (iflags & IT85_TLDLI)
1076                 ret |= ITE_IRQ_TX_FIFO;
1077         if (iflags & IT85_RDAI)
1078                 ret |= ITE_IRQ_RX_FIFO;
1079         if (iflags & IT85_RFOI)
1080                 ret |= ITE_IRQ_RX_FIFO_OVERRUN;
1081
1082         return ret;
1083 }
1084
1085 /* set the carrier parameters; to be called with the spinlock held */
1086 static void it8709_set_carrier_params(struct ite_dev *dev, bool high_freq,
1087                                       bool use_demodulator,
1088                                       u8 carrier_freq_bits, u8 allowance_bits,
1089                                       u8 pulse_width_bits)
1090 {
1091         u8 val;
1092
1093         ite_dbg("%s called", __func__);
1094
1095         val = (it8709_rr(dev, IT85_C0CFR)
1096                      &~(IT85_HCFS | IT85_CFQ)) |
1097             carrier_freq_bits;
1098
1099         if (high_freq)
1100                 val |= IT85_HCFS;
1101
1102         it8709_wr(dev, val, IT85_C0CFR);
1103
1104         /* program the C0RCR register */
1105         val = it8709_rr(dev, IT85_C0RCR)
1106                 & ~(IT85_RXEND | IT85_RXDCR);
1107
1108         if (use_demodulator)
1109                 val |= IT85_RXEND;
1110
1111         val |= allowance_bits;
1112
1113         it8709_wr(dev, val, IT85_C0RCR);
1114
1115         /* program the C0TCR register */
1116         val = it8709_rr(dev, IT85_C0TCR) & ~IT85_TXMPW;
1117         val |= pulse_width_bits;
1118         it8709_wr(dev, val, IT85_C0TCR);
1119 }
1120
1121 /* read up to buf_size bytes from the RX FIFO; to be called with the spinlock
1122  * held */
1123 static int it8709_get_rx_bytes(struct ite_dev *dev, u8 * buf, int buf_size)
1124 {
1125         int fifo, read = 0;
1126
1127         ite_dbg("%s called", __func__);
1128
1129         /* read how many bytes are still in the FIFO */
1130         fifo = it8709_rm(dev, IT8709_RFSR) & IT85_RXFBC;
1131
1132         while (fifo > 0 && buf_size > 0) {
1133                 *(buf++) = it8709_rm(dev, IT8709_FIFO + read);
1134                 fifo--;
1135                 read++;
1136                 buf_size--;
1137         }
1138
1139         /* 'clear' the FIFO by setting the writing index to 0; this is
1140          * completely bound to be racy, but we can't help it, since it's a
1141          * limitation of the protocol */
1142         it8709_wm(dev, 0, IT8709_RFSR);
1143
1144         return read;
1145 }
1146
1147 /* return how many bytes are still in the FIFO; this will be called
1148  * with the device spinlock NOT HELD while waiting for the TX FIFO to get
1149  * empty; let's expect this won't be a problem */
1150 static int it8709_get_tx_used_slots(struct ite_dev *dev)
1151 {
1152         ite_dbg("%s called", __func__);
1153
1154         return it8709_rr(dev, IT85_C0TFSR) & IT85_TXFBC;
1155 }
1156
1157 /* put a byte to the TX fifo; this should be called with the spinlock held */
1158 static void it8709_put_tx_byte(struct ite_dev *dev, u8 value)
1159 {
1160         it8709_wr(dev, value, IT85_C0DR);
1161 }
1162
1163 /* idle the receiver so that we won't receive samples until another
1164   pulse is detected; this must be called with the device spinlock held */
1165 static void it8709_idle_rx(struct ite_dev *dev)
1166 {
1167         ite_dbg("%s called", __func__);
1168
1169         /* disable streaming by clearing RXACT writing it as 1 */
1170         it8709_wr(dev, it8709_rr(dev, IT85_C0RCR) | IT85_RXACT,
1171                             IT85_C0RCR);
1172
1173         /* clear the FIFO */
1174         it8709_wr(dev, it8709_rr(dev, IT85_C0MSTCR) | IT85_FIFOCLR,
1175                             IT85_C0MSTCR);
1176 }
1177
1178 /* disable the receiver; this must be called with the device spinlock held */
1179 static void it8709_disable_rx(struct ite_dev *dev)
1180 {
1181         ite_dbg("%s called", __func__);
1182
1183         /* disable the receiver interrupts */
1184         it8709_wr(dev, it8709_rr(dev, IT85_C0IER) &
1185                             ~(IT85_RDAIE | IT85_RFOIE),
1186                             IT85_C0IER);
1187
1188         /* disable the receiver */
1189         it8709_wr(dev, it8709_rr(dev, IT85_C0RCR) & ~IT85_RXEN,
1190                             IT85_C0RCR);
1191
1192         /* clear the FIFO and RXACT (actually RXACT should have been cleared
1193          * in the previous it8709_wr(dev, ) call) */
1194         it8709_idle_rx(dev);
1195 }
1196
1197 /* enable the receiver; this must be called with the device spinlock held */
1198 static void it8709_enable_rx(struct ite_dev *dev)
1199 {
1200         ite_dbg("%s called", __func__);
1201
1202         /* enable the receiver by setting RXEN */
1203         it8709_wr(dev, it8709_rr(dev, IT85_C0RCR) | IT85_RXEN,
1204                             IT85_C0RCR);
1205
1206         /* just prepare it to idle for the next reception */
1207         it8709_idle_rx(dev);
1208
1209         /* enable the receiver interrupts and master enable flag */
1210         it8709_wr(dev, it8709_rr(dev, IT85_C0IER)
1211                             |IT85_RDAIE | IT85_RFOIE | IT85_IEC,
1212                             IT85_C0IER);
1213 }
1214
1215 /* disable the transmitter interrupt; this must be called with the device
1216  * spinlock held */
1217 static void it8709_disable_tx_interrupt(struct ite_dev *dev)
1218 {
1219         ite_dbg("%s called", __func__);
1220
1221         /* disable the transmitter interrupts */
1222         it8709_wr(dev, it8709_rr(dev, IT85_C0IER) & ~IT85_TLDLIE,
1223                             IT85_C0IER);
1224 }
1225
1226 /* enable the transmitter interrupt; this must be called with the device
1227  * spinlock held */
1228 static void it8709_enable_tx_interrupt(struct ite_dev *dev)
1229 {
1230         ite_dbg("%s called", __func__);
1231
1232         /* enable the transmitter interrupts and master enable flag */
1233         it8709_wr(dev, it8709_rr(dev, IT85_C0IER)
1234                             |IT85_TLDLIE | IT85_IEC,
1235                             IT85_C0IER);
1236 }
1237
1238 /* disable the device; this must be called with the device spinlock held */
1239 static void it8709_disable(struct ite_dev *dev)
1240 {
1241         ite_dbg("%s called", __func__);
1242
1243         /* clear out all interrupt enable flags */
1244         it8709_wr(dev, it8709_rr(dev, IT85_C0IER) &
1245                         ~(IT85_IEC | IT85_RFOIE | IT85_RDAIE | IT85_TLDLIE),
1246                   IT85_C0IER);
1247
1248         /* disable the receiver */
1249         it8709_disable_rx(dev);
1250
1251         /* erase the FIFO */
1252         it8709_wr(dev, IT85_FIFOCLR | it8709_rr(dev, IT85_C0MSTCR),
1253                             IT85_C0MSTCR);
1254 }
1255
1256 /* initialize the hardware */
1257 static void it8709_init_hardware(struct ite_dev *dev)
1258 {
1259         ite_dbg("%s called", __func__);
1260
1261         /* disable all the interrupts */
1262         it8709_wr(dev, it8709_rr(dev, IT85_C0IER) &
1263                         ~(IT85_IEC | IT85_RFOIE | IT85_RDAIE | IT85_TLDLIE),
1264                   IT85_C0IER);
1265
1266         /* program the baud rate divisor */
1267         it8709_wr(dev, ITE_BAUDRATE_DIVISOR & 0xff, IT85_C0BDLR);
1268         it8709_wr(dev, (ITE_BAUDRATE_DIVISOR >> 8) & 0xff,
1269                         IT85_C0BDHR);
1270
1271         /* program the C0MSTCR register defaults */
1272         it8709_wr(dev, (it8709_rr(dev, IT85_C0MSTCR) &
1273                         ~(IT85_ILSEL | IT85_ILE | IT85_FIFOTL
1274                           | IT85_FIFOCLR | IT85_RESET)) | IT85_FIFOTL_DEFAULT,
1275                   IT85_C0MSTCR);
1276
1277         /* program the C0RCR register defaults */
1278         it8709_wr(dev, (it8709_rr(dev, IT85_C0RCR) &
1279                         ~(IT85_RXEN | IT85_RDWOS | IT85_RXEND | IT85_RXACT
1280                           | IT85_RXDCR)) | ITE_RXDCR_DEFAULT,
1281                   IT85_C0RCR);
1282
1283         /* program the C0TCR register defaults */
1284         it8709_wr(dev, (it8709_rr(dev, IT85_C0TCR) & ~(IT85_TXMPM | IT85_TXMPW))
1285                         | IT85_TXRLE | IT85_TXENDF | IT85_TXMPM_DEFAULT
1286                         | IT85_TXMPW_DEFAULT,
1287                   IT85_C0TCR);
1288
1289         /* program the carrier parameters */
1290         ite_set_carrier_params(dev);
1291 }
1292
1293
1294 /* generic hardware setup/teardown code */
1295
1296 /* activate the device for use */
1297 static int ite_open(struct rc_dev *rcdev)
1298 {
1299         struct ite_dev *dev = rcdev->priv;
1300         unsigned long flags;
1301
1302         ite_dbg("%s called", __func__);
1303
1304         spin_lock_irqsave(&dev->lock, flags);
1305         dev->in_use = true;
1306
1307         /* enable the receiver */
1308         dev->params.enable_rx(dev);
1309
1310         spin_unlock_irqrestore(&dev->lock, flags);
1311
1312         return 0;
1313 }
1314
1315 /* deactivate the device for use */
1316 static void ite_close(struct rc_dev *rcdev)
1317 {
1318         struct ite_dev *dev = rcdev->priv;
1319         unsigned long flags;
1320
1321         ite_dbg("%s called", __func__);
1322
1323         spin_lock_irqsave(&dev->lock, flags);
1324         dev->in_use = false;
1325
1326         /* wait for any transmission to end */
1327         spin_unlock_irqrestore(&dev->lock, flags);
1328         wait_event_interruptible(dev->tx_ended, !dev->transmitting);
1329         spin_lock_irqsave(&dev->lock, flags);
1330
1331         dev->params.disable(dev);
1332
1333         spin_unlock_irqrestore(&dev->lock, flags);
1334 }
1335
1336 /* supported models and their parameters */
1337 static const struct ite_dev_params ite_dev_descs[] = {
1338         {       /* 0: ITE8704 */
1339                .model = "ITE8704 CIR transceiver",
1340                .io_region_size = IT87_IOREG_LENGTH,
1341                .io_rsrc_no = 0,
1342                .hw_tx_capable = true,
1343                .sample_period = (u32) (1000000000ULL / 115200),
1344                .tx_carrier_freq = 38000,
1345                .tx_duty_cycle = 33,
1346                .rx_low_carrier_freq = 0,
1347                .rx_high_carrier_freq = 0,
1348
1349                 /* operations */
1350                .get_irq_causes = it87_get_irq_causes,
1351                .enable_rx = it87_enable_rx,
1352                .idle_rx = it87_idle_rx,
1353                .disable_rx = it87_idle_rx,
1354                .get_rx_bytes = it87_get_rx_bytes,
1355                .enable_tx_interrupt = it87_enable_tx_interrupt,
1356                .disable_tx_interrupt = it87_disable_tx_interrupt,
1357                .get_tx_used_slots = it87_get_tx_used_slots,
1358                .put_tx_byte = it87_put_tx_byte,
1359                .disable = it87_disable,
1360                .init_hardware = it87_init_hardware,
1361                .set_carrier_params = it87_set_carrier_params,
1362                },
1363         {       /* 1: ITE8713 */
1364                .model = "ITE8713 CIR transceiver",
1365                .io_region_size = IT87_IOREG_LENGTH,
1366                .io_rsrc_no = 0,
1367                .hw_tx_capable = true,
1368                .sample_period = (u32) (1000000000ULL / 115200),
1369                .tx_carrier_freq = 38000,
1370                .tx_duty_cycle = 33,
1371                .rx_low_carrier_freq = 0,
1372                .rx_high_carrier_freq = 0,
1373
1374                 /* operations */
1375                .get_irq_causes = it87_get_irq_causes,
1376                .enable_rx = it87_enable_rx,
1377                .idle_rx = it87_idle_rx,
1378                .disable_rx = it87_idle_rx,
1379                .get_rx_bytes = it87_get_rx_bytes,
1380                .enable_tx_interrupt = it87_enable_tx_interrupt,
1381                .disable_tx_interrupt = it87_disable_tx_interrupt,
1382                .get_tx_used_slots = it87_get_tx_used_slots,
1383                .put_tx_byte = it87_put_tx_byte,
1384                .disable = it87_disable,
1385                .init_hardware = it87_init_hardware,
1386                .set_carrier_params = it87_set_carrier_params,
1387                },
1388         {       /* 2: ITE8708 */
1389                .model = "ITE8708 CIR transceiver",
1390                .io_region_size = IT8708_IOREG_LENGTH,
1391                .io_rsrc_no = 0,
1392                .hw_tx_capable = true,
1393                .sample_period = (u32) (1000000000ULL / 115200),
1394                .tx_carrier_freq = 38000,
1395                .tx_duty_cycle = 33,
1396                .rx_low_carrier_freq = 0,
1397                .rx_high_carrier_freq = 0,
1398
1399                 /* operations */
1400                .get_irq_causes = it8708_get_irq_causes,
1401                .enable_rx = it8708_enable_rx,
1402                .idle_rx = it8708_idle_rx,
1403                .disable_rx = it8708_idle_rx,
1404                .get_rx_bytes = it8708_get_rx_bytes,
1405                .enable_tx_interrupt = it8708_enable_tx_interrupt,
1406                .disable_tx_interrupt =
1407                it8708_disable_tx_interrupt,
1408                .get_tx_used_slots = it8708_get_tx_used_slots,
1409                .put_tx_byte = it8708_put_tx_byte,
1410                .disable = it8708_disable,
1411                .init_hardware = it8708_init_hardware,
1412                .set_carrier_params = it8708_set_carrier_params,
1413                },
1414         {       /* 3: ITE8709 */
1415                .model = "ITE8709 CIR transceiver",
1416                .io_region_size = IT8709_IOREG_LENGTH,
1417                .io_rsrc_no = 2,
1418                .hw_tx_capable = true,
1419                .sample_period = (u32) (1000000000ULL / 115200),
1420                .tx_carrier_freq = 38000,
1421                .tx_duty_cycle = 33,
1422                .rx_low_carrier_freq = 0,
1423                .rx_high_carrier_freq = 0,
1424
1425                 /* operations */
1426                .get_irq_causes = it8709_get_irq_causes,
1427                .enable_rx = it8709_enable_rx,
1428                .idle_rx = it8709_idle_rx,
1429                .disable_rx = it8709_idle_rx,
1430                .get_rx_bytes = it8709_get_rx_bytes,
1431                .enable_tx_interrupt = it8709_enable_tx_interrupt,
1432                .disable_tx_interrupt =
1433                it8709_disable_tx_interrupt,
1434                .get_tx_used_slots = it8709_get_tx_used_slots,
1435                .put_tx_byte = it8709_put_tx_byte,
1436                .disable = it8709_disable,
1437                .init_hardware = it8709_init_hardware,
1438                .set_carrier_params = it8709_set_carrier_params,
1439                },
1440 };
1441
1442 static const struct pnp_device_id ite_ids[] = {
1443         {"ITE8704", 0},         /* Default model */
1444         {"ITE8713", 1},         /* CIR found in EEEBox 1501U */
1445         {"ITE8708", 2},         /* Bridged IT8512 */
1446         {"ITE8709", 3},         /* SRAM-Bridged IT8512 */
1447         {"", 0},
1448 };
1449
1450 /* allocate memory, probe hardware, and initialize everything */
1451 static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
1452                      *dev_id)
1453 {
1454         const struct ite_dev_params *dev_desc = NULL;
1455         struct ite_dev *itdev = NULL;
1456         struct rc_dev *rdev = NULL;
1457         int ret = -ENOMEM;
1458         int model_no;
1459         int io_rsrc_no;
1460
1461         ite_dbg("%s called", __func__);
1462
1463         itdev = kzalloc(sizeof(struct ite_dev), GFP_KERNEL);
1464         if (!itdev)
1465                 return ret;
1466
1467         /* input device for IR remote (and tx) */
1468         rdev = rc_allocate_device(RC_DRIVER_IR_RAW);
1469         if (!rdev)
1470                 goto exit_free_dev_rdev;
1471         itdev->rdev = rdev;
1472
1473         ret = -ENODEV;
1474
1475         /* get the model number */
1476         model_no = (int)dev_id->driver_data;
1477         ite_pr(KERN_NOTICE, "Auto-detected model: %s\n",
1478                 ite_dev_descs[model_no].model);
1479
1480         if (model_number >= 0 && model_number < ARRAY_SIZE(ite_dev_descs)) {
1481                 model_no = model_number;
1482                 ite_pr(KERN_NOTICE, "The model has been fixed by a module parameter.");
1483         }
1484
1485         ite_pr(KERN_NOTICE, "Using model: %s\n", ite_dev_descs[model_no].model);
1486
1487         /* get the description for the device */
1488         dev_desc = &ite_dev_descs[model_no];
1489         io_rsrc_no = dev_desc->io_rsrc_no;
1490
1491         /* validate pnp resources */
1492         if (!pnp_port_valid(pdev, io_rsrc_no) ||
1493             pnp_port_len(pdev, io_rsrc_no) != dev_desc->io_region_size) {
1494                 dev_err(&pdev->dev, "IR PNP Port not valid!\n");
1495                 goto exit_free_dev_rdev;
1496         }
1497
1498         if (!pnp_irq_valid(pdev, 0)) {
1499                 dev_err(&pdev->dev, "PNP IRQ not valid!\n");
1500                 goto exit_free_dev_rdev;
1501         }
1502
1503         /* store resource values */
1504         itdev->cir_addr = pnp_port_start(pdev, io_rsrc_no);
1505         itdev->cir_irq = pnp_irq(pdev, 0);
1506
1507         /* initialize spinlocks */
1508         spin_lock_init(&itdev->lock);
1509
1510         /* set driver data into the pnp device */
1511         pnp_set_drvdata(pdev, itdev);
1512         itdev->pdev = pdev;
1513
1514         /* initialize waitqueues for transmission */
1515         init_waitqueue_head(&itdev->tx_queue);
1516         init_waitqueue_head(&itdev->tx_ended);
1517
1518         /* copy model-specific parameters */
1519         itdev->params = *dev_desc;
1520
1521         /* apply any overrides */
1522         if (sample_period > 0)
1523                 itdev->params.sample_period = sample_period;
1524
1525         if (tx_carrier_freq > 0)
1526                 itdev->params.tx_carrier_freq = tx_carrier_freq;
1527
1528         if (tx_duty_cycle > 0 && tx_duty_cycle <= 100)
1529                 itdev->params.tx_duty_cycle = tx_duty_cycle;
1530
1531         if (rx_low_carrier_freq > 0)
1532                 itdev->params.rx_low_carrier_freq = rx_low_carrier_freq;
1533
1534         if (rx_high_carrier_freq > 0)
1535                 itdev->params.rx_high_carrier_freq = rx_high_carrier_freq;
1536
1537         /* print out parameters */
1538         ite_pr(KERN_NOTICE, "TX-capable: %d\n", (int)
1539                          itdev->params.hw_tx_capable);
1540         ite_pr(KERN_NOTICE, "Sample period (ns): %ld\n", (long)
1541                      itdev->params.sample_period);
1542         ite_pr(KERN_NOTICE, "TX carrier frequency (Hz): %d\n", (int)
1543                      itdev->params.tx_carrier_freq);
1544         ite_pr(KERN_NOTICE, "TX duty cycle (%%): %d\n", (int)
1545                      itdev->params.tx_duty_cycle);
1546         ite_pr(KERN_NOTICE, "RX low carrier frequency (Hz): %d\n", (int)
1547                      itdev->params.rx_low_carrier_freq);
1548         ite_pr(KERN_NOTICE, "RX high carrier frequency (Hz): %d\n", (int)
1549                      itdev->params.rx_high_carrier_freq);
1550
1551         /* set up hardware initial state */
1552         itdev->params.init_hardware(itdev);
1553
1554         /* set up ir-core props */
1555         rdev->priv = itdev;
1556         rdev->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER;
1557         rdev->open = ite_open;
1558         rdev->close = ite_close;
1559         rdev->s_idle = ite_s_idle;
1560         rdev->s_rx_carrier_range = ite_set_rx_carrier_range;
1561         /* FIFO threshold is 17 bytes, so 17 * 8 samples minimum */
1562         rdev->min_timeout = 17 * 8 * ITE_BAUDRATE_DIVISOR *
1563                             itdev->params.sample_period;
1564         rdev->timeout = IR_DEFAULT_TIMEOUT;
1565         rdev->max_timeout = 10 * IR_DEFAULT_TIMEOUT;
1566         rdev->rx_resolution = ITE_BAUDRATE_DIVISOR *
1567                                 itdev->params.sample_period;
1568         rdev->tx_resolution = ITE_BAUDRATE_DIVISOR *
1569                                 itdev->params.sample_period;
1570
1571         /* set up transmitter related values if needed */
1572         if (itdev->params.hw_tx_capable) {
1573                 rdev->tx_ir = ite_tx_ir;
1574                 rdev->s_tx_carrier = ite_set_tx_carrier;
1575                 rdev->s_tx_duty_cycle = ite_set_tx_duty_cycle;
1576         }
1577
1578         rdev->device_name = dev_desc->model;
1579         rdev->input_id.bustype = BUS_HOST;
1580         rdev->input_id.vendor = PCI_VENDOR_ID_ITE;
1581         rdev->input_id.product = 0;
1582         rdev->input_id.version = 0;
1583         rdev->driver_name = ITE_DRIVER_NAME;
1584         rdev->map_name = RC_MAP_RC6_MCE;
1585
1586         ret = rc_register_device(rdev);
1587         if (ret)
1588                 goto exit_free_dev_rdev;
1589
1590         ret = -EBUSY;
1591         /* now claim resources */
1592         if (!request_region(itdev->cir_addr,
1593                                 dev_desc->io_region_size, ITE_DRIVER_NAME))
1594                 goto exit_unregister_device;
1595
1596         if (request_irq(itdev->cir_irq, ite_cir_isr, IRQF_SHARED,
1597                         ITE_DRIVER_NAME, (void *)itdev))
1598                 goto exit_release_cir_addr;
1599
1600         ite_pr(KERN_NOTICE, "driver has been successfully loaded\n");
1601
1602         return 0;
1603
1604 exit_release_cir_addr:
1605         release_region(itdev->cir_addr, itdev->params.io_region_size);
1606 exit_unregister_device:
1607         rc_unregister_device(rdev);
1608         rdev = NULL;
1609 exit_free_dev_rdev:
1610         rc_free_device(rdev);
1611         kfree(itdev);
1612
1613         return ret;
1614 }
1615
1616 static void ite_remove(struct pnp_dev *pdev)
1617 {
1618         struct ite_dev *dev = pnp_get_drvdata(pdev);
1619         unsigned long flags;
1620
1621         ite_dbg("%s called", __func__);
1622
1623         spin_lock_irqsave(&dev->lock, flags);
1624
1625         /* disable hardware */
1626         dev->params.disable(dev);
1627
1628         spin_unlock_irqrestore(&dev->lock, flags);
1629
1630         /* free resources */
1631         free_irq(dev->cir_irq, dev);
1632         release_region(dev->cir_addr, dev->params.io_region_size);
1633
1634         rc_unregister_device(dev->rdev);
1635
1636         kfree(dev);
1637 }
1638
1639 static int ite_suspend(struct pnp_dev *pdev, pm_message_t state)
1640 {
1641         struct ite_dev *dev = pnp_get_drvdata(pdev);
1642         unsigned long flags;
1643
1644         ite_dbg("%s called", __func__);
1645
1646         /* wait for any transmission to end */
1647         wait_event_interruptible(dev->tx_ended, !dev->transmitting);
1648
1649         spin_lock_irqsave(&dev->lock, flags);
1650
1651         /* disable all interrupts */
1652         dev->params.disable(dev);
1653
1654         spin_unlock_irqrestore(&dev->lock, flags);
1655
1656         return 0;
1657 }
1658
1659 static int ite_resume(struct pnp_dev *pdev)
1660 {
1661         struct ite_dev *dev = pnp_get_drvdata(pdev);
1662         unsigned long flags;
1663
1664         ite_dbg("%s called", __func__);
1665
1666         spin_lock_irqsave(&dev->lock, flags);
1667
1668         /* reinitialize hardware config registers */
1669         dev->params.init_hardware(dev);
1670         /* enable the receiver */
1671         dev->params.enable_rx(dev);
1672
1673         spin_unlock_irqrestore(&dev->lock, flags);
1674
1675         return 0;
1676 }
1677
1678 static void ite_shutdown(struct pnp_dev *pdev)
1679 {
1680         struct ite_dev *dev = pnp_get_drvdata(pdev);
1681         unsigned long flags;
1682
1683         ite_dbg("%s called", __func__);
1684
1685         spin_lock_irqsave(&dev->lock, flags);
1686
1687         /* disable all interrupts */
1688         dev->params.disable(dev);
1689
1690         spin_unlock_irqrestore(&dev->lock, flags);
1691 }
1692
1693 static struct pnp_driver ite_driver = {
1694         .name           = ITE_DRIVER_NAME,
1695         .id_table       = ite_ids,
1696         .probe          = ite_probe,
1697         .remove         = ite_remove,
1698         .suspend        = ite_suspend,
1699         .resume         = ite_resume,
1700         .shutdown       = ite_shutdown,
1701 };
1702
1703 MODULE_DEVICE_TABLE(pnp, ite_ids);
1704 MODULE_DESCRIPTION("ITE Tech Inc. IT8712F/ITE8512F CIR driver");
1705
1706 MODULE_AUTHOR("Juan J. Garcia de Soria <skandalfo@gmail.com>");
1707 MODULE_LICENSE("GPL");
1708
1709 module_pnp_driver(ite_driver);