Switch from GPLv2 to GPLv2+
[fw/altos] / src / drivers / ao_sdcard.c
index c13017f07b1c6ad5f3b6b0523d909a859678c8e8..4b17c5e3ebac427c2d3856a3485f8306ee23afe0 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
 #include "ao.h"
 #include "ao_sdcard.h"
 
+#if HAS_RADIO
 extern uint8_t ao_radio_mutex;
+#define get_radio()    ao_mutex_get(&ao_radio_mutex)
+#define put_radio()    ao_mutex_put(&ao_radio_mutex)
+#else
+#define get_radio()
+#define put_radio()
+#endif
 
-#define ao_sdcard_get_slow() do { ao_mutex_get(&ao_radio_mutex); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_250kHz); } while (0)
-#define ao_sdcard_get()        do { ao_mutex_get(&ao_radio_mutex); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_FAST); } while (0)
-#define ao_sdcard_put() do { ao_spi_put(AO_SDCARD_SPI_BUS); ao_mutex_put(&ao_radio_mutex); } while (0)
+#define ao_sdcard_get_slow() do { get_radio(); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_250kHz); } while (0)
+#define ao_sdcard_get()        do { get_radio(); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_FAST); } while (0)
+#define ao_sdcard_put() do { ao_spi_put(AO_SDCARD_SPI_BUS); put_radio(); } while (0)
 #define ao_sdcard_send_fixed(d,l)      ao_spi_send_fixed((d), (l), AO_SDCARD_SPI_BUS)
 #define ao_sdcard_send(d,l)            ao_spi_send((d), (l), AO_SDCARD_SPI_BUS)
 #define ao_sdcard_recv(d,l)            ao_spi_recv((d), (l), AO_SDCARD_SPI_BUS)
@@ -49,13 +57,13 @@ static enum ao_sdtype sdtype;
 #if SDCARD_TRACE
 #define DBG(...) printf(__VA_ARGS__)
 #else
-#define DBG(...)
+#define DBG(...) (void) 0
 #endif
 
 #if SDCARD_WARN
 #define WARN(...) printf(__VA_ARGS__)
 #else
-#define WARN(...)
+#define WARN(...) (void) 0
 #endif
 
 #define later(x,y)     ((int16_t) ((x) - (y)) >= 0)
@@ -93,7 +101,6 @@ ao_sdcard_send_cmd(uint8_t cmd, uint32_t arg)
 {
        uint8_t data[6];
        uint8_t reply;
-       int i;
        uint16_t timeout;
 
        DBG ("\tsend_cmd %d arg %08x\n", cmd, arg);
@@ -104,7 +111,7 @@ ao_sdcard_send_cmd(uint8_t cmd, uint32_t arg)
                        return SDCARD_STATUS_TIMEOUT;
        }
        
-       data[0] = cmd & 0x3f | 0x40;
+       data[0] = (cmd & 0x3f) | 0x40;
        data[1] = arg >> 24;
        data[2] = arg >> 16;
        data[3] = arg >> 8;
@@ -395,7 +402,7 @@ static uint8_t
 _ao_sdcard_reset(void)
 {
        int i;
-       uint8_t ret;
+       uint8_t ret = 0x3f;
        uint8_t response[10];
 
        for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
@@ -412,12 +419,12 @@ _ao_sdcard_reset(void)
         */
        if (ao_sdcard_send_if_cond(0x1aa, response) == SDCARD_STATUS_IDLE_STATE) {
                uint32_t        arg = 0;
-               uint8_t         sdver2 = 0;
+//             uint8_t         sdver2 = 0;
 
                /* Check for SD version 2 */
                if ((response[2] & 0xf) == 1 && response[3] == 0xaa) {
                        arg = 0x40000000;
-                       sdver2 = 1;
+//                     sdver2 = 1;
                }
 
                for (i = 0; i < SDCARD_IDLE_RETRY; i++) {
@@ -480,7 +487,7 @@ ao_sdcard_wait_block_start(void)
 uint8_t
 ao_sdcard_read_block(uint32_t block, uint8_t *data)
 {
-       uint8_t ret;
+       uint8_t ret = 0x3f;
        uint8_t start_block;
        uint8_t crc[2];
        int tries;
@@ -511,6 +518,7 @@ ao_sdcard_read_block(uint32_t block, uint8_t *data)
                        WARN ("read block command failed %d status %02x\n", block, ret);
                        status = _ao_sdcard_send_status();
                        WARN ("\tstatus now %04x\n", status);
+                       (void) status;
                        goto bail;
                }
 
@@ -560,8 +568,6 @@ ao_sdcard_write_block(uint32_t block, uint8_t *data)
        uint8_t response[1];
        uint8_t start_block[8];
        uint16_t status;
-       static uint8_t  check_data[512];
-       int     i;
        int     tries;
 
        ao_sdcard_lock();
@@ -605,7 +611,7 @@ ao_sdcard_write_block(uint32_t block, uint8_t *data)
                if ((response[0] & SDCARD_DATA_RES_MASK) != SDCARD_DATA_RES_ACCEPTED) {
                        int i;
                        WARN("Data not accepted, response");
-                       for (i = 0; i < sizeof (response); i++)
+                       for (i = 0; i < (int) sizeof (response); i++)
                                WARN(" %02x", response[i]);
                        WARN("\n");
                        ret = 0x3f;