i2c-cortina.h 1.5 KB

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