diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2011-03-02 08:49:38 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2011-03-02 08:49:38 +0000 |
commit | 12375d1d3aa41f7d277a9af584c7b810b636ec95 (patch) | |
tree | fc9ce8029a6910a8dac71b3bf60c71155a01eea4 /firmware/target/arm/imx31/mc13783-imx31.c | |
parent | 05e180a1308a095d51d51d0e047fcd44425ea88f (diff) | |
download | rockbox-12375d1d3aa41f7d277a9af584c7b810b636ec95.tar.gz rockbox-12375d1d3aa41f7d277a9af584c7b810b636ec95.zip |
Merge functionality of wakeups and semaphores-- fewer APIs and object types. semaphore_wait takes a timeout now so codecs and plugins have to be made incompatible. Don't make semaphores for targets not using them.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29492 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/imx31/mc13783-imx31.c')
-rw-r--r-- | firmware/target/arm/imx31/mc13783-imx31.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/firmware/target/arm/imx31/mc13783-imx31.c b/firmware/target/arm/imx31/mc13783-imx31.c index d5d22e2c75..006b065ea5 100644 --- a/firmware/target/arm/imx31/mc13783-imx31.c +++ b/firmware/target/arm/imx31/mc13783-imx31.c | |||
@@ -32,11 +32,11 @@ extern struct spi_node mc13783_spi; | |||
32 | /* PMIC event service data */ | 32 | /* PMIC event service data */ |
33 | static int mc13783_thread_stack[DEFAULT_STACK_SIZE/sizeof(int)]; | 33 | static int mc13783_thread_stack[DEFAULT_STACK_SIZE/sizeof(int)]; |
34 | static const char *mc13783_thread_name = "pmic"; | 34 | static const char *mc13783_thread_name = "pmic"; |
35 | static struct wakeup mc13783_svc_wake; | 35 | static struct semaphore mc13783_svc_wake; |
36 | 36 | ||
37 | /* Synchronous thread communication objects */ | 37 | /* Synchronous thread communication objects */ |
38 | static struct mutex mc13783_spi_mutex; | 38 | static struct mutex mc13783_spi_mutex; |
39 | static struct wakeup mc13783_spi_wake; | 39 | static struct semaphore mc13783_spi_complete; |
40 | 40 | ||
41 | /* Tracking for which interrupts are enabled */ | 41 | /* Tracking for which interrupts are enabled */ |
42 | static uint32_t pmic_int_enabled[2] = | 42 | static uint32_t pmic_int_enabled[2] = |
@@ -69,13 +69,13 @@ static void mc13783_xfer_complete_cb(struct spi_transfer_desc *xfer) | |||
69 | if (xfer->count != 0) | 69 | if (xfer->count != 0) |
70 | return; | 70 | return; |
71 | 71 | ||
72 | wakeup_signal(&mc13783_spi_wake); | 72 | semaphore_release(&mc13783_spi_complete); |
73 | } | 73 | } |
74 | 74 | ||
75 | static inline bool wait_for_transfer_complete(void) | 75 | static inline bool wait_for_transfer_complete(void) |
76 | { | 76 | { |
77 | return wakeup_wait(&mc13783_spi_wake, HZ*2) == OBJ_WAIT_SUCCEEDED && | 77 | return semaphore_wait(&mc13783_spi_complete, HZ*2) |
78 | mc13783_transfer.count == 0; | 78 | == OBJ_WAIT_SUCCEEDED && mc13783_transfer.count == 0; |
79 | } | 79 | } |
80 | 80 | ||
81 | static void mc13783_interrupt_thread(void) | 81 | static void mc13783_interrupt_thread(void) |
@@ -89,7 +89,7 @@ static void mc13783_interrupt_thread(void) | |||
89 | { | 89 | { |
90 | const struct mc13783_event *event, *event_last; | 90 | const struct mc13783_event *event, *event_last; |
91 | 91 | ||
92 | wakeup_wait(&mc13783_svc_wake, TIMEOUT_BLOCK); | 92 | semaphore_wait(&mc13783_svc_wake, TIMEOUT_BLOCK); |
93 | 93 | ||
94 | if (mc13783_thread_id == 0) | 94 | if (mc13783_thread_id == 0) |
95 | break; | 95 | break; |
@@ -140,16 +140,16 @@ void mc13783_event(void) | |||
140 | /* Mask the interrupt (unmasked when PMIC thread services it). */ | 140 | /* Mask the interrupt (unmasked when PMIC thread services it). */ |
141 | bitclr32(&MC13783_GPIO_IMR, 1ul << MC13783_GPIO_LINE); | 141 | bitclr32(&MC13783_GPIO_IMR, 1ul << MC13783_GPIO_LINE); |
142 | MC13783_GPIO_ISR = (1ul << MC13783_GPIO_LINE); | 142 | MC13783_GPIO_ISR = (1ul << MC13783_GPIO_LINE); |
143 | wakeup_signal(&mc13783_svc_wake); | 143 | semaphore_release(&mc13783_svc_wake); |
144 | } | 144 | } |
145 | 145 | ||
146 | void INIT_ATTR mc13783_init(void) | 146 | void INIT_ATTR mc13783_init(void) |
147 | { | 147 | { |
148 | /* Serial interface must have been initialized first! */ | 148 | /* Serial interface must have been initialized first! */ |
149 | wakeup_init(&mc13783_svc_wake); | 149 | semaphore_init(&mc13783_svc_wake, 1, 0); |
150 | mutex_init(&mc13783_spi_mutex); | 150 | mutex_init(&mc13783_spi_mutex); |
151 | 151 | ||
152 | wakeup_init(&mc13783_spi_wake); | 152 | semaphore_init(&mc13783_spi_complete, 1, 0); |
153 | 153 | ||
154 | /* Enable the PMIC SPI module */ | 154 | /* Enable the PMIC SPI module */ |
155 | spi_enable_module(&mc13783_spi); | 155 | spi_enable_module(&mc13783_spi); |
@@ -175,7 +175,7 @@ void mc13783_close(void) | |||
175 | return; | 175 | return; |
176 | 176 | ||
177 | mc13783_thread_id = 0; | 177 | mc13783_thread_id = 0; |
178 | wakeup_signal(&mc13783_svc_wake); | 178 | semaphore_release(&mc13783_svc_wake); |
179 | thread_wait(thread_id); | 179 | thread_wait(thread_id); |
180 | spi_disable_module(&mc13783_spi); | 180 | spi_disable_module(&mc13783_spi); |
181 | } | 181 | } |