int tegra_bbc_power_init(struct platform_device *pdev) { struct clk *clk; int ret = 0; /* Suspend */ register_syscore_ops(&tegra_bbc_power_syscore_ops); /* Frequency changes */ power.memfreq_nb.notifier_call = bbc_power_memfreq_notify; clk = clk_get(&pdev->dev, "emc"); if (IS_ERR(clk)) { ret = PTR_ERR(clk); pr_err("failed to get clock 'emc': ret=%d", ret); return ret; } ret = tegra_register_clk_rate_notifier(clk, &power.memfreq_nb); if (ret) { pr_err("failed to register with rate notifier: ret=%d", ret); return ret; } /* Modem up/down */ power.modem_nb.notifier_call = bbc_power_modem_notify; nvshm_stats_register(&power.modem_nb); return 0; }
static int __init tegra_simon_init_cpu(void) { struct tegra_simon_grader *grader = &simon_graders[TEGRA_SIMON_DOMAIN_CPU]; struct clk *c; int r; spin_lock_init(&grader->grade_lock); setup_timer(&grader->grade_timer, tegra_simon_restart_grader, (unsigned long)grader); setup_timer(&grader->grade_wdt, tegra_simon_reset_grade, (unsigned long)grader); INIT_WORK(&grader->grade_update_work, tegra_simon_grade_notify); grader->tzd = thermal_zone_device_find_by_name("CPU-therm"); if (!grader->tzd) { pr_err("%s: Failed to find %s thermal zone\n", __func__, grader->domain_name); return -ENOENT; } c = clk_get_sys("tegra_simon", "cpu"); if (IS_ERR(c)) { pr_err("%s: Failed to get %s clock\n", __func__, grader->domain_name); return -ENOENT; } grader->grading_condition_nb.notifier_call = tegra_simon_cpu_grading_cb; r = tegra_register_clk_rate_notifier(c, &grader->grading_condition_nb); if (r) { pr_err("%s: Failed to register for %s rate change notify\n", __func__, c->name); return r; } grader->clk = c; return 0; }