diff options
Diffstat (limited to 'src/jtag/drivers/at91rm9200.c')
-rw-r--r-- | src/jtag/drivers/at91rm9200.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/jtag/drivers/at91rm9200.c b/src/jtag/drivers/at91rm9200.c index 8f65413..0015da0 100644 --- a/src/jtag/drivers/at91rm9200.c +++ b/src/jtag/drivers/at91rm9200.c @@ -109,9 +109,9 @@ static uint32_t *pio_base; /* low level command set */ -static int at91rm9200_read(void); -static void at91rm9200_write(int tck, int tms, int tdi); -static void at91rm9200_reset(int trst, int srst); +static bb_value_t at91rm9200_read(void); +static int at91rm9200_write(int tck, int tms, int tdi); +static int at91rm9200_reset(int trst, int srst); static int at91rm9200_init(void); static int at91rm9200_quit(void); @@ -123,12 +123,12 @@ static struct bitbang_interface at91rm9200_bitbang = { .blink = 0 }; -static int at91rm9200_read(void) +static bb_value_t at91rm9200_read(void) { - return (pio_base[device->TDO_PIO + PIO_PDSR] & device->TDO_MASK) != 0; + return (pio_base[device->TDO_PIO + PIO_PDSR] & device->TDO_MASK) ? BB_HIGH : BB_LOW; } -static void at91rm9200_write(int tck, int tms, int tdi) +static int at91rm9200_write(int tck, int tms, int tdi) { if (tck) pio_base[device->TCK_PIO + PIO_SODR] = device->TCK_MASK; @@ -144,10 +144,12 @@ static void at91rm9200_write(int tck, int tms, int tdi) pio_base[device->TDI_PIO + PIO_SODR] = device->TDI_MASK; else pio_base[device->TDI_PIO + PIO_CODR] = device->TDI_MASK; + + return ERROR_OK; } /* (1) assert or (0) deassert reset lines */ -static void at91rm9200_reset(int trst, int srst) +static int at91rm9200_reset(int trst, int srst) { if (trst == 0) pio_base[device->TRST_PIO + PIO_SODR] = device->TRST_MASK; @@ -158,6 +160,8 @@ static void at91rm9200_reset(int trst, int srst) pio_base[device->SRST_PIO + PIO_SODR] = device->SRST_MASK; else if (srst == 1) pio_base[device->SRST_PIO + PIO_CODR] = device->SRST_MASK; + + return ERROR_OK; } COMMAND_HANDLER(at91rm9200_handle_device_command) |