-static inline uint32_t in_sr1(char *where, struct stm_i2c *stm_i2c) {
- uint32_t sr1 = stm_i2c->sr1;
- printf("%s: sr1: %x\n", where, sr1); flush();
- return sr1;
-}
-
-static inline uint32_t in_sr2(char *where, struct stm_i2c *stm_i2c) {
- uint32_t sr2 = stm_i2c->sr2;
- printf("%s: sr2: %x\n", where, sr2); flush();
- return sr2;
-}
-
-static inline void out_cr1(char *where, struct stm_i2c *stm_i2c, uint32_t cr1) {
- printf("%s: cr1: %x\n", where, cr1); flush();
- stm_i2c->cr1 = cr1;
-}
-
-static inline uint32_t in_cr1(char *where, struct stm_i2c *stm_i2c) {
- uint32_t cr1 = stm_i2c->cr1;
- printf("%s: cr1: %x\n", where, cr1); flush();
- return cr1;
-}
-
-static inline void out_cr2(char *where, struct stm_i2c *stm_i2c, uint32_t cr2) {
- printf("%s: cr2: %x\n", where, cr2); flush();
- stm_i2c->cr2 = cr2;
-}
-
-static inline uint32_t in_dr(char *where, struct stm_i2c *stm_i2c) {
- uint32_t dr = stm_i2c->dr;
- printf("%s: dr: %x\n", where, dr); flush();
- return dr;
-}
-
-static inline void out_dr(char *where, struct stm_i2c *stm_i2c, uint32_t dr) {
- printf("%s: dr: %x\n", where, dr); flush();
- stm_i2c->dr = dr;
-}
-
-uint8_t
-ao_i2c_check_status(char *where, uint8_t index, uint32_t sr1_want, uint32_t sr2_want)
-{
- struct stm_i2c *stm_i2c = ao_i2c_stm_info[index].stm_i2c;
- uint32_t sr1_got, sr2_got;
-
- if (sr1_want) {
- sr1_got = in_sr1(where, stm_i2c);
- if ((sr1_got & sr1_want) != sr1_want) {
- printf ("%s: sr1 wanted %x got %x\n", where, sr1_want, sr1_got);
- return FALSE;
- }
- }
- if (sr2_want) {
- sr2_got = in_sr2(where, stm_i2c);
- if ((sr2_got & sr2_want) != sr2_want) {
- printf ("%s: sr1 wanted %x got %x\n",
- where, sr2_want, sr2_got);
- return FALSE;
- }
- }
- printf ("%s: got sr1 %x and sr2 %x\n", where, sr1_want, sr2_want);
- return TRUE;
-}
-
-static uint8_t
-ao_i2c_check_idle(uint8_t index)
-{
- struct stm_i2c *stm_i2c = ao_i2c_stm_info[index].stm_i2c;
- uint32_t s = 0;
- int t;
-
- for (t = 0; t < I2C_TIMEOUT; t++) {
- if (!ao_i2c_check_status("check idle", index,
- 0,
- (1 << STM_I2C_SR2_BUSY)))
- {
- break;
- }
- ao_yield();
- }
- if (t == I2C_TIMEOUT)
- return FALSE;
- return TRUE;
-}
-