X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Fsysfsgpio.c;h=5a4651df194b85f9a3e38ba714422b992678085a;hb=f2b228f5d1728b9972624c1a7ae681fc6df2cddc;hp=d822562a5e5953d2af3ba8999d367d2b4648f515;hpb=e290cb76c8d5abfe3929dc9436b936708684d989;p=openocd.git diff --git a/src/jtag/drivers/sysfsgpio.c b/src/jtag/drivers/sysfsgpio.c index d822562a5e..5a4651df19 100644 --- a/src/jtag/drivers/sysfsgpio.c +++ b/src/jtag/drivers/sysfsgpio.c @@ -12,9 +12,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 . * ***************************************************************************/ /* 2014-12: Addition of the SWD protocol support is based on the initial work @@ -210,7 +208,7 @@ static int sysfsgpio_swdio_read(void) return 0; } - return buf[0] == '1'; + return buf[0] != '0'; } static void sysfsgpio_swdio_write(int swclk, int swdio) @@ -246,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 * lseek to bypass buffering in the sysfs kernel driver. */ -static int sysfsgpio_read(void) +static bb_value_t sysfsgpio_read(void) { char buf[1]; @@ -259,7 +257,7 @@ static int sysfsgpio_read(void) return 0; } - return buf[0] == '1'; + return buf[0] == '0' ? BB_LOW : BB_HIGH; } /* @@ -268,11 +266,11 @@ static int sysfsgpio_read(void) * Seeing as this is the only function where the outputs are changed, * 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) { sysfsgpio_swdio_write(tck, tdi); - return; + return ERROR_OK; } const char one[] = "1"; @@ -314,6 +312,8 @@ static void sysfsgpio_write(int tck, int tms, int tdi) last_tdi = tdi; last_tms = tms; last_tck = tck; + + return ERROR_OK; } /* @@ -321,7 +321,7 @@ static void sysfsgpio_write(int tck, int tms, int tdi) * * (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"); const char one[] = "1"; @@ -341,6 +341,8 @@ static void sysfsgpio_reset(int trst, int srst) if (bytes_written != 1) LOG_WARNING("writing trst failed"); } + + return ERROR_OK; } COMMAND_HANDLER(sysfsgpio_handle_jtag_gpionums) @@ -594,10 +596,6 @@ static int sysfsgpio_init(void) LOG_INFO("JTAG and SWD modes enabled"); else LOG_INFO("JTAG only mode enabled (specify swclk and swdio gpio to add SWD mode)"); - if (!is_gpio_valid(trst_gpio) && !is_gpio_valid(srst_gpio)) { - LOG_ERROR("Require at least one of trst or srst gpios to be specified"); - return ERROR_JTAG_INIT_FAILED; - } } else if (sysfsgpio_swd_mode_possible()) { LOG_INFO("SWD only mode enabled (specify tck, tms, tdi and tdo gpios to add JTAG mode)"); } else { @@ -663,9 +661,9 @@ static int sysfsgpio_init(void) if (sysfsgpio_swd_mode_possible()) { if (swd_mode) - bitbang_swd_switch_seq(NULL, JTAG_TO_SWD); + bitbang_swd_switch_seq(JTAG_TO_SWD); else - bitbang_swd_switch_seq(NULL, SWD_TO_JTAG); + bitbang_swd_switch_seq(SWD_TO_JTAG); } return ERROR_OK;