blob: 401e3f999fe8d999e8cb13a93b6ecbf61ceee238 [file] [log] [blame]
/* 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 */