mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 11:37:06 +02:00
iio: adc: spmi-adc5: Add support for PM2250 S3 die temp channel
Add support for reading S3 die_temp channel on PM2250 by specifying the scaling function. Change-Id: I1e8fcba0058851a540bc39adc7606d4f0ad8f6db Signed-off-by: Jishnu Prakash <jprakash@codeaurora.org> [quic_subbaram@quicinc.com: Fixed merge conflicts in qcom-vadc-common.h due to location change] Signed-off-by: Subbaraman Narayanamurthy <quic_subbaram@quicinc.com> [quic_collinsd@quicinc.com: changed struct vadc_prescale_ratio to struct u32_fract and changed prescale "num" and "den" to "numerator" and "denominator" respectively] Signed-off-by: David Collins <quic_collinsd@quicinc.com>
This commit is contained in:
parent
7aac9f426d
commit
50f6bca490
|
|
@ -582,6 +582,10 @@ static int qcom_vadc_scale_hw_smb1398_temp(
|
|||
const struct u32_fract *prescale,
|
||||
const struct adc5_data *data,
|
||||
u16 adc_code, int *result_mdec);
|
||||
static int qcom_vadc_scale_hw_pm2250_s3_die_temp(
|
||||
const struct u32_fract *prescale,
|
||||
const struct adc5_data *data,
|
||||
u16 adc_code, int *result_mdec);
|
||||
static int qcom_vadc_scale_hw_chg5_temp(
|
||||
const struct u32_fract *prescale,
|
||||
const struct adc5_data *data,
|
||||
|
|
@ -619,6 +623,7 @@ static struct qcom_adc5_scale_type scale_adc5_fn[] = {
|
|||
[SCALE_HW_CALIB_PM5_CHG_TEMP] = {qcom_vadc_scale_hw_chg5_temp},
|
||||
[SCALE_HW_CALIB_PM5_SMB_TEMP] = {qcom_vadc_scale_hw_smb_temp},
|
||||
[SCALE_HW_CALIB_PM5_SMB1398_TEMP] = {qcom_vadc_scale_hw_smb1398_temp},
|
||||
[SCALE_HW_CALIB_PM2250_S3_DIE_TEMP] = {qcom_vadc_scale_hw_pm2250_s3_die_temp},
|
||||
[SCALE_HW_CALIB_PM7_SMB_TEMP] = {qcom_vadc_scale_hw_pm7_smb_temp},
|
||||
[SCALE_HW_CALIB_PM7_CHG_TEMP] = {qcom_vadc_scale_hw_pm7_chg_temp},
|
||||
};
|
||||
|
|
@ -1059,6 +1064,35 @@ static int qcom_vadc_scale_hw_smb1398_temp(
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int qcom_vadc_scale_hw_pm2250_s3_die_temp(
|
||||
const struct u32_fract *prescale,
|
||||
const struct adc5_data *data,
|
||||
u16 adc_code, int *result_mdec)
|
||||
{
|
||||
s64 voltage = 0, adc_vdd_ref_mv = 1875;
|
||||
|
||||
if (adc_code > VADC5_MAX_CODE)
|
||||
adc_code = 0;
|
||||
|
||||
/* (ADC code * vref_vadc (1.875V)) / full_scale_code */
|
||||
voltage = (s64) adc_code * adc_vdd_ref_mv * 1000;
|
||||
voltage = div64_s64(voltage, data->full_scale_code_volt);
|
||||
if (voltage > 0) {
|
||||
voltage *= prescale->denominator;
|
||||
voltage = div64_s64(voltage, prescale->numerator);
|
||||
} else {
|
||||
voltage = 0;
|
||||
}
|
||||
|
||||
voltage = PMIC5_PM2250_S3_DIE_TEMP_CONSTANT - voltage;
|
||||
voltage *= 100000;
|
||||
voltage = div64_s64(voltage, PMIC5_PM2250_S3_DIE_TEMP_SCALE_FACTOR);
|
||||
|
||||
*result_mdec = voltage;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int qcom_vadc_scale_hw_chg5_temp(
|
||||
const struct u32_fract *prescale,
|
||||
const struct adc5_data *data,
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@
|
|||
#define PMIC5_SMB1398_TEMP_CONSTANT 268235
|
||||
#define PMIC5_SMB1398_TEMP_SCALE_FACTOR 340
|
||||
|
||||
#define PMIC5_PM2250_S3_DIE_TEMP_SCALE_FACTOR 187263
|
||||
#define PMIC5_PM2250_S3_DIE_TEMP_CONSTANT 720100
|
||||
|
||||
#define PMI_CHG_SCALE_1 -138890
|
||||
#define PMI_CHG_SCALE_2 391750000000LL
|
||||
|
||||
|
|
@ -126,6 +129,8 @@ struct vadc_linear_graph {
|
|||
* use voltage scaling.
|
||||
* SCALE_HW_CALIB_CUR_RAW: Returns result in microamperes for PMIC7 channels
|
||||
* that use raw ADC code.
|
||||
* SCALE_HW_CALIB_PM2250_S3_DIE_TEMP: Returns result in millidegrees for
|
||||
* S3 die temperature channel on PM2250.
|
||||
*/
|
||||
enum vadc_scale_fn_type {
|
||||
SCALE_DEFAULT = 0,
|
||||
|
|
@ -149,6 +154,7 @@ enum vadc_scale_fn_type {
|
|||
SCALE_HW_CALIB_PM7_CHG_TEMP,
|
||||
SCALE_HW_CALIB_CUR,
|
||||
SCALE_HW_CALIB_CUR_RAW,
|
||||
SCALE_HW_CALIB_PM2250_S3_DIE_TEMP,
|
||||
SCALE_HW_CALIB_INVALID,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user