drivers/intel/mipi_camera: Fix SSDT generation for IPU devices
Includes changes in mipi_camera driver to fix following issues related to SSDT generation for IPU devices. 1. acpigen_write_device was not getting called for IPU devices 2. acpigen_pop_len was called for a generic devices without calling acpigen_write_device Change-Id: I309edd065719cb8250f1241898bb5854004d2a9f Signed-off-by: Sugnan Prabhu S <sugnan.prabhu.s@intel.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/44025 Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
committed by
Tim Wawrzynczak
parent
94e0a10f00
commit
3ea036f9ce
@ -761,8 +761,6 @@ static void fill_power_res_sequence(struct drivers_intel_mipi_camera_config *con
|
|||||||
|
|
||||||
static void write_pci_camera_device(const struct device *dev)
|
static void write_pci_camera_device(const struct device *dev)
|
||||||
{
|
{
|
||||||
struct drivers_intel_mipi_camera_config *config = dev->chip_info;
|
|
||||||
|
|
||||||
if (dev->path.type != DEVICE_PATH_PCI) {
|
if (dev->path.type != DEVICE_PATH_PCI) {
|
||||||
printk(BIOS_ERR, "CIO2/IMGU devices require PCI\n");
|
printk(BIOS_ERR, "CIO2/IMGU devices require PCI\n");
|
||||||
return;
|
return;
|
||||||
@ -770,8 +768,7 @@ static void write_pci_camera_device(const struct device *dev)
|
|||||||
|
|
||||||
acpigen_write_device(acpi_device_name(dev));
|
acpigen_write_device(acpi_device_name(dev));
|
||||||
acpigen_write_ADR_pci_device(dev);
|
acpigen_write_ADR_pci_device(dev);
|
||||||
acpigen_write_name_string("_DDN", config->device_type == INTEL_ACPI_CAMERA_CIO2 ?
|
acpigen_write_name_string("_DDN", "Camera and Imaging Subsystem");
|
||||||
"Camera and Imaging Subsystem" : "Imaging Unit");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_i2c_camera_device(const struct device *dev, const char *scope)
|
static void write_i2c_camera_device(const struct device *dev, const char *scope)
|
||||||
@ -784,11 +781,6 @@ static void write_i2c_camera_device(const struct device *dev, const char *scope)
|
|||||||
.resource = scope,
|
.resource = scope,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (dev->path.type != DEVICE_PATH_I2C) {
|
|
||||||
printk(BIOS_ERR, "Non-CIO2/IMGU devices require I2C\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
acpigen_write_device(acpi_device_name(dev));
|
acpigen_write_device(acpi_device_name(dev));
|
||||||
|
|
||||||
/* add power resource */
|
/* add power resource */
|
||||||
@ -930,18 +922,29 @@ static void camera_fill_ssdt(const struct device *dev)
|
|||||||
acpigen_pop_len(); /* Guarded power resource operations scope */
|
acpigen_pop_len(); /* Guarded power resource operations scope */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Device */
|
switch (dev->path.type) {
|
||||||
scope = acpi_device_scope(dev);
|
case DEVICE_PATH_I2C:
|
||||||
if (!scope)
|
scope = acpi_device_scope(dev);
|
||||||
return;
|
if (!scope)
|
||||||
|
return;
|
||||||
|
|
||||||
acpigen_write_scope(scope);
|
acpigen_write_scope(scope);
|
||||||
|
|
||||||
if (config->device_type == INTEL_ACPI_CAMERA_CIO2 ||
|
|
||||||
config->device_type == INTEL_ACPI_CAMERA_IMGU)
|
|
||||||
write_pci_camera_device(dev);
|
|
||||||
else
|
|
||||||
write_i2c_camera_device(dev, scope);
|
write_i2c_camera_device(dev, scope);
|
||||||
|
break;
|
||||||
|
case DEVICE_PATH_GENERIC:
|
||||||
|
pdev = dev->bus->dev;
|
||||||
|
scope = acpi_device_scope(pdev);
|
||||||
|
if (!scope)
|
||||||
|
return;
|
||||||
|
|
||||||
|
acpigen_write_scope(scope);
|
||||||
|
write_pci_camera_device(pdev);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printk(BIOS_ERR, "Unsupported device type: %x\n"
|
||||||
|
"OS camera driver will likely not work\n", dev->path.type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
write_camera_device_common(dev);
|
write_camera_device_common(dev);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user