GNU Linux-libre 4.14.251-gnu1
[releases.git] / drivers / media / pci / saa7134 / saa7134-input.c
1 /*
2  *
3  * handle saa7134 IR remotes via linux kernel input layer.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #include "saa7134.h"
18 #include "saa7134-reg.h"
19
20 #include <linux/module.h>
21 #include <linux/init.h>
22 #include <linux/delay.h>
23 #include <linux/interrupt.h>
24 #include <linux/slab.h>
25
26 #define MODULE_NAME "saa7134"
27
28 static unsigned int disable_ir;
29 module_param(disable_ir, int, 0444);
30 MODULE_PARM_DESC(disable_ir,"disable infrared remote support");
31
32 static unsigned int ir_debug;
33 module_param(ir_debug, int, 0644);
34 MODULE_PARM_DESC(ir_debug,"enable debug messages [IR]");
35
36 static int pinnacle_remote;
37 module_param(pinnacle_remote, int, 0644);    /* Choose Pinnacle PCTV remote */
38 MODULE_PARM_DESC(pinnacle_remote, "Specify Pinnacle PCTV remote: 0=coloured, 1=grey (defaults to 0)");
39
40 #define input_dbg(fmt, arg...) do { \
41         if (ir_debug) \
42                 printk(KERN_DEBUG pr_fmt("input: " fmt), ## arg); \
43         } while (0)
44 #define ir_dbg(ir, fmt, arg...) do { \
45         if (ir_debug) \
46                 printk(KERN_DEBUG pr_fmt("ir %s: " fmt), ir->name, ## arg); \
47         } while (0)
48
49 /* Helper function for raw decoding at GPIO16 or GPIO18 */
50 static int saa7134_raw_decode_irq(struct saa7134_dev *dev);
51
52 /* -------------------- GPIO generic keycode builder -------------------- */
53
54 static int build_key(struct saa7134_dev *dev)
55 {
56         struct saa7134_card_ir *ir = dev->remote;
57         u32 gpio, data;
58
59         /* here comes the additional handshake steps for some cards */
60         switch (dev->board) {
61         case SAA7134_BOARD_GOTVIEW_7135:
62                 saa_setb(SAA7134_GPIO_GPSTATUS1, 0x80);
63                 saa_clearb(SAA7134_GPIO_GPSTATUS1, 0x80);
64                 break;
65         }
66         /* rising SAA7134_GPIO_GPRESCAN reads the status */
67         saa_clearb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN);
68         saa_setb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN);
69
70         gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
71         if (ir->polling) {
72                 if (ir->last_gpio == gpio)
73                         return 0;
74                 ir->last_gpio = gpio;
75         }
76
77         data = ir_extract_bits(gpio, ir->mask_keycode);
78         input_dbg("build_key gpio=0x%x mask=0x%x data=%d\n",
79                 gpio, ir->mask_keycode, data);
80
81         switch (dev->board) {
82         case SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG:
83                 if (data == ir->mask_keycode)
84                         rc_keyup(ir->dev);
85                 else
86                         rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data,
87                                              0);
88                 return 0;
89         }
90
91         if (ir->polling) {
92                 if ((ir->mask_keydown  &&  (0 != (gpio & ir->mask_keydown))) ||
93                     (ir->mask_keyup    &&  (0 == (gpio & ir->mask_keyup)))) {
94                         rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data,
95                                              0);
96                 } else {
97                         rc_keyup(ir->dev);
98                 }
99         }
100         else {  /* IRQ driven mode - handle key press and release in one go */
101                 if ((ir->mask_keydown  &&  (0 != (gpio & ir->mask_keydown))) ||
102                     (ir->mask_keyup    &&  (0 == (gpio & ir->mask_keyup)))) {
103                         rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data,
104                                              0);
105                         rc_keyup(ir->dev);
106                 }
107         }
108
109         return 0;
110 }
111
112 /* --------------------- Chip specific I2C key builders ----------------- */
113
114 static int get_key_flydvb_trio(struct IR_i2c *ir, enum rc_proto *protocol,
115                                u32 *scancode, u8 *toggle)
116 {
117         int gpio;
118         int attempt = 0;
119         unsigned char b;
120
121         /* We need this to access GPI Used by the saa_readl macro. */
122         struct saa7134_dev *dev = ir->c->adapter->algo_data;
123
124         if (dev == NULL) {
125                 ir_dbg(ir, "get_key_flydvb_trio: ir->c->adapter->algo_data is NULL!\n");
126                 return -EIO;
127         }
128
129         /* rising SAA7134_GPIGPRESCAN reads the status */
130         saa_clearb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
131         saa_setb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
132
133         gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
134
135         if (0x40000 & ~gpio)
136                 return 0; /* No button press */
137
138         /* poll IR chip */
139         /* weak up the IR chip */
140         b = 0;
141
142         while (1 != i2c_master_send(ir->c, &b, 1)) {
143                 if ((attempt++) < 10) {
144                         /*
145                          * wait a bit for next attempt -
146                          * I don't know how make it better
147                          */
148                         msleep(10);
149                         continue;
150                 }
151                 ir_dbg(ir, "send wake up byte to pic16C505 (IR chip)failed %dx\n",
152                        attempt);
153                 return -EIO;
154         }
155         if (1 != i2c_master_recv(ir->c, &b, 1)) {
156                 ir_dbg(ir, "read error\n");
157                 return -EIO;
158         }
159
160         *protocol = RC_PROTO_UNKNOWN;
161         *scancode = b;
162         *toggle = 0;
163         return 1;
164 }
165
166 static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir,
167                                        enum rc_proto *protocol,
168                                        u32 *scancode, u8 *toggle)
169 {
170         unsigned char b;
171         int gpio;
172
173         /* <dev> is needed to access GPIO. Used by the saa_readl macro. */
174         struct saa7134_dev *dev = ir->c->adapter->algo_data;
175         if (dev == NULL) {
176                 ir_dbg(ir, "get_key_msi_tvanywhere_plus: ir->c->adapter->algo_data is NULL!\n");
177                 return -EIO;
178         }
179
180         /* rising SAA7134_GPIO_GPRESCAN reads the status */
181
182         saa_clearb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
183         saa_setb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
184
185         gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
186
187         /* GPIO&0x40 is pulsed low when a button is pressed. Don't do
188            I2C receive if gpio&0x40 is not low. */
189
190         if (gpio & 0x40)
191                 return 0;       /* No button press */
192
193         /* GPIO says there is a button press. Get it. */
194
195         if (1 != i2c_master_recv(ir->c, &b, 1)) {
196                 ir_dbg(ir, "read error\n");
197                 return -EIO;
198         }
199
200         /* No button press */
201
202         if (b == 0xff)
203                 return 0;
204
205         /* Button pressed */
206
207         input_dbg("get_key_msi_tvanywhere_plus: Key = 0x%02X\n", b);
208         *protocol = RC_PROTO_UNKNOWN;
209         *scancode = b;
210         *toggle = 0;
211         return 1;
212 }
213
214 /* copied and modified from get_key_msi_tvanywhere_plus() */
215 static int get_key_kworld_pc150u(struct IR_i2c *ir, enum rc_proto *protocol,
216                                  u32 *scancode, u8 *toggle)
217 {
218         unsigned char b;
219         unsigned int gpio;
220
221         /* <dev> is needed to access GPIO. Used by the saa_readl macro. */
222         struct saa7134_dev *dev = ir->c->adapter->algo_data;
223         if (dev == NULL) {
224                 ir_dbg(ir, "get_key_kworld_pc150u: ir->c->adapter->algo_data is NULL!\n");
225                 return -EIO;
226         }
227
228         /* rising SAA7134_GPIO_GPRESCAN reads the status */
229
230         saa_clearb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
231         saa_setb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
232
233         gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
234
235         /* GPIO&0x100 is pulsed low when a button is pressed. Don't do
236            I2C receive if gpio&0x100 is not low. */
237
238         if (gpio & 0x100)
239                 return 0;       /* No button press */
240
241         /* GPIO says there is a button press. Get it. */
242
243         if (1 != i2c_master_recv(ir->c, &b, 1)) {
244                 ir_dbg(ir, "read error\n");
245                 return -EIO;
246         }
247
248         /* No button press */
249
250         if (b == 0xff)
251                 return 0;
252
253         /* Button pressed */
254
255         input_dbg("get_key_kworld_pc150u: Key = 0x%02X\n", b);
256         *protocol = RC_PROTO_UNKNOWN;
257         *scancode = b;
258         *toggle = 0;
259         return 1;
260 }
261
262 static int get_key_purpletv(struct IR_i2c *ir, enum rc_proto *protocol,
263                             u32 *scancode, u8 *toggle)
264 {
265         unsigned char b;
266
267         /* poll IR chip */
268         if (1 != i2c_master_recv(ir->c, &b, 1)) {
269                 ir_dbg(ir, "read error\n");
270                 return -EIO;
271         }
272
273         /* no button press */
274         if (b==0)
275                 return 0;
276
277         /* repeating */
278         if (b & 0x80)
279                 return 1;
280
281         *protocol = RC_PROTO_UNKNOWN;
282         *scancode = b;
283         *toggle = 0;
284         return 1;
285 }
286
287 static int get_key_hvr1110(struct IR_i2c *ir, enum rc_proto *protocol,
288                            u32 *scancode, u8 *toggle)
289 {
290         unsigned char buf[5];
291
292         /* poll IR chip */
293         if (5 != i2c_master_recv(ir->c, buf, 5))
294                 return -EIO;
295
296         /* Check if some key were pressed */
297         if (!(buf[0] & 0x80))
298                 return 0;
299
300         /*
301          * buf[3] & 0x80 is always high.
302          * buf[3] & 0x40 is a parity bit. A repeat event is marked
303          * by preserving it into two separate readings
304          * buf[4] bits 0 and 1, and buf[1] and buf[2] are always
305          * zero.
306          *
307          * Note that the keymap which the hvr1110 uses is RC5.
308          *
309          * FIXME: start bits could maybe be used...?
310          */
311         *protocol = RC_PROTO_RC5;
312         *scancode = RC_SCANCODE_RC5(buf[3] & 0x1f, buf[4] >> 2);
313         *toggle = !!(buf[3] & 0x40);
314         return 1;
315 }
316
317
318 static int get_key_beholdm6xx(struct IR_i2c *ir, enum rc_proto *protocol,
319                               u32 *scancode, u8 *toggle)
320 {
321         unsigned char data[12];
322         u32 gpio;
323
324         struct saa7134_dev *dev = ir->c->adapter->algo_data;
325
326         /* rising SAA7134_GPIO_GPRESCAN reads the status */
327         saa_clearb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
328         saa_setb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
329
330         gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
331
332         if (0x400000 & ~gpio)
333                 return 0; /* No button press */
334
335         ir->c->addr = 0x5a >> 1;
336
337         if (12 != i2c_master_recv(ir->c, data, 12)) {
338                 ir_dbg(ir, "read error\n");
339                 return -EIO;
340         }
341
342         if (data[9] != (unsigned char)(~data[8]))
343                 return 0;
344
345         *protocol = RC_PROTO_NECX;
346         *scancode = RC_SCANCODE_NECX(data[11] << 8 | data[10], data[9]);
347         *toggle = 0;
348         return 1;
349 }
350
351 /* Common (grey or coloured) pinnacle PCTV remote handling
352  *
353  */
354 static int get_key_pinnacle(struct IR_i2c *ir, enum rc_proto *protocol,
355                             u32 *scancode, u8 *toggle, int parity_offset,
356                             int marker, int code_modulo)
357 {
358         unsigned char b[4];
359         unsigned int start = 0,parity = 0,code = 0;
360
361         /* poll IR chip */
362         if (4 != i2c_master_recv(ir->c, b, 4)) {
363                 ir_dbg(ir, "read error\n");
364                 return -EIO;
365         }
366
367         for (start = 0; start < ARRAY_SIZE(b); start++) {
368                 if (b[start] == marker) {
369                         code=b[(start+parity_offset + 1) % 4];
370                         parity=b[(start+parity_offset) % 4];
371                 }
372         }
373
374         /* Empty Request */
375         if (parity == 0)
376                 return 0;
377
378         /* Repeating... */
379         if (ir->old == parity)
380                 return 0;
381
382         ir->old = parity;
383
384         /* drop special codes when a key is held down a long time for the grey controller
385            In this case, the second bit of the code is asserted */
386         if (marker == 0xfe && (code & 0x40))
387                 return 0;
388
389         code %= code_modulo;
390
391         *protocol = RC_PROTO_UNKNOWN;
392         *scancode = code;
393         *toggle = 0;
394
395         ir_dbg(ir, "Pinnacle PCTV key %02x\n", code);
396         return 1;
397 }
398
399 /* The grey pinnacle PCTV remote
400  *
401  *  There are one issue with this remote:
402  *   - I2c packet does not change when the same key is pressed quickly. The workaround
403  *     is to hold down each key for about half a second, so that another code is generated
404  *     in the i2c packet, and the function can distinguish key presses.
405  *
406  * Sylvain Pasche <sylvain.pasche@gmail.com>
407  */
408 static int get_key_pinnacle_grey(struct IR_i2c *ir, enum rc_proto *protocol,
409                                  u32 *scancode, u8 *toggle)
410 {
411
412         return get_key_pinnacle(ir, protocol, scancode, toggle, 1, 0xfe, 0xff);
413 }
414
415
416 /* The new pinnacle PCTV remote (with the colored buttons)
417  *
418  * Ricardo Cerqueira <v4l@cerqueira.org>
419  */
420 static int get_key_pinnacle_color(struct IR_i2c *ir, enum rc_proto *protocol,
421                                   u32 *scancode, u8 *toggle)
422 {
423         /* code_modulo parameter (0x88) is used to reduce code value to fit inside IR_KEYTAB_SIZE
424          *
425          * this is the only value that results in 42 unique
426          * codes < 128
427          */
428
429         return get_key_pinnacle(ir, protocol, scancode, toggle, 2, 0x80, 0x88);
430 }
431
432 void saa7134_input_irq(struct saa7134_dev *dev)
433 {
434         struct saa7134_card_ir *ir;
435
436         if (!dev || !dev->remote)
437                 return;
438
439         ir = dev->remote;
440         if (!ir->running)
441                 return;
442
443         if (!ir->polling && !ir->raw_decode) {
444                 build_key(dev);
445         } else if (ir->raw_decode) {
446                 saa7134_raw_decode_irq(dev);
447         }
448 }
449
450 static void saa7134_input_timer(unsigned long data)
451 {
452         struct saa7134_dev *dev = (struct saa7134_dev *)data;
453         struct saa7134_card_ir *ir = dev->remote;
454
455         build_key(dev);
456         mod_timer(&ir->timer, jiffies + msecs_to_jiffies(ir->polling));
457 }
458
459 static int __saa7134_ir_start(void *priv)
460 {
461         struct saa7134_dev *dev = priv;
462         struct saa7134_card_ir *ir;
463
464         if (!dev || !dev->remote)
465                 return -EINVAL;
466
467         ir  = dev->remote;
468         if (ir->running)
469                 return 0;
470
471         /* Moved here from saa7134_input_init1() because the latter
472          * is not called on device resume */
473         switch (dev->board) {
474         case SAA7134_BOARD_MD2819:
475         case SAA7134_BOARD_KWORLD_VSTREAM_XPERT:
476         case SAA7134_BOARD_AVERMEDIA_305:
477         case SAA7134_BOARD_AVERMEDIA_307:
478         case SAA7134_BOARD_AVERMEDIA_505:
479         case SAA7134_BOARD_AVERMEDIA_STUDIO_305:
480         case SAA7134_BOARD_AVERMEDIA_STUDIO_505:
481         case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
482         case SAA7134_BOARD_AVERMEDIA_STUDIO_507:
483         case SAA7134_BOARD_AVERMEDIA_STUDIO_507UA:
484         case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
485         case SAA7134_BOARD_AVERMEDIA_M102:
486         case SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS:
487                 /* Without this we won't receive key up events */
488                 saa_setb(SAA7134_GPIO_GPMODE0, 0x4);
489                 saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
490                 break;
491         case SAA7134_BOARD_AVERMEDIA_777:
492         case SAA7134_BOARD_AVERMEDIA_A16AR:
493                 /* Without this we won't receive key up events */
494                 saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
495                 saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
496                 break;
497         case SAA7134_BOARD_AVERMEDIA_A16D:
498                 /* Without this we won't receive key up events */
499                 saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
500                 saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
501                 break;
502         case SAA7134_BOARD_GOTVIEW_7135:
503                 saa_setb(SAA7134_GPIO_GPMODE1, 0x80);
504                 break;
505         }
506
507         ir->running = true;
508
509         if (ir->polling) {
510                 setup_timer(&ir->timer, saa7134_input_timer,
511                             (unsigned long)dev);
512                 ir->timer.expires = jiffies + HZ;
513                 add_timer(&ir->timer);
514         }
515
516         return 0;
517 }
518
519 static void __saa7134_ir_stop(void *priv)
520 {
521         struct saa7134_dev *dev = priv;
522         struct saa7134_card_ir *ir;
523
524         if (!dev || !dev->remote)
525                 return;
526
527         ir  = dev->remote;
528         if (!ir->running)
529                 return;
530
531         if (ir->polling)
532                 del_timer_sync(&ir->timer);
533
534         ir->running = false;
535
536         return;
537 }
538
539 int saa7134_ir_start(struct saa7134_dev *dev)
540 {
541         if (dev->remote->users)
542                 return __saa7134_ir_start(dev);
543
544         return 0;
545 }
546
547 void saa7134_ir_stop(struct saa7134_dev *dev)
548 {
549         if (dev->remote->users)
550                 __saa7134_ir_stop(dev);
551 }
552
553 static int saa7134_ir_open(struct rc_dev *rc)
554 {
555         struct saa7134_dev *dev = rc->priv;
556
557         dev->remote->users++;
558         return __saa7134_ir_start(dev);
559 }
560
561 static void saa7134_ir_close(struct rc_dev *rc)
562 {
563         struct saa7134_dev *dev = rc->priv;
564
565         dev->remote->users--;
566         if (!dev->remote->users)
567                 __saa7134_ir_stop(dev);
568 }
569
570 int saa7134_input_init1(struct saa7134_dev *dev)
571 {
572         struct saa7134_card_ir *ir;
573         struct rc_dev *rc;
574         char *ir_codes = NULL;
575         u32 mask_keycode = 0;
576         u32 mask_keydown = 0;
577         u32 mask_keyup   = 0;
578         unsigned polling = 0;
579         bool raw_decode  = false;
580         int err;
581
582         if (dev->has_remote != SAA7134_REMOTE_GPIO)
583                 return -ENODEV;
584         if (disable_ir)
585                 return -ENODEV;
586
587         /* detect & configure */
588         switch (dev->board) {
589         case SAA7134_BOARD_FLYVIDEO2000:
590         case SAA7134_BOARD_FLYVIDEO3000:
591         case SAA7134_BOARD_FLYTVPLATINUM_FM:
592         case SAA7134_BOARD_FLYTVPLATINUM_MINI2:
593         case SAA7134_BOARD_ROVERMEDIA_LINK_PRO_FM:
594                 ir_codes     = RC_MAP_FLYVIDEO;
595                 mask_keycode = 0xEC00000;
596                 mask_keydown = 0x0040000;
597                 break;
598         case SAA7134_BOARD_CINERGY400:
599         case SAA7134_BOARD_CINERGY600:
600         case SAA7134_BOARD_CINERGY600_MK3:
601                 ir_codes     = RC_MAP_CINERGY;
602                 mask_keycode = 0x00003f;
603                 mask_keyup   = 0x040000;
604                 break;
605         case SAA7134_BOARD_ECS_TVP3XP:
606         case SAA7134_BOARD_ECS_TVP3XP_4CB5:
607                 ir_codes     = RC_MAP_EZTV;
608                 mask_keycode = 0x00017c;
609                 mask_keyup   = 0x000002;
610                 polling      = 50; // ms
611                 break;
612         case SAA7134_BOARD_KWORLD_XPERT:
613         case SAA7134_BOARD_AVACSSMARTTV:
614                 ir_codes     = RC_MAP_PIXELVIEW;
615                 mask_keycode = 0x00001F;
616                 mask_keyup   = 0x000020;
617                 polling      = 50; // ms
618                 break;
619         case SAA7134_BOARD_MD2819:
620         case SAA7134_BOARD_KWORLD_VSTREAM_XPERT:
621         case SAA7134_BOARD_AVERMEDIA_305:
622         case SAA7134_BOARD_AVERMEDIA_307:
623         case SAA7134_BOARD_AVERMEDIA_505:
624         case SAA7134_BOARD_AVERMEDIA_STUDIO_305:
625         case SAA7134_BOARD_AVERMEDIA_STUDIO_505:
626         case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
627         case SAA7134_BOARD_AVERMEDIA_STUDIO_507:
628         case SAA7134_BOARD_AVERMEDIA_STUDIO_507UA:
629         case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
630         case SAA7134_BOARD_AVERMEDIA_M102:
631         case SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS:
632                 ir_codes     = RC_MAP_AVERMEDIA;
633                 mask_keycode = 0x0007C8;
634                 mask_keydown = 0x000010;
635                 polling      = 50; // ms
636                 /* GPIO stuff moved to __saa7134_ir_start() */
637                 break;
638         case SAA7134_BOARD_AVERMEDIA_M135A:
639                 ir_codes     = RC_MAP_AVERMEDIA_M135A;
640                 mask_keydown = 0x0040000;       /* Enable GPIO18 line on both edges */
641                 mask_keyup   = 0x0040000;
642                 mask_keycode = 0xffff;
643                 raw_decode   = true;
644                 break;
645         case SAA7134_BOARD_AVERMEDIA_M733A:
646                 ir_codes     = RC_MAP_AVERMEDIA_M733A_RM_K6;
647                 mask_keydown = 0x0040000;
648                 mask_keyup   = 0x0040000;
649                 mask_keycode = 0xffff;
650                 raw_decode   = true;
651                 break;
652         case SAA7134_BOARD_AVERMEDIA_777:
653         case SAA7134_BOARD_AVERMEDIA_A16AR:
654                 ir_codes     = RC_MAP_AVERMEDIA;
655                 mask_keycode = 0x02F200;
656                 mask_keydown = 0x000400;
657                 polling      = 50; // ms
658                 /* GPIO stuff moved to __saa7134_ir_start() */
659                 break;
660         case SAA7134_BOARD_AVERMEDIA_A16D:
661                 ir_codes     = RC_MAP_AVERMEDIA_A16D;
662                 mask_keycode = 0x02F200;
663                 mask_keydown = 0x000400;
664                 polling      = 50; /* ms */
665                 /* GPIO stuff moved to __saa7134_ir_start() */
666                 break;
667         case SAA7134_BOARD_KWORLD_TERMINATOR:
668                 ir_codes     = RC_MAP_PIXELVIEW;
669                 mask_keycode = 0x00001f;
670                 mask_keyup   = 0x000060;
671                 polling      = 50; // ms
672                 break;
673         case SAA7134_BOARD_MANLI_MTV001:
674         case SAA7134_BOARD_MANLI_MTV002:
675                 ir_codes     = RC_MAP_MANLI;
676                 mask_keycode = 0x001f00;
677                 mask_keyup   = 0x004000;
678                 polling      = 50; /* ms */
679                 break;
680         case SAA7134_BOARD_BEHOLD_409FM:
681         case SAA7134_BOARD_BEHOLD_401:
682         case SAA7134_BOARD_BEHOLD_403:
683         case SAA7134_BOARD_BEHOLD_403FM:
684         case SAA7134_BOARD_BEHOLD_405:
685         case SAA7134_BOARD_BEHOLD_405FM:
686         case SAA7134_BOARD_BEHOLD_407:
687         case SAA7134_BOARD_BEHOLD_407FM:
688         case SAA7134_BOARD_BEHOLD_409:
689         case SAA7134_BOARD_BEHOLD_505FM:
690         case SAA7134_BOARD_BEHOLD_505RDS_MK5:
691         case SAA7134_BOARD_BEHOLD_505RDS_MK3:
692         case SAA7134_BOARD_BEHOLD_507_9FM:
693         case SAA7134_BOARD_BEHOLD_507RDS_MK3:
694         case SAA7134_BOARD_BEHOLD_507RDS_MK5:
695                 ir_codes     = RC_MAP_MANLI;
696                 mask_keycode = 0x003f00;
697                 mask_keyup   = 0x004000;
698                 polling      = 50; /* ms */
699                 break;
700         case SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM:
701                 ir_codes     = RC_MAP_BEHOLD_COLUMBUS;
702                 mask_keycode = 0x003f00;
703                 mask_keyup   = 0x004000;
704                 polling      = 50; // ms
705                 break;
706         case SAA7134_BOARD_SEDNA_PC_TV_CARDBUS:
707                 ir_codes     = RC_MAP_PCTV_SEDNA;
708                 mask_keycode = 0x001f00;
709                 mask_keyup   = 0x004000;
710                 polling      = 50; // ms
711                 break;
712         case SAA7134_BOARD_GOTVIEW_7135:
713                 ir_codes     = RC_MAP_GOTVIEW7135;
714                 mask_keycode = 0x0003CC;
715                 mask_keydown = 0x000010;
716                 polling      = 5; /* ms */
717                 /* GPIO stuff moved to __saa7134_ir_start() */
718                 break;
719         case SAA7134_BOARD_VIDEOMATE_TV_PVR:
720         case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS:
721         case SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII:
722                 ir_codes     = RC_MAP_VIDEOMATE_TV_PVR;
723                 mask_keycode = 0x00003F;
724                 mask_keyup   = 0x400000;
725                 polling      = 50; // ms
726                 break;
727         case SAA7134_BOARD_PROTEUS_2309:
728                 ir_codes     = RC_MAP_PROTEUS_2309;
729                 mask_keycode = 0x00007F;
730                 mask_keyup   = 0x000080;
731                 polling      = 50; // ms
732                 break;
733         case SAA7134_BOARD_VIDEOMATE_DVBT_300:
734         case SAA7134_BOARD_VIDEOMATE_DVBT_200:
735                 ir_codes     = RC_MAP_VIDEOMATE_TV_PVR;
736                 mask_keycode = 0x003F00;
737                 mask_keyup   = 0x040000;
738                 break;
739         case SAA7134_BOARD_FLYDVBS_LR300:
740         case SAA7134_BOARD_FLYDVBT_LR301:
741         case SAA7134_BOARD_FLYDVBTDUO:
742                 ir_codes     = RC_MAP_FLYDVB;
743                 mask_keycode = 0x0001F00;
744                 mask_keydown = 0x0040000;
745                 break;
746         case SAA7134_BOARD_ASUSTeK_P7131_DUAL:
747         case SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA:
748         case SAA7134_BOARD_ASUSTeK_P7131_ANALOG:
749                 ir_codes     = RC_MAP_ASUS_PC39;
750                 mask_keydown = 0x0040000;       /* Enable GPIO18 line on both edges */
751                 mask_keyup   = 0x0040000;
752                 mask_keycode = 0xffff;
753                 raw_decode   = true;
754                 break;
755         case SAA7134_BOARD_ASUSTeK_PS3_100:
756                 ir_codes     = RC_MAP_ASUS_PS3_100;
757                 mask_keydown = 0x0040000;
758                 mask_keyup   = 0x0040000;
759                 mask_keycode = 0xffff;
760                 raw_decode   = true;
761                 break;
762         case SAA7134_BOARD_ENCORE_ENLTV:
763         case SAA7134_BOARD_ENCORE_ENLTV_FM:
764                 ir_codes     = RC_MAP_ENCORE_ENLTV;
765                 mask_keycode = 0x00007f;
766                 mask_keyup   = 0x040000;
767                 polling      = 50; // ms
768                 break;
769         case SAA7134_BOARD_ENCORE_ENLTV_FM53:
770         case SAA7134_BOARD_ENCORE_ENLTV_FM3:
771                 ir_codes     = RC_MAP_ENCORE_ENLTV_FM53;
772                 mask_keydown = 0x0040000;       /* Enable GPIO18 line on both edges */
773                 mask_keyup   = 0x0040000;
774                 mask_keycode = 0xffff;
775                 raw_decode   = true;
776                 break;
777         case SAA7134_BOARD_10MOONSTVMASTER3:
778                 ir_codes     = RC_MAP_ENCORE_ENLTV;
779                 mask_keycode = 0x5f80000;
780                 mask_keyup   = 0x8000000;
781                 polling      = 50; //ms
782                 break;
783         case SAA7134_BOARD_GENIUS_TVGO_A11MCE:
784                 ir_codes     = RC_MAP_GENIUS_TVGO_A11MCE;
785                 mask_keycode = 0xff;
786                 mask_keydown = 0xf00000;
787                 polling = 50; /* ms */
788                 break;
789         case SAA7134_BOARD_REAL_ANGEL_220:
790                 ir_codes     = RC_MAP_REAL_AUDIO_220_32_KEYS;
791                 mask_keycode = 0x3f00;
792                 mask_keyup   = 0x4000;
793                 polling = 50; /* ms */
794                 break;
795         case SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG:
796                 ir_codes     = RC_MAP_KWORLD_PLUS_TV_ANALOG;
797                 mask_keycode = 0x7f;
798                 polling = 40; /* ms */
799                 break;
800         case SAA7134_BOARD_VIDEOMATE_S350:
801                 ir_codes     = RC_MAP_VIDEOMATE_S350;
802                 mask_keycode = 0x003f00;
803                 mask_keydown = 0x040000;
804                 break;
805         case SAA7134_BOARD_LEADTEK_WINFAST_DTV1000S:
806                 ir_codes     = RC_MAP_WINFAST;
807                 mask_keycode = 0x5f00;
808                 mask_keyup   = 0x020000;
809                 polling      = 50; /* ms */
810                 break;
811         case SAA7134_BOARD_VIDEOMATE_M1F:
812                 ir_codes     = RC_MAP_VIDEOMATE_K100;
813                 mask_keycode = 0x0ff00;
814                 mask_keyup   = 0x040000;
815                 break;
816         case SAA7134_BOARD_HAUPPAUGE_HVR1150:
817         case SAA7134_BOARD_HAUPPAUGE_HVR1120:
818                 ir_codes     = RC_MAP_HAUPPAUGE;
819                 mask_keydown = 0x0040000;       /* Enable GPIO18 line on both edges */
820                 mask_keyup   = 0x0040000;
821                 mask_keycode = 0xffff;
822                 raw_decode   = true;
823                 break;
824         case SAA7134_BOARD_LEADTEK_WINFAST_TV2100_FM:
825                 ir_codes     = RC_MAP_LEADTEK_Y04G0051;
826                 mask_keydown = 0x0040000;       /* Enable GPIO18 line on both edges */
827                 mask_keyup   = 0x0040000;
828                 mask_keycode = 0xffff;
829                 raw_decode   = true;
830                 break;
831         }
832         if (NULL == ir_codes) {
833                 pr_err("Oops: IR config error [card=%d]\n", dev->board);
834                 return -ENODEV;
835         }
836
837         ir = kzalloc(sizeof(*ir), GFP_KERNEL);
838         rc = rc_allocate_device(RC_DRIVER_SCANCODE);
839         if (!ir || !rc) {
840                 err = -ENOMEM;
841                 goto err_out_free;
842         }
843
844         ir->dev = rc;
845         dev->remote = ir;
846
847         /* init hardware-specific stuff */
848         ir->mask_keycode = mask_keycode;
849         ir->mask_keydown = mask_keydown;
850         ir->mask_keyup   = mask_keyup;
851         ir->polling      = polling;
852         ir->raw_decode   = raw_decode;
853
854         /* init input device */
855         snprintf(ir->name, sizeof(ir->name), "saa7134 IR (%s)",
856                  saa7134_boards[dev->board].name);
857         snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0",
858                  pci_name(dev->pci));
859
860         rc->priv = dev;
861         rc->open = saa7134_ir_open;
862         rc->close = saa7134_ir_close;
863         if (raw_decode) {
864                 rc->driver_type = RC_DRIVER_IR_RAW;
865                 rc->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER;
866         }
867
868         rc->device_name = ir->name;
869         rc->input_phys = ir->phys;
870         rc->input_id.bustype = BUS_PCI;
871         rc->input_id.version = 1;
872         if (dev->pci->subsystem_vendor) {
873                 rc->input_id.vendor  = dev->pci->subsystem_vendor;
874                 rc->input_id.product = dev->pci->subsystem_device;
875         } else {
876                 rc->input_id.vendor  = dev->pci->vendor;
877                 rc->input_id.product = dev->pci->device;
878         }
879         rc->dev.parent = &dev->pci->dev;
880         rc->map_name = ir_codes;
881         rc->driver_name = MODULE_NAME;
882         rc->min_timeout = 1;
883         rc->timeout = IR_DEFAULT_TIMEOUT;
884         rc->max_timeout = 10 * IR_DEFAULT_TIMEOUT;
885
886         err = rc_register_device(rc);
887         if (err)
888                 goto err_out_free;
889
890         return 0;
891
892 err_out_free:
893         rc_free_device(rc);
894         dev->remote = NULL;
895         kfree(ir);
896         return err;
897 }
898
899 void saa7134_input_fini(struct saa7134_dev *dev)
900 {
901         if (NULL == dev->remote)
902                 return;
903
904         saa7134_ir_stop(dev);
905         rc_unregister_device(dev->remote->dev);
906         kfree(dev->remote);
907         dev->remote = NULL;
908 }
909
910 void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
911 {
912         struct i2c_board_info info;
913         struct i2c_msg msg_msi = {
914                 .addr = 0x50,
915                 .flags = I2C_M_RD,
916                 .len = 0,
917                 .buf = NULL,
918         };
919         int rc;
920
921         if (disable_ir) {
922                 input_dbg("IR has been disabled, not probing for i2c remote\n");
923                 return;
924         }
925
926         memset(&info, 0, sizeof(struct i2c_board_info));
927         memset(&dev->init_data, 0, sizeof(dev->init_data));
928         strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
929
930         switch (dev->board) {
931         case SAA7134_BOARD_PINNACLE_PCTV_110i:
932         case SAA7134_BOARD_PINNACLE_PCTV_310i:
933                 dev->init_data.name = "Pinnacle PCTV";
934                 if (pinnacle_remote == 0) {
935                         dev->init_data.get_key = get_key_pinnacle_color;
936                         dev->init_data.ir_codes = RC_MAP_PINNACLE_COLOR;
937                         info.addr = 0x47;
938                 } else {
939                         dev->init_data.get_key = get_key_pinnacle_grey;
940                         dev->init_data.ir_codes = RC_MAP_PINNACLE_GREY;
941                         info.addr = 0x47;
942                 }
943                 break;
944         case SAA7134_BOARD_UPMOST_PURPLE_TV:
945                 dev->init_data.name = "Purple TV";
946                 dev->init_data.get_key = get_key_purpletv;
947                 dev->init_data.ir_codes = RC_MAP_PURPLETV;
948                 info.addr = 0x7a;
949                 break;
950         case SAA7134_BOARD_MSI_TVATANYWHERE_PLUS:
951                 dev->init_data.name = "MSI TV@nywhere Plus";
952                 dev->init_data.get_key = get_key_msi_tvanywhere_plus;
953                 dev->init_data.ir_codes = RC_MAP_MSI_TVANYWHERE_PLUS;
954                 /*
955                  * MSI TV@nyware Plus requires more frequent polling
956                  * otherwise it will miss some keypresses
957                  */
958                 dev->init_data.polling_interval = 50;
959                 info.addr = 0x30;
960                 /* MSI TV@nywhere Plus controller doesn't seem to
961                    respond to probes unless we read something from
962                    an existing device. Weird...
963                    REVISIT: might no longer be needed */
964                 rc = i2c_transfer(&dev->i2c_adap, &msg_msi, 1);
965                 input_dbg("probe 0x%02x @ %s: %s\n",
966                         msg_msi.addr, dev->i2c_adap.name,
967                         (1 == rc) ? "yes" : "no");
968                 break;
969         case SAA7134_BOARD_SNAZIO_TVPVR_PRO:
970                 dev->init_data.name = "SnaZio* TVPVR PRO";
971                 dev->init_data.get_key = get_key_msi_tvanywhere_plus;
972                 dev->init_data.ir_codes = RC_MAP_MSI_TVANYWHERE_PLUS;
973                 /*
974                  * MSI TV@nyware Plus requires more frequent polling
975                  * otherwise it will miss some keypresses
976                  */
977                 dev->init_data.polling_interval = 50;
978                 info.addr = 0x30;
979                 /*
980                  * MSI TV@nywhere Plus controller doesn't seem to
981                  *  respond to probes unless we read something from
982                  *  an existing device. Weird...
983                  * REVISIT: might no longer be needed
984                  */
985                 rc = i2c_transfer(&dev->i2c_adap, &msg_msi, 1);
986                 input_dbg("probe 0x%02x @ %s: %s\n",
987                         msg_msi.addr, dev->i2c_adap.name,
988                         (rc == 1) ? "yes" : "no");
989                 break;
990         case SAA7134_BOARD_KWORLD_PC150U:
991                 /* copied and modified from MSI TV@nywhere Plus */
992                 dev->init_data.name = "Kworld PC150-U";
993                 dev->init_data.get_key = get_key_kworld_pc150u;
994                 dev->init_data.ir_codes = RC_MAP_KWORLD_PC150U;
995                 info.addr = 0x30;
996                 /* MSI TV@nywhere Plus controller doesn't seem to
997                    respond to probes unless we read something from
998                    an existing device. Weird...
999                    REVISIT: might no longer be needed */
1000                 rc = i2c_transfer(&dev->i2c_adap, &msg_msi, 1);
1001                 input_dbg("probe 0x%02x @ %s: %s\n",
1002                         msg_msi.addr, dev->i2c_adap.name,
1003                         (1 == rc) ? "yes" : "no");
1004                 break;
1005         case SAA7134_BOARD_HAUPPAUGE_HVR1110:
1006                 dev->init_data.name = "HVR 1110";
1007                 dev->init_data.get_key = get_key_hvr1110;
1008                 dev->init_data.ir_codes = RC_MAP_HAUPPAUGE;
1009                 info.addr = 0x71;
1010                 break;
1011         case SAA7134_BOARD_BEHOLD_607FM_MK3:
1012         case SAA7134_BOARD_BEHOLD_607FM_MK5:
1013         case SAA7134_BOARD_BEHOLD_609FM_MK3:
1014         case SAA7134_BOARD_BEHOLD_609FM_MK5:
1015         case SAA7134_BOARD_BEHOLD_607RDS_MK3:
1016         case SAA7134_BOARD_BEHOLD_607RDS_MK5:
1017         case SAA7134_BOARD_BEHOLD_609RDS_MK3:
1018         case SAA7134_BOARD_BEHOLD_609RDS_MK5:
1019         case SAA7134_BOARD_BEHOLD_M6:
1020         case SAA7134_BOARD_BEHOLD_M63:
1021         case SAA7134_BOARD_BEHOLD_M6_EXTRA:
1022         case SAA7134_BOARD_BEHOLD_H6:
1023         case SAA7134_BOARD_BEHOLD_X7:
1024         case SAA7134_BOARD_BEHOLD_H7:
1025         case SAA7134_BOARD_BEHOLD_A7:
1026                 dev->init_data.name = "BeholdTV";
1027                 dev->init_data.get_key = get_key_beholdm6xx;
1028                 dev->init_data.ir_codes = RC_MAP_BEHOLD;
1029                 dev->init_data.type = RC_PROTO_BIT_NECX;
1030                 info.addr = 0x2d;
1031                 break;
1032         case SAA7134_BOARD_AVERMEDIA_CARDBUS_501:
1033         case SAA7134_BOARD_AVERMEDIA_CARDBUS_506:
1034                 info.addr = 0x40;
1035                 break;
1036         case SAA7134_BOARD_AVERMEDIA_A706:
1037                 info.addr = 0x41;
1038                 break;
1039         case SAA7134_BOARD_FLYDVB_TRIO:
1040                 dev->init_data.name = "FlyDVB Trio";
1041                 dev->init_data.get_key = get_key_flydvb_trio;
1042                 dev->init_data.ir_codes = RC_MAP_FLYDVB;
1043                 info.addr = 0x0b;
1044                 break;
1045         default:
1046                 input_dbg("No I2C IR support for board %x\n", dev->board);
1047                 return;
1048         }
1049
1050         if (dev->init_data.name)
1051                 info.platform_data = &dev->init_data;
1052         i2c_new_device(&dev->i2c_adap, &info);
1053 }
1054
1055 static int saa7134_raw_decode_irq(struct saa7134_dev *dev)
1056 {
1057         struct saa7134_card_ir *ir = dev->remote;
1058         int space;
1059
1060         /* Generate initial event */
1061         saa_clearb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
1062         saa_setb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN);
1063         space = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2) & ir->mask_keydown;
1064         ir_raw_event_store_edge(dev->remote->dev, !space);
1065
1066         return 1;
1067 }