drivers/soc/tegra/common.c

Source file repositories/reference/linux-study-clean/drivers/soc/tegra/common.c

File Facts

System
Linux kernel
Corpus path
drivers/soc/tegra/common.c
Extension
.c
Size
4127 bytes
Lines
162
Domain
Driver Families
Bucket
drivers/soc
Inferred role
Driver Families: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

of_machine_is_compatible("nvidia,tegra114")) {
		hw_version = BIT(tegra_sku_info.soc_speedo_id);
		config.supported_hw = &hw_version;
		config.supported_hw_count = 1;
	}

	err = devm_pm_opp_set_config(dev, &config);
	if (err) {
		dev_err(dev, "failed to set OPP config: %d\n", err);
		return err;
	}

	/*
	 * Tegra124+ doesn't support OPP yet, return early for pre-Tegra124
	 * case.
	 */
	if (!config.supported_hw)
		return -ENODEV;

	/*
	 * Older device-trees have an empty OPP table, we will get
	 * -ENODEV from devm_pm_opp_of_add_table() in this case.
	 */
	err = devm_pm_opp_of_add_table(dev);
	if (err) {
		if (err != -ENODEV)
			dev_err(dev, "failed to add OPP table: %d\n", err);

		return err;
	}

	if (params->init_state) {
		err = tegra_core_dev_init_opp_state(dev);
		if (err)
			return err;
	}

	return 0;
}
EXPORT_SYMBOL_GPL(devm_tegra_core_dev_init_opp_table);

Annotation

Implementation Notes