116 lines
2.8 KiB
C
116 lines
2.8 KiB
C
/*
|
|
* Copyright (c) 2011-2013, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef __TEGRA_EDP_PRIVATE_H
|
|
#define __TEGRA_EDP_PRIVATE_H
|
|
|
|
#include <linux/debugfs.h>
|
|
#include <linux/platform_data/tegra_thermal.h>
|
|
|
|
struct tegra_edp_vdd_cpu_entry {
|
|
char speedo_id;
|
|
char regulator_100ma;
|
|
char temperature;
|
|
char freq_limits[4];
|
|
};
|
|
|
|
struct tegra_edp_limits {
|
|
int temperature;
|
|
unsigned int freq_limits[4];
|
|
};
|
|
|
|
struct tegra_edp_voltage_temp_constraint {
|
|
int temperature;
|
|
unsigned int voltage_limit_mv;
|
|
};
|
|
|
|
struct tegra_edp_cpu_leakage_params {
|
|
int cpu_speedo_id;
|
|
|
|
unsigned int temp_scaled;
|
|
|
|
unsigned int dyn_scaled;
|
|
int dyn_consts_n[4]; /* pre-multiplied by 'scaled */
|
|
|
|
unsigned int consts_scaled;
|
|
int leakage_consts_n[4]; /* pre-multiplied by 'scaled */
|
|
|
|
unsigned int ijk_scaled;
|
|
const int (*leakage_consts_ijk)[4][4]; /* pre-multiplied by 'scaled */
|
|
unsigned int leakage_min; /* minimum leakage current */
|
|
|
|
unsigned int safety_cap[4];
|
|
struct tegra_edp_voltage_temp_constraint volt_temp_cap;
|
|
};
|
|
|
|
struct tegra_edp_freq_vol_table {
|
|
unsigned int freq;
|
|
int voltage_mv;
|
|
};
|
|
|
|
struct tegra_edp {
|
|
struct platform_device *pdev;
|
|
|
|
struct tegra_edp_limits *def_edp_limits;
|
|
int def_edp_limits_size;
|
|
const int *temps;
|
|
int temps_size;
|
|
const struct tegra_edp_cpu_leakage_params *params;
|
|
int params_size;
|
|
unsigned int cpu_speedo_idx;
|
|
|
|
struct tegra_edp_limits *edp_limits;
|
|
int edp_limits_size;
|
|
|
|
unsigned int regulator_cur;
|
|
/* Value to subtract from regulator current limit */
|
|
unsigned int edp_reg_override_ma;
|
|
|
|
unsigned int max_cpu_freq;
|
|
|
|
int edp_thermal_index;
|
|
unsigned int edp_freq_limit;
|
|
cpumask_t edp_cpumask;
|
|
|
|
bool suspended;
|
|
|
|
#ifdef CONFIG_DEBUG_FS
|
|
struct dentry *dir;
|
|
#endif
|
|
|
|
bool edp_init_done;
|
|
};
|
|
|
|
struct tegra_cpu_edp_cooling_data {
|
|
const struct tegra_edp_limits *cpu_edp_limits;
|
|
int cpu_edp_limits_size;
|
|
|
|
int edp_thermal_index;
|
|
cpumask_t edp_cpumask;
|
|
unsigned int edp_limit;
|
|
};
|
|
|
|
#ifdef CONFIG_ARCH_TEGRA_124_SOC
|
|
int tegra124_cpu_edp_init(struct device_node *cpu_edp_dn);
|
|
#else
|
|
static inline int tegra124_cpu_edp_init(struct device_node *cpu_edp_dn)
|
|
{ return 0; }
|
|
#endif
|
|
|
|
#endif /* __TEGRA_EDP_PRIVATE_H */
|