linux-hwmon.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hwmon: (lm90) Add max6654 support to lm90 driver
@ 2020-05-13 18:42 Josh Lehan
  2020-05-14 15:23 ` Guenter Roeck
  0 siblings, 1 reply; 2+ messages in thread
From: Josh Lehan @ 2020-05-13 18:42 UTC (permalink / raw)
  To: linux-hwmon; +Cc: linux, jdelvare, Josh Lehan

Add support for the Maxim MAX6654 to the lm90 driver.

The MAX6654 is a temperature sensor, similar to the others,
but with some differences regarding the configuration
register, and the sampling rate at which extended resolution
becomes possible.

Signed-off-by: Josh Lehan <krellan@google.com>
---
 Documentation/hwmon/lm90.rst | 23 ++++++++++++++++--
 drivers/hwmon/Kconfig        |  9 ++++----
 drivers/hwmon/lm90.c         | 45 ++++++++++++++++++++++++++++++++----
 3 files changed, 67 insertions(+), 10 deletions(-)

diff --git a/Documentation/hwmon/lm90.rst b/Documentation/hwmon/lm90.rst
index 953315987c06..78dfc01b47a2 100644
--- a/Documentation/hwmon/lm90.rst
+++ b/Documentation/hwmon/lm90.rst
@@ -123,6 +123,18 @@ Supported chips:
 
 	       http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3497
 
+  * Maxim MAX6654
+
+    Prefix: 'max6654'
+
+    Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b,
+
+			   0x4c, 0x4d and 0x4e
+
+    Datasheet: Publicly available at the Maxim website
+
+	       https://www.maximintegrated.com/en/products/sensors/MAX6654.html
+
   * Maxim MAX6657
 
     Prefix: 'max6657'
@@ -301,6 +313,13 @@ ADT7461, ADT7461A, NCT1008:
   * Extended temperature range (breaks compatibility)
   * Lower resolution for remote temperature
 
+MAX6654:
+  * Better local resolution
+  * Selectable address
+  * Remote sensor type selection
+  * Extended temperature range
+  * Extended resolution only available when conversion rate <= 1 Hz
+
 MAX6657 and MAX6658:
   * Better local resolution
   * Remote sensor type selection
@@ -336,8 +355,8 @@ SA56004X:
 
 All temperature values are given in degrees Celsius. Resolution
 is 1.0 degree for the local temperature, 0.125 degree for the remote
-temperature, except for the MAX6657, MAX6658 and MAX6659 which have a
-resolution of 0.125 degree for both temperatures.
+temperature, except for the MAX6654, MAX6657, MAX6658 and MAX6659 which have
+a resolution of 0.125 degree for both temperatures.
 
 Each sensor has its own high and low limits, plus a critical limit.
 Additionally, there is a relative hysteresis value common to both critical
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 4c62f900bf7e..e950d1f3e110 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -1198,10 +1198,11 @@ config SENSORS_LM90
 	help
 	  If you say yes here you get support for National Semiconductor LM90,
 	  LM86, LM89 and LM99, Analog Devices ADM1032, ADT7461, and ADT7461A,
-	  Maxim MAX6646, MAX6647, MAX6648, MAX6649, MAX6657, MAX6658, MAX6659,
-	  MAX6680, MAX6681, MAX6692, MAX6695, MAX6696, ON Semiconductor NCT1008,
-	  Winbond/Nuvoton W83L771W/G/AWG/ASG, Philips SA56004, GMT G781, and
-	  Texas Instruments TMP451 sensor chips.
+	  Maxim MAX6646, MAX6647, MAX6648, MAX6649, MAX6654, MAX6657, MAX6658,
+	  MAX6659, MAX6680, MAX6681, MAX6692, MAX6695, MAX6696,
+	  ON Semiconductor NCT1008, Winbond/Nuvoton W83L771W/G/AWG/ASG,
+	  Philips SA56004, GMT G781, and Texas Instruments TMP451
+	  sensor chips.
 
 	  This driver can also be built as a module. If so, the module
 	  will be called lm90.
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
index 9b3c9f390ef8..7bdc664af55b 100644
--- a/drivers/hwmon/lm90.c
+++ b/drivers/hwmon/lm90.c
@@ -35,6 +35,14 @@
  * explicitly as max6659, or if its address is not 0x4c.
  * These chips lack the remote temperature offset feature.
  *
+ * This driver also supports the MAX6654 chip made by Maxim. This chip can
+ * be at 9 different addresses, similar to MAX6680/MAX6681. The MAX6654 is
+ * otherwise similar to MAX6657/MAX6658/MAX6659. Extended range is available
+ * by setting the configuration register accordingly, and is done during
+ * initialization. Extended precision is only available at conversion rates
+ * of 1 Hz and slower. Note that extended precision is not enabled by
+ * default, as this driver initializes all chips to 2 Hz by design.
+ *
  * This driver also supports the MAX6646, MAX6647, MAX6648, MAX6649 and
  * MAX6692 chips made by Maxim.  These are again similar to the LM86,
  * but they use unsigned temperature values and can report temperatures
@@ -94,8 +102,8 @@
  * have address 0x4d.
  * MAX6647 has address 0x4e.
  * MAX6659 can have address 0x4c, 0x4d or 0x4e.
- * MAX6680 and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b,
- * 0x4c, 0x4d or 0x4e.
+ * MAX6654, MAX6680, and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29,
+ * 0x2a, 0x2b, 0x4c, 0x4d or 0x4e.
  * SA56004 can have address 0x48 through 0x4F.
  */
 
@@ -104,7 +112,7 @@ static const unsigned short normal_i2c[] = {
 	0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
 
 enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
-	max6646, w83l771, max6696, sa56004, g781, tmp451 };
+	max6646, w83l771, max6696, sa56004, g781, tmp451, max6654 };
 
 /*
  * The LM90 registers
@@ -145,7 +153,7 @@ enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
 #define LM90_REG_R_TCRIT_HYST		0x21
 #define LM90_REG_W_TCRIT_HYST		0x21
 
-/* MAX6646/6647/6649/6657/6658/6659/6695/6696 registers */
+/* MAX6646/6647/6649/6654/6657/6658/6659/6695/6696 registers */
 
 #define MAX6657_REG_R_LOCAL_TEMPL	0x11
 #define MAX6696_REG_R_STATUS2		0x12
@@ -209,6 +217,7 @@ static const struct i2c_device_id lm90_id[] = {
 	{ "max6646", max6646 },
 	{ "max6647", max6646 },
 	{ "max6649", max6646 },
+	{ "max6654", max6654 },
 	{ "max6657", max6657 },
 	{ "max6658", max6657 },
 	{ "max6659", max6659 },
@@ -269,6 +278,10 @@ static const struct of_device_id __maybe_unused lm90_of_match[] = {
 		.compatible = "dallas,max6649",
 		.data = (void *)max6646
 	},
+	{
+		.compatible = "dallas,max6654",
+		.data = (void *)max6654
+	},
 	{
 		.compatible = "dallas,max6657",
 		.data = (void *)max6657
@@ -367,6 +380,11 @@ static const struct lm90_params lm90_params[] = {
 		.max_convrate = 6,
 		.reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL,
 	},
+	[max6654] = {
+		.alert_alarms = 0x7c,
+		.max_convrate = 7,
+		.reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL,
+	},
 	[max6657] = {
 		.flags = LM90_PAUSE_FOR_CONFIG,
 		.alert_alarms = 0x7c,
@@ -1557,6 +1575,16 @@ static int lm90_detect(struct i2c_client *client,
 		 && (config1 & 0x3f) == 0x00
 		 && convrate <= 0x07) {
 			name = "max6646";
+		} else
+		/*
+		 * The chip_id of the MAX6654 holds the revision of the chip.
+		 * The lowest 3 bits of the config1 register are unused and
+		 * should return zero when read.
+		 */
+		if (chip_id == 0x08
+		 && (config1 & 0x07) == 0x00
+		 && convrate <= 0x07) {
+			name = "max6654";
 		}
 	} else
 	if (address == 0x4C
@@ -1660,6 +1688,15 @@ static int lm90_init_client(struct i2c_client *client, struct lm90_data *data)
 	if (data->kind == max6680)
 		config |= 0x18;
 
+	/*
+	 * Put MAX6654 into extended range (0x20, extend minimum range from
+	 * 0 degrees to -64 degrees). Note that extended resolution is not
+	 * possible on the MAX6654 unless conversion rate is set to 1 Hz or
+	 * slower, which is intentionally not done by default.
+	 */
+	if (data->kind == max6654)
+		config |= 0x20;
+
 	/*
 	 * Select external channel 0 for max6695/96
 	 */
-- 
2.26.2.645.ge9eca65c58-goog


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] hwmon: (lm90) Add max6654 support to lm90 driver
  2020-05-13 18:42 [PATCH] hwmon: (lm90) Add max6654 support to lm90 driver Josh Lehan
@ 2020-05-14 15:23 ` Guenter Roeck
  0 siblings, 0 replies; 2+ messages in thread
