add omap34xx temperature monitoring support
PATCH 1/1 add omap34xx temperature monitoring support
drivers/hwmon/Kconfig +4 -0
@@ -28,6 +28,10 @@ config HWMON_VID tristate default n +config SENSORS_OMAP34XX + bool "TI OMAP34xx internal temperature sensor" + depends on ARCH_OMAP3 && HIGH_RES_TIMERS + config HWMON_DEBUG_CHIP bool "Hardware Monitoring Chip debugging messages" default n
drivers/hwmon/Makefile +1 -0
@@ -120,6 +120,7 @@ obj-$(CONFIG_SENSORS_NCT6683) += nct6683.o obj-$(CONFIG_SENSORS_NCT6775) += nct6775.o obj-$(CONFIG_SENSORS_NCT7802) += nct7802.o obj-$(CONFIG_SENSORS_NTC_THERMISTOR) += ntc_thermistor.o +obj-$(CONFIG_SENSORS_OMAP34XX) += omap34xx_temp.o obj-$(CONFIG_SENSORS_PC87360) += pc87360.o obj-$(CONFIG_SENSORS_PC87427) += pc87427.o obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
drivers/hwmon/omap34xx_temp.c new file +263 -0
263 lines not on this page · raw message
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
cover OMAP3 temperature sensor
Hi,
I've prepared an updated variant of the omap34xx temperature monitor driver. It's based on the N9 driver instead of the N900 driver (and thus has omap36xx support).
The differences compared to the original driver are:
* DT based
* No includes from arch, instead uses syscon DT node + regmap
* Removed support for raw temperature reading
- I assume this was used for debugging and regmap can be used instead with newer kernels.
* Introduction of managed resources where possible
* Usage of module_platform_driver() macro
* Added some comments referencing the TRM
So far the patchset is _compile-tested only_. I will test it on my N900 in the next days.
-- Sebastian
Sebastian Reichel (3):
DT Binding for omap3 temperature sensor
hwmon: Driver for OMAP3 temperature sensor
ARM: dts: OMAP34xx/36xx: Add temperature sensor
.../bindings/hwmon/omap3-temperature.txt | 25 ++ arch/arm/boot/dts/omap34xx.dtsi | 7 + arch/arm/boot/dts/omap36xx.dtsi | 7 + drivers/hwmon/Kconfig | 8 + drivers/hwmon/Makefile | 1 + drivers/hwmon/omap3-temp.c | 307 +++++++++++++++++++++ 6 files changed, 355 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/omap3-temperature.txt create mode 100644 drivers/hwmon/omap3-temp.c
Signature · 1 line
2.1.3
PATCH 1/3 DT Binding for omap3 temperature sensor
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This provides a DT binding specification for the temperature monitor.
--- .../bindings/hwmon/omap3-temperature.txt | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/omap3-temperature.txt
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt new file +25 -0
@@ -0,0 +1,25 @@ +* OMAP3 temperature sensor + +The OMAP34xx and OMAP36xx processors contain a register in the syscon area, +which can be used to determine the SoCs temperature. + +Requires node properties: +- compatible : should contain one of + - "ti,omap34xx-temperature-sensor" for OMAP34xx + - "ti,omap36xx-temperature-sensor" for OMAP36xx +- syscon : Should be a phandle to system configuration node which + encompases the temperature register +- clocks : Should contain 32KHz fclk clock specifier +- clock-names : Should contain clock names + - "fck" for the 32KHz fclk clock specifier + +Example for omap34xx: + +/ { + temperature-sensor { + compatible = "ti,omap34xx-temperature-sensor"; + syscon = <&omap3_scm_general>; + clocks = <&ts_fck>; + clock-names = "fck"; + }; +};
Signature · 1 line
2.1.3
Re: [PATCH 1/3] DT Binding for omap3 temperature sensor
Quoted 20 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This provides a DT binding specification for the temperature monitor.
Signed-off-by Sebastian Reichel <[email protected]>--- .../bindings/hwmon/omap3-temperature.txt | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/omap3-temperature.txtDocumentation/devicetree/bindings/hwmon/omap3-temperature.txt new file +4
-0@@ -0,0 +1,25 @@ +* OMAP3 temperature sensor + +The OMAP34xx and OMAP36xx processors contain a register in the syscon area, +which can be used to determine the SoCs temperature.
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt line 14
Quoted 10 lines
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt new file +10
-0+ +Requires node properties: +- compatible : should contain one of + - "ti,omap34xx-temperature-sensor" for OMAP34xx + - "ti,omap36xx-temperature-sensor" for OMAP36xx +- syscon : Should be a phandle to system configuration node which + encompases the temperature register +- clocks : Should contain 32KHz fclk clock specifier +- clock-names : Should contain clock names + - "fck" for the 32KHz fclk clock specifier
I don't quite get it. The temperature sensor is internal on the CPU, right? Why do we need device tree to describe it? As soon as we have CPU that is compatible to ti,omap3430, we know everything we need to know, no?
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt line 25
Quoted 10 lines
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt new file +10
-0+Example for omap34xx: + +/ { + temperature-sensor { + compatible = "ti,omap34xx-temperature-sensor"; + syscon = <&omap3_scm_general>; + clocks = <&ts_fck>; + clock-names = "fck"; + }; +};
Or is there something that depends on the board there? Or do we want to do it like this to be consistent with existing bindings?
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 1/3] DT Binding for omap3 temperature sensor
Hi Pavel,
Quoted 28 lines · Pavel Machek
Quoted 27 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This provides a DT binding specification for the temperature monitor.
Signed-off-by Sebastian Reichel <[email protected]>--- .../bindings/hwmon/omap3-temperature.txt | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/omap3-temperature.txtDocumentation/devicetree/bindings/hwmon/omap3-temperature.txt new file +11
-0@@ -0,0 +1,25 @@ +* OMAP3 temperature sensor + +The OMAP34xx and OMAP36xx processors contain a register in the syscon area, +which can be used to determine the SoCs temperature. + +Requires node properties: +- compatible : should contain one of + - "ti,omap34xx-temperature-sensor" for OMAP34xx + - "ti,omap36xx-temperature-sensor" for OMAP36xx +- syscon : Should be a phandle to system configuration node which + encompases the temperature register
Quoted 8 lines
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt line 14
Quoted 3 lines
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt new file +3
-0+- clocks : Should contain 32KHz fclk clock specifier +- clock-names : Should contain clock names + - "fck" for the 32KHz fclk clock specifierI don't quite get it. The temperature sensor is internal on the CPU, right? Why do we need device tree to describe it? As soon as we have CPU that is compatible to ti,omap3430, we know everything we need to know, no?
Lots of stuff is SoC internal and described in the DT (e.g. serial controllers). Just have a look in omap3.dtsi or omap34xx.dtsi.
I put the temperature sensor into its own node for the following reasons:
* syscon reference
* clock reference
I first thought about loading the driver from the syscon driver, but omap uses a generic one, so that's not an option. Apart from that one would still need the clock reference.
Quoted 5 lines
Quoted 5 lines
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt new file +5
-0+Example for omap34xx: + +/ { + temperature-sensor { + compatible = "ti,omap34xx-temperature-sensor";
Quoted 8 lines
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt line 25
Quoted 5 lines
Documentation/devicetree/bindings/hwmon/omap3-temperature.txt new file +5
-0+ syscon = <&omap3_scm_general>; + clocks = <&ts_fck>; + clock-names = "fck"; + }; +};Or is there something that depends on the board there? Or do we want to do it like this to be consistent with existing bindings?
This is SoC specific and should go into the omap34xx.dtsi and omap36xx.dtsi files. See also PATCH 3/3.
-- Sebastian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20141227/2b205907/attachment.sig>
Re: [PATCH 1/3] DT Binding for omap3 temperature sensor
In reply to Sebastian ReichelQuoted 5 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This provides a DT binding specification for the temperature monitor.
Signed-off-by Sebastian Reichel <[email protected]>
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
PATCH 2/3 hwmon: Driver for OMAP3 temperature sensor
In reply to Sebastian ReichelOMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
--- drivers/hwmon/Kconfig | 8 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/omap3-temp.c | 307 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+) create mode 100644 drivers/hwmon/omap3-temp.c
drivers/hwmon/Kconfig +8 -0
@@ -1135,6 +1135,14 @@ config SENSORS_NCT7802 This driver can also be built as a module. If so, the module will be called nct7802. +config SENSORS_OMAP3_TEMP + tristate "OMAP3 Temperature Sensor" + depends on OF && (ARCH_OMAP3 || COMPILE_TEST) + select MFD_SYSCON + help + If you say yes here you get support for the temperature sensor + built into OMAP3 processors. + config SENSORS_PCF8591 tristate "Philips PCF8591 ADC/DAC" depends on I2C
drivers/hwmon/Makefile +1 -0
@@ -120,6 +120,7 @@ obj-$(CONFIG_SENSORS_NCT6683) += nct6683.o obj-$(CONFIG_SENSORS_NCT6775) += nct6775.o obj-$(CONFIG_SENSORS_NCT7802) += nct7802.o obj-$(CONFIG_SENSORS_NTC_THERMISTOR) += ntc_thermistor.o +obj-$(CONFIG_SENSORS_OMAP3_TEMP) += omap3-temp.o obj-$(CONFIG_SENSORS_PC87360) += pc87360.o obj-$(CONFIG_SENSORS_PC87427) += pc87427.o obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
drivers/hwmon/omap3-temp.c new file +307 -0
307 lines not on this page · raw message
Signature · 1 line
2.1.3
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
drivers/hwmon/omap3-temp.c line 151
Quoted 9 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Signed-off-by Sebastian Reichel <[email protected]>drivers/hwmon/omap3-temp.c new file +2
-0+if (!data->valid ||time_after (jiffies, data->last_updated +HZ )) { +clk_enable (data->clk_32k);
This needs to be clk_prepare_enable()
Quoted 14 lines
drivers/hwmon/omap3-temp.c new file +14
-0+regmap_update_bits (data->syscon,SYSCON_TEMP_REG , + soc_mask, soc_mask); + +if (!wait_for_eocz (EOCZ_MIN_RISING_DELAY , +EOCZ_MAX_RISING_DELAY ,1 , data)) { + e = -EIO ; + goto err; + } + +regmap_update_bits (data->syscon,SYSCON_TEMP_REG , soc_mask,0 ); + +if (!wait_for_eocz (EOCZ_MIN_FALLING_DELAY , +EOCZ_MAX_FALLING_DELAY ,0 , data)) { + e = -EIO ;
drivers/hwmon/omap3-temp.c line 176
Quoted 10 lines
drivers/hwmon/omap3-temp.c new file +10
-0+ goto err; + } + +regmap_read (data->syscon,SYSCON_TEMP_REG , &temp_sensor_reg); + data->temperature = temp_sensor_reg & ((1 <<7 ) -1 ); + data->last_updated = jiffies; + data->valid = true; + +err: +clk_disable (data->clk_32k);
And this clk_disable_unprepare().
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
In reply to Sebastian ReichelHi!
Quoted 6 lines
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Signed-off-by Sebastian Reichel <[email protected]>
I did clk_enable -> clk_prepare_enable conversion, as described in another email.
I got occasional error reading:
root at n900:~# cat /sys/class/hwmon/hwmon0/device/temp_input 20.0
root at n900:~# cat /sys/class/hwmon/hwmon0/device/temp_input
cat: /sys/class/hwmon/hwmon0/device/temp_input: Input/output error root at n900:~# cat /sys/class/hwmon/hwmon0/device/temp_input 20.0
Nothing in dmesg. It takes few tries to reproduce..
On other attempt, it hung hard:
root at n900:~# cat /sys/class/hwmon/hwmon0/device/temp_input ; cat /sys/class/hwmon/hwmon0/device/temp_input ;cat /sys/class/hwmon/hwmon0/device/temp_input ; cat /sys/class/hwmon/hwmon0/device/temp_input
17.0
17.0
^[[A
^Z
^C^C^C
Best regards,
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
In reply to Sebastian ReichelQuoted 6 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Signed-off-by Sebastian Reichel <[email protected]>
I'd suggest these cleanups... But I don't see why it would fail. (Aha, and sorry for trailing whitespace, you'll probably need to delete it.)
drivers/hwmon/omap3-temp.c +24 -16
@@ -35,21 +35,29 @@/* 32.768Khz clock speed in nano seconds */ #define CLOCK_32K_SPEED_NS 30518 -/* minimum delay for EOCZ rise after SOC rise is -* 11 cycles of the 32.768Khz clock */ +/* +* minimum delay for EOCZ rise after SOC rise is +* 11 cycles of the 32.768Khz clock +*/ #define EOCZ_MIN_RISING_DELAY (11 * CLOCK_32K_SPEED_NS) -/* From docs, maximum delay for EOCZ rise after SOC rise is +/* +* From docs, maximum delay for EOCZ rise after SOC rise is * 14 cycles of the 32.768Khz clock. But after some experiments, -* 24 cycles as maximum is safer. */ +* 24 cycles as maximum is safer. +*/ #define EOCZ_MAX_RISING_DELAY (24 * CLOCK_32K_SPEED_NS) -/* minimum delay for EOCZ falling is -* 36 cycles of the 32.768Khz clock */ +/* +* minimum delay for EOCZ falling is +* 36 cycles of the 32.768Khz clock +*/ #define EOCZ_MIN_FALLING_DELAY (36 * CLOCK_32K_SPEED_NS) -/* maximum delay for EOCZ falling is -* 40 cycles of the 32.768Khz clock */ +/* +* maximum delay for EOCZ falling is +* 40 cycles of the 32.768Khz clock +*/ #define EOCZ_MAX_FALLING_DELAY (40 * CLOCK_32K_SPEED_NS)/* temperature register offset in the syscon register area */
@@ -116,8 +124,8 @@ struct omap3_temp_data {bool valid; }; -static inline u32 wait_for_eocz (int min_delay,int max_delay,u32 level, -struct omap3_temp_data *data) +static inline bool wait_for_eocz (struct omap3_temp_data *data, +int min_delay,int max_delay,u32 level) {ktime_t timeout, expire;u32 temp_sensor_reg, eocz_mask;
@@ -133,10 +141,10 @@ static inline u32 wait_for_eocz(int min_delay, int max_delay, u32 level,do {regmap_read (data->syscon,SYSCON_TEMP_REG , &temp_sensor_reg);if ((temp_sensor_reg & eocz_mask) == level) -break ; +return true; }while (ktime_us_delta (expire,ktime_get ()) >0 ); -return (temp_sensor_reg & eocz_mask) == level; +return false; }static int omap3_temp_update (struct omap3_temp_data *data)
@@ -153,16 +161,16 @@ static int omap3_temp_update(struct omap3_temp_data *data)regmap_update_bits (data->syscon,SYSCON_TEMP_REG , soc_mask, soc_mask); -if (!wait_for_eocz (EOCZ_MIN_RISING_DELAY , -EOCZ_MAX_RISING_DELAY ,1 , data)) { +if (!wait_for_eocz (data,EOCZ_MIN_RISING_DELAY , +EOCZ_MAX_RISING_DELAY ,1 )) { e = -EIO ; goto err; }regmap_update_bits (data->syscon,SYSCON_TEMP_REG , soc_mask,0 ); -if (!wait_for_eocz (EOCZ_MIN_FALLING_DELAY , -EOCZ_MAX_FALLING_DELAY ,0 , data)) { +if (!wait_for_eocz (data,EOCZ_MIN_FALLING_DELAY , +EOCZ_MAX_FALLING_DELAY ,0 )) { e = -EIO ; goto err; }
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
In reply to Sebastian ReichelQuoted 6 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Signed-off-by Sebastian Reichel <[email protected]>
When it hangs, it seems to hang here:
if (!wait_for_eocz(data, EOCZ_MIN_RISING_DELAY,
EOCZ_MAX_RISING_DELAY, 1)) {
e = -EIO;
goto
err;
}...so wait does not seem to reliably wait.
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
In reply to Sebastian ReichelQuoted 5 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Quoted 7 lines
Signed-off-by Sebastian Reichel <[email protected]>--- drivers/hwmon/Kconfig | 8 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/omap3-temp.c | 307 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+) create mode 100644 drivers/hwmon/omap3-temp.c
When it hangs, it loops here:
do {regmap_read(data->syscon, SYSCON_TEMP_REG,&temp_sensor_reg); if ((temp_sensor_reg & eocz_mask) == level)
return true;printk("=");
}
while (ktime_us_delta(expire, ktime_get()) > 0);
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 16 lines · Pavel Machek
Quoted 5 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Quoted 7 lines
Signed-off-by Sebastian Reichel <[email protected]>--- drivers/hwmon/Kconfig | 8 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/omap3-temp.c | 307 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+) create mode 100644 drivers/hwmon/omap3-temp.cWhen it hangs, it loops here:
Quoted 7 lines
do {
regmap_read(data->syscon, SYSCON_TEMP_REG,&temp_sensor_reg); if ((temp_sensor_reg&eocz_mask) == level)
return true;printk("=");
}
while (ktime_us_delta(expire, ktime_get())> 0);
And this fixes the hang, and makes level handling more readable.
Fix the timeout code, now it actually works. Driver still fails after a while.
drivers/hwmon/omap3-temp.c +2 -4
@@ -130,9 +130,7 @@ static inline bool wait_for_eocz(struct omap3_temp_data *data,ktime_t timeout, expire;u32 temp_sensor_reg, eocz_mask; eocz_mask =BIT (data->hwdata->eocz_bit); - level &=1 ; - level *= eocz_mask; expire =ktime_add_ns (ktime_get (), max_delay); timeout =ktime_set (0 , min_delay);
@@ -140,9 +141,9 @@ static inline bool wait_for_eocz(struct omap3_temp_data *data,schedule_hrtimeout (&timeout,HRTIMER_MODE_REL );do {regmap_read (data->syscon,SYSCON_TEMP_REG , &temp_sensor_reg); -if ((temp_sensor_reg & eocz_mask) == level) +if (!!(temp_sensor_reg & eocz_mask) == level)return true; - }while (ktime_us_delta (expire,ktime_get ()) >0 ); + }while (ktime_after (expire,ktime_get ()));return false; }
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Guenter Roeck
maintainerRe: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 47 lines · Pavel Machek
Quoted 16 lines · Pavel Machek
Quoted 5 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Quoted 7 lines
Signed-off-by Sebastian Reichel <[email protected]>--- drivers/hwmon/Kconfig | 8 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/omap3-temp.c | 307 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+) create mode 100644 drivers/hwmon/omap3-temp.cWhen it hangs, it loops here:
Quoted 7 lines
do {
regmap_read(data->syscon, SYSCON_TEMP_REG,&temp_sensor_reg); if ((temp_sensor_reg&eocz_mask) == level)
return true;printk("=");
}
while (ktime_us_delta(expire, ktime_get())> 0);And this fixes the hang, and makes level handling more readable.
Fix the timeout code, now it actually works. Driver still fails after a while.
Signed-off-by Pavel Machek <[email protected]>drivers/hwmon/omap3-temp.c +0
-2@@ -130,9 +130,7 @@ static inline bool wait_for_eocz(struct omap3_temp_data *data,ktime_t timeout, expire;u32 temp_sensor_reg, eocz_mask; eocz_mask =BIT (data->hwdata->eocz_bit); - level &=1 ; - level *= eocz_mask; expire =ktime_add_ns (ktime_get (), max_delay); timeout =ktime_set (0 , min_delay);
drivers/hwmon/omap3-temp.c static inline bool wait_for_eocz(struct omap3_temp_data *data, · line 147
Quoted 9 lines
drivers/hwmon/omap3-temp.c +2
-2@@ -140,9 +141,9 @@ static inline bool wait_for_eocz(struct omap3_temp_data *data,schedule_hrtimeout (&timeout,HRTIMER_MODE_REL );do {regmap_read (data->syscon,SYSCON_TEMP_REG , &temp_sensor_reg); -if ((temp_sensor_reg & eocz_mask) == level) +if (!!(temp_sensor_reg & eocz_mask) == level)return true; - }while (ktime_us_delta (expire,ktime_get ()) >0 ); + }while (ktime_after (expire,ktime_get ()));
Does this have to be a hard loop, without sleep ? I am a bit concerned that it may loop for more than a ms.
Other than that, I assume we'll see an updated version with the coding style issues and hang-up problems fixed.
Thanks,
Guenter
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 60 lines · Guenter Roeck
Quoted 47 lines · Pavel Machek
Quoted 16 lines · Pavel Machek
Quoted 5 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Quoted 7 lines
Signed-off-by Sebastian Reichel <[email protected]>--- drivers/hwmon/Kconfig | 8 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/omap3-temp.c | 307 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+) create mode 100644 drivers/hwmon/omap3-temp.cWhen it hangs, it loops here:
Quoted 7 lines
do {
regmap_read(data->syscon, SYSCON_TEMP_REG,&temp_sensor_reg); if ((temp_sensor_reg&eocz_mask) == level)
return true;printk("=");
}
while (ktime_us_delta(expire, ktime_get())> 0);And this fixes the hang, and makes level handling more readable.
Fix the timeout code, now it actually works. Driver still fails after a while.
Signed-off-by Pavel Machek <[email protected]>drivers/hwmon/omap3-temp.c +0
-2@@ -130,9 +130,7 @@ static inline bool wait_for_eocz(struct omap3_temp_data *data,ktime_t timeout, expire;u32 temp_sensor_reg, eocz_mask; eocz_mask =BIT (data->hwdata->eocz_bit); - level &=1 ; - level *= eocz_mask; expire =ktime_add_ns (ktime_get (), max_delay); timeout =ktime_set (0 , min_delay);drivers/hwmon/omap3-temp.c static inline bool wait_for_eocz(struct omap3_temp_data *data, · line 147
Quoted 9 lines
drivers/hwmon/omap3-temp.c +2
-2@@ -140,9 +141,9 @@ static inline bool wait_for_eocz(struct omap3_temp_data *data,schedule_hrtimeout (&timeout,HRTIMER_MODE_REL );do {regmap_read (data->syscon,SYSCON_TEMP_REG , &temp_sensor_reg); -if ((temp_sensor_reg & eocz_mask) == level) +if (!!(temp_sensor_reg & eocz_mask) == level)return true; - }while (ktime_us_delta (expire,ktime_get ()) >0 ); + }while (ktime_after (expire,ktime_get ()));Does this have to be a hard loop, without sleep ? I am a bit concerned that it may loop for more than a ms.
Quoted 2 lines
Other than that, I assume we'll see an updated version with the coding style issues and hang-up problems fixed.
I will send a v2 patchset with Pavels change requests. It may take a few days though, since I'm currently at a conference (31C3).
-- Sebastian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20141228/f8bac595/attachment.sig>
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
In reply to Sebastian ReichelQuoted 6 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Signed-off-by Sebastian Reichel <[email protected]>
As I mentioned before, this version stops working after a while. Version I originally posted seems to work ok under same load.
Best regards,
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
In reply to Sebastian ReichelQuoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe drivers/thermal/ti-soc-thermal/ , maybe it would make sense to update that driver instead?
--
Grazvydas
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 10 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?
Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
---
Regards,
Nishanth Menon
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 7 lines · Nishanth Menon
Quoted 6 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
Quoted 7 lines
Quoted 4 lines
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
When testing initial version of the patch, they seem to work very well in the omap3 case.
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Guenter Roeck
maintainerRe: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 13 lines · Pavel Machek
Quoted 12 lines · Nishanth Menon
Quoted 10 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?
Quoted 6 lines
Quoted 2 lines
Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
When testing initial version of the patch, they seem to work very well in the omap3 case.
Pavel,
can you look into the omap4 thermal driver to see if it can be used ?
Thanks,
Guenter
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 17 lines · Guenter Roeck
Quoted 16 lines · Pavel Machek
Quoted 14 lines · Nishanth Menon
Quoted 10 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
Quoted 6 lines
Quoted 3 lines
When testing initial version of the patch, they seem to work very well in the omap3 case.
Pavel,
can you look into the omap4 thermal driver to see if it can be used ?
The hardware registers are named the same way...
Unfortunately, TI moves registers around with each release, and OMAP4 stuff is _way_ more complex and maze of ifdefs, too.
static struct temp_sensor_data omap4430_mpu_temp_sensor_data = {
.min_freq = OMAP4430_MIN_FREQ,
.max_freq = OMAP4430_MAX_FREQ,
.max_temp = OMAP4430_MAX_TEMP,
.min_temp = OMAP4430_MIN_TEMP,
.hyst_val = OMAP4430_HYST_VAL,
};and each define used just once. Would be easier to read and modify if the ifdefs were removed...
Best regards,
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
In reply to Guenter RoeckQuoted 17 lines · Guenter Roeck
Quoted 16 lines · Pavel Machek
Quoted 14 lines · Nishanth Menon
Quoted 10 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
Quoted 6 lines
Quoted 3 lines
When testing initial version of the patch, they seem to work very well in the omap3 case.
Pavel,
can you look into the omap4 thermal driver to see if it can be used ?
The hardware seems similar, but omap4 has a lot more features... Here's a test patch. It compiles and boots, but I'm too far away from my working userland at this moment.
Best regards,
Pavel
commit 116612364f93b165b22166f0043117059eb3118f
Author: Pavel <[email protected]> Date: Wed Dec 31 00:36:40 2014 +0100
Configure ti-soc-thermal to handle n900's thermal sensor.
.config +17 -1
@@ -1671,7 +1671,23 @@ CONFIG_SENSORS_TWL4030_MADC=y # CONFIG_SENSORS_W83L786NG is not set # CONFIG_SENSORS_W83627HF is not set # CONFIG_SENSORS_W83627EHF is not set -# CONFIG_THERMAL is not set +CONFIG_THERMAL=y +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_OF=y +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +# CONFIG_THERMAL_GOV_FAIR_SHARE is not set +CONFIG_THERMAL_GOV_STEP_WISE=y +# CONFIG_THERMAL_GOV_BANG_BANG is not set +# CONFIG_THERMAL_GOV_USER_SPACE is not set +# CONFIG_CLOCK_THERMAL is not set +# CONFIG_THERMAL_EMULATION is not set + +# +# Texas Instruments thermal drivers +# +CONFIG_TI_SOC_THERMAL=y CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y # CONFIG_WATCHDOG_NOWAYOUT is not set
arch/arm/boot/dts/omap3-n900.dts +7 -0
@@ -29,6 +29,13 @@ }; }; + bandgap: bandgap { + reg = <0x4a002524 0x4>; + compatible = "ti,omap34xx-bandgap"; + + #thermal-sensor-cells = <0>; + }; + leds { compatible = "gpio-leds"; heartbeat {
drivers/thermal/ti-soc-thermal/Makefile +1 -0
@@ -2,5 +2,6 @@ obj-$(CONFIG_TI_SOC_THERMAL) += ti-soc-thermal.o ti-soc-thermal-y := ti-bandgap.o ti-soc-thermal-$(CONFIG_TI_THERMAL) += ti-thermal-common.o ti-soc-thermal-$(CONFIG_DRA752_THERMAL) += dra752-thermal-data.o +ti-soc-thermal-y += omap3-thermal-data.o ti-soc-thermal-$(CONFIG_OMAP4_THERMAL) += omap4-thermal-data.o ti-soc-thermal-$(CONFIG_OMAP5_THERMAL) += omap5-thermal-data.o
drivers/thermal/ti-soc-thermal/omap3-thermal-data.c new file +94 -0
94 lines not on this page · raw message
drivers/thermal/ti-soc-thermal/ti-bandgap.c +5 -1
@@ -856,7 +856,7 @@ int ti_bandgap_read_temperature(struct ti_bandgap *bgp, int id, temp =ti_bandgap_read_temp (bgp, id);spin_unlock (&bgp->lock); - ret |=ti_bandgap_adc_to_mcelsius (bgp, temp, &temp); + ret =ti_bandgap_adc_to_mcelsius (bgp, temp, &temp);if (ret)return -EIO ;
@@ -1509,6 +1509,10 @@ static SIMPLE_DEV_PM_OPS(ti_bandgap_dev_pm_ops, ti_bandgap_suspend,#endif static const struct of_device_id of_ti_bandgap_match[] = { + { + .compatible ="ti,omap34xx-bandgap" , + .data = (void *)&omap34xx_data, + }, #ifdef CONFIG_OMAP4_THERMAL { .compatible ="ti,omap4430-bandgap" ,
drivers/thermal/ti-soc-thermal/ti-bandgap.h +2 -0
@@ -384,6 +384,8 @@ int ti_bandgap_set_sensor_data(struct ti_bandgap *bgp, int id, void *data);void *ti_bandgap_get_sensor_data (struct ti_bandgap *bgp,int id);int ti_bandgap_get_trend (struct ti_bandgap *bgp,int id,int *trend); +extern const struct ti_bandgap_data omap34xx_data; +#ifdef CONFIG_OMAP4_THERMAL extern const struct ti_bandgap_data omap4430_data;extern const struct ti_bandgap_data omap4460_data;
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
In reply to Guenter RoeckQuoted 17 lines · Guenter Roeck
Quoted 16 lines · Pavel Machek
Quoted 14 lines · Nishanth Menon
Quoted 10 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
Quoted 6 lines
Quoted 3 lines
When testing initial version of the patch, they seem to work very well in the omap3 case.
Pavel,
can you look into the omap4 thermal driver to see if it can be used ?
After some fixes... yes, it seems to be same hardware.
drivers/thermal/ti-soc-thermal/Kconfig +9 -0
@@ -21,6 +21,15 @@ config TI_THERMAL This includes trip points definitions, extrapolation rules and CPU cooling device bindings. +config OMAP3_THERMAL + bool "Texas Instruments OMAP3 thermal support" + depends on TI_SOC_THERMAL + depends on ARCH_OMAP3 + help + If you say yes here you get thermal support for the Texas Instruments + OMAP3 SoC family. The current chip supported are: + - OMAP3430 + config OMAP4_THERMAL bool "Texas Instruments OMAP4 thermal support" depends on TI_SOC_THERMAL
drivers/thermal/ti-soc-thermal/Makefile +1 -0
@@ -2,5 +2,6 @@ obj-$(CONFIG_TI_SOC_THERMAL) += ti-soc-thermal.o ti-soc-thermal-y := ti-bandgap.o ti-soc-thermal-$(CONFIG_TI_THERMAL) += ti-thermal-common.o ti-soc-thermal-$(CONFIG_DRA752_THERMAL) += dra752-thermal-data.o +ti-soc-thermal-$(CONFIG_OMAP3_THERMAL) += omap3-thermal-data.o ti-soc-thermal-$(CONFIG_OMAP4_THERMAL) += omap4-thermal-data.o ti-soc-thermal-$(CONFIG_OMAP5_THERMAL) += omap5-thermal-data.o
drivers/thermal/ti-soc-thermal/omap3-thermal-data.c new file +99 -0
99 lines not on this page · raw message
drivers/thermal/ti-soc-thermal/ti-bandgap.c +73 -54
297 lines not on this page · raw message
drivers/thermal/ti-soc-thermal/ti-bandgap.h +2 -0
@@ -384,6 +384,8 @@ int ti_bandgap_set_sensor_data(struct ti_bandgap *bgp, int id, void *data);void *ti_bandgap_get_sensor_data (struct ti_bandgap *bgp,int id);int ti_bandgap_get_trend (struct ti_bandgap *bgp,int id,int *trend); +extern const struct ti_bandgap_data omap34xx_data; +#ifdef CONFIG_OMAP4_THERMAL extern const struct ti_bandgap_data omap4430_data;extern const struct ti_bandgap_data omap4460_data;
drivers/thermal/ti-soc-thermal/ti-thermal-common.c +6 -1
@@ -328,18 +328,23 @@ int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id, {struct ti_thermal_data *data; +printk ("expose_sensor\n" ); + data =ti_bandgap_get_sensor_data (bgp, id);if (!data ||IS_ERR (data)) data =ti_thermal_build_data (bgp, id); -if (!data) +if (!data) { +printk ("no data\n" );return -EINVAL ; + }/* in case this is specified by DT */ data->ti_thermal =thermal_zone_of_sensor_register (bgp->dev, id, data, &ti_of_thermal_ops);if (IS_ERR (data->ti_thermal)) { +printk ("of_sensor_register failed\n" );/* Create thermal zone */ data->ti_thermal = thermal_zone_device_register(domain, OMAP_TRIP_NUMBER, 0, data, &ti_thermal_ops,
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Guenter Roeck
maintainerRe: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 18 lines · Pavel Machek
Quoted 17 lines · Guenter Roeck
Quoted 16 lines · Pavel Machek
Quoted 14 lines · Nishanth Menon
Quoted 10 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
Quoted 9 lines
Quoted 6 lines
Quoted 3 lines
When testing initial version of the patch, they seem to work very well in the omap3 case.
Pavel,
can you look into the omap4 thermal driver to see if it can be used ?
After some fixes... yes, it seems to be same hardware.
So this should be the way to go, but then we have others claim that it should not be done because the OMAP3 sensors are too unreliable to use for thermal decisions. Not really sure where that leaves us. I am kind of opposed to have similar drivers for similar chips in two different subsystems.
Is it possible to add the patch below to the omap thermal driver and not use it for thermal decisions ?
Guenter
Quoted 506 lines
Signed-off-by Pavel Machek <[email protected]>drivers/thermal/ti-soc-thermal/Kconfig +9
-0@@ -21,6 +21,15 @@ config TI_THERMAL This includes trip points definitions, extrapolation rules and CPU cooling device bindings. +config OMAP3_THERMAL + bool "Texas Instruments OMAP3 thermal support" + depends on TI_SOC_THERMAL + depends on ARCH_OMAP3 + help + If you say yes here you get thermal support for the Texas Instruments + OMAP3 SoC family. The current chip supported are: + - OMAP3430 + config OMAP4_THERMAL bool "Texas Instruments OMAP4 thermal support" depends on TI_SOC_THERMALdrivers/thermal/ti-soc-thermal/Makefile +1
-0@@ -2,5 +2,6 @@ obj-$(CONFIG_TI_SOC_THERMAL) += ti-soc-thermal.o ti-soc-thermal-y := ti-bandgap.o ti-soc-thermal-$(CONFIG_TI_THERMAL) += ti-thermal-common.o ti-soc-thermal-$(CONFIG_DRA752_THERMAL) += dra752-thermal-data.o +ti-soc-thermal-$(CONFIG_OMAP3_THERMAL) += omap3-thermal-data.o ti-soc-thermal-$(CONFIG_OMAP4_THERMAL) += omap4-thermal-data.o ti-soc-thermal-$(CONFIG_OMAP5_THERMAL) += omap5-thermal-data.odrivers/thermal/ti-soc-thermal/omap3-thermal-data.c new file +99
-0@@ -0,0 +1,99 @@ +/* +* OMAP3 thermal driver. +* +* Copyright (C) 2011-2012 Texas Instruments Inc. +* Copyright (C) 2014 Pavel Machek <[email protected]> +* +* This software is licensed under the terms of the GNU General Public +* License version 2, as published by the Free Software Foundation, and +* may be copied, distributed, and modified under those terms. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +*/ + +#include "ti-thermal.h" +#include "ti-bandgap.h" + +/* +* OMAP34XX has one instance of thermal sensor for MPU +* need to describe the individual bit fields +*/ +static struct temp_sensor_registers +omap34xx_mpu_temp_sensor_registers = { + .temp_sensor_ctrl =0 , + .bgap_tempsoff_mask =0 ,/* Unused, we don't have POWER_SWITCH */ + .bgap_soc_mask =BIT (8 ), + .bgap_eocz_mask =BIT (7 ), + .bgap_dtemp_mask =0x7f , + + .bgap_mode_ctrl =0 , + .mode_ctrl_mask =0 ,/* Unused, no MODE_CONFIG */ + + .bgap_efuse =0 , +}; + +/* Thresholds and limits for OMAP34XX MPU temperature sensor */ +static struct temp_sensor_data omap34xx_mpu_temp_sensor_data = { + .min_freq =32768 , + .max_freq =32768 , + .max_temp =-99000 , + .min_temp =99000 , + .hyst_val =5000 , +}; + +/* +* Temperature values in milli degree celsius +* ADC code values from 530 to 923 +*/ +static const int +omap34xx_adc_to_temp[] = { +-40000 ,-40000 ,-40000 ,-40000 ,-40000 ,-39000 ,-38000 ,-36000 , +-34000 ,-32000 ,-31000 ,-29000 ,-28000 ,-26000 ,-25000 ,-24000 , +-22000 ,-21000 ,-19000 ,-18000 ,-17000 ,-15000 ,-14000 ,-12000 , +-11000 ,-9000 ,-8000 ,-7000 ,-5000 ,-4000 ,-2000 ,-1000 ,0000 , +1000 ,3000 ,4000 ,5000 ,7000 ,8000 ,10000 ,11000 ,13000 ,14000 , +15000 ,17000 ,18000 ,20000 ,21000 ,22000 ,24000 ,25000 ,27000 , +28000 ,30000 ,31000 ,32000 ,34000 ,35000 ,37000 ,38000 ,39000 , +41000 ,42000 ,44000 ,45000 ,47000 ,48000 ,49000 ,51000 ,52000 , +53000 ,55000 ,56000 ,58000 ,59000 ,60000 ,62000 ,63000 ,65000 , +66000 ,67000 ,69000 ,70000 ,72000 ,73000 ,74000 ,76000 ,77000 , +79000 ,80000 ,81000 ,83000 ,84000 ,85000 ,87000 ,88000 ,89000 , +91000 ,92000 ,94000 ,95000 ,96000 ,98000 ,99000 ,100000 , +102000 ,103000 ,105000 ,106000 ,107000 ,109000 ,110000 ,111000 , +113000 ,114000 ,116000 ,117000 ,118000 ,120000 ,121000 ,122000 , +124000 ,124000 ,125000 ,125000 ,125000 ,125000 ,125000 +}; + +/* OMAP34XX data */ +const struct ti_bandgap_data omap34xx_data = { + .features =TI_BANDGAP_FEATURE_CLK_CTRL , + .fclock_name ="ts_fck" , + .div_ck_name ="ts_fck" , + .conv_table = omap34xx_adc_to_temp, + .adc_start_val =0 , + .adc_end_val =127 , + .expose_sensor = ti_thermal_expose_sensor, + .remove_sensor = ti_thermal_remove_sensor, + + .sensors = { + { + .registers = &omap34xx_mpu_temp_sensor_registers, + .ts_data = &omap34xx_mpu_temp_sensor_data, + .domain ="cpu" , + .slope =0 , + .constant =20000 , + .slope_pcb =0 , + .constant_pcb =20000 , + .register_cooling =NULL , + .unregister_cooling =NULL , + }, + }, + .sensor_count =1 , + +// .sensor_count = 0, +}; +drivers/thermal/ti-soc-thermal/ti-bandgap.c +73
-54@@ -40,6 +40,7 @@#include <linux/of_irq.h> #include <linux/of_gpio.h> #include <linux/io.h> +#include <linux/delay.h> #include "ti-bandgap.h" @@ -103,19 +104,15 @@ do { \*/ static int ti_bandgap_power (struct ti_bandgap *bgp,bool on) { -int i, ret =0 ; +int i; -if (!TI_BANDGAP_HAS (bgp,POWER_SWITCH )) { - ret = -ENOTSUPP ; - goto exit; - } +if (!TI_BANDGAP_HAS (bgp,POWER_SWITCH )) +return -ENOTSUPP ;for (i =0 ; i < bgp->conf->sensor_count; i++)/* active on 0 */ RMW_BITS (bgp, i, temp_sensor_ctrl, bgap_tempsoff_mask, !on); - -exit: -return ret; +return 0 ; }/** @@ -154,6 +151,7 @@ static u32 ti_bandgap_read_temp(struct ti_bandgap *bgp, int id)if (TI_BANDGAP_HAS (bgp,FREEZE_BIT ))RMW_BITS (bgp, id, bgap_mask_ctrl, mask_freeze_mask,0 ); +printk ("Bandgap: ADC is %d\n" , temp);return temp; }@@ -263,18 +261,13 @@ staticint ti_bandgap_adc_to_mcelsius (struct ti_bandgap *bgp,int adc_val,int *t) {const struct ti_bandgap_data *conf = bgp->conf; -int ret =0 ;/* look up for temperature in the table and return the temperature */ -if (adc_val < conf->adc_start_val || adc_val > conf->adc_end_val) { - ret = -ERANGE ; - goto exit; - } +if (adc_val < conf->adc_start_val || adc_val > conf->adc_end_val) +return -ERANGE ; *t = bgp->conf->conv_table[adc_val - conf->adc_start_val]; - -exit: -return ret; +return 0 ; }/** @@ -295,16 +288,14 @@ int ti_bandgap_mcelsius_to_adc(struct ti_bandgap *bgp, long temp, int *adc) {const struct ti_bandgap_data *conf = bgp->conf;const int *conv_table = bgp->conf->conv_table; -int high, low, mid, ret =0 ; +int high, low, mid; low =0 ; high = conf->adc_end_val - conf->adc_start_val; mid = (high + low) /2 ; -if (temp < conv_table[low] || temp > conv_table[high]) { - ret = -ERANGE ; - goto exit; - } +if (temp < conv_table[low] || temp > conv_table[high]) +return -ERANGE ;while (low < high) {if (temp < conv_table[mid])@@ -315,9 +306,7 @@ int ti_bandgap_mcelsius_to_adc(struct ti_bandgap *bgp, long temp, int *adc) } *adc = conf->adc_start_val + low; - -exit: -return ret; +return 0 ; }/** @@ -343,13 +332,11 @@ int ti_bandgap_add_hyst(struct ti_bandgap *bgp, int adc_val, int hyst_val,*/ ret =ti_bandgap_adc_to_mcelsius (bgp, adc_val, &temp);if (ret <0 ) - goto exit; +return ret; temp += hyst_val; ret =ti_bandgap_mcelsius_to_adc (bgp, temp, sum); - -exit:return ret; }@@ -468,22 +455,18 @@ exit:*/ static inline int ti_bandgap_validate (struct ti_bandgap *bgp,int id) { -int ret =0 ; -if (!bgp ||IS_ERR (bgp)) {pr_err ("%s: invalid bandgap pointer\n" , __func__); - ret = -EINVAL ; - goto exit; +return -EINVAL ; }if ((id <0 ) || (id >= bgp->conf->sensor_count)) {dev_err (bgp->dev,"%s: sensor id out of range (%d)\n" , __func__, id); - ret = -ERANGE ; +return -ERANGE ; } -exit: -return ret; +return 0 ; }/** @@ -511,12 +494,10 @@ static int _ti_bandgap_write_threshold(struct ti_bandgap *bgp, int id, int val, ret =ti_bandgap_validate (bgp, id);if (ret) - goto exit; +return ret; -if (!TI_BANDGAP_HAS (bgp,TALERT )) { - ret = -ENOTSUPP ; - goto exit; - } +if (!TI_BANDGAP_HAS (bgp,TALERT )) +return -ENOTSUPP ; ts_data = bgp->conf->sensors[id].ts_data; tsr = bgp->conf->sensors[id].registers;@@ -529,17 +510,15 @@ static int _ti_bandgap_write_threshold(struct ti_bandgap *bgp, int id, int val, }if (ret) - goto exit; - +return ret; + ret =ti_bandgap_mcelsius_to_adc (bgp, val, &adc_val);if (ret <0 ) - goto exit; +return ret;spin_lock (&bgp->lock); ret =ti_bandgap_update_alert_threshold (bgp, id, adc_val, hot);spin_unlock (&bgp->lock); - -exit:return ret; }@@ -582,7 +561,7 @@ static int _ti_bandgap_read_threshold(struct ti_bandgap *bgp, int id, temp =ti_bandgap_readl (bgp, tsr->bgap_threshold); temp = (temp & mask) >>__ffs (mask); - ret |=ti_bandgap_adc_to_mcelsius (bgp, temp, &temp); + ret =ti_bandgap_adc_to_mcelsius (bgp, temp, &temp);if (ret) {dev_err (bgp->dev,"failed to read thot\n" ); ret = -EIO ;@@ -856,10 +835,11 @@ int ti_bandgap_read_temperature(struct ti_bandgap *bgp, int id, temp =ti_bandgap_read_temp (bgp, id);spin_unlock (&bgp->lock); - ret |=ti_bandgap_adc_to_mcelsius (bgp, temp, &temp); + ret =ti_bandgap_adc_to_mcelsius (bgp, temp, &temp);if (ret)return -EIO ; +printk ("Bandgap: temperature is %d\n" , temp); *temperature = temp;return 0 ;@@ -918,6 +898,7 @@ static int ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id) {u32 temp =0 , counter =1000 ; +struct temp_sensor_registers *tsr;/* Select single conversion mode */ if (TI_BANDGAP_HAS (bgp,MODE_CONFIG ))@@ -925,16 +906,26 @@ ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id)/* Start of Conversion = 1 */ RMW_BITS (bgp, id, temp_sensor_ctrl, bgap_soc_mask,1 ); -/* Wait until DTEMP is updated */ - temp =ti_bandgap_read_temp (bgp, id); -while ((temp ==0 ) && --counter) - temp =ti_bandgap_read_temp (bgp, id); -/* REVISIT: Check correct condition for end of conversion */ +/* Wait for EOCZ going up */ + tsr = bgp->conf->sensors[id].registers; + +while (--counter) { +if (ti_bandgap_readl (bgp, tsr->temp_sensor_ctrl) & tsr->bgap_eocz_mask) +break ; +printk ("@" ); + }/* Start of Conversion = 0 */ RMW_BITS (bgp, id, temp_sensor_ctrl, bgap_soc_mask,0 ); + counter =1000 ; +while (--counter) { +if (!(ti_bandgap_readl (bgp, tsr->temp_sensor_ctrl) & tsr->bgap_eocz_mask)) +break ; +printk ("#" ); + } +return 0 ; }@@ -1196,6 +1187,8 @@ int ti_bandgap_probe(struct platform_device *pdev)struct ti_bandgap *bgp;int clk_rate, ret =0 , i; +printk ("ti_bandgap: probe\n" ); + bgp =ti_bandgap_build (pdev);if (IS_ERR (bgp)) {dev_err (&pdev->dev,"failed to fetch platform data\n" );@@ -1220,11 +1213,10 @@ int ti_bandgap_probe(struct platform_device *pdev) goto free_irqs; } - bgp->div_clk =clk_get (NULL , bgp->conf->div_ck_name); + bgp->div_clk =clk_get (NULL , bgp->conf->div_ck_name); ret =IS_ERR (bgp->div_clk);if (ret) { -dev_err (&pdev->dev, -"failed to request div_ts_ck clock ref\n" ); +dev_err (&pdev->dev,"failed to request div_ts_ck clock ref\n" ); ret =PTR_ERR (bgp->div_clk); goto free_irqs; }@@ -1312,6 +1304,8 @@ int ti_bandgap_probe(struct platform_device *pdev)/* Every thing is good? Then expose the sensors */ for (i =0 ; i < bgp->conf->sensor_count; i++) {char *domain; +extern int ti_thermal_expose_sensor (struct ti_bandgap *bgp,int id, +char *domain);if (bgp->conf->sensors[i].register_cooling) { ret = bgp->conf->sensors[i].register_cooling (bgp, i);@@ -1319,12 +1313,29 @@ int ti_bandgap_probe(struct platform_device *pdev) goto remove_sensors; } +printk ("bandgap: exposing sensor: %p\n" , bgp->conf->expose_sensor); +if (bgp->conf->expose_sensor) { +printk ("bandgap: calling %p %p\n" , bgp->conf->expose_sensor, ti_thermal_expose_sensor); domain = bgp->conf->sensors[i].domain; ret = bgp->conf->expose_sensor (bgp, i, domain); +printk ("bandgap: done\n" );if (ret) goto remove_last_cooling; } + +printk ("bandgap: exposing sensor\n" ); + { +int t; + +ti_bandgap_force_single_read (bgp,0 ); + + t =ti_bandgap_read_temp (bgp,0 ); +printk ("Temperature ADC: %d\n" , t); +ti_bandgap_read_temperature (bgp,0 , &t); +printk ("Temperature: %d\n" , t); +mdelay (1000 ); + } }/* @@ -1365,6 +1376,8 @@ free_irqs:free_irq (gpio_to_irq (bgp->tshut_gpio),NULL );gpio_free (bgp->tshut_gpio); } +printk ("ti_bandgap: probe: something failed\n" ); +mdelay (10000 );return ret; }@@ -1509,6 +1522,12 @@ static SIMPLE_DEV_PM_OPS(ti_bandgap_dev_pm_ops, ti_bandgap_suspend,#endif static const struct of_device_id of_ti_bandgap_match[] = { +#ifdef CONFIG_OMAP3_THERMAL + { + .compatible ="ti,omap34xx-bandgap" , + .data = (void *)&omap34xx_data, + }, +#endif #ifdef CONFIG_OMAP4_THERMAL { .compatible ="ti,omap4430-bandgap" ,drivers/thermal/ti-soc-thermal/ti-bandgap.h +2
-0@@ -384,6 +384,8 @@ int ti_bandgap_set_sensor_data(struct ti_bandgap *bgp, int id, void *data);void *ti_bandgap_get_sensor_data (struct ti_bandgap *bgp,int id);int ti_bandgap_get_trend (struct ti_bandgap *bgp,int id,int *trend); +extern const struct ti_bandgap_data omap34xx_data; +#ifdef CONFIG_OMAP4_THERMAL extern const struct ti_bandgap_data omap4430_data;extern const struct ti_bandgap_data omap4460_data;drivers/thermal/ti-soc-thermal/ti-thermal-common.c +6
-1@@ -328,18 +328,23 @@ int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id, {struct ti_thermal_data *data; +printk ("expose_sensor\n" ); + data =ti_bandgap_get_sensor_data (bgp, id);if (!data ||IS_ERR (data)) data =ti_thermal_build_data (bgp, id); -if (!data) +if (!data) { +printk ("no data\n" );return -EINVAL ; + }/* in case this is specified by DT */ data->ti_thermal =thermal_zone_of_sensor_register (bgp->dev, id, data, &ti_of_thermal_ops);if (IS_ERR (data->ti_thermal)) { +printk ("of_sensor_register failed\n" );/* Create thermal zone */ data->ti_thermal = thermal_zone_device_register(domain, OMAP_TRIP_NUMBER, 0, data, &ti_thermal_ops,Signature · 3 lines
-- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 28 lines · Guenter Roeck
Quoted 18 lines · Pavel Machek
Quoted 17 lines · Guenter Roeck
Quoted 16 lines · Pavel Machek
Quoted 14 lines · Nishanth Menon
Quoted 10 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
Quoted 9 lines
Quoted 6 lines
Quoted 3 lines
When testing initial version of the patch, they seem to work very well in the omap3 case.
Pavel,
can you look into the omap4 thermal driver to see if it can be used ?
After some fixes... yes, it seems to be same hardware.
Quoted 8 lines
So this should be the way to go, but then we have others claim that it should not be done because the OMAP3 sensors are too unreliable to use for thermal decisions. Not really sure where that leaves us. I am kind of opposed to have similar drivers for similar chips in two different subsystems.
Is it possible to add the patch below to the omap thermal driver and not use it for thermal decisions ?
Well... noone forces you to enable the driver, and I don't think it will do any thermal decisions on N900 as it is ... so we should be ok.
Plus, it seems to work reasonably well (say +- 5 C), so situation does not seem to be as bad as TI claims.
Nokia was actually using it in production.
Best regards,
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Guenter Roeck
maintainerRe: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 15 lines · Pavel Machek
Quoted 6 lines
Quoted 6 lines
Quoted 3 lines
Pavel,
can you look into the omap4 thermal driver to see if it can be used ?
After some fixes... yes, it seems to be same hardware.
Quoted 8 lines
So this should be the way to go, but then we have others claim that it should not be done because the OMAP3 sensors are too unreliable to use for thermal decisions. Not really sure where that leaves us. I am kind of opposed to have similar drivers for similar chips in two different subsystems.
Is it possible to add the patch below to the omap thermal driver and not use it for thermal decisions ?
Quoted 8 lines
Well... noone forces you to enable the driver, and I don't think it will do any thermal decisions on N900 as it is ... so we should be ok.
Plus, it seems to work reasonably well (say +- 5 C), so situation does not seem to be as bad as TI claims.
Nokia was actually using it in production.
Ok, I'll assume that omap3 support will be added to the omap thermal driver.
Thanks,
Guenter
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
In reply to Pavel MachekQuoted 13 lines · Pavel Machek
Quoted 12 lines · Nishanth Menon
Quoted 10 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?
Quoted 5 lines
Quoted 2 lines
Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
When testing initial version of the patch, they seem to work very well in the omap3 case.
Just be careful when you try to make thermal policy like decisions based on this sensor. Placement of the sensor w.r.t the actual logic generating heat has to be a factor as well. If you are just looking for an approximation temperature (thermometerish kind), you might be ok with this. I am not sure we'd find any TI data around this.. just a heads up.
Also notice http://www.ti.com/lit/er/sprz278f/sprz278f.pdf "Advisory 3.1.1.186 MMC OCP Clock Not Gated When Thermal Sensor Is Used" I think there were accuracy issues at certain values etc.. So remember to do a off mode type PM tests as well before you consider requesting these to be merged.
Signature · 2 lines
Regards, Nishanth Menon
Re: [PATCH 2/3] hwmon: Driver for OMAP3 temperature sensor
Quoted 14 lines · Nishanth Menon
Quoted 13 lines · Pavel Machek
Quoted 12 lines · Nishanth Menon
Quoted 10 lines · Grazvydas Ignotas
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature. This patch provides a DT based driver for the temperature sensor based on an older driver written by Peter De Schrijver for the Nokia N900 and N9.
The sensor looks like an earlier iteration of sensors used in newer OMAPs, which are already supported by maybe
drivers/thermal/ti-soc-thermal/, maybe it would make sense to update that driver instead?
Quoted 8 lines
Quoted 5 lines
Quoted 2 lines
Just to be clear - OMAP4 is the first time that the sensors were reliable enough to be used.
When testing initial version of the patch, they seem to work very well in the omap3 case.
Just be careful when you try to make thermal policy like decisions based on this sensor. Placement of the sensor w.r.t the actual logic
I guess we won't do that, certainly not anytime soon.
Quoted 5 lines
Also notice http://www.ti.com/lit/er/sprz278f/sprz278f.pdf "Advisory 3.1.1.186 MMC OCP Clock Not Gated When Thermal Sensor Is Used" I think there were accuracy issues at certain values etc.. So remember to do a off mode type PM tests as well before you consider requesting these to be merged.
Thanks a lot for a pointer. 3x 100uA power draw when you enable temperature sensor, because it also errorneously enables MMC. I wonder how the solution would look in the device tree...
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
PATCH 3/3 ARM: dts: OMAP34xx/36xx: Add temperature sensor
In reply to Sebastian ReichelOMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature.
--- arch/arm/boot/dts/omap34xx.dtsi | 7 +++++++ arch/arm/boot/dts/omap36xx.dtsi | 7 +++++++ 2 files changed, 14 insertions(+)
arch/arm/boot/dts/omap34xx.dtsi +7 -0
@@ -38,6 +38,13 @@ pinctrl-single,function-mask = <0xff1f>; }; }; + + omap3_temperature_sensor: temperature-sensor { + compatible = "ti,omap34xx-temperature-sensor"; + syscon = <&omap3_scm_general>; + clocks = <&ts_fck>; + clock-names = "fck"; + }; }; &ssi {
arch/arm/boot/dts/omap36xx.dtsi +7 -0
@@ -70,6 +70,13 @@ pinctrl-single,function-mask = <0xff1f>; }; }; + + omap3_temperature_sensor: temperature-sensor { + compatible = "ti,omap36xx-temperature-sensor"; + syscon = <&omap3_scm_general>; + clocks = <&ts_fck>; + clock-names = "fck"; + }; }; /* OMAP3630 needs dss_96m_fck for VENC */
Signature · 1 line
2.1.3
Re: [PATCH 3/3] ARM: dts: OMAP34xx/36xx: Add temperature sensor
Quoted 4 lines · Sebastian Reichel
OMAP34xx and OMAP36xx processors contain a register in the syscon area, which can be used to determine the SoCs temperature.
Signed-off-by Sebastian Reichel <[email protected]>
Driver binds and does something, so binding works ok.
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Quoted 23 lines · Pavel Machek
drivers/hwmon/omap34xx_temp.c new file +20
-0@@ -0,0 +1,263 @@ +/* +* omap34xx_temp.c - Linux kernel module for OMAP34xx hardware monitoring +* +* Copyright (C) 2008 Nokia Corporation +* +* Written by Peter De Schrijver <[email protected]> +* +* Inspired by k8temp.c +* +* This file is subject to the terms and conditions of the GNU General +* Public License. See the file "COPYING" in the main directory of this +* archive for more details. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +*/ + +#include <linux/clk.h>
drivers/hwmon/omap34xx_temp.c line 30
Quoted 10 lines
drivers/hwmon/omap34xx_temp.c new file +10
-0+#include <linux/hrtimer.h> +#include <linux/module.h> +#include <linux/hwmon.h> +#include <linux/hwmon-sysfs.h> +#include <linux/err.h> +#include <linux/platform_device.h> +#include <linux/io.h> +#include <linux/slab.h> + +#include "../../arch/arm/mach-omap2/control.h"
No need to do this, you can use syscon here like pbias-regulator.c is doing.
Regards,
Tony
Quoted 29 lines · Tony Lindgren
Quoted 28 lines · Pavel Machek
drivers/hwmon/omap34xx_temp.c new file +25
-0@@ -0,0 +1,263 @@ +/* +* omap34xx_temp.c - Linux kernel module for OMAP34xx hardware monitoring +* +* Copyright (C) 2008 Nokia Corporation +* +* Written by Peter De Schrijver <[email protected]> +* +* Inspired by k8temp.c +* +* This file is subject to the terms and conditions of the GNU General +* Public License. See the file "COPYING" in the main directory of this +* archive for more details. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +*/ + +#include <linux/clk.h> +#include <linux/hrtimer.h> +#include <linux/module.h> +#include <linux/hwmon.h> +#include <linux/hwmon-sysfs.h> +#include <linux/err.h>
Quoted 8 lines
drivers/hwmon/omap34xx_temp.c line 30
Quoted 5 lines
drivers/hwmon/omap34xx_temp.c new file +5
-0+#include <linux/platform_device.h> +#include <linux/io.h> +#include <linux/slab.h> + +#include "../../arch/arm/mach-omap2/control.h" No need to do this, you can use syscon here like
pbias-regulator.cis doing.
Oh looks like you're already using syscon, nice. What defines do you need from control.h?
Those should be in the driver if private to the driver, or else we should have some minimal header in include/linux somewhere if some control.h defines really need to be exposed.
Regards,
Tony
Quoted 44 lines · On Friday 26 December 2014 17:17:57 Tony Lindgren wrote:
Quoted 31 lines · Tony Lindgren
Quoted 30 lines · Pavel Machek
drivers/hwmon/omap34xx_temp.c new file +2
-0@@ -0,0 +1,263 @@ +/* +* omap34xx_temp.c - Linux kernel module for OMAP34xx hardware monitoring + *
+ * Copyright (C) 2008 Nokia Corporation
+ *
+ * Written by Peter De Schrijver <[email protected]> + *
+ * Inspired byk8temp.c
+ *
+ * This file is subject to the terms and conditions of the GNU General + * Public License. See the file "COPYING" in the main directory of this + * archive for more details.
+ *
+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details.
+ */drivers/hwmon/omap34xx_temp.c new file +7
-0+ +#include <linux/clk.h> +#include <linux/hrtimer.h> +#include <linux/module.h> +#include <linux/hwmon.h> +#include <linux/hwmon-sysfs.h> +#include <linux/err.h> Quoted 8 lines
drivers/hwmon/omap34xx_temp.c line 30
Quoted 5 lines
drivers/hwmon/omap34xx_temp.c new file +5
-0+#include <linux/platform_device.h> +#include <linux/io.h> +#include <linux/slab.h> + +#include "../../arch/arm/mach-omap2/control.h" No need to do this, you can use syscon here like
pbias-regulator.cis doing.Oh looks like you're already using syscon, nice. What defines do you need from
control.h?
Quoted 8 lines
Those should be in the driver if private to the driver, or else we should have some minimal header in
include/linuxsomewhere if somecontrol.hdefines really need to be exposed.Regards,
Tony
Hi Tony,
Sebastian Reichel has already sent new version of temperature driver. See email thread with subject:
[PATCH 0/3] OMAP3 temperature sensor
Signature · 9 lines
Pali Roh?r pali.rohar at gmail.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: This is a digitally signed message part. URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20141226/daf8e6ad/attachment-0001.sig>
Quoted 17 lines · Pali Roh?r
Quoted 16 lines · On Friday 26 December 2014 17:17:57 Tony Lindgren wrote:
Quoted 5 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+ +#include "../../arch/arm/mach-omap2/control.h"No need to do this, you can use syscon here like
pbias-regulator.cis doing.Oh looks like you're already using syscon, nice. What defines do you need from
control.h?Those should be in the driver if private to the driver, or else we should have some minimal header in
include/linuxsomewhere if somecontrol.hdefines really need to be exposed.Regards,
Quoted 8 lines
Quoted 1 line
Tony
Hi Tony,
Sebastian Reichel has already sent new version of temperature driver. See email thread with subject:
[PATCH 0/3] OMAP3 temperature sensor
Yeah great, looks like I was also reading Sebastian's patch with the syscon comments above :)
Regards,
Tony