1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * (C) Copyright 2019 4 * Cortina Access, <www.cortina-access.com> 5 */ 6 7 #ifndef __CA_I2C_H_ 8 #define __CA_I2C_H_ 9 10 #include <linux/bitops.h> 11 #include <linux/delay.h> 12 13 #if !defined(__ASSEMBLER__) && !defined(__ASSEMBLY__) 14 struct i2c_regs { 15 u32 i2c_cfg; 16 u32 i2c_ctrl; 17 u32 i2c_txr; 18 u32 i2c_rxr; 19 u32 i2c_ack; 20 u32 i2c_ie0; 21 u32 i2c_int0; 22 u32 i2c_ie1; 23 u32 i2c_int1; 24 u32 i2c_stat; 25 }; 26 27 union ca_biw_cfg { 28 struct biw_cfg { 29 u32 core_en : 1; 30 u32 biw_soft_reset : 1; 31 u32 busywait_en : 1; 32 u32 stretch_en : 1; 33 u32 arb_en : 1; 34 u32 clksync_en : 1; 35 u32 rsrvd1 : 2; 36 u32 spike_cnt : 4; 37 u32 rsrvd2 : 4; 38 u32 prer : 16; 39 } bf; 40 unsigned int wrd; 41 }; 42 43 union ca_biw_ctrl { 44 struct biw_ctrl { 45 u32 biwdone : 1; 46 u32 rsrvd1 : 2; 47 u32 ack_in : 1; 48 u32 write : 1; 49 u32 read : 1; 50 u32 stop : 1; 51 u32 start : 1; 52 u32 rsrvd2 : 24; 53 } bf; 54 unsigned int wrd; 55 }; 56 57 union ca_biw_ack { 58 struct biw_ack { 59 u32 al :1; 60 u32 biw_busy :1; 61 u32 ack_out :1; 62 u32 rsrvd1 :29; 63 } bf; 64 unsigned int wrd; 65 }; 66 #endif /* !__ASSEMBLER__*/ 67 68 struct ca_i2c { 69 struct i2c_regs *regs; 70 unsigned int speed; 71 }; 72 73 #define I2C_CMD_WT 0 74 #define I2C_CMD_RD 1 75 76 #define BIW_CTRL_DONE BIT(0) 77 #define BIW_CTRL_ACK_IN BIT(3) 78 #define BIW_CTRL_WRITE BIT(4) 79 #define BIW_CTRL_READ BIT(5) 80 #define BIW_CTRL_STOP BIT(6) 81 #define BIW_CTRL_START BIT(7) 82 83 #define I2C_BYTE_TO (CONFIG_SYS_HZ / 500) 84 #define I2C_STOPDET_TO (CONFIG_SYS_HZ / 500) 85 #define I2C_BYTE_TO_BB (10) 86 87 #endif /* __CA_I2C_H_ */ 88