These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / media / pci / saa7134 / saa7134-input.c
index dc3d651..69d32d3 100644 (file)
  *
  */
 
+#include "saa7134.h"
+#include "saa7134-reg.h"
+
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 #include <linux/slab.h>
 
-#include "saa7134-reg.h"
-#include "saa7134.h"
-
 #define MODULE_NAME "saa7134"
 
 static unsigned int disable_ir;
@@ -41,10 +41,14 @@ static int pinnacle_remote;
 module_param(pinnacle_remote, int, 0644);    /* Choose Pinnacle PCTV remote */
 MODULE_PARM_DESC(pinnacle_remote, "Specify Pinnacle PCTV remote: 0=coloured, 1=grey (defaults to 0)");
 
-#define dprintk(fmt, arg...)   if (ir_debug) \
-       printk(KERN_DEBUG "%s/ir: " fmt, dev->name , ## arg)
-#define i2cdprintk(fmt, arg...)    if (ir_debug) \
-       printk(KERN_DEBUG "%s/ir: " fmt, ir->name , ## arg)
+#define input_dbg(fmt, arg...) do { \
+       if (ir_debug) \
+               printk(KERN_DEBUG pr_fmt("input: " fmt), ## arg); \
+       } while (0)
+#define ir_dbg(ir, fmt, arg...) do { \
+       if (ir_debug) \
+               printk(KERN_DEBUG pr_fmt("ir %s: " fmt), ir->name, ## arg); \
+       } while (0)
 
 /* Helper function for raw decoding at GPIO16 or GPIO18 */
 static int saa7134_raw_decode_irq(struct saa7134_dev *dev);
@@ -75,7 +79,7 @@ static int build_key(struct saa7134_dev *dev)
        }
 
        data = ir_extract_bits(gpio, ir->mask_keycode);
-       dprintk("build_key gpio=0x%x mask=0x%x data=%d\n",
+       input_dbg("build_key gpio=0x%x mask=0x%x data=%d\n",
                gpio, ir->mask_keycode, data);
 
        switch (dev->board) {
@@ -119,7 +123,7 @@ static int get_key_flydvb_trio(struct IR_i2c *ir, enum rc_type *protocol,
        struct saa7134_dev *dev = ir->c->adapter->algo_data;
 
        if (dev == NULL) {
-               i2cdprintk("get_key_flydvb_trio: "
+               ir_dbg(ir, "get_key_flydvb_trio: "
                           "ir->c->adapter->algo_data is NULL!\n");
                return -EIO;
        }
@@ -146,12 +150,12 @@ static int get_key_flydvb_trio(struct IR_i2c *ir, enum rc_type *protocol,
                        msleep(10);
                        continue;
                }
-               i2cdprintk("send wake up byte to pic16C505 (IR chip)"
+               ir_dbg(ir, "send wake up byte to pic16C505 (IR chip)"
                           "failed %dx\n", attempt);
                return -EIO;
        }
        if (1 != i2c_master_recv(ir->c, &b, 1)) {
-               i2cdprintk("read error\n");
+               ir_dbg(ir, "read error\n");
                return -EIO;
        }
 
@@ -170,7 +174,7 @@ static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, enum rc_type *protocol
        /* <dev> is needed to access GPIO. Used by the saa_readl macro. */
        struct saa7134_dev *dev = ir->c->adapter->algo_data;
        if (dev == NULL) {
-               i2cdprintk("get_key_msi_tvanywhere_plus: "
+               ir_dbg(ir, "get_key_msi_tvanywhere_plus: "
                           "ir->c->adapter->algo_data is NULL!\n");
                return -EIO;
        }
@@ -191,7 +195,7 @@ static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, enum rc_type *protocol
        /* GPIO says there is a button press. Get it. */
 
        if (1 != i2c_master_recv(ir->c, &b, 1)) {
-               i2cdprintk("read error\n");
+               ir_dbg(ir, "read error\n");
                return -EIO;
        }
 
@@ -202,7 +206,7 @@ static int get_key_msi_tvanywhere_plus(struct IR_i2c *ir, enum rc_type *protocol
 
        /* Button pressed */
 
-       dprintk("get_key_msi_tvanywhere_plus: Key = 0x%02X\n", b);
+       input_dbg("get_key_msi_tvanywhere_plus: Key = 0x%02X\n", b);
        *protocol = RC_TYPE_UNKNOWN;
        *scancode = b;
        *toggle = 0;
@@ -219,7 +223,7 @@ static int get_key_kworld_pc150u(struct IR_i2c *ir, enum rc_type *protocol,
        /* <dev> is needed to access GPIO. Used by the saa_readl macro. */
        struct saa7134_dev *dev = ir->c->adapter->algo_data;
        if (dev == NULL) {
-               i2cdprintk("get_key_kworld_pc150u: "
+               ir_dbg(ir, "get_key_kworld_pc150u: "
                           "ir->c->adapter->algo_data is NULL!\n");
                return -EIO;
        }
@@ -240,7 +244,7 @@ static int get_key_kworld_pc150u(struct IR_i2c *ir, enum rc_type *protocol,
        /* GPIO says there is a button press. Get it. */
 
        if (1 != i2c_master_recv(ir->c, &b, 1)) {
-               i2cdprintk("read error\n");
+               ir_dbg(ir, "read error\n");
                return -EIO;
        }
 
@@ -251,7 +255,7 @@ static int get_key_kworld_pc150u(struct IR_i2c *ir, enum rc_type *protocol,
 
        /* Button pressed */
 
-       dprintk("get_key_kworld_pc150u: Key = 0x%02X\n", b);
+       input_dbg("get_key_kworld_pc150u: Key = 0x%02X\n", b);
        *protocol = RC_TYPE_UNKNOWN;
        *scancode = b;
        *toggle = 0;
@@ -265,7 +269,7 @@ static int get_key_purpletv(struct IR_i2c *ir, enum rc_type *protocol,
 
        /* poll IR chip */
        if (1 != i2c_master_recv(ir->c, &b, 1)) {
-               i2cdprintk("read error\n");
+               ir_dbg(ir, "read error\n");
                return -EIO;
        }
 
@@ -334,7 +338,7 @@ static int get_key_beholdm6xx(struct IR_i2c *ir, enum rc_type *protocol,
        ir->c->addr = 0x5a >> 1;
 
        if (12 != i2c_master_recv(ir->c, data, 12)) {
-               i2cdprintk("read error\n");
+               ir_dbg(ir, "read error\n");
                return -EIO;
        }
 
@@ -359,7 +363,7 @@ static int get_key_pinnacle(struct IR_i2c *ir, enum rc_type *protocol,
 
        /* poll IR chip */
        if (4 != i2c_master_recv(ir->c, b, 4)) {
-               i2cdprintk("read error\n");
+               ir_dbg(ir, "read error\n");
                return -EIO;
        }
 
@@ -391,7 +395,7 @@ static int get_key_pinnacle(struct IR_i2c *ir, enum rc_type *protocol,
        *scancode = code;
        *toggle = 0;
 
-       i2cdprintk("Pinnacle PCTV key %02x\n", code);
+       ir_dbg(ir, "Pinnacle PCTV key %02x\n", code);
        return 1;
 }
 
@@ -481,6 +485,7 @@ static int __saa7134_ir_start(void *priv)
        case SAA7134_BOARD_KWORLD_VSTREAM_XPERT:
        case SAA7134_BOARD_AVERMEDIA_305:
        case SAA7134_BOARD_AVERMEDIA_307:
+       case SAA7134_BOARD_AVERMEDIA_505:
        case SAA7134_BOARD_AVERMEDIA_STUDIO_305:
        case SAA7134_BOARD_AVERMEDIA_STUDIO_505:
        case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
@@ -629,6 +634,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
        case SAA7134_BOARD_KWORLD_VSTREAM_XPERT:
        case SAA7134_BOARD_AVERMEDIA_305:
        case SAA7134_BOARD_AVERMEDIA_307:
+       case SAA7134_BOARD_AVERMEDIA_505:
        case SAA7134_BOARD_AVERMEDIA_STUDIO_305:
        case SAA7134_BOARD_AVERMEDIA_STUDIO_505:
        case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
@@ -829,10 +835,16 @@ int saa7134_input_init1(struct saa7134_dev *dev)
                mask_keycode = 0xffff;
                raw_decode   = true;
                break;
+       case SAA7134_BOARD_LEADTEK_WINFAST_TV2100_FM:
+               ir_codes     = RC_MAP_LEADTEK_Y04G0051;
+               mask_keydown = 0x0040000;       /* Enable GPIO18 line on both edges */
+               mask_keyup   = 0x0040000;
+               mask_keycode = 0xffff;
+               raw_decode   = true;
+               break;
        }
        if (NULL == ir_codes) {
-               printk("%s: Oops: IR config error [card=%d]\n",
-                      dev->name, dev->board);
+               pr_err("Oops: IR config error [card=%d]\n", dev->board);
                return -ENODEV;
        }
 
@@ -916,7 +928,7 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
        int rc;
 
        if (disable_ir) {
-               dprintk("IR has been disabled, not probing for i2c remote\n");
+               input_dbg("IR has been disabled, not probing for i2c remote\n");
                return;
        }
 
@@ -959,7 +971,7 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
                   an existing device. Weird...
                   REVISIT: might no longer be needed */
                rc = i2c_transfer(&dev->i2c_adap, &msg_msi, 1);
-               dprintk("probe 0x%02x @ %s: %s\n",
+               input_dbg("probe 0x%02x @ %s: %s\n",
                        msg_msi.addr, dev->i2c_adap.name,
                        (1 == rc) ? "yes" : "no");
                break;
@@ -974,7 +986,7 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
                   an existing device. Weird...
                   REVISIT: might no longer be needed */
                rc = i2c_transfer(&dev->i2c_adap, &msg_msi, 1);
-               dprintk("probe 0x%02x @ %s: %s\n",
+               input_dbg("probe 0x%02x @ %s: %s\n",
                        msg_msi.addr, dev->i2c_adap.name,
                        (1 == rc) ? "yes" : "no");
                break;
@@ -1019,7 +1031,7 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
                info.addr = 0x0b;
                break;
        default:
-               dprintk("No I2C IR support for board %x\n", dev->board);
+               input_dbg("No I2C IR support for board %x\n", dev->board);
                return;
        }