diff options
Diffstat (limited to 'firmware/target/arm/imx31/i2c-imx31.c')
-rw-r--r-- | firmware/target/arm/imx31/i2c-imx31.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/firmware/target/arm/imx31/i2c-imx31.c b/firmware/target/arm/imx31/i2c-imx31.c index 4e810c588f..975f951fdc 100644 --- a/firmware/target/arm/imx31/i2c-imx31.c +++ b/firmware/target/arm/imx31/i2c-imx31.c | |||
@@ -48,7 +48,7 @@ static struct i2c_module_descriptor | |||
48 | volatile unsigned short * const base; /* Module base address */ | 48 | volatile unsigned short * const base; /* Module base address */ |
49 | void (* const handler)(void); /* Module interrupt handler */ | 49 | void (* const handler)(void); /* Module interrupt handler */ |
50 | struct mutex m; /* Node mutual-exclusion */ | 50 | struct mutex m; /* Node mutual-exclusion */ |
51 | struct wakeup w; /* I2C done signal */ | 51 | struct semaphore complete; /* I2C completion signal */ |
52 | unsigned char *addr_data; /* Additional addressing data */ | 52 | unsigned char *addr_data; /* Additional addressing data */ |
53 | int addr_count; /* Addressing byte count */ | 53 | int addr_count; /* Addressing byte count */ |
54 | unsigned char *data; /* TX/RX buffer (actual data) */ | 54 | unsigned char *data; /* TX/RX buffer (actual data) */ |
@@ -164,7 +164,7 @@ i2c_stop: | |||
164 | base[I2CR] &= ~(I2C_I2CR_MSTA | I2C_I2CR_IIEN); | 164 | base[I2CR] &= ~(I2C_I2CR_MSTA | I2C_I2CR_IIEN); |
165 | i2c_done: | 165 | i2c_done: |
166 | /* Signal thread we're done */ | 166 | /* Signal thread we're done */ |
167 | wakeup_signal(&desc->w); | 167 | semaphore_release(&desc->complete); |
168 | } | 168 | } |
169 | 169 | ||
170 | #if (I2C_MODULE_MASK & USE_I2C1_MODULE) | 170 | #if (I2C_MODULE_MASK & USE_I2C1_MODULE) |
@@ -221,7 +221,7 @@ static int i2c_transfer(struct i2c_node * const node, | |||
221 | base[I2DR] = desc->addr; | 221 | base[I2DR] = desc->addr; |
222 | 222 | ||
223 | /* Wait for transfer to complete */ | 223 | /* Wait for transfer to complete */ |
224 | if (wakeup_wait(&desc->w, HZ) == OBJ_WAIT_SUCCEEDED) | 224 | if (semaphore_wait(&desc->complete, HZ) == OBJ_WAIT_SUCCEEDED) |
225 | { | 225 | { |
226 | count -= desc->data_count; | 226 | count -= desc->data_count; |
227 | } | 227 | } |
@@ -294,7 +294,7 @@ void i2c_init(void) | |||
294 | struct i2c_module_descriptor *const desc = &i2c_descs[i]; | 294 | struct i2c_module_descriptor *const desc = &i2c_descs[i]; |
295 | ccm_module_clock_gating(desc->cg, CGM_ON_RUN_WAIT); | 295 | ccm_module_clock_gating(desc->cg, CGM_ON_RUN_WAIT); |
296 | mutex_init(&desc->m); | 296 | mutex_init(&desc->m); |
297 | wakeup_init(&desc->w); | 297 | semaphore_init(&desc->complete, 1, 0); |
298 | desc->base[I2CR] = 0; | 298 | desc->base[I2CR] = 0; |
299 | ccm_module_clock_gating(desc->cg, CGM_OFF); | 299 | ccm_module_clock_gating(desc->cg, CGM_OFF); |
300 | } | 300 | } |