/* Copyright 2012 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ /* PECI module for Chrome EC */ #ifndef __CROS_EC_PECI_H #define __CROS_EC_PECI_H #include "common.h" #define PECI_TARGET_ADDRESS 0x30 #define PECI_WRITE_DATA_FIFO_SIZE 15 #define PECI_READ_DATA_FIFO_SIZE 16 #define PECI_GET_TEMP_READ_LENGTH 2 #define PECI_GET_TEMP_WRITE_LENGTH 0 #define PECI_GET_TEMP_TIMEOUT_US 200 /* PECI Command Code */ enum peci_command_code { PECI_CMD_PING = 0x00, PECI_CMD_GET_DIB = 0xF7, PECI_CMD_GET_TEMP = 0x01, PECI_CMD_RD_PKG_CFG = 0xA1, PECI_CMD_WR_PKG_CFG = 0xA5, PECI_CMD_RD_IAMSR = 0xB1, PECI_CMD_WR_IAMSR = 0xB5, PECI_CMD_RD_PCI_CFG = 0x61, PECI_CMD_WR_PCI_CFG = 0x65, PECI_CMD_RD_PCI_CFG_LOCAL = 0xE1, PECI_CMD_WR_PCI_CFG_LOCAL = 0xE5, }; struct peci_data { enum peci_command_code cmd_code; /* command code */ uint8_t addr; /* client address */ uint8_t w_len; /* write length */ uint8_t r_len; /* read length */ uint8_t *w_buf; /* buffer pointer of write data */ uint8_t *r_buf; /* buffer pointer of read data */ int timeout_us; /* transaction timeout unit:us */ }; /** * Get the last polled value of the PECI temp sensor. * * @param idx Sensor index to read. * @param temp_ptr Destination for temperature in K. * * @return EC_SUCCESS if successful, non-zero if error. */ int peci_temp_sensor_get_val(int idx, int *temp_ptr); /** * Start a PECI transaction * * @param peci transaction data * * @return zero if successful, non-zero if error */ int peci_transaction(struct peci_data *peci); #endif /* __CROS_EC_PECI_H */