hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/iio/adc/qcom-vadc-common.h
....@@ -25,14 +25,37 @@
2525
2626 #define VADC_DECIMATION_MIN 512
2727 #define VADC_DECIMATION_MAX 4096
28
+#define ADC5_DEF_VBAT_PRESCALING 1 /* 1:3 */
29
+#define ADC5_DECIMATION_SHORT 250
30
+#define ADC5_DECIMATION_MEDIUM 420
31
+#define ADC5_DECIMATION_LONG 840
32
+/* Default decimation - 1024 for rev2, 840 for pmic5 */
33
+#define ADC5_DECIMATION_DEFAULT 2
34
+#define ADC5_DECIMATION_SAMPLES_MAX 3
2835
2936 #define VADC_HW_SETTLE_DELAY_MAX 10000
37
+#define VADC_HW_SETTLE_SAMPLES_MAX 16
3038 #define VADC_AVG_SAMPLES_MAX 512
39
+#define ADC5_AVG_SAMPLES_MAX 16
3140
32
-#define KELVINMIL_CELSIUSMIL 273150
41
+#define PMIC5_CHG_TEMP_SCALE_FACTOR 377500
42
+#define PMIC5_SMB_TEMP_CONSTANT 419400
43
+#define PMIC5_SMB_TEMP_SCALE_FACTOR 356
3344
3445 #define PMI_CHG_SCALE_1 -138890
3546 #define PMI_CHG_SCALE_2 391750000000LL
47
+
48
+#define VADC5_MAX_CODE 0x7fff
49
+#define ADC5_FULL_SCALE_CODE 0x70e4
50
+#define ADC5_USR_DATA_CHECK 0x8000
51
+
52
+#define R_PU_100K 100000
53
+#define RATIO_MAX_ADC7 BIT(14)
54
+
55
+#define DIE_TEMP_ADC7_SCALE_1 -60000
56
+#define DIE_TEMP_ADC7_SCALE_2 20000
57
+#define DIE_TEMP_ADC7_SCALE_FACTOR 1000
58
+#define DIE_TEMP_ADC7_MAX 160000
3659
3760 /**
3861 * struct vadc_map_pt - Map the graph representation for ADC channel
....@@ -89,6 +112,22 @@
89112 * SCALE_PMIC_THERM: Returns result in milli degree's Centigrade.
90113 * SCALE_XOTHERM: Returns XO thermistor voltage in millidegC.
91114 * SCALE_PMI_CHG_TEMP: Conversion for PMI CHG temp
115
+ * SCALE_HW_CALIB_DEFAULT: Default scaling to convert raw adc code to
116
+ * voltage (uV) with hardware applied offset/slope values to adc code.
117
+ * SCALE_HW_CALIB_THERM_100K_PULLUP: Returns temperature in millidegC using
118
+ * lookup table. The hardware applies offset/slope to adc code.
119
+ * SCALE_HW_CALIB_XOTHERM: Returns XO thermistor voltage in millidegC using
120
+ * 100k pullup. The hardware applies offset/slope to adc code.
121
+ * SCALE_HW_CALIB_THERM_100K_PU_PM7: Returns temperature in millidegC using
122
+ * lookup table for PMIC7. The hardware applies offset/slope to adc code.
123
+ * SCALE_HW_CALIB_PMIC_THERM: Returns result in milli degree's Centigrade.
124
+ * The hardware applies offset/slope to adc code.
125
+ * SCALE_HW_CALIB_PMIC_THERM: Returns result in milli degree's Centigrade.
126
+ * The hardware applies offset/slope to adc code. This is for PMIC7.
127
+ * SCALE_HW_CALIB_PM5_CHG_TEMP: Returns result in millidegrees for PMIC5
128
+ * charger temperature.
129
+ * SCALE_HW_CALIB_PM5_SMB_TEMP: Returns result in millidegrees for PMIC5
130
+ * SMB1390 temperature.
92131 */
93132 enum vadc_scale_fn_type {
94133 SCALE_DEFAULT = 0,
....@@ -96,6 +135,25 @@
96135 SCALE_PMIC_THERM,
97136 SCALE_XOTHERM,
98137 SCALE_PMI_CHG_TEMP,
138
+ SCALE_HW_CALIB_DEFAULT,
139
+ SCALE_HW_CALIB_THERM_100K_PULLUP,
140
+ SCALE_HW_CALIB_XOTHERM,
141
+ SCALE_HW_CALIB_THERM_100K_PU_PM7,
142
+ SCALE_HW_CALIB_PMIC_THERM,
143
+ SCALE_HW_CALIB_PMIC_THERM_PM7,
144
+ SCALE_HW_CALIB_PM5_CHG_TEMP,
145
+ SCALE_HW_CALIB_PM5_SMB_TEMP,
146
+ SCALE_HW_CALIB_INVALID,
147
+};
148
+
149
+struct adc5_data {
150
+ const u32 full_scale_code_volt;
151
+ const u32 full_scale_code_cur;
152
+ const struct adc5_channels *adc_chans;
153
+ const struct iio_info *info;
154
+ unsigned int *decimation;
155
+ unsigned int *hw_settle_1;
156
+ unsigned int *hw_settle_2;
99157 };
100158
101159 int qcom_vadc_scale(enum vadc_scale_fn_type scaletype,
....@@ -104,6 +162,16 @@
104162 bool absolute,
105163 u16 adc_code, int *result_mdec);
106164
165
+struct qcom_adc5_scale_type {
166
+ int (*scale_fn)(const struct vadc_prescale_ratio *prescale,
167
+ const struct adc5_data *data, u16 adc_code, int *result);
168
+};
169
+
170
+int qcom_adc5_hw_scale(enum vadc_scale_fn_type scaletype,
171
+ const struct vadc_prescale_ratio *prescale,
172
+ const struct adc5_data *data,
173
+ u16 adc_code, int *result_mdec);
174
+
107175 int qcom_vadc_decimation_from_dt(u32 value);
108176
109177 #endif /* QCOM_VADC_COMMON_H */