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