[media] cx231xx: can't proceed if I2C bus register fails
authorMauro Carvalho Chehab <mchehab@s-opensource.com>
Mon, 5 Sep 2016 08:56:37 +0000 (05:56 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Mon, 5 Sep 2016 18:26:35 +0000 (15:26 -0300)
The driver should not ignore errors while registering the I2C
bus, as this device can't even minimally work without the buses,
as it uses those buses internally to talk with the several IP
blocks inside the chip.

Cc: stable@vger.kernel.org
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/usb/cx231xx/cx231xx-core.c

index a4f49a83f86914d0c105915f6d66ec938bb79f62..8b099fe1d592300075248f83ae574f875b561796 100644 (file)
@@ -1324,15 +1324,29 @@ int cx231xx_dev_init(struct cx231xx *dev)
        dev->i2c_bus[2].i2c_reserve = 0;
 
        /* register I2C buses */
-       cx231xx_i2c_register(&dev->i2c_bus[0]);
-       cx231xx_i2c_register(&dev->i2c_bus[1]);
-       cx231xx_i2c_register(&dev->i2c_bus[2]);
+       errCode = cx231xx_i2c_register(&dev->i2c_bus[0]);
+       if (errCode < 0)
+               return errCode;
+       errCode = cx231xx_i2c_register(&dev->i2c_bus[1]);
+       if (errCode < 0)
+               return errCode;
+       errCode = cx231xx_i2c_register(&dev->i2c_bus[2]);
+       if (errCode < 0)
+               return errCode;
 
        errCode = cx231xx_i2c_mux_create(dev);
+       if (errCode < 0) {
+               dev_err(dev->dev,
+                       "%s: Failed to create I2C mux\n", __func__);
+               return errCode;
+       }
+       errCode = cx231xx_i2c_mux_register(dev, 0);
+       if (errCode < 0)
+               return errCode;
+
+       errCode = cx231xx_i2c_mux_register(dev, 1);
        if (errCode < 0)
                return errCode;
-       cx231xx_i2c_mux_register(dev, 0);
-       cx231xx_i2c_mux_register(dev, 1);
 
        /* scan the real bus segments in the order of physical port numbers */
        cx231xx_do_i2c_scan(dev, I2C_0);