mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-03 12:24:45 +08:00
media: atomisp: Put sensor ACPI devices in D3 before disable ACPI power-resources
The device core will call ACPI to turn the device (i2c_client) for a sensor on / put it in D0 before calling its probe() method. This takes a reference on all of the ACPI power-resources belonging to the device. Since the atomisp_gmin_platform code disables ACPI power-resource management and does its own pm, this reference never gets released. This is a problem for ACPI power-resources which are shared with other devices since those now never get turned off again (nor back on again). Explicitly put the device in D3 before disabling the ACPI power-resource management. Note that atomisp_register_i2c_module() runs near the end of the sensor driver's probe() function, after the driver is done with probing the hw. So the power-resouces (the same resources as directly controlled by the atomisp platform code) getting turned off (a second time, as they are already off) is not a problem. Reviewed-by: Andy Shevchenko <andy@kernel.org> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
edcb14e513
commit
cb90b19664
@ -161,6 +161,14 @@ int atomisp_register_i2c_module(struct v4l2_subdev *subdev,
|
|||||||
* tickled during suspend/resume. This has caused power and
|
* tickled during suspend/resume. This has caused power and
|
||||||
* performance issues on multiple devices.
|
* performance issues on multiple devices.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Turn off the device before disabling ACPI power resources
|
||||||
|
* (the sensor driver has already probed it at this point).
|
||||||
|
* This avoids leaking the reference count of the (possibly shared)
|
||||||
|
* ACPI power resources which were enabled/referenced before probe().
|
||||||
|
*/
|
||||||
|
acpi_device_set_power(adev, ACPI_STATE_D3_COLD);
|
||||||
adev->power.flags.power_resources = 0;
|
adev->power.flags.power_resources = 0;
|
||||||
|
|
||||||
for (i = 0; i < MAX_SUBDEVS; i++)
|
for (i = 0; i < MAX_SUBDEVS; i++)
|
||||||
|
Loading…
Reference in New Issue
Block a user