root/sys/dev/i2c/nxp75areg.h
/* $NetBSD: nxp75areg.h,v 1.1 2026/06/03 11:08:41 jdc Exp $ */

/*-
 * Copyright (c) 2026 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Julian Coleman.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _DEV_I2C_NXP75AREG_H_
#define _DEV_I2C_NXP75AREG_H_

/*
 * *NXP* LM75A temperature sensor register definitions.
 * Pin compatible but not the same as the *TI* LM75A.
 */

#define NXP75A_ADDRMASK         0x3f8
#define NXP75A_ADDR             0x48

/*
 * Temperature on the NXP LM75A is represented by a 11-bit two's complement
 * word with the LSB equal to 0.125C.  From the data sheet:
 *
 *      +127C   011 1111 1000   0x3f8
 *    +126.875C 011 1111 0111   0x3f7
 *    +126.125C 011 1111 0001   0x3f1
 *      +125C   011 1110 1000   0x3e8
 *      +25C    000 1100 1000   0x9c8
 *      +0.125C 000 0000 0001   0x001
 *       0C     000 0000 0000   0x000
 *      -0.125C 111 1111 1111   0x7ff
 *      -25C    111 0011 1000   0x738
 *     -54.875C 110 0100 1001   0x649
 *      -55C    110 0100 1000   0x648
 *
 * The bits are left-shifted to take the high 11 bits of the 2 registers.
 */

/* Command bits 0-2 select the register */
#define NXP75A_TEMP             0x00
#define NXP75A_CONFIG           0x01
#define NXP75A_THYST            0x02
#define NXP75A_OVERTEMP         0x03

/* Configuration register */
#define NXP75A_CONF_SHUTDOWN    (1 << 0)        /* Shutdown mode */
#define NXP75A_CONF_OS_MODE_INT (1 << 1)        /* OS interrupt mode*/
#define NXP75A_CONF_OS_MODE_CMP (1 << 0)        /* OS comparator mode*/
#define NXP75A_CONF_OS_POL_HIGH (2 << 1)        /* OS polarity high */
#define NXP75A_CONF_OS_POL_LOW  (2 << 0)        /* OS polarity low */
#define NXP75A_CONF_OS_FLTQ_1   (0 << 3)        /* OS fault queue len 1 */
#define NXP75A_CONF_OS_FLTQ_2   (1 << 3)        /* OS fault queue len 2 */
#define NXP75A_CONF_OS_FLTQ_4   (2 << 3)        /* OS fault queue len 4 */
#define NXP75A_CONF_OS_FLTQ_6   (3 << 3)        /* OS fault queue len 6 */

#define NXP75A_TEMP_LEN         2       /* 2 bytes for temperatures */
#define NXP75A_CONF_LEN         1       /* 1 byte for configuration */

#endif /* _DEV_I2C_NXP75AREG_H_ */