ftdi: use "adapter usb location" instead of ftdi_location command
[fw/openocd] / src / jtag / drivers / parport.c
index 103b99106e743ec2dd9fe02f29e07dec0bc5ec17..14fa9df9f7fdee1da797408bc6f697cdc0f45c0a 100644 (file)
@@ -16,9 +16,7 @@
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -60,7 +58,7 @@
 /* parallel port cable description
  */
 struct cable {
-       char *name;
+       const char *name;
        uint8_t TDO_MASK;       /* status port bit containing current TDO value */
        uint8_t TRST_MASK;      /* data port bit for TRST */
        uint8_t TMS_MASK;       /* data port bit for TMS */
@@ -74,7 +72,7 @@ struct cable {
        uint8_t LED_MASK;       /* data port bit for LED */
 };
 
-static struct cable cables[] = {
+static const struct cable cables[] = {
        /* name                         tdo   trst  tms   tck   tdi   srst  o_inv i_inv init  exit  led */
        { "wiggler",                    0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x01, 0x80, 0x80, 0x80, 0x00 },
        { "wiggler2",                   0x80, 0x10, 0x02, 0x04, 0x08, 0x01, 0x01, 0x80, 0x80, 0x00, 0x20 },
@@ -95,6 +93,7 @@ static struct cable cables[] = {
        SOFT TDI - Target SRST
 */
        { "altium",                     0x10, 0x20, 0x04, 0x02, 0x01, 0x80, 0x00, 0x00, 0x10, 0x00, 0x08 },
+       { "aspo",                       0x10, 0x01, 0x04, 0x08, 0x02, 0x10, 0x17, 0x00, 0x17, 0x17, 0x00 },
        { NULL,                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
 };
 
@@ -107,7 +106,7 @@ static int wait_states;
 
 /* interface variables
  */
-static struct cable *cable;
+static const struct cable *cable;
 static uint8_t dataport_value;
 
 #if PARPORT_USE_PPDEV == 1
@@ -117,7 +116,7 @@ static unsigned long dataport;
 static unsigned long statusport;
 #endif
 
-static int parport_read(void)
+static bb_value_t parport_read(void)
 {
        int data = 0;
 
@@ -128,9 +127,9 @@ static int parport_read(void)
 #endif
 
        if ((data ^ cable->INPUT_INVERT) & cable->TDO_MASK)
-               return 1;
+               return BB_HIGH;
        else
-               return 0;
+               return BB_LOW;
 }
 
 static inline void parport_write_data(void)
@@ -149,7 +148,7 @@ static inline void parport_write_data(void)
 #endif
 }
 
-static void parport_write(int tck, int tms, int tdi)
+static int parport_write(int tck, int tms, int tdi)
 {
        int i = wait_states + 1;
 
@@ -170,10 +169,12 @@ static void parport_write(int tck, int tms, int tdi)
 
        while (i-- > 0)
                parport_write_data();
+
+       return ERROR_OK;
 }
 
 /* (1) assert or (0) deassert reset lines */
-static void parport_reset(int trst, int srst)
+static int parport_reset(int trst, int srst)
 {
        LOG_DEBUG("trst: %i, srst: %i", trst, srst);
 
@@ -188,10 +189,12 @@ static void parport_reset(int trst, int srst)
                dataport_value &= ~cable->SRST_MASK;
 
        parport_write_data();
+
+       return ERROR_OK;
 }
 
 /* turn LED on parport adapter on (1) or off (0) */
-static void parport_led(int on)
+static int parport_led(int on)
 {
        if (on)
                dataport_value |= cable->LED_MASK;
@@ -199,6 +202,8 @@ static void parport_led(int on)
                dataport_value &= ~cable->LED_MASK;
 
        parport_write_data();
+
+       return ERROR_OK;
 }
 
 static int parport_speed(int speed)
@@ -261,7 +266,7 @@ static struct bitbang_interface parport_bitbang = {
 
 static int parport_init(void)
 {
-       struct cable *cur_cable;
+       const struct cable *cur_cable;
 #if PARPORT_USE_PPDEV == 1
        char buffer[256];
 #endif
@@ -366,9 +371,12 @@ static int parport_init(void)
 
 #endif /* PARPORT_USE_PPDEV */
 
-       parport_reset(0, 0);
-       parport_write(0, 0, 0);
-       parport_led(1);
+       if (parport_reset(0, 0) != ERROR_OK)
+               return ERROR_FAIL;
+       if (parport_write(0, 0, 0) != ERROR_OK)
+               return ERROR_FAIL;
+       if (parport_led(1) != ERROR_OK)
+               return ERROR_FAIL;
 
        bitbang_interface = &parport_bitbang;
 
@@ -377,7 +385,8 @@ static int parport_init(void)
 
 static int parport_quit(void)
 {
-       parport_led(0);
+       if (parport_led(0) != ERROR_OK)
+               return ERROR_FAIL;
 
        if (parport_exit) {
                dataport_value = cable->PORT_EXIT;