Commit | Line | Data |
---|---|---|
770324a4 | 1 | // SPDX-License-Identifier: GPL-2.0 |
d059c739 RN |
2 | /* |
3 | * Copyright (c) 2015, The Linux Foundation. All rights reserved. | |
770324a4 | 4 | * Copyright (c) 2018, Linaro Limited |
d059c739 RN |
5 | */ |
6 | ||
432121ad | 7 | #include <linux/bitops.h> |
c1997054 | 8 | #include <linux/regmap.h> |
d059c739 RN |
9 | #include "tsens.h" |
10 | ||
c1997054 AK |
11 | /* ----- SROT ------ */ |
12 | #define SROT_HW_VER_OFF 0x0000 | |
13 | #define SROT_CTRL_OFF 0x0004 | |
14 | ||
15 | /* ----- TM ------ */ | |
16 | #define TM_INT_EN_OFF 0x0004 | |
17 | #define TM_UPPER_LOWER_INT_STATUS_OFF 0x0008 | |
18 | #define TM_UPPER_LOWER_INT_CLEAR_OFF 0x000c | |
19 | #define TM_UPPER_LOWER_INT_MASK_OFF 0x0010 | |
20 | #define TM_CRITICAL_INT_STATUS_OFF 0x0014 | |
21 | #define TM_CRITICAL_INT_CLEAR_OFF 0x0018 | |
22 | #define TM_CRITICAL_INT_MASK_OFF 0x001c | |
23 | #define TM_Sn_UPPER_LOWER_THRESHOLD_OFF 0x0020 | |
24 | #define TM_Sn_CRITICAL_THRESHOLD_OFF 0x0060 | |
25 | #define TM_Sn_STATUS_OFF 0x00a0 | |
26 | #define TM_TRDY_OFF 0x00e4 | |
27 | ||
c1997054 AK |
28 | /* v2.x: 8996, 8998, sdm845 */ |
29 | ||
30 | static const struct tsens_features tsens_v2_feat = { | |
31 | .ver_major = VER_2_X, | |
32 | .crit_int = 1, | |
33 | .adc = 0, | |
34 | .srot_split = 1, | |
1b6e3e51 | 35 | .max_sensors = 16, |
c1997054 AK |
36 | }; |
37 | ||
38 | static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = { | |
39 | /* ----- SROT ------ */ | |
40 | /* VERSION */ | |
41 | [VER_MAJOR] = REG_FIELD(SROT_HW_VER_OFF, 28, 31), | |
42 | [VER_MINOR] = REG_FIELD(SROT_HW_VER_OFF, 16, 27), | |
43 | [VER_STEP] = REG_FIELD(SROT_HW_VER_OFF, 0, 15), | |
44 | /* CTRL_OFF */ | |
45 | [TSENS_EN] = REG_FIELD(SROT_CTRL_OFF, 0, 0), | |
46 | [TSENS_SW_RST] = REG_FIELD(SROT_CTRL_OFF, 1, 1), | |
47 | ||
48 | /* ----- TM ------ */ | |
49 | /* INTERRUPT ENABLE */ | |
50 | /* v2 has separate enables for UPPER/LOWER/CRITICAL interrupts */ | |
51 | [INT_EN] = REG_FIELD(TM_INT_EN_OFF, 0, 2), | |
52 | ||
53 | /* Sn_STATUS */ | |
54 | REG_FIELD_FOR_EACH_SENSOR16(LAST_TEMP, TM_Sn_STATUS_OFF, 0, 11), | |
55 | REG_FIELD_FOR_EACH_SENSOR16(VALID, TM_Sn_STATUS_OFF, 21, 21), | |
56 | REG_FIELD_FOR_EACH_SENSOR16(MIN_STATUS, TM_Sn_STATUS_OFF, 16, 16), | |
57 | REG_FIELD_FOR_EACH_SENSOR16(LOWER_STATUS, TM_Sn_STATUS_OFF, 17, 17), | |
58 | REG_FIELD_FOR_EACH_SENSOR16(UPPER_STATUS, TM_Sn_STATUS_OFF, 18, 18), | |
59 | REG_FIELD_FOR_EACH_SENSOR16(CRITICAL_STATUS, TM_Sn_STATUS_OFF, 19, 19), | |
60 | REG_FIELD_FOR_EACH_SENSOR16(MAX_STATUS, TM_Sn_STATUS_OFF, 20, 20), | |
61 | ||
62 | /* TRDY: 1=ready, 0=in progress */ | |
63 | [TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0), | |
64 | }; | |
65 | ||
770324a4 | 66 | static const struct tsens_ops ops_generic_v2 = { |
d059c739 | 67 | .init = init_common, |
c8b61690 | 68 | .get_temp = get_temp_tsens_valid, |
d059c739 RN |
69 | }; |
70 | ||
3c040ce0 | 71 | const struct tsens_plat_data data_tsens_v2 = { |
c1997054 AK |
72 | .ops = &ops_generic_v2, |
73 | .feat = &tsens_v2_feat, | |
74 | .fields = tsens_v2_regfields, | |
191dc74b AK |
75 | }; |
76 | ||
77 | /* Kept around for backward compatibility with old msm8996.dtsi */ | |
3c040ce0 | 78 | const struct tsens_plat_data data_8996 = { |
d059c739 | 79 | .num_sensors = 13, |
770324a4 | 80 | .ops = &ops_generic_v2, |
c1997054 AK |
81 | .feat = &tsens_v2_feat, |
82 | .fields = tsens_v2_regfields, | |
d059c739 | 83 | }; |