bfin_twi.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * bfin_twi.h - interface to Blackfin TWIs
  3. *
  4. * Copyright 2005-2010 Analog Devices Inc.
  5. *
  6. * Licensed under the GPL-2 or later.
  7. */
  8. #ifndef __ASM_BFIN_TWI_H__
  9. #define __ASM_BFIN_TWI_H__
  10. #include <asm/blackfin.h>
  11. #define DEFINE_TWI_REG(reg_name, reg) \
  12. static inline u16 read_##reg_name(struct bfin_twi_iface *iface) \
  13. { return bfin_read16(&iface->regs_base->reg); } \
  14. static inline void write_##reg_name(struct bfin_twi_iface *iface, u16 v) \
  15. { bfin_write16(&iface->regs_base->reg, v); }
  16. DEFINE_TWI_REG(CLKDIV, clkdiv)
  17. DEFINE_TWI_REG(SLAVE_CTL, slave_ctl)
  18. DEFINE_TWI_REG(SLAVE_STAT, slave_stat)
  19. DEFINE_TWI_REG(SLAVE_ADDR, slave_addr)
  20. DEFINE_TWI_REG(MASTER_CTL, master_ctl)
  21. DEFINE_TWI_REG(MASTER_STAT, master_stat)
  22. DEFINE_TWI_REG(MASTER_ADDR, master_addr)
  23. DEFINE_TWI_REG(INT_STAT, int_stat)
  24. DEFINE_TWI_REG(INT_MASK, int_mask)
  25. DEFINE_TWI_REG(FIFO_STAT, fifo_stat)
  26. DEFINE_TWI_REG(XMT_DATA8, xmt_data8)
  27. DEFINE_TWI_REG(XMT_DATA16, xmt_data16)
  28. #if !ANOMALY_16000030
  29. DEFINE_TWI_REG(RCV_DATA8, rcv_data8)
  30. DEFINE_TWI_REG(RCV_DATA16, rcv_data16)
  31. #else
  32. static inline u16 read_RCV_DATA8(struct bfin_twi_iface *iface)
  33. {
  34. u16 ret;
  35. unsigned long flags;
  36. flags = hard_local_irq_save();
  37. ret = bfin_read16(&iface->regs_base->rcv_data8);
  38. hard_local_irq_restore(flags);
  39. return ret;
  40. }
  41. static inline u16 read_RCV_DATA16(struct bfin_twi_iface *iface)
  42. {
  43. u16 ret;
  44. unsigned long flags;
  45. flags = hard_local_irq_save();
  46. ret = bfin_read16(&iface->regs_base->rcv_data16);
  47. hard_local_irq_restore(flags);
  48. return ret;
  49. }
  50. #endif
  51. static inline u16 read_FIFO_CTL(struct bfin_twi_iface *iface)
  52. {
  53. return bfin_read16(&iface->regs_base->fifo_ctl);
  54. }
  55. static inline void write_FIFO_CTL(struct bfin_twi_iface *iface, u16 v)
  56. {
  57. bfin_write16(&iface->regs_base->fifo_ctl, v);
  58. SSYNC();
  59. }
  60. static inline u16 read_CONTROL(struct bfin_twi_iface *iface)
  61. {
  62. return bfin_read16(&iface->regs_base->control);
  63. }
  64. static inline void write_CONTROL(struct bfin_twi_iface *iface, u16 v)
  65. {
  66. SSYNC();
  67. bfin_write16(&iface->regs_base->control, v);
  68. }
  69. #endif