2121#define HIGH_STATE_ON_I2C_LINES 0x7
2222
2323struct i2c_litex_cfg {
24- volatile uint32_t * w_reg ;
25- volatile const uint32_t * r_reg ;
24+ uint32_t write_addr ;
25+ uint32_t read_addr ;
2626};
2727
2828#define GET_I2C_CFG (dev ) \
@@ -31,48 +31,48 @@ struct i2c_litex_cfg {
3131#define GET_I2C_BITBANG (dev ) \
3232 ((struct i2c_bitbang *) dev->data)
3333
34- static inline void set_bit (volatile uint32_t * reg , uint32_t bit , uint32_t val )
34+ static inline void set_bit (uint32_t addr , uint32_t bit , uint32_t val )
3535{
3636 uint32_t mask = BIT (bit );
3737
3838 if (val ) {
39- * reg |= mask ;
39+ litex_write8 ( litex_read8 ( addr ) | mask , addr ) ;
4040 } else {
41- * reg &= ~mask ;
41+ litex_write8 ( litex_read8 ( addr ) & ~mask , addr ) ;
4242 }
4343}
4444
45- static inline int get_bit (volatile const uint32_t * reg , uint32_t bit )
45+ static inline int get_bit (uint32_t addr , uint32_t bit )
4646{
4747 uint32_t mask = BIT (bit );
4848
49- return !!(( * reg ) & mask );
49+ return !!(litex_read8 ( addr ) & mask );
5050}
5151
5252static void i2c_litex_bitbang_set_scl (void * context , int state )
5353{
5454 const struct i2c_litex_cfg * config =
5555 (const struct i2c_litex_cfg * ) context ;
5656
57- set_bit (config -> w_reg , SCL_BIT_POS , state );
57+ set_bit (config -> write_addr , SCL_BIT_POS , state );
5858}
5959
6060static void i2c_litex_bitbang_set_sda (void * context , int state )
6161{
6262 const struct i2c_litex_cfg * config =
6363 (const struct i2c_litex_cfg * ) context ;
6464
65- set_bit (config -> w_reg , SDA_DIR_BIT_POS , SDA_DIR_OUTPUT );
66- set_bit (config -> w_reg , SDA_BIT_W_POS , state );
65+ set_bit (config -> write_addr , SDA_DIR_BIT_POS , SDA_DIR_OUTPUT );
66+ set_bit (config -> write_addr , SDA_BIT_W_POS , state );
6767}
6868
6969static int i2c_litex_bitbang_get_sda (void * context )
7070{
7171 const struct i2c_litex_cfg * config =
7272 (const struct i2c_litex_cfg * ) context ;
7373
74- set_bit (config -> w_reg , SDA_DIR_BIT_POS , SDA_DIR_INPUT );
75- return get_bit (config -> r_reg , SDA_BIT_R_POS );
74+ set_bit (config -> write_addr , SDA_DIR_BIT_POS , SDA_DIR_INPUT );
75+ return get_bit (config -> read_addr , SDA_BIT_R_POS );
7676}
7777
7878static const struct i2c_bitbang_io i2c_litex_bitbang_io = {
@@ -86,7 +86,7 @@ static int i2c_litex_init(const struct device *dev)
8686 const struct i2c_litex_cfg * config = GET_I2C_CFG (dev );
8787 struct i2c_bitbang * bitbang = GET_I2C_BITBANG (dev );
8888
89- * ( config -> w_reg ) |= HIGH_STATE_ON_I2C_LINES ;
89+ litex_write8 ( litex_read8 ( config -> write_addr ) | HIGH_STATE_ON_I2C_LINES , config -> write_addr ) ;
9090 i2c_bitbang_init (bitbang , & i2c_litex_bitbang_io , (void * )config );
9191
9292 return 0 ;
@@ -116,10 +116,8 @@ static const struct i2c_driver_api i2c_litex_driver_api = {
116116
117117#define I2C_LITEX_INIT (n ) \
118118 static const struct i2c_litex_cfg i2c_litex_cfg_##n = { \
119- .w_reg = \
120- (volatile uint32_t *) DT_INST_REG_ADDR_BY_NAME(n, write),\
121- .r_reg = \
122- (volatile uint32_t *) DT_INST_REG_ADDR_BY_NAME(n, read), \
119+ .write_addr = DT_INST_REG_ADDR_BY_NAME(n, write), \
120+ .read_addr = DT_INST_REG_ADDR_BY_NAME(n, read), \
123121 }; \
124122 \
125123 static struct i2c_bitbang i2c_bitbang_##n; \
0 commit comments