#include <linux/module.h>
#include <linux/spi/spi.h>
#include <asm/unaligned.h>
#define ADT7310_TEMPERATURE 2
#define ADT7310_T_ALARM_HIGH 6
#define ADT7310_T_ALARM_LOW 7
static const u8 adt7310_reg_table[] = {
[ADT7X10_TEMPERATURE] = ADT7310_TEMPERATURE,
[ADT7X10_STATUS] = ADT7310_STATUS,
[ADT7X10_CONFIG] = ADT7310_CONFIG,
[ADT7X10_T_ALARM_HIGH] = ADT7310_T_ALARM_HIGH,
[ADT7X10_T_ALARM_LOW] = ADT7310_T_ALARM_LOW,
[ADT7X10_T_CRIT] = ADT7310_T_CRIT,
[ADT7X10_T_HYST] = ADT7310_T_HYST,
[ADT7X10_ID] = ADT7310_ID,
#define ADT7310_CMD_REG_OFFSET 3
#define ADT7310_CMD_READ 0x40
#define AD7310_COMMAND(reg) (adt7310_reg_table[(reg)] << ADT7310_CMD_REG_OFFSET)
static int adt7310_spi_read_word(struct device *dev, u8 reg)
struct spi_device *spi = to_spi_device(dev);
return spi_w8r16be(spi, AD7310_COMMAND(reg) | ADT7310_CMD_READ);
static int adt7310_spi_write_word(struct device *dev, u8 reg, u16 data)
struct spi_device *spi = to_spi_device(dev);
buf[0] = AD7310_COMMAND(reg);
put_unaligned_be16(data, &buf[1]);
return spi_write(spi, buf, sizeof(buf));
static int adt7310_spi_read_byte(struct device *dev, u8 reg)
struct spi_device *spi = to_spi_device(dev);