Message ID | cover.1535462942.git.amit.kucheria@linaro.org |
---|---|
Headers | show |
Series | Another round of tsens cleanups | expand |
On Tue 28 Aug 06:38 PDT 2018, Amit Kucheria wrote: > We've earlier added support to split the register address space into TM > and SROT regions. > > Split up the regmap address space into two for the remaining platforms > that have a similar register layout and make corresponding changes to > the get_temp_common() function used by these platforms. > > Since tsens-common.c/init_common() currently only registers one address > space, the order is important (TM before SROT). This is OK since the > code doesn't really use the SROT functionality yet. > Having a single patch touching both code and dts will cause merge issues as this patch travel upstream. Even more arm-soc expects arm and arm64 dts changes to come in different pull requests. Please split it so that the three pieces can be picked up by respective maintainer. > Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org> > Reviewed-by: Matthias Kaehlcke <mka@chromium.org> > --- > arch/arm/boot/dts/qcom-msm8974.dtsi | 5 +++-- > arch/arm64/boot/dts/qcom/msm8916.dtsi | 5 +++-- > drivers/thermal/qcom/tsens-common.c | 5 +++-- > 3 files changed, 9 insertions(+), 6 deletions(-) > > diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi > index d9019a49b292..56dbbf788d15 100644 > --- a/arch/arm/boot/dts/qcom-msm8974.dtsi > +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi > @@ -427,9 +427,10 @@ > }; > }; > > - tsens: thermal-sensor@fc4a8000 { > + tsens: thermal-sensor@fc4a9000 { > compatible = "qcom,msm8974-tsens"; > - reg = <0xfc4a8000 0x2000>; > + reg = <0xfc4a9000 0x1000>, /* TM */ > + <0xfc4a8000 0x1000>; /* SROT */ > nvmem-cells = <&tsens_calib>, <&tsens_backup>; > nvmem-cell-names = "calib", "calib_backup"; > #thermal-sensor-cells = <1>; > diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi > index 7b32b8990d62..6a277fce3333 100644 > --- a/arch/arm64/boot/dts/qcom/msm8916.dtsi > +++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi > @@ -761,9 +761,10 @@ > }; > }; > > - tsens: thermal-sensor@4a8000 { > + tsens: thermal-sensor@4a9000 { > compatible = "qcom,msm8916-tsens"; > - reg = <0x4a8000 0x2000>; > + reg = <0x4a9000 0x1000>, /* TM */ > + <0x4a8000 0x1000>; /* SROT */ > nvmem-cells = <&tsens_caldata>, <&tsens_calsel>; > nvmem-cell-names = "calib", "calib_sel"; > #thermal-sensor-cells = <1>; > diff --git a/drivers/thermal/qcom/tsens-common.c b/drivers/thermal/qcom/tsens-common.c > index 6207d8d92351..478739543bbc 100644 > --- a/drivers/thermal/qcom/tsens-common.c > +++ b/drivers/thermal/qcom/tsens-common.c > @@ -21,7 +21,7 @@ > #include <linux/regmap.h> > #include "tsens.h" > > -#define S0_ST_ADDR 0x1030 > +#define STATUS_OFFSET 0x30 > #define SN_ADDR_OFFSET 0x4 > #define SN_ST_TEMP_MASK 0x3ff > #define CAL_DEGC_PT1 30 > @@ -107,8 +107,9 @@ int get_temp_common(struct tsens_device *tmdev, int id, int *temp) > unsigned int status_reg; > int last_temp = 0, ret; > > - status_reg = S0_ST_ADDR + s->hw_id * SN_ADDR_OFFSET; > + status_reg = tmdev->tm_offset + STATUS_OFFSET + s->hw_id * SN_ADDR_OFFSET; Wasn't this change part of the previous set that introduced the tm_offset? If not how did we handle the fact that tmdev->map is already indented 0x1000 bytes? Both changes looks good, but I'm worries about the order of things. Regards, Bjorn > ret = regmap_read(tmdev->map, status_reg, &code); > + > if (ret) > return ret; > last_temp = code & SN_ST_TEMP_MASK; > -- > 2.17.1 >
On Tue 28 Aug 06:38 PDT 2018, Amit Kucheria wrote: > The hw_id field in 'struct tsens_sensor' can do the job of tracking > unique ids for each sensor connected to each tsens device instance. It > also allows hw_ids to be overridden (e.g. 8916) in cases where some > sensors in a sequence are disabled on a particular platform. > > Use the hw_id field instead of the id field consistently across the > tsens code. > > While we're at it, document the fields of struct tsens_sensor. > > Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org> > Reviewed-by: Matthias Kaehlcke <mka@chromium.org> Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org> Regards, Bjorn > --- > drivers/thermal/qcom/tsens.c | 5 ++--- > drivers/thermal/qcom/tsens.h | 10 +++++++++- > 2 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c > index 9a8e8f7b4ae1..fb728ec5d77f 100644 > --- a/drivers/thermal/qcom/tsens.c > +++ b/drivers/thermal/qcom/tsens.c > @@ -17,7 +17,7 @@ static int tsens_get_temp(void *data, int *temp) > const struct tsens_sensor *s = data; > struct tsens_device *tmdev = s->tmdev; > > - return tmdev->ops->get_temp(tmdev, s->id, temp); > + return tmdev->ops->get_temp(tmdev, s->hw_id, temp); > } > > static int tsens_get_trend(void *p, int trip, enum thermal_trend *trend) > @@ -26,7 +26,7 @@ static int tsens_get_trend(void *p, int trip, enum thermal_trend *trend) > struct tsens_device *tmdev = s->tmdev; > > if (tmdev->ops->get_trend) > - return tmdev->ops->get_trend(tmdev, s->id, trend); > + return tmdev->ops->get_trend(tmdev, s->hw_id, trend); > > return -ENOTSUPP; > } > @@ -83,7 +83,6 @@ static int tsens_register(struct tsens_device *tmdev) > > for (i = 0; i < tmdev->num_sensors; i++) { > tmdev->sensor[i].tmdev = tmdev; > - tmdev->sensor[i].id = i; > tzd = devm_thermal_zone_of_sensor_register(tmdev->dev, i, > &tmdev->sensor[i], > &tsens_of_ops); > diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h > index b9c4bcf255fa..2a3174dfc1a9 100644 > --- a/drivers/thermal/qcom/tsens.h > +++ b/drivers/thermal/qcom/tsens.h > @@ -14,11 +14,19 @@ > > struct tsens_device; > > +/** > + * struct tsens_sensor - sensor-specific data > + * @tmdev: tsens device instance this sensor is connected to > + * @tzd: thermal zone corresponding to this sensor > + * @offset: offset from calibration data to convert ADC data to degrees > + * @hw_id: unique sensor ID for each sensor connected to tsens device instance > + * @slope: slope from calibration data to convert ADC data to degrees > + * @status: 8960-specific status register addresses > + */ > struct tsens_sensor { > struct tsens_device *tmdev; > struct thermal_zone_device *tzd; > int offset; > - int id; > int hw_id; > int slope; > u32 status; > -- > 2.17.1 >
On Tue 28 Aug 06:38 PDT 2018, Amit Kucheria wrote: > Instead of showing up as thermal-sensor@<addr>, the nodes will show up as > tsens0_tm, tsen1_tm, tsens1_srot, etc. in /proc/iomem making it easier to > read. > > IOW, > > 0c222000-0c2221fe : thermal-sensor@c263000 > 0c223000-0c2231fe : thermal-sensor@c265000 > 0c263000-0c2631fe : thermal-sensor@c263000 > 0c265000-0c2651fe : thermal-sensor@c265000 > > becomes > > 0c222000-0c2221fe : tsens0_srot > 0c223000-0c2231fe : tsens1_srot > 0c263000-0c2631fe : tsens0_tm > 0c265000-0c2651fe : tsens1_tm > > Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org> > Reviewed-by: Matthias Kaehlcke <mka@chromium.org> > --- > arch/arm/boot/dts/qcom-msm8974.dtsi | 1 + > arch/arm64/boot/dts/qcom/msm8916.dtsi | 1 + > arch/arm64/boot/dts/qcom/msm8996.dtsi | 2 ++ > arch/arm64/boot/dts/qcom/sdm845.dtsi | 2 ++ > 4 files changed, 6 insertions(+) > > diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi > index 3c4b81c29798..64c9f81ddd90 100644 > --- a/arch/arm/boot/dts/qcom-msm8974.dtsi > +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi > @@ -431,6 +431,7 @@ > compatible = "qcom,msm8974-tsens"; > reg = <0xfc4a9000 0x1000>, /* TM */ > <0xfc4a8000 0x1000>; /* SROT */ > + reg-names = "tsens_tm", "tsens_srot"; While the iomem output seems more convenient this way, these register names are a contract between the DT binding and the particular tsens instance. As such this is a good idea, but with the names should not include the instance information. They should be "tm", "srot". > nvmem-cells = <&tsens_calib>, <&tsens_backup>; > nvmem-cell-names = "calib", "calib_backup"; > #qcom,sensors = <11>; [..] > diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi > index 0c9a2aa6a1b5..f1a36d6829cf 100644 > --- a/arch/arm64/boot/dts/qcom/sdm845.dtsi > +++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi > @@ -966,6 +966,7 @@ > compatible = "qcom,sdm845-tsens", "qcom,tsens-v2"; > reg = <0xc263000 0x1ff>, /* TM */ > <0xc222000 0x1ff>; /* SROT */ > + reg-names = "tsens0_tm", "tsens0_srot"; > #qcom,sensors = <13>; > #thermal-sensor-cells = <1>; > }; > @@ -974,6 +975,7 @@ > compatible = "qcom,sdm845-tsens", "qcom,tsens-v2"; > reg = <0xc265000 0x1ff>, /* TM */ > <0xc223000 0x1ff>; /* SROT */ > + reg-names = "tsens1_tm", "tsens1_srot"; And I do recognize that in this case iomem won't show which one is tsens0 and which is tsens1... As with previous patches, please split arm and arm64 in separate patches. Regards, Bjorn