Add support for ipq8064 tsens
v15 cover Add support for ipq8064 tsens
This patchset convert msm8960 to reg_filed, use int_common instead of a custom function and fix wrong tsens get_temp function for msm8960. Ipq8064 SoCs tsens driver is based on 8960 tsens driver. Ipq8064 needs to be registered as a gcc child as the tsens regs on this platform are shared with the controller.
This is based on work and code here
https://git.linaro.org/people/amit.kucheria/kernel.git/log/?h=wrk3/tsens-8960-breakage
This series has already been approved but the "kernel test robot" reported some bisect error.
v15:
* Fix bisect error reported by bot (add feat define in the VER_0 patch)
* Fix static slope table (offset -350 instead of -200 to have a more accurate temp) v14:
* Fix warning reported by Dan Carpenter
v13:
* Simple reword
v12:
* Even more fix reported by Thara
v11:
* Address comments from Thara (thx)
v10:
* Fix wrong tsens init for ver_0 (crit_trips needs to be set in tsens_register) v9:
* Fix warning from Documentation bot
v8:
* Drop MIN and MAX THRESH and use CRIT_THRESH instead
* Fix broken documentation patch
v7:
* Rework calibrate function to use get_temp_common
* Fix wrong required in the Documentation for ipq8064
* Fix hardware bug in sensor enable function
v6:
* Fix spelling error (can't find the problem with variable misallignment)
* Rework big if-else
* Remove extra comments
* Add description about different interrupts
v5:
* Conver driver to use reg_fiedl
* Use init_common
* Drop custom set_trip and set_interrupt
* Use common set_trip and set_interrupt
* Fix bad get_temp function
* Add missing hardcoded slope
v4:
* Fix compilation error and warning reported by the bot
v3:
* Change driver to register as child instead of use phandle
v2:
* Fix dt-bindings problems
Ansuel Smith (9):
drivers: thermal: tsens: Don't hardcode sensor slope
drivers: thermal: tsens: Convert msm8960 to reg_field
drivers: thermal: tsens: Add VER_0 tsens version
drivers: thermal: tsens: Use init_common for msm8960
drivers: thermal: tsens: Fix bug in sensor enable for msm8960
drivers: thermal: tsens: Replace custom 8960 apis with generic apis
drivers: thermal: tsens: Drop unused define for msm8960
drivers: thermal: tsens: Add support for ipq8064-tsens
dt-bindings: thermal: tsens: Document ipq8064 bindings
.../bindings/thermal/qcom-tsens.yaml | 56 ++++- drivers/thermal/qcom/tsens-8960.c | 235 +++++++++--------- drivers/thermal/qcom/tsens.c | 156 +++++++++--- drivers/thermal/qcom/tsens.h | 4 +- 4 files changed, 293 insertions(+), 158 deletions(-)
Signature · 1 line
2.30.2
PATCH v15 1/9 drivers: thermal: tsens: Don't hardcode sensor slope
Function compute_intercept_slope hardcode the sensor slope to SLOPE_DEFAULT. Change this and use the default value only if a slope is not defined. This is needed for tsens VER_0 that has a hardcoded slope table.
--- drivers/thermal/qcom/tsens.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/thermal/qcom/tsens.c +2 -1
@@ -85,7 +85,8 @@ void compute_intercept_slope(struct tsens_priv *priv, u32 *p1,"%s: sensor%d - data_point1:%#x data_point2:%#x\n" , __func__, i, p1[i], p2[i]); - priv->sensor[i].slope =SLOPE_DEFAULT ; +if (!priv->sensor[i].slope) + priv->sensor[i].slope =SLOPE_DEFAULT ;if (mode ==TWO_PT_CALIB ) {/* * slope (m) = adc_code2 - adc_code1 (y2 - y1)/
Signature · 1 line
2.30.2
[thermal: thermal/next] thermal/drivers/tsens: Don't hardcode sensor slope
The following commit has been merged into the thermal/next branch of thermal:
The following commit has been merged into the thermal/next branch of thermal:
Commit-ID: 9d51769b2e75bb33c56c8f9ee933eca2d92b375b Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git//9d51769b2e75bb33c56c8f9ee933eca2d92b375b Author: Ansuel Smith <[email protected]> AuthorDate: Tue, 20 Apr 2021 20:33:35 +02:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 22 Apr 2021 14:08:50 +02:00
thermal/drivers/tsens: Don't hardcode sensor slope
Function compute_intercept_slope hardcode the sensor slope to SLOPE_DEFAULT. Change this and use the default value only if a slope is not defined. This is needed for tsens VER_0 that has a hardcoded slope table.
--- drivers/thermal/qcom/tsens.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/thermal/qcom/tsens.c +2 -1
@@ -85,7 +85,8 @@ void compute_intercept_slope(struct tsens_priv *priv, u32 *p1,"%s: sensor%d - data_point1:%#x data_point2:%#x\n" , __func__, i, p1[i], p2[i]); - priv->sensor[i].slope =SLOPE_DEFAULT ; +if (!priv->sensor[i].slope) + priv->sensor[i].slope =SLOPE_DEFAULT ;if (mode ==TWO_PT_CALIB ) {/* * slope (m) = adc_code2 - adc_code1 (y2 - y1)/
PATCH v15 2/9 drivers: thermal: tsens: Convert msm8960 to reg_field
In reply to Ansuel SmithConvert msm9860 driver to reg_field to use the init_common function.
--- drivers/thermal/qcom/tsens-8960.c | 73 ++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-)
drivers/thermal/qcom/tsens-8960.c +71 -2
@@ -51,11 +51,22 @@#define MIN_LIMIT_TH 0x0#define MAX_LIMIT_TH 0xff -#define S0_STATUS_ADDR 0x3628#define INT_STATUS_ADDR 0x363c#define TRDY_MASK BIT(7)#define TIMEOUT_US 100 +#define S0_STATUS_OFF 0x3628 +#define S1_STATUS_OFF 0x362c +#define S2_STATUS_OFF 0x3630 +#define S3_STATUS_OFF 0x3634 +#define S4_STATUS_OFF 0x3638 +#define S5_STATUS_OFF 0x3664/* Sensors 5-10 found on apq8064/msm8960 */ +#define S6_STATUS_OFF 0x3668 +#define S7_STATUS_OFF 0x366c +#define S8_STATUS_OFF 0x3670 +#define S9_STATUS_OFF 0x3674 +#define S10_STATUS_OFF 0x3678 +static int suspend_8960 (struct tsens_priv *priv) {int ret;
@@ -179,7 +190,7 @@ static int init_8960(struct tsens_priv *priv)*/ for (i =0 ; i < priv->num_sensors; i++) {if (i >=5 ) - priv->sensor[i].status =S0_STATUS_ADDR +40 ; + priv->sensor[i].status =S0_STATUS_OFF +40 ; priv->sensor[i].status += i *4 ; }
@@ -269,6 +280,63 @@ static int get_temp_8960(const struct tsens_sensor *s, int *temp)return -ETIMEDOUT ; } +static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS ] = { +/* ----- SROT ------ */ +/* No VERSION information */ + +/* CNTL */ + [TSENS_EN ] =REG_FIELD (CNTL_ADDR ,0 ,0 ), + [TSENS_SW_RST ] =REG_FIELD (CNTL_ADDR ,1 ,1 ), +/* 8960 has 5 sensors, 8660 has 11, we only handle 5 */ + [SENSOR_EN ] =REG_FIELD (CNTL_ADDR ,3 ,7 ), + +/* ----- TM ------ */ +/* INTERRUPT ENABLE */ +/* NO INTERRUPT ENABLE */ + +/* Single UPPER/LOWER TEMPERATURE THRESHOLD for all sensors */ + [LOW_THRESH_0 ] =REG_FIELD (THRESHOLD_ADDR ,0 ,7 ), + [UP_THRESH_0 ] =REG_FIELD (THRESHOLD_ADDR ,8 ,15 ), +/* MIN_THRESH_0 and MAX_THRESH_0 are not present in the regfield +* Recycle CRIT_THRESH_0 and 1 to set the required regs to hardcoded temp +* MIN_THRESH_0 -> CRIT_THRESH_1 +* MAX_THRESH_0 -> CRIT_THRESH_0 +*/ + [CRIT_THRESH_1 ] =REG_FIELD (THRESHOLD_ADDR ,16 ,23 ), + [CRIT_THRESH_0 ] =REG_FIELD (THRESHOLD_ADDR ,24 ,31 ), + +/* UPPER/LOWER INTERRUPT [CLEAR/STATUS] */ +/* 1 == clear, 0 == normal operation */ + [LOW_INT_CLEAR_0 ] =REG_FIELD (CNTL_ADDR ,9 ,9 ), + [UP_INT_CLEAR_0 ] =REG_FIELD (CNTL_ADDR ,10 ,10 ), + +/* NO CRITICAL INTERRUPT SUPPORT on 8960 */ + +/* Sn_STATUS */ + [LAST_TEMP_0 ] =REG_FIELD (S0_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_1 ] =REG_FIELD (S1_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_2 ] =REG_FIELD (S2_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_3 ] =REG_FIELD (S3_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_4 ] =REG_FIELD (S4_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_5 ] =REG_FIELD (S5_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_6 ] =REG_FIELD (S6_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_7 ] =REG_FIELD (S7_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_8 ] =REG_FIELD (S8_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_9 ] =REG_FIELD (S9_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_10 ] =REG_FIELD (S10_STATUS_OFF ,0 ,7 ), + +/* No VALID field on 8960 */ +/* TSENS_INT_STATUS bits: 1 == threshold violated */ + [MIN_STATUS_0 ] =REG_FIELD (INT_STATUS_ADDR ,0 ,0 ), + [LOWER_STATUS_0 ] =REG_FIELD (INT_STATUS_ADDR ,1 ,1 ), + [UPPER_STATUS_0 ] =REG_FIELD (INT_STATUS_ADDR ,2 ,2 ), +/* No CRITICAL field on 8960 */ + [MAX_STATUS_0 ] =REG_FIELD (INT_STATUS_ADDR ,3 ,3 ), + +/* TRDY: 1=ready, 0=in progress */ + [TRDY ] =REG_FIELD (INT_STATUS_ADDR ,7 ,7 ), +}; +static const struct tsens_ops ops_8960 = { .init = init_8960, .calibrate = calibrate_8960,
@@ -282,4 +350,5 @@ static const struct tsens_ops ops_8960 = {struct tsens_plat_data data_8960 = { .num_sensors =11 , .ops = &ops_8960, + .fields = tsens_8960_regfields, };
Signature · 1 line
2.30.2
[thermal: thermal/next] thermal/drivers/tsens: Convert msm8960 to reg_field
The following commit has been merged into the thermal/next branch of thermal:
The following commit has been merged into the thermal/next branch of thermal:
Commit-ID: a0ed1411278db902a043e584c8ed320fe34346b6 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git//a0ed1411278db902a043e584c8ed320fe34346b6 Author: Ansuel Smith <[email protected]> AuthorDate: Tue, 20 Apr 2021 20:33:36 +02:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 22 Apr 2021 14:09:05 +02:00
thermal/drivers/tsens: Convert msm8960 to reg_field
Convert msm9860 driver to reg_field to use the init_common function.
--- drivers/thermal/qcom/tsens-8960.c | 73 +++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-)
drivers/thermal/qcom/tsens-8960.c +71 -2
@@ -51,11 +51,22 @@#define MIN_LIMIT_TH 0x0#define MAX_LIMIT_TH 0xff -#define S0_STATUS_ADDR 0x3628#define INT_STATUS_ADDR 0x363c#define TRDY_MASK BIT(7)#define TIMEOUT_US 100 +#define S0_STATUS_OFF 0x3628 +#define S1_STATUS_OFF 0x362c +#define S2_STATUS_OFF 0x3630 +#define S3_STATUS_OFF 0x3634 +#define S4_STATUS_OFF 0x3638 +#define S5_STATUS_OFF 0x3664/* Sensors 5-10 found on apq8064/msm8960 */ +#define S6_STATUS_OFF 0x3668 +#define S7_STATUS_OFF 0x366c +#define S8_STATUS_OFF 0x3670 +#define S9_STATUS_OFF 0x3674 +#define S10_STATUS_OFF 0x3678 +static int suspend_8960 (struct tsens_priv *priv) {int ret;
@@ -179,7 +190,7 @@ static int init_8960(struct tsens_priv *priv)*/ for (i =0 ; i < priv->num_sensors; i++) {if (i >=5 ) - priv->sensor[i].status =S0_STATUS_ADDR +40 ; + priv->sensor[i].status =S0_STATUS_OFF +40 ; priv->sensor[i].status += i *4 ; }
@@ -269,6 +280,63 @@ static int get_temp_8960(const struct tsens_sensor *s, int *temp)return -ETIMEDOUT ; } +static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS ] = { +/* ----- SROT ------ */ +/* No VERSION information */ + +/* CNTL */ + [TSENS_EN ] =REG_FIELD (CNTL_ADDR ,0 ,0 ), + [TSENS_SW_RST ] =REG_FIELD (CNTL_ADDR ,1 ,1 ), +/* 8960 has 5 sensors, 8660 has 11, we only handle 5 */ + [SENSOR_EN ] =REG_FIELD (CNTL_ADDR ,3 ,7 ), + +/* ----- TM ------ */ +/* INTERRUPT ENABLE */ +/* NO INTERRUPT ENABLE */ + +/* Single UPPER/LOWER TEMPERATURE THRESHOLD for all sensors */ + [LOW_THRESH_0 ] =REG_FIELD (THRESHOLD_ADDR ,0 ,7 ), + [UP_THRESH_0 ] =REG_FIELD (THRESHOLD_ADDR ,8 ,15 ), +/* MIN_THRESH_0 and MAX_THRESH_0 are not present in the regfield +* Recycle CRIT_THRESH_0 and 1 to set the required regs to hardcoded temp +* MIN_THRESH_0 -> CRIT_THRESH_1 +* MAX_THRESH_0 -> CRIT_THRESH_0 +*/ + [CRIT_THRESH_1 ] =REG_FIELD (THRESHOLD_ADDR ,16 ,23 ), + [CRIT_THRESH_0 ] =REG_FIELD (THRESHOLD_ADDR ,24 ,31 ), + +/* UPPER/LOWER INTERRUPT [CLEAR/STATUS] */ +/* 1 == clear, 0 == normal operation */ + [LOW_INT_CLEAR_0 ] =REG_FIELD (CNTL_ADDR ,9 ,9 ), + [UP_INT_CLEAR_0 ] =REG_FIELD (CNTL_ADDR ,10 ,10 ), + +/* NO CRITICAL INTERRUPT SUPPORT on 8960 */ + +/* Sn_STATUS */ + [LAST_TEMP_0 ] =REG_FIELD (S0_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_1 ] =REG_FIELD (S1_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_2 ] =REG_FIELD (S2_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_3 ] =REG_FIELD (S3_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_4 ] =REG_FIELD (S4_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_5 ] =REG_FIELD (S5_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_6 ] =REG_FIELD (S6_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_7 ] =REG_FIELD (S7_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_8 ] =REG_FIELD (S8_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_9 ] =REG_FIELD (S9_STATUS_OFF ,0 ,7 ), + [LAST_TEMP_10 ] =REG_FIELD (S10_STATUS_OFF ,0 ,7 ), + +/* No VALID field on 8960 */ +/* TSENS_INT_STATUS bits: 1 == threshold violated */ + [MIN_STATUS_0 ] =REG_FIELD (INT_STATUS_ADDR ,0 ,0 ), + [LOWER_STATUS_0 ] =REG_FIELD (INT_STATUS_ADDR ,1 ,1 ), + [UPPER_STATUS_0 ] =REG_FIELD (INT_STATUS_ADDR ,2 ,2 ), +/* No CRITICAL field on 8960 */ + [MAX_STATUS_0 ] =REG_FIELD (INT_STATUS_ADDR ,3 ,3 ), + +/* TRDY: 1=ready, 0=in progress */ + [TRDY ] =REG_FIELD (INT_STATUS_ADDR ,7 ,7 ), +}; +static const struct tsens_ops ops_8960 = { .init = init_8960, .calibrate = calibrate_8960,
@@ -282,4 +350,5 @@ static const struct tsens_ops ops_8960 = {struct tsens_plat_data data_8960 = { .num_sensors =11 , .ops = &ops_8960, + .fields = tsens_8960_regfields, };
PATCH v15 3/9 drivers: thermal: tsens: Add VER_0 tsens version
In reply to Ansuel SmithVER_0 is used to describe device based on tsens version before v0.1. These device are devices based on msm8960 for example apq8064 or ipq806x. Add support for VER_0 in tsens.c and set the right tsens feat in tsens-8960.c file.
--- drivers/thermal/qcom/tsens-8960.c | 9 ++ drivers/thermal/qcom/tsens.c | 150 ++++++++++++++++++++++++------ drivers/thermal/qcom/tsens.h | 4 +- 3 files changed, 133 insertions(+), 30 deletions(-)
drivers/thermal/qcom/tsens-8960.c +9 -0
@@ -347,8 +347,17 @@ static const struct tsens_ops ops_8960 = { .resume = resume_8960, }; +static struct tsens_features tsens_8960_feat = { + .ver_major =VER_0 , + .crit_int =0 , + .adc =1 , + .srot_split =0 , + .max_sensors =11 , +}; +struct tsens_plat_data data_8960 = { .num_sensors =11 , .ops = &ops_8960, + .feat = &tsens_8960_feat, .fields = tsens_8960_regfields, };
drivers/thermal/qcom/tsens.c +121 -29
233 lines not on this page · raw message
drivers/thermal/qcom/tsens.h +3 -1
@@ -13,6 +13,7 @@#define CAL_DEGC_PT2 120#define SLOPE_FACTOR 1000#define SLOPE_DEFAULT 3200 +#define TIMEOUT_US 100#define THRESHOLD_MAX_ADC_CODE 0x3ff#define THRESHOLD_MIN_ADC_CODE 0x0
@@ -25,7 +26,8 @@ struct tsens_priv;/* IP version numbers in ascending order */ enum tsens_ver { -VER_0_1 =0 , +VER_0 =0 , +VER_0_1 ,VER_1_X ,VER_2_X , };
Signature · 1 line
2.30.2
[thermal: thermal/next] thermal/drivers/tsens: Add VER_0 tsens version
The following commit has been merged into the thermal/next branch of thermal:
The following commit has been merged into the thermal/next branch of thermal:
Commit-ID: 53e2a20e4c41683b695145436b34aa4a14bbcd8c Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git//53e2a20e4c41683b695145436b34aa4a14bbcd8c Author: Ansuel Smith <[email protected]> AuthorDate: Tue, 20 Apr 2021 20:33:37 +02:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 22 Apr 2021 14:09:14 +02:00
thermal/drivers/tsens: Add VER_0 tsens version
VER_0 is used to describe device based on tsens version before v0.1. These device are devices based on msm8960 for example apq8064 or ipq806x. Add support for VER_0 in tsens.c and set the right tsens feat in tsens-8960.c file.
--- drivers/thermal/qcom/tsens-8960.c | 9 ++- drivers/thermal/qcom/tsens.c | 150 +++++++++++++++++++++++------ drivers/thermal/qcom/tsens.h | 4 +- 3 files changed, 133 insertions(+), 30 deletions(-)
drivers/thermal/qcom/tsens-8960.c +9 -0
@@ -347,8 +347,17 @@ static const struct tsens_ops ops_8960 = { .resume = resume_8960, }; +static struct tsens_features tsens_8960_feat = { + .ver_major =VER_0 , + .crit_int =0 , + .adc =1 , + .srot_split =0 , + .max_sensors =11 , +}; +struct tsens_plat_data data_8960 = { .num_sensors =11 , .ops = &ops_8960, + .feat = &tsens_8960_feat, .fields = tsens_8960_regfields, };
drivers/thermal/qcom/tsens.c +121 -29
233 lines not on this page · raw message
drivers/thermal/qcom/tsens.h +3 -1
@@ -13,6 +13,7 @@#define CAL_DEGC_PT2 120#define SLOPE_FACTOR 1000#define SLOPE_DEFAULT 3200 +#define TIMEOUT_US 100#define THRESHOLD_MAX_ADC_CODE 0x3ff#define THRESHOLD_MIN_ADC_CODE 0x0
@@ -25,7 +26,8 @@ struct tsens_priv;/* IP version numbers in ascending order */ enum tsens_ver { -VER_0_1 =0 , +VER_0 =0 , +VER_0_1 ,VER_1_X ,VER_2_X , };
PATCH v15 4/9 drivers: thermal: tsens: Use init_common for msm8960
In reply to Ansuel SmithUse init_common and drop custom init for msm8960.
--- drivers/thermal/qcom/tsens-8960.c | 52 +------------------------------ 1 file changed, 1 insertion(+), 51 deletions(-)
drivers/thermal/qcom/tsens-8960.c +1 -51
@@ -173,56 +173,6 @@ static void disable_8960(struct tsens_priv *priv)regmap_write (priv->tm_map,CNTL_ADDR , reg_cntl); } -static int init_8960 (struct tsens_priv *priv) -{ -int ret, i; -u32 reg_cntl; - - priv->tm_map =dev_get_regmap (priv->dev,NULL ); -if (!priv->tm_map) -return -ENODEV ; - -/* -* The status registers for each sensor are discontiguous -* because some SoCs have 5 sensors while others have more -* but the control registers stay in the same place, i.e -* directly after the first 5 status registers. -*/ -for (i =0 ; i < priv->num_sensors; i++) { -if (i >=5 ) - priv->sensor[i].status =S0_STATUS_OFF +40 ; - priv->sensor[i].status += i *4 ; - } - - reg_cntl =SW_RST ; - ret =regmap_update_bits (priv->tm_map,CNTL_ADDR ,SW_RST , reg_cntl); -if (ret) -return ret; - -if (priv->num_sensors >1 ) { - reg_cntl |=SLP_CLK_ENA | (MEASURE_PERIOD <<18 ); - reg_cntl &= ~SW_RST ; - ret =regmap_update_bits (priv->tm_map,CONFIG_ADDR , -CONFIG_MASK ,CONFIG ); - }else { - reg_cntl |=SLP_CLK_ENA_8660 | (MEASURE_PERIOD <<16 ); - reg_cntl &= ~CONFIG_MASK_8660 ; - reg_cntl |=CONFIG_8660 <<CONFIG_SHIFT_8660 ; - } - - reg_cntl |=GENMASK (priv->num_sensors -1 ,0 ) <<SENSOR0_SHIFT ; - ret =regmap_write (priv->tm_map,CNTL_ADDR , reg_cntl); -if (ret) -return ret; - - reg_cntl |=EN ; - ret =regmap_write (priv->tm_map,CNTL_ADDR , reg_cntl); -if (ret) -return ret; - -return 0 ; -} -static int calibrate_8960 (struct tsens_priv *priv) {int i;
@@ -338,7 +288,7 @@ static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS] = { };static const struct tsens_ops ops_8960 = { - .init = init_8960, + .init = init_common, .calibrate = calibrate_8960, .get_temp = get_temp_8960, .enable = enable_8960,
Signature · 1 line
2.30.2
[thermal: thermal/next] thermal/drivers/tsens: Use init_common for msm8960
The following commit has been merged into the thermal/next branch of thermal:
The following commit has been merged into the thermal/next branch of thermal:
Commit-ID: fdda131f8fbadee2dfc21f0787d11547b42a961e Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git//fdda131f8fbadee2dfc21f0787d11547b42a961e Author: Ansuel Smith <[email protected]> AuthorDate: Tue, 20 Apr 2021 20:33:38 +02:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 22 Apr 2021 14:09:23 +02:00
thermal/drivers/tsens: Use init_common for msm8960
Use init_common and drop custom init for msm8960.
--- drivers/thermal/qcom/tsens-8960.c | 52 +------------------------------ 1 file changed, 1 insertion(+), 51 deletions(-)
drivers/thermal/qcom/tsens-8960.c +1 -51
@@ -173,56 +173,6 @@ static void disable_8960(struct tsens_priv *priv)regmap_write (priv->tm_map,CNTL_ADDR , reg_cntl); } -static int init_8960 (struct tsens_priv *priv) -{ -int ret, i; -u32 reg_cntl; - - priv->tm_map =dev_get_regmap (priv->dev,NULL ); -if (!priv->tm_map) -return -ENODEV ; - -/* -* The status registers for each sensor are discontiguous -* because some SoCs have 5 sensors while others have more -* but the control registers stay in the same place, i.e -* directly after the first 5 status registers. -*/ -for (i =0 ; i < priv->num_sensors; i++) { -if (i >=5 ) - priv->sensor[i].status =S0_STATUS_OFF +40 ; - priv->sensor[i].status += i *4 ; - } - - reg_cntl =SW_RST ; - ret =regmap_update_bits (priv->tm_map,CNTL_ADDR ,SW_RST , reg_cntl); -if (ret) -return ret; - -if (priv->num_sensors >1 ) { - reg_cntl |=SLP_CLK_ENA | (MEASURE_PERIOD <<18 ); - reg_cntl &= ~SW_RST ; - ret =regmap_update_bits (priv->tm_map,CONFIG_ADDR , -CONFIG_MASK ,CONFIG ); - }else { - reg_cntl |=SLP_CLK_ENA_8660 | (MEASURE_PERIOD <<16 ); - reg_cntl &= ~CONFIG_MASK_8660 ; - reg_cntl |=CONFIG_8660 <<CONFIG_SHIFT_8660 ; - } - - reg_cntl |=GENMASK (priv->num_sensors -1 ,0 ) <<SENSOR0_SHIFT ; - ret =regmap_write (priv->tm_map,CNTL_ADDR , reg_cntl); -if (ret) -return ret; - - reg_cntl |=EN ; - ret =regmap_write (priv->tm_map,CNTL_ADDR , reg_cntl); -if (ret) -return ret; - -return 0 ; -} -static int calibrate_8960 (struct tsens_priv *priv) {int i;
@@ -338,7 +288,7 @@ static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS] = { };static const struct tsens_ops ops_8960 = { - .init = init_8960, + .init = init_common, .calibrate = calibrate_8960, .get_temp = get_temp_8960, .enable = enable_8960,
PATCH v15 5/9 drivers: thermal: tsens: Fix bug in sensor enable for msm8960
In reply to Ansuel SmithDevice based on tsens VER_0 contains a hardware bug that results in some problem with sensor enablement. Sensor id 6-11 can't be enabled selectively and all of them must be enabled in one step.
--- drivers/thermal/qcom/tsens-8960.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-)
drivers/thermal/qcom/tsens-8960.c +20 -3
@@ -27,9 +27,9 @@#define EN BIT(0)#define SW_RST BIT(1)#define SENSOR0_EN BIT(3) +#define MEASURE_PERIOD BIT(18)#define SLP_CLK_ENA BIT(26)#define SLP_CLK_ENA_8660 BIT(24) -#define MEASURE_PERIOD 1#define SENSOR0_SHIFT 3/* INT_STATUS_ADDR bitmasks */
@@ -126,17 +126,34 @@ static int resume_8960(struct tsens_priv *priv)static int enable_8960 (struct tsens_priv *priv,int id) {int ret; -u32 reg, mask; +u32 reg, mask =BIT (id); ret =regmap_read (priv->tm_map,CNTL_ADDR , ®);if (ret)return ret; - mask =BIT (id +SENSOR0_SHIFT ); +/* HARDWARE BUG: +* On platforms with more than 6 sensors, all remaining sensors +* must be enabled together, otherwise undefined results are expected. +* (Sensor 6-7 disabled, Sensor 3 disabled...) In the original driver, +* all the sensors are enabled in one step hence this bug is not +* triggered. +*/ +if (id >5 ) + mask =GENMASK (10 ,6 ); + + mask <<=SENSOR0_SHIFT ; + +/* Sensors already enabled. Skip. */ +if ((reg & mask) == mask) +return 0 ; + ret =regmap_write (priv->tm_map,CNTL_ADDR , reg |SW_RST );if (ret)return ret; + reg |=MEASURE_PERIOD ; +if (priv->num_sensors >1 ) reg |= mask |SLP_CLK_ENA |EN ;else
Signature · 1 line
2.30.2
[thermal: thermal/next] thermal/drivers/tsens: Fix bug in sensor enable for msm8960
The following commit has been merged into the thermal/next branch of thermal:
The following commit has been merged into the thermal/next branch of thermal:
Commit-ID: 3d08f029fdbbd29c8b363ef4c8c4bfe3b8f79ad0 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git//3d08f029fdbbd29c8b363ef4c8c4bfe3b8f79ad0 Author: Ansuel Smith <[email protected]> AuthorDate: Tue, 20 Apr 2021 20:33:39 +02:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 22 Apr 2021 14:09:32 +02:00
thermal/drivers/tsens: Fix bug in sensor enable for msm8960
Device based on tsens VER_0 contains a hardware bug that results in some problem with sensor enablement. Sensor id 6-11 can't be enabled selectively and all of them must be enabled in one step.
--- drivers/thermal/qcom/tsens-8960.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-)
drivers/thermal/qcom/tsens-8960.c +20 -3
@@ -27,9 +27,9 @@#define EN BIT(0)#define SW_RST BIT(1)#define SENSOR0_EN BIT(3) +#define MEASURE_PERIOD BIT(18)#define SLP_CLK_ENA BIT(26)#define SLP_CLK_ENA_8660 BIT(24) -#define MEASURE_PERIOD 1#define SENSOR0_SHIFT 3/* INT_STATUS_ADDR bitmasks */
@@ -126,17 +126,34 @@ static int resume_8960(struct tsens_priv *priv)static int enable_8960 (struct tsens_priv *priv,int id) {int ret; -u32 reg, mask; +u32 reg, mask =BIT (id); ret =regmap_read (priv->tm_map,CNTL_ADDR , ®);if (ret)return ret; - mask =BIT (id +SENSOR0_SHIFT ); +/* HARDWARE BUG: +* On platforms with more than 6 sensors, all remaining sensors +* must be enabled together, otherwise undefined results are expected. +* (Sensor 6-7 disabled, Sensor 3 disabled...) In the original driver, +* all the sensors are enabled in one step hence this bug is not +* triggered. +*/ +if (id >5 ) + mask =GENMASK (10 ,6 ); + + mask <<=SENSOR0_SHIFT ; + +/* Sensors already enabled. Skip. */ +if ((reg & mask) == mask) +return 0 ; + ret =regmap_write (priv->tm_map,CNTL_ADDR , reg |SW_RST );if (ret)return ret; + reg |=MEASURE_PERIOD ; +if (priv->num_sensors >1 ) reg |= mask |SLP_CLK_ENA |EN ;else
PATCH v15 6/9 drivers: thermal: tsens: Replace custom 8960 apis with generic apis
In reply to Ansuel SmithRework calibrate function to use common function. Derive the offset from a missing hardcoded slope table and the data from the nvmem calib efuses.
Drop custom get_temp function and use generic api.
--- drivers/thermal/qcom/tsens-8960.c | 56 +++++++++---------------------- 1 file changed, 15 insertions(+), 41 deletions(-)
drivers/thermal/qcom/tsens-8960.c +15 -41
@@ -67,6 +67,13 @@#define S9_STATUS_OFF 0x3674#define S10_STATUS_OFF 0x3678 +/* Original slope - 350 to compensate mC to C inaccuracy */ +static u32 tsens_msm8960_slope[] = { +826 ,826 ,804 ,826 , +761 ,782 ,782 ,849 , +782 ,849 ,782 + }; +static int suspend_8960 (struct tsens_priv *priv) {int ret;
@@ -194,9 +201,7 @@ static int calibrate_8960(struct tsens_priv *priv) {int i;char *data; - -ssize_t num_read = priv->num_sensors; -struct tsens_sensor *s = priv->sensor; +u32 p1[11 ]; data =qfprom_read (priv->dev,"calib" );if (IS_ERR (data))
@@ -204,49 +209,18 @@ static int calibrate_8960(struct tsens_priv *priv)if (IS_ERR (data))return PTR_ERR (data); -for (i =0 ; i < num_read; i++, s++) - s->offset = data[i]; +for (i =0 ; i < priv->num_sensors; i++) { + p1[i] = data[i]; + priv->sensor[i].slope = tsens_msm8960_slope[i]; + } + +compute_intercept_slope (priv, p1,NULL ,ONE_PT_CALIB );kfree (data);return 0 ; } -/* Temperature on y axis and ADC-code on x-axis */ -static inline int code_to_mdegC (u32 adc_code,const struct tsens_sensor *s) -{ -int slope, offset; - - slope =thermal_zone_get_slope (s->tzd); - offset =CAL_MDEGC - slope * s->offset; - -return adc_code * slope + offset; -} - -static int get_temp_8960 (const struct tsens_sensor *s,int *temp) -{ -int ret; -u32 code, trdy; -struct tsens_priv *priv = s->priv; -unsigned long timeout; - - timeout = jiffies +usecs_to_jiffies (TIMEOUT_US ); -do { - ret =regmap_read (priv->tm_map,INT_STATUS_ADDR , &trdy); -if (ret) -return ret; -if (!(trdy &TRDY_MASK )) -continue ; - ret =regmap_read (priv->tm_map, s->status, &code); -if (ret) -return ret; - *temp =code_to_mdegC (code, s); -return 0 ; - }while (time_before (jiffies, timeout)); - -return -ETIMEDOUT ; -} -static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS ] = {/* ----- SROT ------ */ /* No VERSION information */
@@ -307,7 +281,7 @@ static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS] = {static const struct tsens_ops ops_8960 = { .init = init_common, .calibrate = calibrate_8960, - .get_temp = get_temp_8960, + .get_temp = get_temp_common, .enable = enable_8960, .disable = disable_8960, .suspend = suspend_8960,
Signature · 1 line
2.30.2
[thermal: thermal/next] thermal/drivers/tsens: Replace custom 8960 apis with generic apis
The following commit has been merged into the thermal/next branch of thermal:
The following commit has been merged into the thermal/next branch of thermal:
Commit-ID: dfc1193d4dbd6c3cb68c944413146c940bde290a Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git//dfc1193d4dbd6c3cb68c944413146c940bde290a Author: Ansuel Smith <[email protected]> AuthorDate: Tue, 20 Apr 2021 20:33:40 +02:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 22 Apr 2021 14:09:59 +02:00
thermal/drivers/tsens: Replace custom 8960 apis with generic apis
Rework calibrate function to use common function. Derive the offset from a missing hardcoded slope table and the data from the nvmem calib efuses.
Drop custom get_temp function and use generic api.
--- drivers/thermal/qcom/tsens-8960.c | 56 ++++++++---------------------- 1 file changed, 15 insertions(+), 41 deletions(-)
drivers/thermal/qcom/tsens-8960.c +15 -41
@@ -67,6 +67,13 @@#define S9_STATUS_OFF 0x3674#define S10_STATUS_OFF 0x3678 +/* Original slope - 350 to compensate mC to C inaccuracy */ +static u32 tsens_msm8960_slope[] = { +826 ,826 ,804 ,826 , +761 ,782 ,782 ,849 , +782 ,849 ,782 + }; +static int suspend_8960 (struct tsens_priv *priv) {int ret;
@@ -194,9 +201,7 @@ static int calibrate_8960(struct tsens_priv *priv) {int i;char *data; - -ssize_t num_read = priv->num_sensors; -struct tsens_sensor *s = priv->sensor; +u32 p1[11 ]; data =qfprom_read (priv->dev,"calib" );if (IS_ERR (data))
@@ -204,49 +209,18 @@ static int calibrate_8960(struct tsens_priv *priv)if (IS_ERR (data))return PTR_ERR (data); -for (i =0 ; i < num_read; i++, s++) - s->offset = data[i]; +for (i =0 ; i < priv->num_sensors; i++) { + p1[i] = data[i]; + priv->sensor[i].slope = tsens_msm8960_slope[i]; + } + +compute_intercept_slope (priv, p1,NULL ,ONE_PT_CALIB );kfree (data);return 0 ; } -/* Temperature on y axis and ADC-code on x-axis */ -static inline int code_to_mdegC (u32 adc_code,const struct tsens_sensor *s) -{ -int slope, offset; - - slope =thermal_zone_get_slope (s->tzd); - offset =CAL_MDEGC - slope * s->offset; - -return adc_code * slope + offset; -} - -static int get_temp_8960 (const struct tsens_sensor *s,int *temp) -{ -int ret; -u32 code, trdy; -struct tsens_priv *priv = s->priv; -unsigned long timeout; - - timeout = jiffies +usecs_to_jiffies (TIMEOUT_US ); -do { - ret =regmap_read (priv->tm_map,INT_STATUS_ADDR , &trdy); -if (ret) -return ret; -if (!(trdy &TRDY_MASK )) -continue ; - ret =regmap_read (priv->tm_map, s->status, &code); -if (ret) -return ret; - *temp =code_to_mdegC (code, s); -return 0 ; - }while (time_before (jiffies, timeout)); - -return -ETIMEDOUT ; -} -static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS ] = {/* ----- SROT ------ */ /* No VERSION information */
@@ -307,7 +281,7 @@ static const struct reg_field tsens_8960_regfields[MAX_REGFIELDS] = {static const struct tsens_ops ops_8960 = { .init = init_common, .calibrate = calibrate_8960, - .get_temp = get_temp_8960, + .get_temp = get_temp_common, .enable = enable_8960, .disable = disable_8960, .suspend = suspend_8960,
PATCH v15 7/9 drivers: thermal: tsens: Drop unused define for msm8960
In reply to Ansuel SmithDrop unused define for msm8960 replaced by generic api and reg_field.
--- drivers/thermal/qcom/tsens-8960.c | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-)
drivers/thermal/qcom/tsens-8960.c +1 -23
@@ -10,8 +10,6 @@#include <linux/thermal.h> #include "tsens.h" -#define CAL_MDEGC 30000 -#define CONFIG_ADDR 0x3640#define CONFIG_ADDR_8660 0x3620/* CONFIG_ADDR bitmasks */
@@ -21,39 +19,19 @@#define CONFIG_SHIFT_8660 28#define CONFIG_MASK_8660 (3 << CONFIG_SHIFT_8660) -#define STATUS_CNTL_ADDR_8064 0x3660#define CNTL_ADDR 0x3620/* CNTL_ADDR bitmasks */ #define EN BIT(0)#define SW_RST BIT(1) -#define SENSOR0_EN BIT(3) +#define MEASURE_PERIOD BIT(18)#define SLP_CLK_ENA BIT(26)#define SLP_CLK_ENA_8660 BIT(24)#define SENSOR0_SHIFT 3 -/* INT_STATUS_ADDR bitmasks */ -#define MIN_STATUS_MASK BIT(0) -#define LOWER_STATUS_CLR BIT(1) -#define UPPER_STATUS_CLR BIT(2) -#define MAX_STATUS_MASK BIT(3) -#define THRESHOLD_ADDR 0x3624 -/* THRESHOLD_ADDR bitmasks */ -#define THRESHOLD_MAX_LIMIT_SHIFT 24 -#define THRESHOLD_MIN_LIMIT_SHIFT 16 -#define THRESHOLD_UPPER_LIMIT_SHIFT 8 -#define THRESHOLD_LOWER_LIMIT_SHIFT 0 - -/* Initial temperature threshold values */ -#define LOWER_LIMIT_TH 0x50 -#define UPPER_LIMIT_TH 0xdf -#define MIN_LIMIT_TH 0x0 -#define MAX_LIMIT_TH 0xff#define INT_STATUS_ADDR 0x363c -#define TRDY_MASK BIT(7) -#define TIMEOUT_US 100#define S0_STATUS_OFF 0x3628#define S1_STATUS_OFF 0x362c
Signature · 1 line
2.30.2
[thermal: thermal/next] thermal/drivers/tsens: Drop unused define for msm8960
The following commit has been merged into the thermal/next branch of thermal:
The following commit has been merged into the thermal/next branch of thermal:
Commit-ID: 2ebd0982e6ba69d9f9c02a4a0aab705a5526283e Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git//2ebd0982e6ba69d9f9c02a4a0aab705a5526283e Author: Ansuel Smith <[email protected]> AuthorDate: Tue, 20 Apr 2021 20:33:41 +02:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 22 Apr 2021 14:10:08 +02:00
thermal/drivers/tsens: Drop unused define for msm8960
Drop unused define for msm8960 replaced by generic api and reg_field.
--- drivers/thermal/qcom/tsens-8960.c | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-)
drivers/thermal/qcom/tsens-8960.c +1 -23
@@ -10,8 +10,6 @@#include <linux/thermal.h> #include "tsens.h" -#define CAL_MDEGC 30000 -#define CONFIG_ADDR 0x3640#define CONFIG_ADDR_8660 0x3620/* CONFIG_ADDR bitmasks */
@@ -21,39 +19,19 @@#define CONFIG_SHIFT_8660 28#define CONFIG_MASK_8660 (3 << CONFIG_SHIFT_8660) -#define STATUS_CNTL_ADDR_8064 0x3660#define CNTL_ADDR 0x3620/* CNTL_ADDR bitmasks */ #define EN BIT(0)#define SW_RST BIT(1) -#define SENSOR0_EN BIT(3) +#define MEASURE_PERIOD BIT(18)#define SLP_CLK_ENA BIT(26)#define SLP_CLK_ENA_8660 BIT(24)#define SENSOR0_SHIFT 3 -/* INT_STATUS_ADDR bitmasks */ -#define MIN_STATUS_MASK BIT(0) -#define LOWER_STATUS_CLR BIT(1) -#define UPPER_STATUS_CLR BIT(2) -#define MAX_STATUS_MASK BIT(3) -#define THRESHOLD_ADDR 0x3624 -/* THRESHOLD_ADDR bitmasks */ -#define THRESHOLD_MAX_LIMIT_SHIFT 24 -#define THRESHOLD_MIN_LIMIT_SHIFT 16 -#define THRESHOLD_UPPER_LIMIT_SHIFT 8 -#define THRESHOLD_LOWER_LIMIT_SHIFT 0 - -/* Initial temperature threshold values */ -#define LOWER_LIMIT_TH 0x50 -#define UPPER_LIMIT_TH 0xdf -#define MIN_LIMIT_TH 0x0 -#define MAX_LIMIT_TH 0xff#define INT_STATUS_ADDR 0x363c -#define TRDY_MASK BIT(7) -#define TIMEOUT_US 100#define S0_STATUS_OFF 0x3628#define S1_STATUS_OFF 0x362c
PATCH v15 8/9 drivers: thermal: tsens: Add support for ipq8064-tsens
In reply to Ansuel SmithAdd support for tsens present in ipq806x SoCs based on generic msm8960 tsens driver.
--- drivers/thermal/qcom/tsens.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/thermal/qcom/tsens.c +3 -0
@@ -966,6 +966,9 @@ static SIMPLE_DEV_PM_OPS(tsens_pm_ops, tsens_suspend, tsens_resume);static const struct of_device_id tsens_table[] = { { + .compatible ="qcom,ipq8064-tsens" , + .data = &data_8960, + }, { .compatible ="qcom,msm8916-tsens" , .data = &data_8916, }, {
Signature · 1 line
2.30.2
[thermal: thermal/next] thermal/drivers/tsens: Add support for ipq8064-tsens
The following commit has been merged into the thermal/next branch of thermal:
The following commit has been merged into the thermal/next branch of thermal:
Commit-ID: 6b3aeafbc12c18036809108e301efe8056249233 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git//6b3aeafbc12c18036809108e301efe8056249233 Author: Ansuel Smith <[email protected]> AuthorDate: Tue, 20 Apr 2021 20:33:42 +02:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 22 Apr 2021 14:10:17 +02:00
thermal/drivers/tsens: Add support for ipq8064-tsens
Add support for tsens present in ipq806x SoCs based on generic msm8960 tsens driver.
--- drivers/thermal/qcom/tsens.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/thermal/qcom/tsens.c +3 -0
@@ -968,6 +968,9 @@ static SIMPLE_DEV_PM_OPS(tsens_pm_ops, tsens_suspend, tsens_resume);static const struct of_device_id tsens_table[] = { { + .compatible ="qcom,ipq8064-tsens" , + .data = &data_8960, + }, { .compatible ="qcom,mdm9607-tsens" , .data = &data_9607, }, {
PATCH v15 9/9 dt-bindings: thermal: tsens: Document ipq8064 bindings
In reply to Ansuel SmithDocument the use of bindings used for msm8960 tsens based devices. msm8960 use the same gcc regs and is set as a child of the qcom gcc.
--- .../bindings/thermal/qcom-tsens.yaml | 56 ++++++++++++++++--- 1 file changed, 48 insertions(+), 8 deletions(-)
Documentation/devicetree/bindings/thermal/qcom-tsens.yaml +48 -8
@@ -19,6 +19,11 @@ description: | properties: compatible: oneOf: + - description: msm9860 TSENS based + items: + - enum: + - qcom,ipq8064-tsens + - description: v0.1 of TSENS items: - enum:
@@ -70,7 +75,9 @@ properties: maxItems: 2 items: - const: calib - - const: calib_sel + - enum: + - calib_backup + - calib_sel "#qcom,sensors": description:
@@ -85,12 +92,20 @@ properties: Number of cells required to uniquely identify the thermal sensors. Since we have multiple sensors this is set to 1 +required: + - compatible + - interrupts + - interrupt-names + - "#thermal-sensor-cells" + - "#qcom,sensors" + allOf: - if: properties: compatible: contains: enum: + - qcom,ipq8064-tsens - qcom,msm8916-tsens - qcom,msm8974-tsens - qcom,msm8976-tsens
@@ -111,17 +126,42 @@ allOf: interrupt-names: minItems: 2 -required: - - compatible - - reg - - "#qcom,sensors" - - interrupts - - interrupt-names - - "#thermal-sensor-cells" + - if: + properties: + compatible: + contains: + enum: + - qcom,tsens-v0_1 + - qcom,tsens-v1 + - qcom,tsens-v2 + + then: + required: + - reg additionalProperties: false examples: + - | + #include <dt-bindings/interrupt-controller/arm-gic.h> + // Example msm9860 based SoC (ipq8064): + gcc: clock-controller { + + /* ... */ + + tsens: thermal-sensor { + compatible = "qcom,ipq8064-tsens"; + + nvmem-cells = <&tsens_calib>, <&tsens_calib_backup>; + nvmem-cell-names = "calib", "calib_backup"; + interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "uplow"; + + #qcom,sensors = <11>; + #thermal-sensor-cells = <1>; + }; + }; + - | #include <dt-bindings/interrupt-controller/arm-gic.h> // Example 1 (legacy: for pre v1 IP):
Signature · 1 line
2.30.2
[thermal: thermal/next] dt-bindings: thermal: tsens: Document ipq8064 bindings
The following commit has been merged into the thermal/next branch of thermal:
The following commit has been merged into the thermal/next branch of thermal:
Commit-ID: 26b2f03d2adf43d0dc9aeeb3fff54dcc9fcdb1f4 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git//26b2f03d2adf43d0dc9aeeb3fff54dcc9fcdb1f4 Author: Ansuel Smith <[email protected]> AuthorDate: Tue, 20 Apr 2021 20:33:43 +02:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 22 Apr 2021 14:10:24 +02:00
dt-bindings: thermal: tsens: Document ipq8064 bindings
Document the use of bindings used for msm8960 tsens based devices. msm8960 use the same gcc regs and is set as a child of the qcom gcc.
--- Documentation/devicetree/bindings/thermal/qcom-tsens.yaml | 56 ++++++- 1 file changed, 48 insertions(+), 8 deletions(-)
Documentation/devicetree/bindings/thermal/qcom-tsens.yaml +48 -8
@@ -19,6 +19,11 @@ description: | properties: compatible: oneOf: + - description: msm9860 TSENS based + items: + - enum: + - qcom,ipq8064-tsens + - description: v0.1 of TSENS items: - enum:
@@ -75,7 +80,9 @@ properties: maxItems: 2 items: - const: calib - - const: calib_sel + - enum: + - calib_backup + - calib_sel "#qcom,sensors": description:
@@ -90,12 +97,20 @@ properties: Number of cells required to uniquely identify the thermal sensors. Since we have multiple sensors this is set to 1 +required: + - compatible + - interrupts + - interrupt-names + - "#thermal-sensor-cells" + - "#qcom,sensors" + allOf: - if: properties: compatible: contains: enum: + - qcom,ipq8064-tsens - qcom,mdm9607-tsens - qcom,msm8916-tsens - qcom,msm8974-tsens
@@ -117,19 +132,44 @@ allOf: interrupt-names: minItems: 2 -required: - - compatible - - reg - - "#qcom,sensors" - - interrupts - - interrupt-names - - "#thermal-sensor-cells" + - if: + properties: + compatible: + contains: + enum: + - qcom,tsens-v0_1 + - qcom,tsens-v1 + - qcom,tsens-v2 + + then: + required: + - reg additionalProperties: false examples: - | #include <dt-bindings/interrupt-controller/arm-gic.h> + // Example msm9860 based SoC (ipq8064): + gcc: clock-controller { + + /* ... */ + + tsens: thermal-sensor { + compatible = "qcom,ipq8064-tsens"; + + nvmem-cells = <&tsens_calib>, <&tsens_calib_backup>; + nvmem-cell-names = "calib", "calib_backup"; + interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "uplow"; + + #qcom,sensors = <11>; + #thermal-sensor-cells = <1>; + }; + }; + + - | + #include <dt-bindings/interrupt-controller/arm-gic.h> // Example 1 (legacy: for pre v1 IP): tsens1: thermal-sensor@900000 { compatible = "qcom,msm8916-tsens", "qcom,tsens-v0_1";