Fix 2 more bitbang drivers.

Change-Id: Ib7257d1d113871a9f57ba3b899cb029bb595035a
This commit is contained in:
Tim Newsome 2018-01-22 14:46:11 -08:00
parent 26fadc7ef7
commit fe8a1f8c58
2 changed files with 17 additions and 10 deletions

View File

@ -33,14 +33,14 @@ static int clock_count; /* count clocks in any stable state, only stable states
static uint32_t dummy_data; static uint32_t dummy_data;
static int dummy_read(void) static bb_value_t dummy_read(void)
{ {
int data = 1 & dummy_data; int data = 1 & dummy_data;
dummy_data = (dummy_data >> 1) | (1 << 31); dummy_data = (dummy_data >> 1) | (1 << 31);
return data; return data ? BB_HIGH : BB_LOW;
} }
static void dummy_write(int tck, int tms, int tdi) static int dummy_write(int tck, int tms, int tdi)
{ {
/* TAP standard: "state transitions occur on rising edge of clock" */ /* TAP standard: "state transitions occur on rising edge of clock" */
if (tck != dummy_clock) { if (tck != dummy_clock) {
@ -69,9 +69,10 @@ static void dummy_write(int tck, int tms, int tdi)
} }
dummy_clock = tck; dummy_clock = tck;
} }
return ERROR_OK;
} }
static void dummy_reset(int trst, int srst) static int dummy_reset(int trst, int srst)
{ {
dummy_clock = 0; dummy_clock = 0;
@ -79,10 +80,12 @@ static void dummy_reset(int trst, int srst)
dummy_state = TAP_RESET; dummy_state = TAP_RESET;
LOG_DEBUG("reset to: %s", tap_state_name(dummy_state)); LOG_DEBUG("reset to: %s", tap_state_name(dummy_state));
return ERROR_OK;
} }
static void dummy_led(int on) static int dummy_led(int on)
{ {
return ERROR_OK;
} }
static struct bitbang_interface dummy_bitbang = { static struct bitbang_interface dummy_bitbang = {

View File

@ -244,7 +244,7 @@ static void sysfsgpio_swdio_write(int swclk, int swdio)
* The sysfs value will read back either '0' or '1'. The trick here is to call * The sysfs value will read back either '0' or '1'. The trick here is to call
* lseek to bypass buffering in the sysfs kernel driver. * lseek to bypass buffering in the sysfs kernel driver.
*/ */
static int sysfsgpio_read(void) static bb_value_t sysfsgpio_read(void)
{ {
char buf[1]; char buf[1];
@ -257,7 +257,7 @@ static int sysfsgpio_read(void)
return 0; return 0;
} }
return buf[0] != '0'; return buf[0] == '0' ? BB_LOW : BB_HIGH;
} }
/* /*
@ -266,11 +266,11 @@ static int sysfsgpio_read(void)
* Seeing as this is the only function where the outputs are changed, * Seeing as this is the only function where the outputs are changed,
* we can cache the old value to avoid needlessly writing it. * we can cache the old value to avoid needlessly writing it.
*/ */
static void sysfsgpio_write(int tck, int tms, int tdi) static int sysfsgpio_write(int tck, int tms, int tdi)
{ {
if (swd_mode) { if (swd_mode) {
sysfsgpio_swdio_write(tck, tdi); sysfsgpio_swdio_write(tck, tdi);
return; return ERROR_OK;
} }
const char one[] = "1"; const char one[] = "1";
@ -312,6 +312,8 @@ static void sysfsgpio_write(int tck, int tms, int tdi)
last_tdi = tdi; last_tdi = tdi;
last_tms = tms; last_tms = tms;
last_tck = tck; last_tck = tck;
return ERROR_OK;
} }
/* /*
@ -319,7 +321,7 @@ static void sysfsgpio_write(int tck, int tms, int tdi)
* *
* (1) assert or (0) deassert reset lines * (1) assert or (0) deassert reset lines
*/ */
static void sysfsgpio_reset(int trst, int srst) static int sysfsgpio_reset(int trst, int srst)
{ {
LOG_DEBUG("sysfsgpio_reset"); LOG_DEBUG("sysfsgpio_reset");
const char one[] = "1"; const char one[] = "1";
@ -339,6 +341,8 @@ static void sysfsgpio_reset(int trst, int srst)
if (bytes_written != 1) if (bytes_written != 1)
LOG_WARNING("writing trst failed"); LOG_WARNING("writing trst failed");
} }
return ERROR_OK;
} }
COMMAND_HANDLER(sysfsgpio_handle_jtag_gpionums) COMMAND_HANDLER(sysfsgpio_handle_jtag_gpionums)