Loading drivers/iio/adc/qcom-spmi-adc5.c +4 −0 Original line number Diff line number Diff line Loading @@ -673,6 +673,10 @@ static const struct adc5_channels adc7_chans_pmic[ADC5_MAX_CHANNEL] = { SCALE_HW_CALIB_DEFAULT) [ADC7_VBAT_SNS] = ADC5_CHAN_VOLT("vbat_sns", 3, SCALE_HW_CALIB_DEFAULT) [ADC7_AMUX_THM3] = ADC5_CHAN_TEMP("smb_temp", 0, SCALE_HW_CALIB_PM7_SMB_TEMP) [ADC7_CHG_TEMP] = ADC5_CHAN_TEMP("chg_temp", 0, SCALE_HW_CALIB_PM7_CHG_TEMP) [ADC7_DIE_TEMP] = ADC5_CHAN_TEMP("die_temp", 0, SCALE_HW_CALIB_PMIC_THERM_PM7) [ADC7_AMUX_THM1_100K_PU] = ADC5_CHAN_TEMP("amux_thm1_pu2", 0, Loading drivers/iio/adc/qcom-vadc-common.c +51 −0 Original line number Diff line number Diff line Loading @@ -536,6 +536,10 @@ static int qcom_vadc_scale_hw_smb_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec); static int qcom_vadc_scale_hw_pm7_smb_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec); static int qcom_vadc_scale_hw_smb1398_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, Loading @@ -544,6 +548,10 @@ static int qcom_vadc_scale_hw_chg5_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec); static int qcom_vadc_scale_hw_pm7_chg_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec); static int qcom_vadc_scale_hw_calib_die_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, Loading Loading @@ -571,6 +579,8 @@ 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_PM7_SMB_TEMP] = {qcom_vadc_scale_hw_pm7_smb_temp}, [SCALE_HW_CALIB_PM7_CHG_TEMP] = {qcom_vadc_scale_hw_pm7_chg_temp}, }; static int qcom_vadc_map_voltage_temp(const struct vadc_map_pt *pts, Loading Loading @@ -892,6 +902,47 @@ static int qcom_vadc7_scale_hw_calib_die_temp( return 0; } static int qcom_vadc_scale_hw_pm7_chg_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec) { s64 temp; int result_uv; result_uv = qcom_vadc_scale_code_voltage_factor(adc_code, prescale, data, 1); /* T(C) = Vadc/0.0033 – 277.12 */ temp = div_s64((30303LL * result_uv) - (27712 * 1000000LL), 100000); pr_debug("adc_code: %u result_uv: %d temp: %lld\n", adc_code, result_uv, temp); *result_mdec = temp > 0 ? temp : 0; return 0; } static int qcom_vadc_scale_hw_pm7_smb_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec) { s64 temp; int result_uv; result_uv = qcom_vadc_scale_code_voltage_factor(adc_code, prescale, data, 1); /* T(C) = 25 + (25*Vadc - 24.885) / 0.0894 */ temp = div_s64(((25000LL * result_uv) - (24885 * 1000000LL)) * 10000, 894 * 1000000) + 25000; pr_debug("adc_code: %#x result_uv: %d temp: %lld\n", adc_code, result_uv, temp); *result_mdec = temp > 0 ? temp : 0; return 0; } static int qcom_vadc_scale_hw_smb_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, Loading drivers/iio/adc/qcom-vadc-common.h +10 −4 Original line number Diff line number Diff line Loading @@ -121,12 +121,8 @@ struct vadc_prescale_ratio { * lookup table. The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_XOTHERM: Returns XO thermistor voltage in millidegC using * 100k pullup. The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_THERM_100K_PU_PM7: Returns temperature in millidegC using * lookup table for PMIC7. The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_PMIC_THERM: Returns result in milli degree's Centigrade. * The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_PMIC_THERM_PM7: Returns result in milli degree's Centigrade. * The hardware applies offset/slope to adc code. This is for PMIC7. * SCALE_HW_CALIB_PM5_CHG_TEMP: Returns result in millidegrees for PMIC5 * charger temperature. * SCALE_HW_CALIB_PM5_SMB_TEMP: Returns result in millidegrees for PMIC5 Loading @@ -142,6 +138,14 @@ struct vadc_prescale_ratio { * code. * SCALE_HW_CALIB_PM5_SMB1398_TEMP: Returns result in millidegrees for PMIC5 * SMB1398 temperature. * SCALE_HW_CALIB_THERM_100K_PU_PM7: Returns temperature in millidegC using * lookup table for PMIC7. The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_PMIC_THERM_PM7: Returns result in milli degree's Centigrade. * The hardware applies offset/slope to adc code. This is for PMIC7. * SCALE_HW_CALIB_PM7_SMB_TEMP: Returns result in millidegrees for PMIC7 * SMB139x temperature. * SCALE_HW_CALIB_PM7_CHG_TEMP: Returns result in millidegrees for PMIC7 * charger temperature. */ enum vadc_scale_fn_type { SCALE_DEFAULT = 0, Loading @@ -162,6 +166,8 @@ enum vadc_scale_fn_type { SCALE_HW_CALIB_PM5_SMB1398_TEMP, SCALE_HW_CALIB_THERM_100K_PU_PM7, SCALE_HW_CALIB_PMIC_THERM_PM7, SCALE_HW_CALIB_PM7_SMB_TEMP, SCALE_HW_CALIB_PM7_CHG_TEMP, SCALE_HW_CALIB_INVALID, }; Loading Loading
drivers/iio/adc/qcom-spmi-adc5.c +4 −0 Original line number Diff line number Diff line Loading @@ -673,6 +673,10 @@ static const struct adc5_channels adc7_chans_pmic[ADC5_MAX_CHANNEL] = { SCALE_HW_CALIB_DEFAULT) [ADC7_VBAT_SNS] = ADC5_CHAN_VOLT("vbat_sns", 3, SCALE_HW_CALIB_DEFAULT) [ADC7_AMUX_THM3] = ADC5_CHAN_TEMP("smb_temp", 0, SCALE_HW_CALIB_PM7_SMB_TEMP) [ADC7_CHG_TEMP] = ADC5_CHAN_TEMP("chg_temp", 0, SCALE_HW_CALIB_PM7_CHG_TEMP) [ADC7_DIE_TEMP] = ADC5_CHAN_TEMP("die_temp", 0, SCALE_HW_CALIB_PMIC_THERM_PM7) [ADC7_AMUX_THM1_100K_PU] = ADC5_CHAN_TEMP("amux_thm1_pu2", 0, Loading
drivers/iio/adc/qcom-vadc-common.c +51 −0 Original line number Diff line number Diff line Loading @@ -536,6 +536,10 @@ static int qcom_vadc_scale_hw_smb_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec); static int qcom_vadc_scale_hw_pm7_smb_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec); static int qcom_vadc_scale_hw_smb1398_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, Loading @@ -544,6 +548,10 @@ static int qcom_vadc_scale_hw_chg5_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec); static int qcom_vadc_scale_hw_pm7_chg_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec); static int qcom_vadc_scale_hw_calib_die_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, Loading Loading @@ -571,6 +579,8 @@ 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_PM7_SMB_TEMP] = {qcom_vadc_scale_hw_pm7_smb_temp}, [SCALE_HW_CALIB_PM7_CHG_TEMP] = {qcom_vadc_scale_hw_pm7_chg_temp}, }; static int qcom_vadc_map_voltage_temp(const struct vadc_map_pt *pts, Loading Loading @@ -892,6 +902,47 @@ static int qcom_vadc7_scale_hw_calib_die_temp( return 0; } static int qcom_vadc_scale_hw_pm7_chg_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec) { s64 temp; int result_uv; result_uv = qcom_vadc_scale_code_voltage_factor(adc_code, prescale, data, 1); /* T(C) = Vadc/0.0033 – 277.12 */ temp = div_s64((30303LL * result_uv) - (27712 * 1000000LL), 100000); pr_debug("adc_code: %u result_uv: %d temp: %lld\n", adc_code, result_uv, temp); *result_mdec = temp > 0 ? temp : 0; return 0; } static int qcom_vadc_scale_hw_pm7_smb_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, u16 adc_code, int *result_mdec) { s64 temp; int result_uv; result_uv = qcom_vadc_scale_code_voltage_factor(adc_code, prescale, data, 1); /* T(C) = 25 + (25*Vadc - 24.885) / 0.0894 */ temp = div_s64(((25000LL * result_uv) - (24885 * 1000000LL)) * 10000, 894 * 1000000) + 25000; pr_debug("adc_code: %#x result_uv: %d temp: %lld\n", adc_code, result_uv, temp); *result_mdec = temp > 0 ? temp : 0; return 0; } static int qcom_vadc_scale_hw_smb_temp( const struct vadc_prescale_ratio *prescale, const struct adc5_data *data, Loading
drivers/iio/adc/qcom-vadc-common.h +10 −4 Original line number Diff line number Diff line Loading @@ -121,12 +121,8 @@ struct vadc_prescale_ratio { * lookup table. The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_XOTHERM: Returns XO thermistor voltage in millidegC using * 100k pullup. The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_THERM_100K_PU_PM7: Returns temperature in millidegC using * lookup table for PMIC7. The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_PMIC_THERM: Returns result in milli degree's Centigrade. * The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_PMIC_THERM_PM7: Returns result in milli degree's Centigrade. * The hardware applies offset/slope to adc code. This is for PMIC7. * SCALE_HW_CALIB_PM5_CHG_TEMP: Returns result in millidegrees for PMIC5 * charger temperature. * SCALE_HW_CALIB_PM5_SMB_TEMP: Returns result in millidegrees for PMIC5 Loading @@ -142,6 +138,14 @@ struct vadc_prescale_ratio { * code. * SCALE_HW_CALIB_PM5_SMB1398_TEMP: Returns result in millidegrees for PMIC5 * SMB1398 temperature. * SCALE_HW_CALIB_THERM_100K_PU_PM7: Returns temperature in millidegC using * lookup table for PMIC7. The hardware applies offset/slope to adc code. * SCALE_HW_CALIB_PMIC_THERM_PM7: Returns result in milli degree's Centigrade. * The hardware applies offset/slope to adc code. This is for PMIC7. * SCALE_HW_CALIB_PM7_SMB_TEMP: Returns result in millidegrees for PMIC7 * SMB139x temperature. * SCALE_HW_CALIB_PM7_CHG_TEMP: Returns result in millidegrees for PMIC7 * charger temperature. */ enum vadc_scale_fn_type { SCALE_DEFAULT = 0, Loading @@ -162,6 +166,8 @@ enum vadc_scale_fn_type { SCALE_HW_CALIB_PM5_SMB1398_TEMP, SCALE_HW_CALIB_THERM_100K_PU_PM7, SCALE_HW_CALIB_PMIC_THERM_PM7, SCALE_HW_CALIB_PM7_SMB_TEMP, SCALE_HW_CALIB_PM7_CHG_TEMP, SCALE_HW_CALIB_INVALID, }; Loading