-unsigned jtag_get_speed_khz(void)
-{
- return speed_khz;
-}
-
-static int adapter_khz_to_speed(unsigned khz, int *speed)
-{
- LOG_DEBUG("convert khz to interface specific speed value");
- speed_khz = khz;
- if (!jtag)
- return ERROR_OK;
- LOG_DEBUG("have interface set up");
- if (!jtag->khz) {
- LOG_ERROR("Translation from khz to jtag_speed not implemented");
- return ERROR_FAIL;
- }
- int speed_div1;
- int retval = jtag->khz(jtag_get_speed_khz(), &speed_div1);
- if (ERROR_OK != retval)
- return retval;
- *speed = speed_div1;
- return ERROR_OK;
-}
-
-static int jtag_rclk_to_speed(unsigned fallback_speed_khz, int *speed)
-{
- int retval = adapter_khz_to_speed(0, speed);
- if ((ERROR_OK != retval) && fallback_speed_khz) {
- LOG_DEBUG("trying fallback speed...");
- retval = adapter_khz_to_speed(fallback_speed_khz, speed);
- }
- return retval;
-}
-
-static int jtag_set_speed(int speed)
-{
- jtag_speed = speed;
- /* this command can be called during CONFIG,
- * in which case jtag isn't initialized */
- return jtag ? jtag->speed(speed) : ERROR_OK;
-}
-
-int jtag_config_khz(unsigned khz)
-{
- LOG_DEBUG("handle jtag khz");
- clock_mode = CLOCK_MODE_KHZ;
- int speed = 0;
- int retval = adapter_khz_to_speed(khz, &speed);
- return (ERROR_OK != retval) ? retval : jtag_set_speed(speed);
-}
-
-int jtag_config_rclk(unsigned fallback_speed_khz)
-{
- LOG_DEBUG("handle jtag rclk");
- clock_mode = CLOCK_MODE_RCLK;
- rclk_fallback_speed_khz = fallback_speed_khz;
- int speed = 0;
- int retval = jtag_rclk_to_speed(fallback_speed_khz, &speed);
- return (ERROR_OK != retval) ? retval : jtag_set_speed(speed);
-}
-
-int jtag_get_speed(int *speed)
-{
- switch (clock_mode) {
- case CLOCK_MODE_KHZ:
- adapter_khz_to_speed(jtag_get_speed_khz(), speed);
- break;
- case CLOCK_MODE_RCLK:
- jtag_rclk_to_speed(rclk_fallback_speed_khz, speed);
- break;
- default:
- LOG_ERROR("BUG: unknown jtag clock mode");
- return ERROR_FAIL;
- }
- return ERROR_OK;
-}
-
-int jtag_get_speed_readable(int *khz)
-{
- int jtag_speed_var = 0;
- int retval = jtag_get_speed(&jtag_speed_var);
- if (retval != ERROR_OK)
- return retval;
- if (!jtag)
- return ERROR_OK;
- if (!jtag->speed_div) {
- LOG_ERROR("Translation from jtag_speed to khz not implemented");
- return ERROR_FAIL;
- }
- return jtag->speed_div(jtag_speed_var, khz);
-}
-