]> git.ipfire.org Git - people/arne_f/kernel.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 28 Oct 2016 07:45:24 +0000 (03:45 -0400)
commit 461af077d349b11106ca084e9ef2973a753d33ff upstream.

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.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/usb/cx231xx/cx231xx-core.c

index 6c8f825452ddf2b9b5231dcd3ff2734424b4c086..ea9a99e415810b770865f1366edb9516e34c4a0b 100644 (file)
@@ -1302,15 +1302,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);