These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / media / pci / saa7134 / saa7134-i2c.c
index f4da674..8ef6399 100644 (file)
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include "saa7134.h"
+#include "saa7134-reg.h"
+
 #include <linux/init.h>
 #include <linux/list.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/delay.h>
 
-#include "saa7134-reg.h"
-#include "saa7134.h"
 #include <media/v4l2-common.h>
 
 /* ----------------------------------------------------------- */
@@ -40,8 +41,15 @@ static unsigned int i2c_scan;
 module_param(i2c_scan, int, 0444);
 MODULE_PARM_DESC(i2c_scan,"scan i2c bus at insmod time");
 
-#define d1printk if (1 == i2c_debug) printk
-#define d2printk if (2 == i2c_debug) printk
+#define i2c_dbg(level, fmt, arg...) do { \
+       if (i2c_debug == level) \
+               printk(KERN_DEBUG pr_fmt("i2c: " fmt), ## arg); \
+       } while (0)
+
+#define i2c_cont(level, fmt, arg...) do { \
+       if (i2c_debug == level) \
+               pr_cont(fmt, ## arg); \
+       } while (0)
 
 #define I2C_WAIT_DELAY  32
 #define I2C_WAIT_RETRY  16
@@ -89,23 +97,20 @@ static inline enum i2c_status i2c_get_status(struct saa7134_dev *dev)
        enum i2c_status status;
 
        status = saa_readb(SAA7134_I2C_ATTR_STATUS) & 0x0f;
-       d2printk(KERN_DEBUG "%s: i2c stat <= %s\n",dev->name,
-                str_i2c_status[status]);
+       i2c_dbg(2, "i2c stat <= %s\n", str_i2c_status[status]);
        return status;
 }
 
 static inline void i2c_set_status(struct saa7134_dev *dev,
                                  enum i2c_status status)
 {
-       d2printk(KERN_DEBUG "%s: i2c stat => %s\n",dev->name,
-                str_i2c_status[status]);
+       i2c_dbg(2, "i2c stat => %s\n", str_i2c_status[status]);
        saa_andorb(SAA7134_I2C_ATTR_STATUS,0x0f,status);
 }
 
 static inline void i2c_set_attr(struct saa7134_dev *dev, enum i2c_attr attr)
 {
-       d2printk(KERN_DEBUG "%s: i2c attr => %s\n",dev->name,
-                str_i2c_attr[attr]);
+       i2c_dbg(2, "i2c attr => %s\n", str_i2c_attr[attr]);
        saa_andorb(SAA7134_I2C_ATTR_STATUS,0xc0,attr << 6);
 }
 
@@ -168,7 +173,7 @@ static int i2c_reset(struct saa7134_dev *dev)
        enum i2c_status status;
        int count;
 
-       d2printk(KERN_DEBUG "%s: i2c reset\n",dev->name);
+       i2c_dbg(2, "i2c reset\n");
        status = i2c_get_status(dev);
        if (!i2c_is_error(status))
                return true;
@@ -206,7 +211,7 @@ static inline int i2c_send_byte(struct saa7134_dev *dev,
 //     dword |= 0x40 << 16;  /* 400 kHz */
        dword |= 0xf0 << 24;
        saa_writel(SAA7134_I2C_ATTR_STATUS >> 2, dword);
-       d2printk(KERN_DEBUG "%s: i2c data => 0x%x\n",dev->name,data);
+       i2c_dbg(2, "i2c data => 0x%x\n", data);
 
        if (!i2c_is_busy_wait(dev))
                return -EIO;
@@ -228,7 +233,7 @@ static inline int i2c_recv_byte(struct saa7134_dev *dev)
        if (i2c_is_error(status))
                return -EIO;
        data = saa_readb(SAA7134_I2C_DATA);
-       d2printk(KERN_DEBUG "%s: i2c data <= 0x%x\n",dev->name,data);
+       i2c_dbg(2, "i2c data <= 0x%x\n", data);
        return data;
 }
 
