Re: [linux-sunxi] [PATCH 3.4] sunxi:axp20x: Enable internal thermal monitoring
On 18/03/14 17:44, Patrick Wood wrote: On Sunday, March 16, 2014 12:22:58 PM UTC-4, Alejandro Mery wrote: Hi, On 11/03/14 05:31, Patrick Wood wrote: > > > On Sunday, March 9, 2014 10:13:08 AM UTC-4, Alejandro Mery wrote: > > > > On 09/03/14 13:09, Olliver Schinagl wrote: > > Mnemoc, > > > > have you checked and merged this yet? > > thanks for the reminder. it fails to compile when hwmon is m > > like on sun7i_defconfig: > LD .tmp_vmlinux1 > drivers/built-in.o: In function `axp20_init_chip': > /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp20-mfd.h:149: > > undefined reference to `hwmon_device_register' > drivers/built-in.o: In function `axp_mfd_remove': > /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp-mfd.c:368: > > undefined reference to `hwmon_device_unregister' > make[1]: *** [.tmp_vmlinux1] Error 1 > make: *** [sub-make] Error 2 > > build_sun7i/.config:CONFIG_AXP_HWMON=y > build_sun7i/.config:CONFIG_HWMON=m > > in most defconfigs hwmon is n, should I y/y them on all defconfigs? can > it be fixed to support hwmon=m? > > > Try this: > > diff --git a/drivers/power/axp_power/Kconfig > b/drivers/power/axp_power/Kconfig > index 66aa6ac..4e942a9 100644 > --- a/drivers/power/axp_power/Kconfig > +++ b/drivers/power/axp_power/Kconfig > @@ -38,7 +38,7 @@ config AXP_CHGCHANGE > config AXP_HWMON > depends on HWMON > - bool "Enable the internal thermal monitoring support of AXP20X > chips" > + tristate "Enable the internal thermal monitoring support of > AXP20X chips" > default y > endif # !AW_AXP yes, that solved the problem. what about defconfig? m/m? y/y? regards, Alejandro Mery Well, my preference is y/y, but I don't know if anyone else feels that way. thanks. applied (with the change to tristate) and then defconfigs modified to get hwmon y/y by default. Cheers, Alejandro -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [linux-sunxi] [PATCH 3.4] sunxi:axp20x: Enable internal thermal monitoring
On Sunday, March 16, 2014 12:22:58 PM UTC-4, Alejandro Mery wrote: > > Hi, > > On 11/03/14 05:31, Patrick Wood wrote: > > > > > > On Sunday, March 9, 2014 10:13:08 AM UTC-4, Alejandro Mery wrote: > > > > > > > > On 09/03/14 13:09, Olliver Schinagl wrote: > > > Mnemoc, > > > > > > have you checked and merged this yet? > > > > thanks for the reminder. it fails to compile when hwmon is m > > > > like on sun7i_defconfig: > > LD .tmp_vmlinux1 > > drivers/built-in.o: In function `axp20_init_chip': > > > /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp20-mfd.h:149: > > > > > > undefined reference to `hwmon_device_register' > > drivers/built-in.o: In function `axp_mfd_remove': > > > /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp-mfd.c:368: > > > > > > undefined reference to `hwmon_device_unregister' > > make[1]: *** [.tmp_vmlinux1] Error 1 > > make: *** [sub-make] Error 2 > > > > build_sun7i/.config:CONFIG_AXP_HWMON=y > > build_sun7i/.config:CONFIG_HWMON=m > > > > in most defconfigs hwmon is n, should I y/y them on all defconfigs? > can > > it be fixed to support hwmon=m? > > > > > > Try this: > > > > diff --git a/drivers/power/axp_power/Kconfig > > b/drivers/power/axp_power/Kconfig > > index 66aa6ac..4e942a9 100644 > > --- a/drivers/power/axp_power/Kconfig > > +++ b/drivers/power/axp_power/Kconfig > > @@ -38,7 +38,7 @@ config AXP_CHGCHANGE > > config AXP_HWMON > > depends on HWMON > > - bool "Enable the internal thermal monitoring support of AXP20X > > chips" > > + tristate "Enable the internal thermal monitoring support of > > AXP20X chips" > > default y > > endif # !AW_AXP > > yes, that solved the problem. what about defconfig? m/m? y/y? > > regards, > Alejandro Mery > Well, my preference is y/y, but I don't know if anyone else feels that way. Pat -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [linux-sunxi] [PATCH 3.4] sunxi:axp20x: Enable internal thermal monitoring
Hi, On 11/03/14 05:31, Patrick Wood wrote: On Sunday, March 9, 2014 10:13:08 AM UTC-4, Alejandro Mery wrote: On 09/03/14 13:09, Olliver Schinagl wrote: > Mnemoc, > > have you checked and merged this yet? thanks for the reminder. it fails to compile when hwmon is m like on sun7i_defconfig: LD .tmp_vmlinux1 drivers/built-in.o: In function `axp20_init_chip': /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp20-mfd.h:149: undefined reference to `hwmon_device_register' drivers/built-in.o: In function `axp_mfd_remove': /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp-mfd.c:368: undefined reference to `hwmon_device_unregister' make[1]: *** [.tmp_vmlinux1] Error 1 make: *** [sub-make] Error 2 build_sun7i/.config:CONFIG_AXP_HWMON=y build_sun7i/.config:CONFIG_HWMON=m in most defconfigs hwmon is n, should I y/y them on all defconfigs? can it be fixed to support hwmon=m? Try this: diff --git a/drivers/power/axp_power/Kconfig b/drivers/power/axp_power/Kconfig index 66aa6ac..4e942a9 100644 --- a/drivers/power/axp_power/Kconfig +++ b/drivers/power/axp_power/Kconfig @@ -38,7 +38,7 @@ config AXP_CHGCHANGE config AXP_HWMON depends on HWMON - bool "Enable the internal thermal monitoring support of AXP20X chips" + tristate "Enable the internal thermal monitoring support of AXP20X chips" default y endif # !AW_AXP yes, that solved the problem. what about defconfig? m/m? y/y? regards, Alejandro Mery -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [linux-sunxi] [PATCH 3.4] sunxi:axp20x: Enable internal thermal monitoring
On Sunday, March 9, 2014 10:13:08 AM UTC-4, Alejandro Mery wrote: > > > > On 09/03/14 13:09, Olliver Schinagl wrote: > > Mnemoc, > > > > have you checked and merged this yet? > > thanks for the reminder. it fails to compile when hwmon is m > > like on sun7i_defconfig: >LD .tmp_vmlinux1 > drivers/built-in.o: In function `axp20_init_chip': > /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp20-mfd.h:149: > > > undefined reference to `hwmon_device_register' > drivers/built-in.o: In function `axp_mfd_remove': > /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp-mfd.c:368: > > > undefined reference to `hwmon_device_unregister' > make[1]: *** [.tmp_vmlinux1] Error 1 > make: *** [sub-make] Error 2 > > build_sun7i/.config:CONFIG_AXP_HWMON=y > build_sun7i/.config:CONFIG_HWMON=m > > in most defconfigs hwmon is n, should I y/y them on all defconfigs? can > it be fixed to support hwmon=m? > > Try this: diff --git a/drivers/power/axp_power/Kconfig b/drivers/power/axp_power/Kconfig index 66aa6ac..4e942a9 100644 --- a/drivers/power/axp_power/Kconfig +++ b/drivers/power/axp_power/Kconfig @@ -38,7 +38,7 @@ config AXP_CHGCHANGE config AXP_HWMON depends on HWMON - bool "Enable the internal thermal monitoring support of AXP20X chips" + tristate "Enable the internal thermal monitoring support of AXP20X chips" default y endif # !AW_AXP -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [linux-sunxi] [PATCH 3.4] sunxi:axp20x: Enable internal thermal monitoring
On 09/03/14 13:09, Olliver Schinagl wrote: Mnemoc, have you checked and merged this yet? thanks for the reminder. it fails to compile when hwmon is m like on sun7i_defconfig: LD .tmp_vmlinux1 drivers/built-in.o: In function `axp20_init_chip': /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp20-mfd.h:149: undefined reference to `hwmon_device_register' drivers/built-in.o: In function `axp_mfd_remove': /srv/build/amery/allwinner/linux-sunxi/3.4/drivers/power/axp_power/axp-mfd.c:368: undefined reference to `hwmon_device_unregister' make[1]: *** [.tmp_vmlinux1] Error 1 make: *** [sub-make] Error 2 build_sun7i/.config:CONFIG_AXP_HWMON=y build_sun7i/.config:CONFIG_HWMON=m in most defconfigs hwmon is n, should I y/y them on all defconfigs? can it be fixed to support hwmon=m? -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [linux-sunxi] [PATCH 3.4] sunxi:axp20x: Enable internal thermal monitoring
Mnemoc, have you checked and merged this yet? Olliver On 01/27/14 20:25, Patrick Wood wrote: Enable the internal thermal monitoring support of AXP20X chips Cherry-picked from: https://github.com/cubieboard/linux-sunxi/commit/e4144b3ce62b1d7014fee36b84bc65c812469822 Creates the sysfs file temp1_input in the sunxi-i2c tree that reports the AXP's temperature in degrees C. According to the AXP202's datasheet, this port outputs a 12-bit value where 0x000 == -144.7C and 0xfff == 264.8C in 0.1 degree C increments. Signed-off-by: LABBE Corentin Signed-off-by: Hans de Goede Signed-off-by: Patrick Wood --- drivers/power/axp_power/Kconfig |5 ++ drivers/power/axp_power/axp-mfd.c |7 +++ drivers/power/axp_power/axp20-mfd.h | 112 +++ include/linux/mfd/axp-mfd.h |7 +++ 4 files changed, 130 insertions(+) diff --git a/drivers/power/axp_power/Kconfig b/drivers/power/axp_power/Kconfig index 039679f..b76f517 100644 --- a/drivers/power/axp_power/Kconfig +++ b/drivers/power/axp_power/Kconfig @@ -36,4 +36,9 @@ config AXP_CHGCHANGE bool "AXP charging current set when suspend\resume\shutdown" default y +config AXP_HWMON + depends on HWMON + bool "Enable the internal thermal monitoring support of AXP20X chips" + default y + endif # !AW_AXP diff --git a/drivers/power/axp_power/axp-mfd.c b/drivers/power/axp_power/axp-mfd.c index 9af0257..cfa894a 100644 --- a/drivers/power/axp_power/axp-mfd.c +++ b/drivers/power/axp_power/axp-mfd.c @@ -363,6 +363,13 @@ static int __devexit axp_mfd_remove(struct i2c_client *client) pm_power_off = NULL; axp = NULL; +#ifdef CONFIG_AXP_HWMON + if (chip->itm_enabled == 1) { + hwmon_device_unregister(chip->hwmon_dev); + sysfs_remove_group(&client->dev.kobj, &axp20_group); + } +#endif + axp_mfd_remove_subdevs(chip); kfree(chip); return 0; diff --git a/drivers/power/axp_power/axp20-mfd.h b/drivers/power/axp_power/axp20-mfd.h index 1c7a41b..214856e 100644 --- a/drivers/power/axp_power/axp20-mfd.h +++ b/drivers/power/axp_power/axp20-mfd.h @@ -22,6 +22,83 @@ #include "axp-rw.h" +#ifdef CONFIG_AXP_HWMON + +#include +#include +#include + +static struct axp_mfd_chip *axp20_update_device(struct device *dev); + +static ssize_t +show_temp(struct device *dev, struct device_attribute *devattr, char *buf) +{ + struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); + struct axp_mfd_chip *data = axp20_update_device(dev); + if (attr->index == 1) + return sprintf(buf, "264800\n"); + if (attr->index == 2) + return sprintf(buf, "-144700\n"); + return sprintf(buf, "%d\n", data->temperature * 100); +} + + +static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0); +static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, show_temp, NULL, 1); +static SENSOR_DEVICE_ATTR(temp1_min, S_IRUGO, show_temp, NULL, 2); + +static struct attribute *axp20_attributes[] = { + &sensor_dev_attr_temp1_input.dev_attr.attr, + &sensor_dev_attr_temp1_min.dev_attr.attr, + &sensor_dev_attr_temp1_max.dev_attr.attr, + NULL +}; + +static const struct attribute_group axp20_group = { + .attrs = axp20_attributes, +}; + + +/* + * * function that update the status of the chips (temperature) + * */ +static struct axp_mfd_chip *axp20_update_device(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct axp_mfd_chip *data = i2c_get_clientdata(client); + int err; + u8 high, low; + + mutex_lock(&data->lock); + + if (time_after(jiffies, data->last_updated + HZ * 2) + || !data->valid) { + dev_dbg(&client->dev, "Updating axp20 data\n"); + /* AXP202 datasheet page 25, 0x000 means -144.7, +* 0xfff means 264.8, 4096 steps of 0.1 degress */ + err = __axp_read(client, 0x5E, &high); + if (err) { + dev_err(dev, "AXP Error while reading high\n"); + high = 0; + } + + err = __axp_read(client, 0x5F, &low); + if (err) { + dev_err(dev, "AXP Error while reading low\n"); + low = 0; + } + + data->temperature = -1447 + ((high << 4) + (low && 0x0F)); + data->last_updated = jiffies; + data->valid = 1; + } + + mutex_unlock(&data->lock); + return data; +} + +#endif + static int __devinit axp20_init_chip(struct axp_mfd_chip *chip) { @@ -33,6 +110,9 @@ static int __devinit axp20_init_chip(struct axp_mfd_chip *chip) POWER20_INTSTS3, 0xff, POWER20_INTSTS4, 0xff, POWER20_INTSTS5, 0xff }; int err; +#ifdef CONFIG_AXP_HWMON + u8 enabled; +#endif /*read chip id*/ err = __axp_rea
[linux-sunxi] [PATCH 3.4] sunxi:axp20x: Enable internal thermal monitoring
Enable the internal thermal monitoring support of AXP20X chips Cherry-picked from: https://github.com/cubieboard/linux-sunxi/commit/e4144b3ce62b1d7014fee36b84bc65c812469822 Creates the sysfs file temp1_input in the sunxi-i2c tree that reports the AXP's temperature in degrees C. According to the AXP202's datasheet, this port outputs a 12-bit value where 0x000 == -144.7C and 0xfff == 264.8C in 0.1 degree C increments. Signed-off-by: LABBE Corentin Signed-off-by: Hans de Goede Signed-off-by: Patrick Wood --- drivers/power/axp_power/Kconfig |5 ++ drivers/power/axp_power/axp-mfd.c |7 +++ drivers/power/axp_power/axp20-mfd.h | 112 +++ include/linux/mfd/axp-mfd.h |7 +++ 4 files changed, 130 insertions(+) diff --git a/drivers/power/axp_power/Kconfig b/drivers/power/axp_power/Kconfig index 039679f..b76f517 100644 --- a/drivers/power/axp_power/Kconfig +++ b/drivers/power/axp_power/Kconfig @@ -36,4 +36,9 @@ config AXP_CHGCHANGE bool "AXP charging current set when suspend\resume\shutdown" default y +config AXP_HWMON + depends on HWMON + bool "Enable the internal thermal monitoring support of AXP20X chips" + default y + endif # !AW_AXP diff --git a/drivers/power/axp_power/axp-mfd.c b/drivers/power/axp_power/axp-mfd.c index 9af0257..cfa894a 100644 --- a/drivers/power/axp_power/axp-mfd.c +++ b/drivers/power/axp_power/axp-mfd.c @@ -363,6 +363,13 @@ static int __devexit axp_mfd_remove(struct i2c_client *client) pm_power_off = NULL; axp = NULL; +#ifdef CONFIG_AXP_HWMON + if (chip->itm_enabled == 1) { + hwmon_device_unregister(chip->hwmon_dev); + sysfs_remove_group(&client->dev.kobj, &axp20_group); + } +#endif + axp_mfd_remove_subdevs(chip); kfree(chip); return 0; diff --git a/drivers/power/axp_power/axp20-mfd.h b/drivers/power/axp_power/axp20-mfd.h index 1c7a41b..214856e 100644 --- a/drivers/power/axp_power/axp20-mfd.h +++ b/drivers/power/axp_power/axp20-mfd.h @@ -22,6 +22,83 @@ #include "axp-rw.h" +#ifdef CONFIG_AXP_HWMON + +#include +#include +#include + +static struct axp_mfd_chip *axp20_update_device(struct device *dev); + +static ssize_t +show_temp(struct device *dev, struct device_attribute *devattr, char *buf) +{ + struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); + struct axp_mfd_chip *data = axp20_update_device(dev); + if (attr->index == 1) + return sprintf(buf, "264800\n"); + if (attr->index == 2) + return sprintf(buf, "-144700\n"); + return sprintf(buf, "%d\n", data->temperature * 100); +} + + +static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0); +static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, show_temp, NULL, 1); +static SENSOR_DEVICE_ATTR(temp1_min, S_IRUGO, show_temp, NULL, 2); + +static struct attribute *axp20_attributes[] = { + &sensor_dev_attr_temp1_input.dev_attr.attr, + &sensor_dev_attr_temp1_min.dev_attr.attr, + &sensor_dev_attr_temp1_max.dev_attr.attr, + NULL +}; + +static const struct attribute_group axp20_group = { + .attrs = axp20_attributes, +}; + + +/* + * * function that update the status of the chips (temperature) + * */ +static struct axp_mfd_chip *axp20_update_device(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct axp_mfd_chip *data = i2c_get_clientdata(client); + int err; + u8 high, low; + + mutex_lock(&data->lock); + + if (time_after(jiffies, data->last_updated + HZ * 2) + || !data->valid) { + dev_dbg(&client->dev, "Updating axp20 data\n"); + /* AXP202 datasheet page 25, 0x000 means -144.7, +* 0xfff means 264.8, 4096 steps of 0.1 degress */ + err = __axp_read(client, 0x5E, &high); + if (err) { + dev_err(dev, "AXP Error while reading high\n"); + high = 0; + } + + err = __axp_read(client, 0x5F, &low); + if (err) { + dev_err(dev, "AXP Error while reading low\n"); + low = 0; + } + + data->temperature = -1447 + ((high << 4) + (low && 0x0F)); + data->last_updated = jiffies; + data->valid = 1; + } + + mutex_unlock(&data->lock); + return data; +} + +#endif + static int __devinit axp20_init_chip(struct axp_mfd_chip *chip) { @@ -33,6 +110,9 @@ static int __devinit axp20_init_chip(struct axp_mfd_chip *chip) POWER20_INTSTS3, 0xff, POWER20_INTSTS4, 0xff, POWER20_INTSTS5, 0xff }; int err; +#ifdef CONFIG_AXP_HWMON + u8 enabled; +#endif /*read chip id*/ err = __axp_read(chip->client, POWER20_IC_TYPE, &chip_id); if (err) { @@ -51,7 +131,39 @@ static int __devini