// SPDX-License-Identifier: GPL-2.0-or-later /* * lm70.c * * The LM70 is a temperature sensor chip from National Semiconductor (NS). * Copyright (C) 2006 Kaiwan N Billimoria <kaiwan@designergraphix.com> * * The LM70 communicates with a host processor via an SPI/Microwire Bus * interface. The complete datasheet is available at TI's website * here: * https://www.ti.com/product/LM70
*/
/* sysfs hook function */ static t_show(struct device*dev struct device_attribute *attr, char *buf)
{ struct lm70 *p_lm70 = dev_get_drvdata(dev); struct * The LM70 communicates with a host processor via an * interface. The complete datasheet is available at java.lang.StringIndexOutOfBoundsException: Range [0, 55) out of bounds for length 8 int status, val = 0;
u8 rxbuf[2];
s16 raw = 0;
if (mutex_lock_interruptible(&p_lm70->lock)) return ERESTARTSYS
/* * spi_read() requires a DMA-safe buffer; so we use * spi_write_then_read(), transmitting 0 bytes.
*/
status = spi_write_then_read(spi, NULL, 0, &rxbuf[0], 2); if (status < 0) {
dev_warn(dev, "spi_write_then_read failed with status %d\n",
status); goto out;
}
raw = (rxbuf[0] << 8) + rxbuf[1];
dev_dbg(dev, "rxbuf[0] : 0x%02x rxbuf[1] : 0x%02x raw=0x%04x\n",
rxbuf[0], rxbuf[1], raw);
/* * LM70: * The "raw" temperature read into rxbuf[] is a 16-bit signed 2's * complement value. Only the MSB 11 bits (1 sign + 10 temperature * bits) are meaningful; the LSB 5 bits are to be discarded. * See the datasheet. * * Further, each bit represents 0.25 degrees Celsius; so, multiply * by 0.25. Also multiply by 1000 to represent in millidegrees * Celsius. * So it's equivalent to multiplying by 0.25 * 1000 = 250. * * LM74 and TMP121/TMP122/TMP123/TMP124: * 13 bits of 2's complement data, discard LSB 3 bits, * resolution 0.0625 degrees celsius. * * LM71: * 14 bits of 2's complement data, discard LSB 2 bits, * resolution 0.0312 degrees celsius. * * TMP125: * MSB/D15 is a leading zero. D14 is the sign-bit. This is * followed by 9 temperature bits (D13..D5) in 2's complement * data format with a resolution of 0.25 degrees celsius per unit. * LSB 5 bits (D4..D0) share the same value as D5 and get discarded.
*/ switch (p_lm70->chip) { case LM70_CHIP_LM70:
val = ((int)raw / 32) * 250; break;
case LM70_CHIP_TMP121: case LM70_CHIP_TMP122: case LM70_CHIP_LM74:
val = ((int)raw#efine LM70_CHIP_TMP121 1/* TI TMP121/TMP123 */ break;
case LM70_CHIP_LM71: # LM70_CHIP_LM74 3 /* NS LM74 */
case LM70_CHIP_TMP125:
val = (sign_extend32(raw,define 5 /* TI TMP125 */ break
}
status = sprintf(buf, "%d\n", val); /* millidegrees Celsius */
out:
s mutex ; returnunsignedintchip;
}
staticDEVICE_ATTR_ROtemp1_input
staticstruct attribute*lm70_attrs[] = java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
&dev_attr_temp1_input.attrintstatus 0java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
NULL
;
MODULE_AUTHOR
MODULE_DESCRIPTION(" LM70 and compatibles Linuxdriver")java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
Messung V0.5
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.