static ssize_t ad7314_show_temperature(struct device *dev, struct device_attribute *attr, char *buf) { struct ad7314_data *chip = dev_get_drvdata(dev); s16 data; int ret; ret = ad7314_spi_read(chip); if (ret < 0) return ret; switch (spi_get_device_id(chip->spi_dev)->driver_data) { case ad7314: data = (ret & AD7314_TEMP_MASK) >> AD7314_TEMP_SHIFT; data = (data << 6) >> 6; return sprintf(buf, "%d\n", 250 * data); case adt7301: case adt7302: /* * Documented as a 13 bit twos complement register * with a sign bit - which is a 14 bit 2's complement * register. 1lsb - 31.25 milli degrees centigrade */ data = ret & ADT7301_TEMP_MASK; data = (data << 2) >> 2; return sprintf(buf, "%d\n", DIV_ROUND_CLOSEST(data * 3125, 100)); default: return -EINVAL; } }
static ssize_t ad7314_show_temperature(struct device *dev, struct device_attribute *attr, char *buf) { struct ad7314_data *chip = dev_get_drvdata(dev); s16 data; int ret; ret = ad7314_spi_read(chip); if (ret < 0) return ret; switch (spi_get_device_id(chip->spi_dev)->driver_data) { case ad7314: data = (ret & AD7314_TEMP_MASK) >> AD7314_TEMP_OFFSET; data = (data << 6) >> 6; return sprintf(buf, "%d\n", 250 * data); case adt7301: case adt7302: data = ret & ADT7301_TEMP_MASK; data = (data << 2) >> 2; return sprintf(buf, "%d\n", DIV_ROUND_CLOSEST(data * 3125, 100)); default: return -EINVAL; } }
static ssize_t ad7314_show_temperature(struct device *dev, struct device_attribute *attr, char *buf) { struct iio_dev *dev_info = dev_get_drvdata(dev); struct ad7314_chip_info *chip = dev_info->dev_data; u16 data; char sign = ' '; int ret; if (chip->mode) { ret = ad7314_spi_write(chip, 0); if (ret) return -EIO; } ret = ad7314_spi_read(chip, &data); if (ret) return -EIO; if (chip->mode) ad7314_spi_write(chip, chip->mode); if (strcmp(dev_info->name, "ad7314")) { data = (data & AD7314_TEMP_MASK) >> AD7314_TEMP_OFFSET; if (data & AD7314_TEMP_SIGN) { data = (AD7314_TEMP_SIGN << 1) - data; sign = '-'; } return sprintf(buf, "%c%d.%.2d\n", sign, data >> AD7314_TEMP_FLOAT_OFFSET, (data & AD7314_TEMP_FLOAT_MASK) * 25); } else {