linux/drivers/hwmon/lm75.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * lm75.h - Part of lm_sensors, Linux kernel modules for hardware monitoring
   4 * Copyright (c) 2003 Mark M. Hoffman <mhoffman@lightlink.com>
   5 */
   6
   7/*
   8 * This file contains common code for encoding/decoding LM75 type
   9 * temperature readings, which are emulated by many of the chips
  10 * we support.  As the user is unlikely to load more than one driver
  11 * which contains this code, we don't worry about the wasted space.
  12 */
  13
  14#include <linux/kernel.h>
  15
  16/* straight from the datasheet */
  17#define LM75_TEMP_MIN (-55000)
  18#define LM75_TEMP_MAX 125000
  19#define LM75_SHUTDOWN 0x01
  20
  21/*
  22 * TEMP: 0.001C/bit (-55C to +125C)
  23 * REG: (0.5C/bit, two's complement) << 7
  24 */
  25static inline u16 LM75_TEMP_TO_REG(long temp)
  26{
  27        int ntemp = clamp_val(temp, LM75_TEMP_MIN, LM75_TEMP_MAX);
  28
  29        ntemp += (ntemp < 0 ? -250 : 250);
  30        return (u16)((ntemp / 500) << 7);
  31}
  32
  33static inline int LM75_TEMP_FROM_REG(u16 reg)
  34{
  35        /*
  36         * use integer division instead of equivalent right shift to
  37         * guarantee arithmetic shift and preserve the sign
  38         */
  39        return ((s16)reg / 128) * 500;
  40}
  41