123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /* SPDX-License-Identifier: GPL-2.0+ */
- /*
- * (C) Copyright 2019
- * Cortina Access, <www.cortina-access.com>
- */
- #ifndef __CA_I2C_H_
- #define __CA_I2C_H_
- #include <linux/bitops.h>
- #include <linux/delay.h>
- #if !defined(__ASSEMBLER__) && !defined(__ASSEMBLY__)
- struct i2c_regs {
- u32 i2c_cfg;
- u32 i2c_ctrl;
- u32 i2c_txr;
- u32 i2c_rxr;
- u32 i2c_ack;
- u32 i2c_ie0;
- u32 i2c_int0;
- u32 i2c_ie1;
- u32 i2c_int1;
- u32 i2c_stat;
- };
- union ca_biw_cfg {
- struct biw_cfg {
- u32 core_en : 1;
- u32 biw_soft_reset : 1;
- u32 busywait_en : 1;
- u32 stretch_en : 1;
- u32 arb_en : 1;
- u32 clksync_en : 1;
- u32 rsrvd1 : 2;
- u32 spike_cnt : 4;
- u32 rsrvd2 : 4;
- u32 prer : 16;
- } bf;
- unsigned int wrd;
- };
- union ca_biw_ctrl {
- struct biw_ctrl {
- u32 biwdone : 1;
- u32 rsrvd1 : 2;
- u32 ack_in : 1;
- u32 write : 1;
- u32 read : 1;
- u32 stop : 1;
- u32 start : 1;
- u32 rsrvd2 : 24;
- } bf;
- unsigned int wrd;
- };
- union ca_biw_ack {
- struct biw_ack {
- u32 al :1;
- u32 biw_busy :1;
- u32 ack_out :1;
- u32 rsrvd1 :29;
- } bf;
- unsigned int wrd;
- };
- #endif /* !__ASSEMBLER__*/
- struct ca_i2c {
- struct i2c_regs *regs;
- unsigned int speed;
- };
- #define I2C_CMD_WT 0
- #define I2C_CMD_RD 1
- #define BIW_CTRL_DONE BIT(0)
- #define BIW_CTRL_ACK_IN BIT(3)
- #define BIW_CTRL_WRITE BIT(4)
- #define BIW_CTRL_READ BIT(5)
- #define BIW_CTRL_STOP BIT(6)
- #define BIW_CTRL_START BIT(7)
- #define I2C_BYTE_TO (CONFIG_SYS_HZ / 500)
- #define I2C_STOPDET_TO (CONFIG_SYS_HZ / 500)
- #define I2C_BYTE_TO_BB (10)
- #endif /* __CA_I2C_H_ */
|