@@ -245,12 +250,12 @@ static int saa7134_i2c_xfer(struct i2c_adapter *i2c_adap,
                if (!i2c_reset(dev))
                        return -EIO;
 
-       d2printk("start xfer\n");
-       d1printk(KERN_DEBUG "%s: i2c xfer:",dev->name);
+       i2c_dbg(2, "start xfer\n");
+       i2c_dbg(1, "i2c xfer:");
        for (i = 0; i < num; i++) {
                if (!(msgs[i].flags & I2C_M_NOSTART) || 0 == i) {
                        /* send address */
-                       d2printk("send address\n");
+                       i2c_dbg(2, "send address\n");
                        addr  = msgs[i].addr << 1;
                        if (msgs[i].flags & I2C_M_RD)
                                addr |= 1;
@@ -262,50 +267,50 @@ static int saa7134_i2c_xfer(struct i2c_adapter *i2c_adap,
                                 * needed to talk to the mt352 demux
                                 * thanks to pinnacle for the hint */
                                int quirk = 0xfe;
-                               d1printk(" [%02x quirk]",quirk);
+                               i2c_cont(1, " [%02x quirk]", quirk);
                                i2c_send_byte(dev,START,quirk);
                                i2c_recv_byte(dev);
                        }
-                       d1printk(" < %02x", addr);
+                       i2c_cont(1, " < %02x", addr);
                        rc = i2c_send_byte(dev,START,addr);
                        if (rc < 0)
                                 goto err;
                }
                if (msgs[i].flags & I2C_M_RD) {
                        /* read bytes */
-                       d2printk("read bytes\n");
+                       i2c_dbg(2, "read bytes\n");
                        for (byte = 0; byte < msgs[i].len; byte++) {
-                               d1printk(" =");
+                               i2c_cont(1, " =");
                                rc = i2c_recv_byte(dev);
                                if (rc < 0)
                                        goto err;
-                               d1printk("%02x", rc);
+                               i2c_cont(1, "%02x", rc);
                                msgs[i].buf[byte] = rc;
                        }
                        /* discard mysterious extra byte when reading
                           from Samsung S5H1411.  i2c bus gets error
                           if we do not. */
                        if (0x19 == msgs[i].addr) {
-                               d1printk(" ?");
+                               i2c_cont(1, " ?");
                                rc = i2c_recv_byte(dev);
                                if (rc < 0)
                                        goto err;
-                               d1printk("%02x", rc);
+                               i2c_cont(1, "%02x", rc);
                        }
                } else {
                        /* write bytes */
-                       d2printk("write bytes\n");
+                       i2c_dbg(2, "write bytes\n");
                        for (byte = 0; byte < msgs[i].len; byte++) {
                                data = msgs[i].buf[byte];
-                               d1printk(" %02x", data);
+                               i2c_cont(1, " %02x", data);
                                rc = i2c_send_byte(dev,CONTINUE,data);
                                if (rc < 0)
                                        goto err;
                        }
                }
        }
-       d2printk("xfer done\n");
-       d1printk(" >");
+       i2c_dbg(2, "xfer done\n");
+       i2c_cont(1, " >");
        i2c_set_attr(dev,STOP);
        rc = -EIO;
        if (!i2c_is_busy_wait(dev))
@@ -316,12 +321,12 @@ static int saa7134_i2c_xfer(struct i2c_adapter *i2c_adap,
        /* ensure that the bus is idle for at least one bit slot */
        msleep(1);
 
-       d1printk("\n");
+       i2c_cont(1, "\n");
        return num;
  err:
        if (1 == i2c_debug) {
                status = i2c_get_status(dev);
-               printk(" ERROR: %s\n",str_i2c_status[status]);
+               i2c_cont(1, " ERROR: %s\n", str_i2c_status[status]);
        }
        return rc;
 }
@@ -359,22 +364,22 @@ saa7134_i2c_eeprom(struct saa7134_dev *dev, unsigned char *eedata, int len)
        dev->i2c_client.addr = 0xa0 >> 1;
        buf = 0;
        if (1 != (err = i2c_master_send(&dev->i2c_client,&buf,1))) {
-               printk(KERN_INFO "%s: Huh, no eeprom present (err=%d)?\n",
+               pr_info("%s: Huh, no eeprom present (err=%d)?\n",
                       dev->name,err);
                return -1;
        }
        if (len != (err = i2c_master_recv(&dev->i2c_client,eedata,len))) {
-               printk(KERN_WARNING "%s: i2c eeprom read error (err=%d)\n",
+               pr_warn("%s: i2c eeprom read error (err=%d)\n",
                       dev->name,err);
                return -1;
        }
-       for (i = 0; i < len; i++) {
-               if (0 == (i % 16))
-                       printk(KERN_INFO "%s: i2c eeprom %02x:",dev->name,i);
-               printk(" %02x",eedata[i]);
-               if (15 == (i % 16))
-                       printk("\n");
+
+       for (i = 0; i < len; i += 16) {
+               int size = (len - i) > 16 ? 16 : len - i;
+
+               pr_info("i2c eeprom %02x: %*ph\n", i, size, &eedata[i]);
        }
+
        return 0;
 }
 
@@ -386,7 +391,7 @@ static char *i2c_devs[128] = {
        [ 0x5a >> 1 ] = "remote control",
 };
 
-static void do_i2c_scan(char *name, struct i2c_client *c)
+static void do_i2c_scan(struct i2c_client *c)
 {
        unsigned char buf;
        int i,rc;
@@ -396,8 +401,8 @@ static void do_i2c_scan(char *name, struct i2c_client *c)
                rc = i2c_master_recv(c,&buf,0);
                if (rc < 0)
                        continue;
-               printk("%s: i2c scan: found device @ 0x%x  [%s]\n",
-                      name, i << 1, i2c_devs[i] ? i2c_devs[i] : "???");
+               pr_info("i2c scan: found device @ 0x%x  [%s]\n",
+                        i << 1, i2c_devs[i] ? i2c_devs[i] : "???");
        }
 }
 
@@ -415,7 +420,7 @@ int saa7134_i2c_register(struct saa7134_dev *dev)
 
        saa7134_i2c_eeprom(dev,dev->eedata,sizeof(dev->eedata));
        if (i2c_scan)
-               do_i2c_scan(dev->name,&dev->i2c_client);
+               do_i2c_scan(&dev->i2c_client);
 
        /* Instantiate the IR receiver device, if present */
        saa7134_probe_i2c_ir(dev);