linux-hwmon.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hwmon:max6697: Make sure the OVERT mask is set correctly
       [not found] <Chu Lin <linchuyuan@google.com>
@ 2020-06-23 22:13 ` Chu Lin
  0 siblings, 0 replies; 2+ messages in thread
From: Chu Lin @ 2020-06-23 22:13 UTC (permalink / raw)
  To: Guenter Roeck, Jean Delvare
  Cc: linux-hwmon, Chu Lin, Jason Ling, Kais Belgaied, Zhongqi Li,
	linux-kernel

Per the datasheet for max6697, OVERT mask and ALERT mask is different.
For example, the 7th bit of OVERT is the local channel but for alert
mask, the 6th bit is the local channel. Therefore, we can't apply the
same mask for both reg. In addition to that, max6697 driver is suppose
to be compatibale with different models. I mannually went over all the
listed chip and made sure all the chip type has the same layout.

Testing;
    mask value of 0x9 should map to 0x44 for ALERT and 0x84 for OVERT.
I used iotool to read the reg value back to verify. I only tested this
change on max6581

Reference:
https://datasheets.maximintegrated.com/en/ds/MAX6581.pdf
https://datasheets.maximintegrated.com/en/ds/MAX6697.pdf
https://datasheets.maximintegrated.com/en/ds/MAX6699.pdf

Signed-off-by: Chu Lin <linchuyuan@google.com>
---
 drivers/hwmon/max6697.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/hwmon/max6697.c b/drivers/hwmon/max6697.c
index 743752a2467a..64122eb38060 100644
--- a/drivers/hwmon/max6697.c
+++ b/drivers/hwmon/max6697.c
@@ -38,8 +38,9 @@ static const u8 MAX6697_REG_CRIT[] = {
  * Map device tree / platform data register bit map to chip bit map.
  * Applies to alert register and over-temperature register.
  */
-#define MAX6697_MAP_BITS(reg)	((((reg) & 0x7e) >> 1) | \
+#define MAX6697_ALERT_MAP_BITS(reg)	((((reg) & 0x7e) >> 1) | \
 				 (((reg) & 0x01) << 6) | ((reg) & 0x80))
+#define MAX6697_OVERT_MAP_BITS(reg) (((reg) >> 1) | (((reg) & 0x01) << 7))
 
 #define MAX6697_REG_STAT(n)		(0x44 + (n))
 
@@ -562,12 +563,12 @@ static int max6697_init_chip(struct max6697_data *data,
 		return ret;
 
 	ret = i2c_smbus_write_byte_data(client, MAX6697_REG_ALERT_MASK,
-					MAX6697_MAP_BITS(pdata->alert_mask));
+				MAX6697_ALERT_MAP_BITS(pdata->alert_mask));
 	if (ret < 0)
 		return ret;
 
 	ret = i2c_smbus_write_byte_data(client, MAX6697_REG_OVERT_MASK,
-				MAX6697_MAP_BITS(pdata->over_temperature_mask));
+			MAX6697_OVERT_MAP_BITS(pdata->over_temperature_mask));
 	if (ret < 0)
 		return ret;
 
-- 
2.27.0.111.gc72c7da667-goog


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

* Re: [PATCH] hwmon:max6697: Make sure the OVERT mask is set correctly
@ 2020-06-24 16:38 Guenter Roeck
  0 siblings, 0 replies; 2+ messages in thread
From: Guenter Roeck @ 2020-06-24 16:38 UTC (permalink / raw)
  To: Chu Lin
  Cc: Jean Delvare, linux-hwmon, Jason Ling, Kais Belgaied, Zhongqi Li,
	linux-kernel

On Tue, Jun 23, 2020 at 10:13:08PM +0000, Chu Lin wrote:
> Per the datasheet for max6697, OVERT mask and ALERT mask is different.
> For example, the 7th bit of OVERT is the local channel but for alert
> mask, the 6th bit is the local channel. Therefore, we can't apply the
> same mask for both reg. In addition to that, max6697 driver is suppose
> to be compatibale with different models. I mannually went over all the
> listed chip and made sure all the chip type has the same layout.
> 
> Testing;
>     mask value of 0x9 should map to 0x44 for ALERT and 0x84 for OVERT.
> I used iotool to read the reg value back to verify. I only tested this
> change on max6581
> 
> Reference:
> https://datasheets.maximintegrated.com/en/ds/MAX6581.pdf
> https://datasheets.maximintegrated.com/en/ds/MAX6697.pdf
> https://datasheets.maximintegrated.com/en/ds/MAX6699.pdf
> 
> Signed-off-by: Chu Lin <linchuyuan@google.com>

Nice catch.

Applied, thanks

Guenter

> ---
>  drivers/hwmon/max6697.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/hwmon/max6697.c b/drivers/hwmon/max6697.c
> index 743752a2467a..64122eb38060 100644
> --- a/drivers/hwmon/max6697.c
> +++ b/drivers/hwmon/max6697.c
> @@ -38,8 +38,9 @@ static const u8 MAX6697_REG_CRIT[] = {
>   * Map device tree / platform data register bit map to chip bit map.
>   * Applies to alert register and over-temperature register.
>   */
> -#define MAX6697_MAP_BITS(reg)	((((reg) & 0x7e) >> 1) | \
> +#define MAX6697_ALERT_MAP_BITS(reg)	((((reg) & 0x7e) >> 1) | \
>  				 (((reg) & 0x01) << 6) | ((reg) & 0x80))
> +#define MAX6697_OVERT_MAP_BITS(reg) (((reg) >> 1) | (((reg) & 0x01) << 7))
>  
>  #define MAX6697_REG_STAT(n)		(0x44 + (n))
>  
> @@ -562,12 +563,12 @@ static int max6697_init_chip(struct max6697_data *data,
>  		return ret;
>  
>  	ret = i2c_smbus_write_byte_data(client, MAX6697_REG_ALERT_MASK,
> -					MAX6697_MAP_BITS(pdata->alert_mask));
> +				MAX6697_ALERT_MAP_BITS(pdata->alert_mask));
>  	if (ret < 0)
>  		return ret;
>  
>  	ret = i2c_smbus_write_byte_data(client, MAX6697_REG_OVERT_MASK,
> -				MAX6697_MAP_BITS(pdata->over_temperature_mask));
> +			MAX6697_OVERT_MAP_BITS(pdata->over_temperature_mask));
>  	if (ret < 0)
>  		return ret;
>  
> -- 
> 2.27.0.111.gc72c7da667-goog
> 

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

end of thread, other threads:[~2020-06-24 16:38 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <Chu Lin <linchuyuan@google.com>
2020-06-23 22:13 ` [PATCH] hwmon:max6697: Make sure the OVERT mask is set correctly Chu Lin
2020-06-24 16:38 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).