summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s3c2440/i2c-s3c2440.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s3c2440/i2c-s3c2440.c')
-rw-r--r--firmware/target/arm/s3c2440/i2c-s3c2440.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/firmware/target/arm/s3c2440/i2c-s3c2440.c b/firmware/target/arm/s3c2440/i2c-s3c2440.c
index 155eb2f956..33c4e3180a 100644
--- a/firmware/target/arm/s3c2440/i2c-s3c2440.c
+++ b/firmware/target/arm/s3c2440/i2c-s3c2440.c
@@ -21,7 +21,7 @@
21#include "system.h" 21#include "system.h"
22#include "i2c-s3c2440.h" 22#include "i2c-s3c2440.h"
23 23
24static struct wakeup i2c_wake; /* Transfer completion signal */ 24static struct semaphore i2c_complete; /* Transfer completion signal */
25static struct mutex i2c_mtx; /* Mutual exclusion */ 25static struct mutex i2c_mtx; /* Mutual exclusion */
26static unsigned char *buf_ptr; /* Next byte to transfer */ 26static unsigned char *buf_ptr; /* Next byte to transfer */
27static int buf_count; /* Number of bytes remaining to transfer */ 27static int buf_count; /* Number of bytes remaining to transfer */
@@ -64,7 +64,7 @@ void i2c_write(int addr, const unsigned char *buf, int count)
64 /* Generate START */ 64 /* Generate START */
65 IICSTAT = I2C_MODE_MASTER | I2C_MODE_TX | I2C_START | I2C_RXTX_ENB; 65 IICSTAT = I2C_MODE_MASTER | I2C_MODE_TX | I2C_START | I2C_RXTX_ENB;
66 66
67 if (wakeup_wait(&i2c_wake, HZ) != OBJ_WAIT_SUCCEEDED) 67 if (semaphore_wait(&i2c_complete, HZ) != OBJ_WAIT_SUCCEEDED)
68 { 68 {
69 /* Something went wrong - stop transmission */ 69 /* Something went wrong - stop transmission */
70 int oldlevel = disable_irq_save(); 70 int oldlevel = disable_irq_save();
@@ -84,7 +84,7 @@ void i2c_write(int addr, const unsigned char *buf, int count)
84void i2c_init(void) 84void i2c_init(void)
85{ 85{
86 /* Init kernel objects */ 86 /* Init kernel objects */
87 wakeup_init(&i2c_wake); 87 semaphore_init(&i2c_complete, 1, 0);
88 mutex_init(&i2c_mtx); 88 mutex_init(&i2c_mtx);
89 89
90 /* Clear pending source */ 90 /* Clear pending source */
@@ -134,7 +134,7 @@ void IIC(void)
134 i2c_stop(); 134 i2c_stop();
135 135
136 /* Signal thread */ 136 /* Signal thread */
137 wakeup_signal(&i2c_wake); 137 semaphore_release(&i2c_complete);
138 break; 138 break;
139 } 139 }
140 140