if (d->power_table_count)
status = acpi_install_address_space_handler(handle,
PMIC_POWER_OPREGION_ID,
intel_pmic_power_handler,
NULL, opregion); if (ACPI_FAILURE(status)) {
ret = -ENODEV; goto out_error;
}
if (d->thermal_table_count)
status = acpi_install_address_space_handler(handle,
PMIC_THERMAL_OPREGION_ID,
intel_pmic_thermal_handler,
NULL, opregion); if (ACPI_FAILURE(status)) {
ret = -ENODEV; goto out_remove_power_handler;
}
status = acpi_install_address_space_handler(handle,
PMIC_REGS_OPREGION_ID, intel_pmic_regs_handler, NULL,
opregion); if (ACPI_FAILURE(status)) {
ret = -ENODEV; goto out_remove_thermal_handler;
}
/** * intel_soc_pmic_exec_mipi_pmic_seq_element - Execute PMIC MIPI sequence * @i2c_address: I2C client address for the PMIC * @reg_address: PMIC register address * @value: New value for the register bits to change * @mask: Mask indicating which register bits to change * * DSI LCD panels describe an initialization sequence in the i915 VBT (Video * BIOS Tables) using so called MIPI sequences. One possible element in these * sequences is a PMIC specific element of 15 bytes. * * This function executes these PMIC specific elements sending the embedded * commands to the PMIC. * * Return 0 on success, < 0 on failure.
*/ int intel_soc_pmic_exec_mipi_pmic_seq_element(u16 i2c_address, u32 reg_address,
u32 value, u32 mask)
{ conststruct intel_pmic_opregion_data *d; int ret;
if (!intel_pmic_opregion) {
pr_warn("%s: No PMIC registered\n", __func__); return -ENXIO;
}
d = intel_pmic_opregion->data;
mutex_lock(&intel_pmic_opregion->lock);
if (d->exec_mipi_pmic_seq_element) {
ret = d->exec_mipi_pmic_seq_element(intel_pmic_opregion->regmap,
i2c_address, reg_address,
value, mask);
} elseif (d->pmic_i2c_address) { if (i2c_address == d->pmic_i2c_address) {
ret = regmap_update_bits(intel_pmic_opregion->regmap,
reg_address, mask, value);
} else {
pr_err("%s: Unexpected i2c-addr: 0x%02x (reg-addr 0x%x value 0x%x mask 0x%x)\n",
__func__, i2c_address, reg_address, value, mask);
ret = -ENXIO;
}
} else {
pr_warn("%s: Not implemented\n", __func__);
pr_warn("%s: i2c-addr: 0x%x reg-addr 0x%x value 0x%x mask 0x%x\n",
__func__, i2c_address, reg_address, value, mask);
ret = -EOPNOTSUPP;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.