/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 
 | 
/* 
 | 
 * SECO X86 Boards CEC register defines 
 | 
 * 
 | 
 * Author:  Ettore Chimenti <ek5.chimenti@gmail.com> 
 | 
 * Copyright (C) 2018, SECO Spa. 
 | 
 * Copyright (C) 2018, Aidilab Srl. 
 | 
 */ 
 | 
  
 | 
#ifndef __SECO_CEC_H__ 
 | 
#define __SECO_CEC_H__ 
 | 
  
 | 
#define SECOCEC_MAX_ADDRS        1 
 | 
#define SECOCEC_DEV_NAME        "secocec" 
 | 
#define SECOCEC_LATEST_FW        0x0f0b 
 | 
  
 | 
#define SMBTIMEOUT            0xfff 
 | 
#define SMB_POLL_UDELAY            10 
 | 
  
 | 
#define SMBUS_WRITE            0 
 | 
#define SMBUS_READ            1 
 | 
  
 | 
#define CMD_BYTE_DATA            0 
 | 
#define CMD_WORD_DATA            1 
 | 
  
 | 
/* 
 | 
 * SMBus definitons for Braswell 
 | 
 */ 
 | 
  
 | 
#define BRA_DONE_STATUS            BIT(7) 
 | 
#define BRA_INUSE_STS            BIT(6) 
 | 
#define BRA_FAILED_OP            BIT(4) 
 | 
#define BRA_BUS_ERR            BIT(3) 
 | 
#define BRA_DEV_ERR            BIT(2) 
 | 
#define BRA_INTR            BIT(1) 
 | 
#define BRA_HOST_BUSY            BIT(0) 
 | 
#define BRA_HSTS_ERR_MASK   (BRA_FAILED_OP | BRA_BUS_ERR | BRA_DEV_ERR) 
 | 
  
 | 
#define BRA_PEC_EN            BIT(7) 
 | 
#define BRA_START            BIT(6) 
 | 
#define BRA_LAST__BYTE            BIT(5) 
 | 
#define BRA_INTREN            BIT(0) 
 | 
#define BRA_SMB_CMD            (7 << 2) 
 | 
#define BRA_SMB_CMD_QUICK        (0 << 2) 
 | 
#define BRA_SMB_CMD_BYTE        (1 << 2) 
 | 
#define BRA_SMB_CMD_BYTE_DATA        (2 << 2) 
 | 
#define BRA_SMB_CMD_WORD_DATA        (3 << 2) 
 | 
#define BRA_SMB_CMD_PROCESS_CALL    (4 << 2) 
 | 
#define BRA_SMB_CMD_BLOCK        (5 << 2) 
 | 
#define BRA_SMB_CMD_I2CREAD        (6 << 2) 
 | 
#define BRA_SMB_CMD_BLOCK_PROCESS    (7 << 2) 
 | 
  
 | 
#define BRA_SMB_BASE_ADDR  0x2040 
 | 
#define HSTS               (BRA_SMB_BASE_ADDR + 0) 
 | 
#define HCNT               (BRA_SMB_BASE_ADDR + 2) 
 | 
#define HCMD               (BRA_SMB_BASE_ADDR + 3) 
 | 
#define XMIT_SLVA          (BRA_SMB_BASE_ADDR + 4) 
 | 
#define HDAT0              (BRA_SMB_BASE_ADDR + 5) 
 | 
#define HDAT1              (BRA_SMB_BASE_ADDR + 6) 
 | 
  
 | 
/* 
 | 
 * Microcontroller Address 
 | 
 */ 
 | 
  
 | 
#define SECOCEC_MICRO_ADDRESS        0x40 
 | 
  
 | 
/* 
 | 
 * STM32 SMBus Registers 
 | 
 */ 
 | 
  
 | 
#define SECOCEC_VERSION            0x00 
 | 
#define SECOCEC_ENABLE_REG_1        0x01 
 | 
#define SECOCEC_ENABLE_REG_2        0x02 
 | 
#define SECOCEC_STATUS_REG_1        0x03 
 | 
