media: atomisp: Make pointer to PMIC client global
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 26 Jun 2020 12:19:21 +0000 (14:19 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Sat, 18 Jul 2020 05:22:25 +0000 (07:22 +0200)
When we enumerate second device when PMIC has been successfully detected
to AXP, we got into troubles dereferencing NULL pointer. It seems
we have to detect PMIC only once because pmic_id is a global variable
and code doesn't expect the change of it: Two PMICs on one platform?
It's impossible.

Crash excerpt:
[   34.335237] BUG: kernel NULL pointer dereference, address: 0000000000000002
...
[   35.652036] RIP: 0010:gmin_subdev_add.cold+0x32f/0x33e [atomisp_gmin_platform]

So, as a quick fix make power a global variable. In next patches we move
PMIC detection to be more independent from subdevices.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c

index 164f028..56a2684 100644 (file)
@@ -482,9 +482,11 @@ fail:
        return clock_num;
 }
 
+static struct i2c_client *power;
+
 static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
 {
-       struct i2c_client *power = NULL, *client = v4l2_get_subdevdata(subdev);
+       struct i2c_client *client = v4l2_get_subdevdata(subdev);
        struct acpi_device *adev;
        struct gmin_subdev *gs;
        acpi_handle handle;
@@ -696,7 +698,6 @@ static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
                gs->eldo2_ctrl_shift = gmin_get_var_int(dev, false,
                                                        "eldo2_ctrl_shift",
                                                        ELDO2_CTRL_SHIFT);
-               gs->pwm_i2c_addr = power->addr;
                break;
 
        default: