#include <asm/hardware.h>
#include <asm/hardware/ssp.h>
-#define TIMEOUT 100000
-
static irqreturn_t ssp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
unsigned int status = Ser4SSSR;
* The caller is expected to perform the necessary locking.
*
* Returns:
- * %-ETIMEDOUT timeout occurred
+ * %-ETIMEDOUT timeout occurred (for future)
* 0 success
*/
int ssp_write_word(u16 data)
{
- int timeout = TIMEOUT;
-
- while (!(Ser4SSSR & SSSR_TNF)) {
- if (!--timeout)
- return -ETIMEDOUT;
+ while (!(Ser4SSSR & SSSR_TNF))
cpu_relax();
- }
Ser4SSDR = data;
- timeout = TIMEOUT;
- while (!(Ser4SSSR & SSSR_BSY)) {
- if (!--timeout)
- return -ETIMEDOUT;
+ while (!(Ser4SSSR & SSSR_BSY))
cpu_relax();
- }
return 0;
}
* The caller is expected to perform the necessary locking.
*
* Returns:
- * %-ETIMEDOUT timeout occurred
+ * %-ETIMEDOUT timeout occurred (for future)
* 16-bit data success
*/
-int ssp_read_word(u16 *data)
+int ssp_read_word(void)
{
- int timeout = TIMEOUT;
-
- while (!(Ser4SSSR & SSSR_RNE)) {
- if (!--timeout)
- return -ETIMEDOUT;
+ while (!(Ser4SSSR & SSSR_RNE))
cpu_relax();
- }
-
- *data = (u16)Ser4SSDR;
- return 0;
+ return Ser4SSDR;
}
/**
* is empty.
*
* The caller is expected to perform the necessary locking.
- *
- * Returns:
- * %-ETIMEDOUT timeout occurred
- * 0 success
*/
-int ssp_flush(void)
+void ssp_flush(void)
{
- int timeout = TIMEOUT * 2;
-
do {
while (Ser4SSSR & SSSR_RNE) {
- if (!--timeout)
- return -ETIMEDOUT;
(void) Ser4SSDR;
}
- if (!--timeout)
- return -ETIMEDOUT;
} while (Ser4SSSR & SSSR_BSY);
-
- return 0;
}
/**