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