From: Guenter Roeck @ 2020-05-14 15:23 UTC (permalink / raw)
  To: Josh Lehan; +Cc: linux-hwmon, jdelvare

On Wed, May 13, 2020 at 11:42:48AM -0700, Josh Lehan wrote:
> Add support for the Maxim MAX6654 to the lm90 driver.
> 
> The MAX6654 is a temperature sensor, similar to the others,
> but with some differences regarding the configuration
> register, and the sampling rate at which extended resolution
> becomes possible.
> 
> Signed-off-by: Josh Lehan <krellan@google.com>

Applied.

Thanks,
Guenter

> ---
>  Documentation/hwmon/lm90.rst | 23 ++++++++++++++++--
>  drivers/hwmon/Kconfig        |  9 ++++----
>  drivers/hwmon/lm90.c         | 45 ++++++++++++++++++++++++++++++++----
>  3 files changed, 67 insertions(+), 10 deletions(-)
> 
> diff --git a/Documentation/hwmon/lm90.rst b/Documentation/hwmon/lm90.rst
> index 953315987c06..78dfc01b47a2 100644
> --- a/Documentation/hwmon/lm90.rst
> +++ b/Documentation/hwmon/lm90.rst
> @@ -123,6 +123,18 @@ Supported chips:
>  
>  	       http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3497
>  
> +  * Maxim MAX6654
> +
> +    Prefix: 'max6654'
> +
> +    Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b,
> +
> +			   0x4c, 0x4d and 0x4e
> +
> +    Datasheet: Publicly available at the Maxim website
> +
> +	       https://www.maximintegrated.com/en/products/sensors/MAX6654.html
> +
>    * Maxim MAX6657
>  
>      Prefix: 'max6657'
> @@ -301,6 +313,13 @@ ADT7461, ADT7461A, NCT1008:
>    * Extended temperature range (breaks compatibility)
>    * Lower resolution for remote temperature
>  
> +MAX6654:
> +  * Better local resolution
> +  * Selectable address
> +  * Remote sensor type selection
> +  * Extended temperature range
> +  * Extended resolution only available when conversion rate <= 1 Hz
> +
>  MAX6657 and MAX6658:
>    * Better local resolution
>    * Remote sensor type selection
> @@ -336,8 +355,8 @@ SA56004X:
>  
>  All temperature values are given in degrees Celsius. Resolution
>  is 1.0 degree for the local temperature, 0.125 degree for the remote
> -temperature, except for the MAX6657, MAX6658 and MAX6659 which have a
> -resolution of 0.125 degree for both temperatures.
> +temperature, except for the MAX6654, MAX6657, MAX6658 and MAX6659 which have
> +a resolution of 0.125 degree for both temperatures.
>  
>  Each sensor has its own high and low limits, plus a critical limit.
>  Additionally, there is a relative hysteresis value common to both critical
> diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
> index 4c62f900bf7e..e950d1f3e110 100644
> --- a/drivers/hwmon/Kconfig
> +++ b/drivers/hwmon/Kconfig
> @@ -1198,10 +1198,11 @@ config SENSORS_LM90
>  	help
>  	  If you say yes here you get support for National Semiconductor LM90,
>  	  LM86, LM89 and LM99, Analog Devices ADM1032, ADT7461, and ADT7461A,
> -	  Maxim MAX6646, MAX6647, MAX6648, MAX6649, MAX6657, MAX6658, MAX6659,
> -	  MAX6680, MAX6681, MAX6692, MAX6695, MAX6696, ON Semiconductor NCT1008,
> -	  Winbond/Nuvoton W83L771W/G/AWG/ASG, Philips SA56004, GMT G781, and
> -	  Texas Instruments TMP451 sensor chips.
> +	  Maxim MAX6646, MAX6647, MAX6648, MAX6649, MAX6654, MAX6657, MAX6658,
> +	  MAX6659, MAX6680, MAX6681, MAX6692, MAX6695, MAX6696,
> +	  ON Semiconductor NCT1008, Winbond/Nuvoton W83L771W/G/AWG/ASG,
> +	  Philips SA56004, GMT G781, and Texas Instruments TMP451
> +	  sensor chips.
>  
>  	  This driver can also be built as a module. If so, the module
>  	  will be called lm90.
> diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
> index 9b3c9f390ef8..7bdc664af55b 100644
> --- a/drivers/hwmon/lm90.c
> +++ b/drivers/hwmon/lm90.c
> @@ -35,6 +35,14 @@
>   * explicitly as max6659, or if its address is not 0x4c.
>   * These chips lack the remote temperature offset feature.
>   *
> + * This driver also supports the MAX6654 chip made by Maxim. This chip can
> + * be at 9 different addresses, similar to MAX6680/MAX6681. The MAX6654 is
> + * otherwise similar to MAX6657/MAX6658/MAX6659. Extended range is available
> + * by setting the configuration register accordingly, and is done during
> + * initialization. Extended precision is only available at conversion rates
> + * of 1 Hz and slower. Note that extended precision is not enabled by
> + * default, as this driver initializes all chips to 2 Hz by design.
> + *
>   * This driver also supports the MAX6646, MAX6647, MAX6648, MAX6649 and
>   * MAX6692 chips made by Maxim.  These are again similar to the LM86,
>   * but they use unsigned temperature values and can report temperatures
> @@ -94,8 +102,8 @@
>   * have address 0x4d.
>   * MAX6647 has address 0x4e.
>   * MAX6659 can have address 0x4c, 0x4d or 0x4e.
> - * MAX6680 and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b,
> - * 0x4c, 0x4d or 0x4e.
> + * MAX6654, MAX6680, and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29,
> + * 0x2a, 0x2b, 0x4c, 0x4d or 0x4e.
>   * SA56004 can have address 0x48 through 0x4F.
>   */
>  
> @@ -104,7 +112,7 @@ static const unsigned short normal_i2c[] = {
>  	0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
>  
>  enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
> -	max6646, w83l771, max6696, sa56004, g781, tmp451 };
> +	max6646, w83l771, max6696, sa56004, g781, tmp451, max6654 };
>  
>  /*
>   * The LM90 registers
> @@ -145,7 +153,7 @@ enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
>  #define LM90_REG_R_TCRIT_HYST		0x21
>  #define LM90_REG_W_TCRIT_HYST		0x21
>  
> -/* MAX6646/6647/6649/6657/6658/6659/6695/6696 registers */
> +/* MAX6646/6647/6649/6654/6657/6658/6659/6695/6696 registers */
>  
>  #define MAX6657_REG_R_LOCAL_TEMPL	0x11
>  #define MAX6696_REG_R_STATUS2		0x12
> @@ -209,6 +217,7 @@ static const struct i2c_device_id lm90_id[] = {
>  	{ "max6646", max6646 },
>  	{ "max6647", max6646 },
>  	{ "max6649", max6646 },
> +	{ "max6654", max6654 },
>  	{ "max6657", max6657 },
>  	{ "max6658", max6657 },
>  	{ "max6659", max6659 },
> @@ -269,6 +278,10 @@ static const struct of_device_id __maybe_unused lm90_of_match[] = {
>  		.compatible = "dallas,max6649",
>  		.data = (void *)max6646
>  	},
> +	{
> +		.compatible = "dallas,max6654",
> +		.data = (void *)max6654
> +	},
>  	{
>  		.compatible = "dallas,max6657",
>  		.data = (void *)max6657
> @@ -367,6 +380,11 @@ static const struct lm90_params lm90_params[] = {
>  		.max_convrate = 6,
>  		.reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL,
>  	},
> +	[max6654] = {
> +		.alert_alarms = 0x7c,
> +		.max_convrate = 7,
> +		.reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL,
> +	},
>  	[max6657] = {
>  		.flags = LM90_PAUSE_FOR_CONFIG,
>  		.alert_alarms = 0x7c,
> @@ -1557,6 +1575,16 @@ static int lm90_detect(struct i2c_client *client,
>  		 && (config1 & 0x3f) == 0x00
>  		 && convrate <= 0x07) {
>  			name = "max6646";
> +		} else
> +		/*
> +		 * The chip_id of the MAX6654 holds the revision of the chip.
> +		 * The lowest 3 bits of the config1 register are unused and
> +		 * should return zero when read.
> +		 */
> +		if (chip_id == 0x08
> +		 && (config1 & 0x07) == 0x00
> +		 && convrate <= 0x07) {
> +			name = "max6654";
>  		}
>  	} else
>  	if (address == 0x4C
> @@ -1660,6 +1688,15 @@ static int lm90_init_client(struct i2c_client *client, struct lm90_data *data)
>  	if (data->kind == max6680)
>  		config |= 0x18;
>  
> +	/*
> +	 * Put MAX6654 into extended range (0x20, extend minimum range from
> +	 * 0 degrees to -64 degrees). Note that extended resolution is not
> +	 * possible on the MAX6654 unless conversion rate is set to 1 Hz or
> +	 * slower, which is intentionally not done by default.
> +	 */
> +	if (data->kind == max6654)
> +		config |= 0x20;
> +
>  	/*
>  	 * Select external channel 0 for max6695/96
>  	 */

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-05-14 15:23 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-13 18:42 [PATCH] hwmon: (lm90) Add max6654 support to lm90 driver Josh Lehan
2020-05-14 15:23 ` Guenter Roeck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).