Lines Matching refs:tegra
10 #define pr_fmt(fmt) "tegra voltage-coupler: " fmt
21 #include <soc/tegra/fuse.h>
22 #include <soc/tegra/pmc.h>
44 static int tegra20_core_limit(struct tegra_regulator_coupler *tegra,
62 if (tegra_pmc_core_domain_state_synced() && !tegra->sys_reboot_mode) {
67 if (tegra->core_min_uV > 0)
68 return tegra->core_min_uV;
85 tegra->core_min_uV = core_max_uV;
87 pr_info("core voltage initialized to %duV\n", tegra->core_min_uV);
89 return tegra->core_min_uV;
135 static int tegra20_core_rtc_update(struct tegra_regulator_coupler *tegra,
161 core_min_uV = tegra20_core_limit(tegra, core_rdev);
175 if (tegra->sys_suspend_mode)
254 static int tegra20_core_voltage_update(struct tegra_regulator_coupler *tegra,
265 return tegra20_core_rtc_update(tegra, core_rdev, rtc_rdev,
269 static int tegra20_cpu_voltage_update(struct tegra_regulator_coupler *tegra,
299 if (!tegra->cpu_min_uV)
300 tegra->cpu_min_uV = cpu_uV;
311 if (tegra->sys_reboot_mode)
312 cpu_min_uV = max(cpu_min_uV, tegra->cpu_min_uV);
315 if (tegra->sys_suspend_mode)
320 err = tegra20_core_rtc_update(tegra, core_rdev, rtc_rdev,
335 err = tegra20_core_rtc_update(tegra, core_rdev, rtc_rdev,
348 struct tegra_regulator_coupler *tegra = to_tegra_coupler(coupler);
349 struct regulator_dev *core_rdev = tegra->core_rdev;
350 struct regulator_dev *cpu_rdev = tegra->cpu_rdev;
351 struct regulator_dev *rtc_rdev = tegra->rtc_rdev;
359 tegra->sys_reboot_mode = READ_ONCE(tegra->sys_reboot_mode_req);
360 tegra->sys_suspend_mode = READ_ONCE(tegra->sys_suspend_mode_req);
363 return tegra20_cpu_voltage_update(tegra, cpu_rdev,
367 return tegra20_core_voltage_update(tegra, cpu_rdev,
375 static int tegra20_regulator_prepare_suspend(struct tegra_regulator_coupler *tegra,
380 if (!tegra->core_rdev || !tegra->rtc_rdev || !tegra->cpu_rdev)
390 WRITE_ONCE(tegra->sys_suspend_mode_req, sys_suspend_mode);
392 err = regulator_sync_voltage_rdev(tegra->cpu_rdev);
396 err = regulator_sync_voltage_rdev(tegra->core_rdev);
406 struct tegra_regulator_coupler *tegra;
409 tegra = container_of(notifier, struct tegra_regulator_coupler,
416 ret = tegra20_regulator_prepare_suspend(tegra, true);
422 ret = tegra20_regulator_prepare_suspend(tegra, false);
432 static int tegra20_regulator_prepare_reboot(struct tegra_regulator_coupler *tegra,
437 if (!tegra->core_rdev || !tegra->rtc_rdev || !tegra->cpu_rdev)
440 WRITE_ONCE(tegra->sys_reboot_mode_req, true);
447 err = regulator_sync_voltage_rdev(tegra->cpu_rdev);
451 err = regulator_sync_voltage_rdev(tegra->core_rdev);
455 WRITE_ONCE(tegra->sys_reboot_mode_req, sys_reboot_mode);
463 struct tegra_regulator_coupler *tegra;
469 tegra = container_of(notifier, struct tegra_regulator_coupler,
472 ret = tegra20_regulator_prepare_reboot(tegra, true);
480 struct tegra_regulator_coupler *tegra = to_tegra_coupler(coupler);
483 if (of_property_read_bool(np, "nvidia,tegra-core-regulator") &&
484 !tegra->core_rdev) {
485 tegra->core_rdev = rdev;
489 if (of_property_read_bool(np, "nvidia,tegra-rtc-regulator") &&
490 !tegra->rtc_rdev) {
491 tegra->rtc_rdev = rdev;
495 if (of_property_read_bool(np, "nvidia,tegra-cpu-regulator") &&
496 !tegra->cpu_rdev) {
497 tegra->cpu_rdev = rdev;
507 struct tegra_regulator_coupler *tegra = to_tegra_coupler(coupler);
517 if (tegra->core_rdev == rdev) {
518 tegra->core_rdev = NULL;
522 if (tegra->rtc_rdev == rdev) {
523 tegra->rtc_rdev = NULL;
527 if (tegra->cpu_rdev == rdev) {
528 tegra->cpu_rdev = NULL;