static int sysconfig_i2c_bitstream_burst_complete(struct sysconfig_priv *priv)
{
// Команда ISC_DISABLE в формате вашей i2c-спецификации (4 байта)
static const u8 isc_disable[] = SYSCONFIG_ISC_DISABLE;
// Несколько байт BYPASS (0xFF) для генерации тактов завершения (Wake-up)
static const u8 bypass_clocks[] = {0xFF, 0xFF, 0xFF, 0xFF};
int ret;
/* 1. Отправляем команду ISC_DISABLE (0x26), чтобы закрыть сессию программирования */
ret = sysconfig_cmd_write(priv, isc_disable, sizeof(isc_disable));
if (ret) {
dev_err(priv->dev, "Failed to send ISC_DISABLE\n");
return ret;
}
/* 2. Отправляем пустые байты 0xFF.
* Они сгенерируют необходимые такты на внутренней шине для старта Wake-up последовательности */
ret = sysconfig_cmd_write(priv, bypass_clocks, sizeof(bypass_clocks));
if (ret) {
dev_err(priv->dev, "Failed to send Bypass clocks\n");
return ret;
}
/* 3. Небольшая пауза, чтобы FPGA успела применить настройки и поднять DONE.
* Для Nexus рекомендуется сделать паузу от 100 мкс до нескольких миллисекунд (если включено сжатие битстрима) */
usleep_range(1000, 2000);
return 0;
}