1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2/*
3 * SECO X86 Boards CEC register defines
4 *
5 * Author:  Ettore Chimenti <ek5.chimenti@gmail.com>
6 * Copyright (C) 2018, SECO Spa.
7 * Copyright (C) 2018, Aidilab Srl.
8 */
9
10#ifndef __SECO_CEC_H__
11#define __SECO_CEC_H__
12
13#define SECOCEC_MAX_ADDRS		1
14#define SECOCEC_DEV_NAME		"secocec"
15#define SECOCEC_LATEST_FW		0x0f0b
16
17#define SMBTIMEOUT			0xfff
18#define SMB_POLL_UDELAY			10
19
20#define SMBUS_WRITE			0
21#define SMBUS_READ			1
22
23#define CMD_BYTE_DATA			0
24#define CMD_WORD_DATA			1
25
26/*
27 * SMBus definitons for Braswell
28 */
29
30#define BRA_DONE_STATUS			BIT(7)
31#define BRA_INUSE_STS			BIT(6)
32#define BRA_FAILED_OP			BIT(4)
33#define BRA_BUS_ERR			BIT(3)
34#define BRA_DEV_ERR			BIT(2)
35#define BRA_INTR			BIT(1)
36#define BRA_HOST_BUSY			BIT(0)
37#define BRA_HSTS_ERR_MASK   (BRA_FAILED_OP | BRA_BUS_ERR | BRA_DEV_ERR)
38
39#define BRA_PEC_EN			BIT(7)
40#define BRA_START			BIT(6)
41#define BRA_LAST__BYTE			BIT(5)
42#define BRA_INTREN			BIT(0)
43#define BRA_SMB_CMD			(7 << 2)
44#define BRA_SMB_CMD_QUICK		(0 << 2)
45#define BRA_SMB_CMD_BYTE		(1 << 2)
46#define BRA_SMB_CMD_BYTE_DATA		(2 << 2)
47#define BRA_SMB_CMD_WORD_DATA		(3 << 2)
48#define BRA_SMB_CMD_PROCESS_CALL	(4 << 2)
49#define BRA_SMB_CMD_BLOCK		(5 << 2)
50#define BRA_SMB_CMD_I2CREAD		(6 << 2)
51#define BRA_SMB_CMD_BLOCK_PROCESS	(7 << 2)
52
53#define BRA_SMB_BASE_ADDR  0x2040
54#define HSTS               (BRA_SMB_BASE_ADDR + 0)
55#define HCNT               (BRA_SMB_BASE_ADDR + 2)
56#define HCMD               (BRA_SMB_BASE_ADDR + 3)
57#define XMIT_SLVA          (BRA_SMB_BASE_ADDR + 4)
58#define HDAT0              (BRA_SMB_BASE_ADDR + 5)
59#define HDAT1              (BRA_SMB_BASE_ADDR + 6)
60
61/*
62 * Microcontroller Address
63 */
64
65#define SECOCEC_MICRO_ADDRESS		0x40
66
67/*
68 * STM32 SMBus Registers
69 */
70
71#define SECOCEC_VERSION			0x00
72#define SECOCEC_ENABLE_REG_1		0x01
73#define SECOCEC_ENABLE_REG_2		0x02
74#define SECOCEC_STATUS_REG_1		0x03
75#define SECOCEC_STATUS_REG_2		0x04
76
77#define SECOCEC_STATUS			0x28
78#define SECOCEC_DEVICE_LA		0x29
79#define SECOCEC_READ_OPERATION_ID	0x2a
80#define SECOCEC_READ_DATA_LENGTH	0x2b
81#define SECOCEC_READ_DATA_00		0x2c
82#define SECOCEC_READ_DATA_02		0x2d
83#define SECOCEC_READ_DATA_04		0x2e
84#define SECOCEC_READ_DATA_06		0x2f
85#define SECOCEC_READ_DATA_08		0x30
86#define SECOCEC_READ_DATA_10		0x31
87#define SECOCEC_READ_DATA_12		0x32
88#define SECOCEC_READ_BYTE0		0x33
89#define SECOCEC_WRITE_OPERATION_ID	0x34
90#define SECOCEC_WRITE_DATA_LENGTH	0x35
91#define SECOCEC_WRITE_DATA_00		0x36
92#define SECOCEC_WRITE_DATA_02		0x37
93#define SECOCEC_WRITE_DATA_04		0x38
94#define SECOCEC_WRITE_DATA_06		0x39
95#define SECOCEC_WRITE_DATA_08		0x3a
96#define SECOCEC_WRITE_DATA_10		0x3b
97#define SECOCEC_WRITE_DATA_12		0x3c
98#define SECOCEC_WRITE_BYTE0		0x3d
99
100#define SECOCEC_IR_READ_DATA		0x3e
101
102/*
103 * IR
104 */
105
106#define SECOCEC_IR_COMMAND_MASK		0x007F
107#define SECOCEC_IR_COMMAND_SHL		0
108#define SECOCEC_IR_ADDRESS_MASK		0x1F00
109#define SECOCEC_IR_ADDRESS_SHL		8
110#define SECOCEC_IR_TOGGLE_MASK		0x8000
111#define SECOCEC_IR_TOGGLE_SHL		15
112
113/*
114 * Enabling register
115 */
116
117#define SECOCEC_ENABLE_REG_1_CEC		0x1000
118#define SECOCEC_ENABLE_REG_1_IR			0x2000
119#define SECOCEC_ENABLE_REG_1_IR_PASSTHROUGH	0x4000
120
121/*
122 * Status register
123 */
124
125#define SECOCEC_STATUS_REG_1_CEC	SECOCEC_ENABLE_REG_1_CEC
126#define SECOCEC_STATUS_REG_1_IR		SECOCEC_ENABLE_REG_1_IR
127#define SECOCEC_STATUS_REG_1_IR_PASSTHR	SECOCEC_ENABLE_REG_1_IR_PASSTHR
128
129/*
130 * Status data
131 */
132
133#define SECOCEC_STATUS_MSG_RECEIVED_MASK	BIT(0)
134#define SECOCEC_STATUS_RX_ERROR_MASK		BIT(1)
135#define SECOCEC_STATUS_MSG_SENT_MASK		BIT(2)
136#define SECOCEC_STATUS_TX_ERROR_MASK		BIT(3)
137
138#define SECOCEC_STATUS_TX_NACK_ERROR		BIT(4)
139#define SECOCEC_STATUS_RX_OVERFLOW_MASK		BIT(5)
140
141#endif /* __SECO_CEC_H__ */
142