#define SECOCEC_STATUS_REG_2        0x04 
 | 
  
 | 
#define SECOCEC_STATUS            0x28 
 | 
#define SECOCEC_DEVICE_LA        0x29 
 | 
#define SECOCEC_READ_OPERATION_ID    0x2a 
 | 
#define SECOCEC_READ_DATA_LENGTH    0x2b 
 | 
#define SECOCEC_READ_DATA_00        0x2c 
 | 
#define SECOCEC_READ_DATA_02        0x2d 
 | 
#define SECOCEC_READ_DATA_04        0x2e 
 | 
#define SECOCEC_READ_DATA_06        0x2f 
 | 
#define SECOCEC_READ_DATA_08        0x30 
 | 
#define SECOCEC_READ_DATA_10        0x31 
 | 
#define SECOCEC_READ_DATA_12        0x32 
 | 
#define SECOCEC_READ_BYTE0        0x33 
 | 
#define SECOCEC_WRITE_OPERATION_ID    0x34 
 | 
#define SECOCEC_WRITE_DATA_LENGTH    0x35 
 | 
#define SECOCEC_WRITE_DATA_00        0x36 
 | 
#define SECOCEC_WRITE_DATA_02        0x37 
 | 
#define SECOCEC_WRITE_DATA_04        0x38 
 | 
#define SECOCEC_WRITE_DATA_06        0x39 
 | 
#define SECOCEC_WRITE_DATA_08        0x3a 
 | 
#define SECOCEC_WRITE_DATA_10        0x3b 
 | 
#define SECOCEC_WRITE_DATA_12        0x3c 
 | 
#define SECOCEC_WRITE_BYTE0        0x3d 
 | 
  
 | 
#define SECOCEC_IR_READ_DATA        0x3e 
 | 
  
 | 
/* 
 | 
 * IR 
 | 
 */ 
 | 
  
 | 
#define SECOCEC_IR_COMMAND_MASK        0x007F 
 | 
#define SECOCEC_IR_COMMAND_SHL        0 
 | 
#define SECOCEC_IR_ADDRESS_MASK        0x1F00 
 | 
#define SECOCEC_IR_ADDRESS_SHL        8 
 | 
#define SECOCEC_IR_TOGGLE_MASK        0x8000 
 | 
#define SECOCEC_IR_TOGGLE_SHL        15 
 | 
  
 | 
/* 
 | 
 * Enabling register 
 | 
 */ 
 | 
  
 | 
#define SECOCEC_ENABLE_REG_1_CEC        0x1000 
 | 
#define SECOCEC_ENABLE_REG_1_IR            0x2000 
 | 
#define SECOCEC_ENABLE_REG_1_IR_PASSTHROUGH    0x4000 
 | 
  
 | 
/* 
 | 
 * Status register 
 | 
 */ 
 | 
  
 | 
#define SECOCEC_STATUS_REG_1_CEC    SECOCEC_ENABLE_REG_1_CEC 
 | 
#define SECOCEC_STATUS_REG_1_IR        SECOCEC_ENABLE_REG_1_IR 
 | 
#define SECOCEC_STATUS_REG_1_IR_PASSTHR    SECOCEC_ENABLE_REG_1_IR_PASSTHR 
 | 
  
 | 
/* 
 | 
 * Status data 
 | 
 */ 
 | 
  
 | 
#define SECOCEC_STATUS_MSG_RECEIVED_MASK    BIT(0) 
 | 
#define SECOCEC_STATUS_RX_ERROR_MASK        BIT(1) 
 | 
#define SECOCEC_STATUS_MSG_SENT_MASK        BIT(2) 
 | 
#define SECOCEC_STATUS_TX_ERROR_MASK        BIT(3) 
 | 
  
 | 
#define SECOCEC_STATUS_TX_NACK_ERROR        BIT(4) 
 | 
#define SECOCEC_STATUS_RX_OVERFLOW_MASK        BIT(5) 
 | 
  
 | 
#endif /* __SECO_CEC_H__ */ 
 |