From: Guenter Roeck <linux@roeck-us.net> To: Alistair Francis <alistair@alistair23.me> Cc: lee.jones@linaro.org, robh+dt@kernel.org, lgirdwood@gmail.com, broonie@kernel.org, kernel@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, linux-imx@nxp.com, amitk@kernel.org, rui.zhang@intel.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, alistair23@gmail.com, linux-hwmon@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org Subject: Re: [PATCH v12 05/10] thermal: sy7636a: Add thermal driver for sy7636a Date: Sat, 9 Oct 2021 16:49:13 -0700 [thread overview] Message-ID: <20211009234913.GA2234993@roeck-us.net> (raw) In-Reply-To: <20211009115031.18392-9-alistair@alistair23.me> On Sat, Oct 09, 2021 at 09:50:27PM +1000, Alistair Francis wrote: > Add thermal driver to enable kernel based polling > and shutdown of device for temperatures out of spec > It _should_ be possible to implement this as part of the hwmon driver (by using the _with_info hwmon API). Guenter > Signed-off-by: Alistair Francis <alistair@alistair23.me> > --- > drivers/thermal/Kconfig | 6 ++ > drivers/thermal/Makefile | 1 + > drivers/thermal/sy7636a_thermal.c | 94 +++++++++++++++++++++++++++++++ > 3 files changed, 101 insertions(+) > create mode 100644 drivers/thermal/sy7636a_thermal.c > > diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig > index d7f44deab5b1..6ee0e7de1b37 100644 > --- a/drivers/thermal/Kconfig > +++ b/drivers/thermal/Kconfig > @@ -450,6 +450,12 @@ depends on (ARCH_STI || ARCH_STM32) && OF > source "drivers/thermal/st/Kconfig" > endmenu > > +config SY7636A_THERMAL > + tristate "SY7636A thermal management" > + help > + Enable the sy7636a thermal driver, which supports the > + temperature sensor embedded in Silabs SY7636A IC. > + > source "drivers/thermal/tegra/Kconfig" > > config GENERIC_ADC_THERMAL > diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile > index 82fc3e616e54..2e1aca8a0a09 100644 > --- a/drivers/thermal/Makefile > +++ b/drivers/thermal/Makefile > @@ -51,6 +51,7 @@ obj-$(CONFIG_DA9062_THERMAL) += da9062-thermal.o > obj-y += intel/ > obj-$(CONFIG_TI_SOC_THERMAL) += ti-soc-thermal/ > obj-y += st/ > +obj-$(CONFIG_SY7636A_THERMAL) += sy7636a_thermal.o > obj-$(CONFIG_QCOM_TSENS) += qcom/ > obj-y += tegra/ > obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o > diff --git a/drivers/thermal/sy7636a_thermal.c b/drivers/thermal/sy7636a_thermal.c > new file mode 100644 > index 000000000000..9e58305ca3ce > --- /dev/null > +++ b/drivers/thermal/sy7636a_thermal.c > @@ -0,0 +1,94 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Functions to access SY3686A power management chip temperature > + * > + * Copyright (C) 2019 reMarkable AS - http://www.remarkable.com/ > + * > + * Authors: Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com> > + * Alistair Francis <alistair@alistair23.me> > + */ > + > +#include <linux/module.h> > +#include <linux/platform_device.h> > +#include <linux/thermal.h> > + > +#include <linux/mfd/sy7636a.h> > + > +static int sy7636a_get_temp(void *arg, int *res) > +{ > + unsigned int mode_ctr; > + int ret, reg_val; > + struct regmap *regmap = arg; > + bool isVoltageActive; > + > + ret = regmap_read(regmap, > + SY7636A_REG_OPERATION_MODE_CRL, &mode_ctr); > + if (ret) > + return ret; > + > + isVoltageActive = mode_ctr & SY7636A_OPERATION_MODE_CRL_ONOFF; > + > + /* If operation mode isn't set to control, then let's set it. */ > + if (!isVoltageActive) { > + ret = regmap_write(regmap, > + SY7636A_REG_OPERATION_MODE_CRL, > + mode_ctr | SY7636A_OPERATION_MODE_CRL_ONOFF); > + if (ret) > + return ret; > + } > + > + ret = regmap_read(regmap, > + SY7636A_REG_TERMISTOR_READOUT, ®_val); > + if (ret) > + return ret; > + > + /* Restore the operation mode if it wasn't set */ > + if (!isVoltageActive) { > + ret = regmap_write(regmap, > + SY7636A_REG_OPERATION_MODE_CRL, > + mode_ctr); > + if (ret) > + return ret; > + } > + > + *res = reg_val * 1000; > + > + return ret; > +} > + > +static const struct thermal_zone_of_device_ops ops = { > + .get_temp = sy7636a_get_temp, > +}; > + > +static int sy7636a_thermal_probe(struct platform_device *pdev) > +{ > + struct regmap *regmap = dev_get_regmap(pdev->dev.parent, NULL); > + struct thermal_zone_device *thermal_zone_dev; > + > + thermal_zone_dev = devm_thermal_zone_of_sensor_register( > + pdev->dev.parent, > + 0, > + regmap, > + &ops); > + > + return PTR_ERR_OR_ZERO(thermal_zone_dev); > +} > + > +static const struct platform_device_id sy7636a_thermal_id_table[] = { > + { "sy7636a-thermal", }, > + { } > +}; > +MODULE_DEVICE_TABLE(platform, sy7636a_thermal_id_table); > + > +static struct platform_driver sy7636a_thermal_driver = { > + .driver = { > + .name = "sy7636a-thermal", > + }, > + .probe = sy7636a_thermal_probe, > + .id_table = sy7636a_thermal_id_table, > +}; > +module_platform_driver(sy7636a_thermal_driver); > + > +MODULE_AUTHOR("Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com>"); > +MODULE_DESCRIPTION("SY7636A thermal driver"); > +MODULE_LICENSE("GPL v2");
WARNING: multiple messages have this Message-ID (diff)
From: Guenter Roeck <linux@roeck-us.net> To: Alistair Francis <alistair@alistair23.me> Cc: lee.jones@linaro.org, robh+dt@kernel.org, lgirdwood@gmail.com, broonie@kernel.org, kernel@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, linux-imx@nxp.com, amitk@kernel.org, rui.zhang@intel.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, alistair23@gmail.com, linux-hwmon@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org Subject: Re: [PATCH v12 05/10] thermal: sy7636a: Add thermal driver for sy7636a Date: Sat, 9 Oct 2021 16:49:13 -0700 [thread overview] Message-ID: <20211009234913.GA2234993@roeck-us.net> (raw) In-Reply-To: <20211009115031.18392-9-alistair@alistair23.me> On Sat, Oct 09, 2021 at 09:50:27PM +1000, Alistair Francis wrote: > Add thermal driver to enable kernel based polling > and shutdown of device for temperatures out of spec > It _should_ be possible to implement this as part of the hwmon driver (by using the _with_info hwmon API). Guenter > Signed-off-by: Alistair Francis <alistair@alistair23.me> > --- > drivers/thermal/Kconfig | 6 ++ > drivers/thermal/Makefile | 1 + > drivers/thermal/sy7636a_thermal.c | 94 +++++++++++++++++++++++++++++++ > 3 files changed, 101 insertions(+) > create mode 100644 drivers/thermal/sy7636a_thermal.c > > diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig > index d7f44deab5b1..6ee0e7de1b37 100644 > --- a/drivers/thermal/Kconfig > +++ b/drivers/thermal/Kconfig > @@ -450,6 +450,12 @@ depends on (ARCH_STI || ARCH_STM32) && OF > source "drivers/thermal/st/Kconfig" > endmenu > > +config SY7636A_THERMAL > + tristate "SY7636A thermal management" > + help > + Enable the sy7636a thermal driver, which supports the > + temperature sensor embedded in Silabs SY7636A IC. > + > source "drivers/thermal/tegra/Kconfig" > > config GENERIC_ADC_THERMAL > diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile > index 82fc3e616e54..2e1aca8a0a09 100644 > --- a/drivers/thermal/Makefile > +++ b/drivers/thermal/Makefile > @@ -51,6 +51,7 @@ obj-$(CONFIG_DA9062_THERMAL) += da9062-thermal.o > obj-y += intel/ > obj-$(CONFIG_TI_SOC_THERMAL) += ti-soc-thermal/ > obj-y += st/ > +obj-$(CONFIG_SY7636A_THERMAL) += sy7636a_thermal.o > obj-$(CONFIG_QCOM_TSENS) += qcom/ > obj-y += tegra/ > obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o > diff --git a/drivers/thermal/sy7636a_thermal.c b/drivers/thermal/sy7636a_thermal.c > new file mode 100644 > index 000000000000..9e58305ca3ce > --- /dev/null > +++ b/drivers/thermal/sy7636a_thermal.c > @@ -0,0 +1,94 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Functions to access SY3686A power management chip temperature > + * > + * Copyright (C) 2019 reMarkable AS - http://www.remarkable.com/ > + * > + * Authors: Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com> > + * Alistair Francis <alistair@alistair23.me> > + */ > + > +#include <linux/module.h> > +#include <linux/platform_device.h> > +#include <linux/thermal.h> > + > +#include <linux/mfd/sy7636a.h> > + > +static int sy7636a_get_temp(void *arg, int *res) > +{ > + unsigned int mode_ctr; > + int ret, reg_val; > + struct regmap *regmap = arg; > + bool isVoltageActive; > + > + ret = regmap_read(regmap, > + SY7636A_REG_OPERATION_MODE_CRL, &mode_ctr); > + if (ret) > + return ret; > + > + isVoltageActive = mode_ctr & SY7636A_OPERATION_MODE_CRL_ONOFF; > + > + /* If operation mode isn't set to control, then let's set it. */ > + if (!isVoltageActive) { > + ret = regmap_write(regmap, > + SY7636A_REG_OPERATION_MODE_CRL, > + mode_ctr | SY7636A_OPERATION_MODE_CRL_ONOFF); > + if (ret) > + return ret; > + } > + > + ret = regmap_read(regmap, > + SY7636A_REG_TERMISTOR_READOUT, ®_val); > + if (ret) > + return ret; > + > + /* Restore the operation mode if it wasn't set */ > + if (!isVoltageActive) { > + ret = regmap_write(regmap, > + SY7636A_REG_OPERATION_MODE_CRL, > + mode_ctr); > + if (ret) > + return ret; > + } > + > + *res = reg_val * 1000; > + > + return ret; > +} > + > +static const struct thermal_zone_of_device_ops ops = { > + .get_temp = sy7636a_get_temp, > +}; > + > +static int sy7636a_thermal_probe(struct platform_device *pdev) > +{ > + struct regmap *regmap = dev_get_regmap(pdev->dev.parent, NULL); > + struct thermal_zone_device *thermal_zone_dev; > + > + thermal_zone_dev = devm_thermal_zone_of_sensor_register( > + pdev->dev.parent, > + 0, > + regmap, > + &ops); > + > + return PTR_ERR_OR_ZERO(thermal_zone_dev); > +} > + > +static const struct platform_device_id sy7636a_thermal_id_table[] = { > + { "sy7636a-thermal", }, > + { } > +}; > +MODULE_DEVICE_TABLE(platform, sy7636a_thermal_id_table); > + > +static struct platform_driver sy7636a_thermal_driver = { > + .driver = { > + .name = "sy7636a-thermal", > + }, > + .probe = sy7636a_thermal_probe, > + .id_table = sy7636a_thermal_id_table, > +}; > +module_platform_driver(sy7636a_thermal_driver); > + > +MODULE_AUTHOR("Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com>"); > +MODULE_DESCRIPTION("SY7636A thermal driver"); > +MODULE_LICENSE("GPL v2"); _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-10-09 23:49 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-10-09 11:50 [PATCH v12 00/10] Add support for the silergy,sy7636a Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 11:50 ` [PATCH v12 01/10] dt-bindings: mfd: Initial commit of silergy,sy7636a.yaml Alistair Francis 2021-10-09 11:50 ` [PATCH v12 01/10] dt-bindings: mfd: Initial commit of silergy, sy7636a.yaml Alistair Francis 2021-10-09 11:50 ` [PATCH v12 02/10] mfd: simple-mfd-i2c: Add a Kconfig name Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 11:50 ` [PATCH 3/7] capsules: symmetric_encryption/aes: Reduce code size Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 11:55 ` Alistair Francis 2021-10-09 11:55 ` Alistair Francis 2021-10-09 11:50 ` [PATCH v12 03/10] mfd: simple-mfd-i2c: Enable support for the silergy,sy7636a Alistair Francis 2021-10-09 11:50 ` [PATCH v12 03/10] mfd: simple-mfd-i2c: Enable support for the silergy, sy7636a Alistair Francis 2021-10-09 11:50 ` [PATCH 4/7] capsules: sha: Continue reducing code size Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 11:56 ` Alistair Francis 2021-10-09 11:56 ` Alistair Francis 2021-10-09 11:50 ` [PATCH v12 04/10] regulator: sy7636a: Remove requirement on sy7636a mfd Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 11:50 ` [PATCH 5/7] capsules: hmac: Continue reducing code size Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 11:56 ` Alistair Francis 2021-10-09 11:56 ` Alistair Francis 2021-10-09 11:50 ` [PATCH v12 05/10] thermal: sy7636a: Add thermal driver for sy7636a Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 23:49 ` Guenter Roeck [this message] 2021-10-09 23:49 ` Guenter Roeck 2021-10-09 11:50 ` [PATCH v12 06/10] hwmon: sy7636a: Add temperature " Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 13:49 ` Guenter Roeck 2021-10-09 13:49 ` Guenter Roeck 2021-10-09 11:50 ` [PATCH v12 07/10] ARM: imx_v6_v7_defconfig: Enable silergy,sy7636a Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 11:50 ` [PATCH v12 08/10] ARM: dts: imx7d: remarkable2: " Alistair Francis 2021-10-09 11:50 ` [PATCH v12 08/10] ARM: dts: imx7d: remarkable2: Enable silergy, sy7636a Alistair Francis 2021-10-09 11:50 ` [PATCH v12 09/10] ARM: imx_v6_v7_defconfig: Enable backlight class devices Alistair Francis 2021-10-09 11:50 ` Alistair Francis 2021-10-09 14:29 ` Fabio Estevam 2021-10-09 14:29 ` Fabio Estevam
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20211009234913.GA2234993@roeck-us.net \ --to=linux@roeck-us.net \ --cc=alistair23@gmail.com \ --cc=alistair@alistair23.me \ --cc=amitk@kernel.org \ --cc=broonie@kernel.org \ --cc=devicetree@vger.kernel.org \ --cc=kernel@pengutronix.de \ --cc=lee.jones@linaro.org \ --cc=lgirdwood@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-hwmon@vger.kernel.org \ --cc=linux-imx@nxp.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=robh+dt@kernel.org \ --cc=rui.zhang@intel.com \ --cc=s.hauer@pengutronix.de \ --cc=shawnguo@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.