summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx31/i2c-imx31.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx31/i2c-imx31.c')
-rw-r--r--firmware/target/arm/imx31/i2c-imx31.c8
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);
165i2c_done: 165i2c_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 }