Files
android_kernel_samsung_msm8226/include/linux/regulator/cpr-regulator.h
T
Willie Ruan b17b7837c8 msm: cpr-regulator: add CPR driver code
Add RB-CPR (Rapid Bridge core power reduction) code in cpr-regulator
driver, which reads both eFuse and device tree for configuration
parameters and programs CPR registers accordingly. The driver
will scale the voltage up or down based on the CPR hardware's
suggestion. It also changes CPR mode when Apps cpu clock changes
corner voltage. If any part doesn't have efuse at all, assume it's
a slow part and do not use CPR.

Change-Id: Ia3dc5a6ec013647f2a21577c0fe0f2b30a93cd73
Signed-off-by: Willie Ruan <wruan@codeaurora.org>
2013-05-08 13:28:27 -07:00

85 lines
2.2 KiB
C

/*
* Copyright (c) 2013, The Linux Foundation. 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 version 2 and
* only version 2 as published by the Free Software Foundation.
*
* 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.
*/
#ifndef __REGULATOR_CPR_REGULATOR_H__
#define __REGULATOR_CPR_REGULATOR_H__
#include <linux/regulator/machine.h>
#define CPR_REGULATOR_DRIVER_NAME "qcom,cpr-regulator"
#define CPR_PVS_EFUSE_BITS_MAX 5
#define CPR_PVS_EFUSE_BINS_MAX (1 << CPR_PVS_EFUSE_BITS_MAX)
/**
* enum cpr_corner_enum - CPR corner enum values
* %CPR_CORNER_SVS: Lowest voltage for APC
* %CPR_CORNER_NORMAL: Normal mode voltage
* %CPR_CORNER_TURBO: Turbo mode voltage
* %CPR_CORNER_SUPER_TURBO: Super Turbo mode voltage
*
* These should be used in regulator_set_voltage() for CPR
* regulator as if they had units of uV.
*/
enum cpr_corner_enum {
CPR_CORNER_SVS = 1,
CPR_CORNER_NORMAL,
CPR_CORNER_TURBO,
CPR_CORNER_MAX,
};
/**
* enum pvs_process_enum - PVS process enum values
* %APC_PVS_NO: No PVS
* %APC_PVS_SLOW: Slow PVS process
* %APC_PVS_NOM: Nominal PVS process
* %APC_PVS_FAST: Fast PVS process
*/
enum apc_pvs_process_enum {
APC_PVS_NO,
APC_PVS_SLOW,
APC_PVS_NOM,
APC_PVS_FAST,
NUM_APC_PVS,
};
/**
* enum vdd_mx_vmin_method - Method to determine vmin for vdd-mx
* %VDD_MX_VMIN_APC: Equal to APC voltage
* %VDD_MX_VMIN_APC_CORNER_CEILING: Equal to PVS corner ceiling voltage
* %VDD_MX_VMIN_APC_SLOW_CORNER_CEILING:
* Equal to slow speed corner ceiling
* %VDD_MX_VMIN_MX_VMAX: Equal to specified vdd-mx-vmax voltage
*/
enum vdd_mx_vmin_method {
VDD_MX_VMIN_APC,
VDD_MX_VMIN_APC_CORNER_CEILING,
VDD_MX_VMIN_APC_SLOW_CORNER_CEILING,
VDD_MX_VMIN_MX_VMAX,
};
#ifdef CONFIG_MSM_CPR_REGULATOR
int __init cpr_regulator_init(void);
#else
static inline int __init cpr_regulator_init(void)
{
return -ENODEV;
}
#endif /* CONFIG_MSM_CPR_REGULATOR */
#endif /* __REGULATOR_CPR_REGULATOR_H__ */