summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx31/mc13783-imx31.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-03-02 08:49:38 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-03-02 08:49:38 +0000
commit12375d1d3aa41f7d277a9af584c7b810b636ec95 (patch)
treefc9ce8029a6910a8dac71b3bf60c71155a01eea4 /firmware/target/arm/imx31/mc13783-imx31.c
parent05e180a1308a095d51d51d0e047fcd44425ea88f (diff)
downloadrockbox-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.c20
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 */
33static int mc13783_thread_stack[DEFAULT_STACK_SIZE/sizeof(int)]; 33static int mc13783_thread_stack[DEFAULT_STACK_SIZE/sizeof(int)];
34static const char *mc13783_thread_name = "pmic"; 34static const char *mc13783_thread_name = "pmic";
35static struct wakeup mc13783_svc_wake; 35static struct semaphore mc13783_svc_wake;
36 36
37/* Synchronous thread communication objects */ 37/* Synchronous thread communication objects */
38static struct mutex mc13783_spi_mutex; 38static struct mutex mc13783_spi_mutex;
39static struct wakeup mc13783_spi_wake; 39static struct semaphore mc13783_spi_complete;
40 40
41/* Tracking for which interrupts are enabled */ 41/* Tracking for which interrupts are enabled */
42static uint32_t pmic_int_enabled[2] = 42static 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
75static inline bool wait_for_transfer_complete(void) 75static 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
81static void mc13783_interrupt_thread(void) 81static 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
146void INIT_ATTR mc13783_init(void) 146void 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}