-struct jtag_interface bcm2835gpio_interface = {
- .name = "bcm2835gpio",
- .supported = DEBUG_CAP_TMS_SEQ,
- .execute_queue = bitbang_execute_queue,
- .transports = jtag_only,
- .speed = bcm2835gpio_speed,
- .khz = bcm2835gpio_khz,
- .speed_div = bcm2835gpio_speed_div,
- .commands = bcm2835gpio_command_handlers,
- .init = bcm2835gpio_init,
- .quit = bcm2835gpio_quit,
+static bool bcm2835gpio_jtag_mode_possible(void)
+{
+ if (!is_gpio_config_valid(ADAPTER_GPIO_IDX_TCK))
+ return false;
+ if (!is_gpio_config_valid(ADAPTER_GPIO_IDX_TMS))
+ return false;
+ if (!is_gpio_config_valid(ADAPTER_GPIO_IDX_TDI))
+ return false;
+ if (!is_gpio_config_valid(ADAPTER_GPIO_IDX_TDO))
+ return false;
+ return true;
+}
+
+static bool bcm2835gpio_swd_mode_possible(void)
+{
+ if (!is_gpio_config_valid(ADAPTER_GPIO_IDX_SWCLK))
+ return false;
+ if (!is_gpio_config_valid(ADAPTER_GPIO_IDX_SWDIO))
+ return false;
+ return true;
+}
+
+static void bcm2835gpio_munmap(void)
+{
+ if (pio_base != MAP_FAILED) {
+ munmap((void *)pio_base, sysconf(_SC_PAGE_SIZE));
+ pio_base = MAP_FAILED;
+ }
+
+ if (pads_base != MAP_FAILED) {
+ munmap((void *)pads_base, sysconf(_SC_PAGE_SIZE));
+ pads_base = MAP_FAILED;
+ }
+}
+
+static int bcm2835gpio_blink(int on)
+{
+ if (is_gpio_config_valid(ADAPTER_GPIO_IDX_LED))
+ set_gpio_value(&adapter_gpio_config[ADAPTER_GPIO_IDX_LED], on);
+
+ return ERROR_OK;
+}
+
+static struct bitbang_interface bcm2835gpio_bitbang = {
+ .read = bcm2835gpio_read,
+ .write = bcm2835gpio_write,
+ .swdio_read = bcm2835_swdio_read,
+ .swdio_drive = bcm2835_swdio_drive,
+ .swd_write = bcm2835gpio_swd_write_generic,
+ .blink = bcm2835gpio_blink,