nvmem: rockchip-efuse: add optional property to get efuse size
[firefly-linux-kernel-4.4.55.git] / drivers / media / dvb-frontends / bcm3510.c
index 1b77909c0c7116c3cff03b6788912a29c2f240f3..d30275f27644bd963d16329f117d73fc3364c15d 100644 (file)
@@ -44,6 +44,9 @@
 #include "bcm3510.h"
 #include "bcm3510_priv.h"
 
+/* Max transfer size done by bcm3510_do_hab_cmd() function */
+#define MAX_XFER_SIZE  128
+
 struct bcm3510_state {
 
        struct i2c_adapter* i2c;
@@ -201,9 +204,19 @@ static int bcm3510_hab_send_request(struct bcm3510_state *st, u8 *buf, int len)
 
 static int bcm3510_do_hab_cmd(struct bcm3510_state *st, u8 cmd, u8 msgid, u8 *obuf, u8 olen, u8 *ibuf, u8 ilen)
 {
-       u8 ob[olen+2],ib[ilen+2];
+       u8 ob[MAX_XFER_SIZE], ib[MAX_XFER_SIZE];
        int ret = 0;
 
+       if (ilen + 2 > sizeof(ib)) {
+               deb_hab("do_hab_cmd: ilen=%d is too big!\n", ilen);
+               return -EINVAL;
+       }
+
+       if (olen + 2 > sizeof(ob)) {
+               deb_hab("do_hab_cmd: olen=%d is too big!\n", olen);
+               return -EINVAL;
+       }
+
        ob[0] = cmd;
        ob[1] = msgid;
        memcpy(&ob[2],obuf,olen);
@@ -276,7 +289,7 @@ static int bcm3510_refresh_state(struct bcm3510_state *st)
        return 0;
 }
 
-static int bcm3510_read_status(struct dvb_frontend *fe, fe_status_t *status)
+static int bcm3510_read_status(struct dvb_frontend *fe, enum fe_status *status)
 {
        struct bcm3510_state* st = fe->demodulator_priv;
        bcm3510_refresh_state(st);
@@ -626,12 +639,12 @@ static int bcm3510_download_firmware(struct dvb_frontend* fe)
                err("could not load firmware (%s): %d",BCM3510_DEFAULT_FIRMWARE,ret);
                return ret;
        }
-       deb_info("got firmware: %zd\n",fw->size);
+       deb_info("got firmware: %zu\n", fw->size);
 
        b = fw->data;
        for (i = 0; i < fw->size;) {
-               addr = le16_to_cpu( *( (u16 *)&b[i] ) );
-               len  = le16_to_cpu( *( (u16 *)&b[i+2] ) );
+               addr = le16_to_cpu(*((__le16 *)&b[i]));
+               len  = le16_to_cpu(*((__le16 *)&b[i+2]));
                deb_info("firmware chunk, addr: 0x%04x, len: 0x%04x, total length: 0x%04zx\n",addr,len,fw->size);
                if ((ret = bcm3510_write_ram(st,addr,&b[i+4],len)) < 0) {
                        err("firmware download failed: %d\n",ret);
@@ -672,7 +685,7 @@ static int bcm3510_reset(struct bcm3510_state *st)
        if ((ret = bcm3510_writeB(st,0xa0,v)) < 0)
                return ret;
 
-    t = jiffies + 3*HZ;
+       t = jiffies + 3*HZ;
        while (time_before(jiffies, t)) {
                msleep(10);
                if ((ret = bcm3510_readB(st,0xa2,&v)) < 0)
@@ -695,7 +708,7 @@ static int bcm3510_clear_reset(struct bcm3510_state *st)
        if ((ret = bcm3510_writeB(st,0xa0,v)) < 0)
                return ret;
 
-    t = jiffies + 3*HZ;
+       t = jiffies + 3*HZ;
        while (time_before(jiffies, t)) {
                msleep(10);
                if ((ret = bcm3510_readB(st,0xa2,&v)) < 0)