Загрузка данных


static int sysconfig_i2c_bitstream_burst_complete(struct sysconfig_priv *priv)
{
    struct i2c_client *client = to_i2c_client(priv->dev);
    /* 
     * Отправляем 4 байта холостого хода (0xFF).
     * Это заставит контроллер i.MX95 выдать ровно 32 такта SCL на шину.
     * Эти импульсы жизненно необходимы внутреннему автомату CrossLink-NX,
     * чтобы завершить фазу Wake-up, отпустить INITN и поднять DONE в High.
     */
    u8 dummy_clocks[4] = { 0xFF, 0xFF, 0xFF, 0xFF };
    struct i2c_msg msg;
    int ret;

    msg.addr = client->addr;
    msg.flags = client->flags & I2C_M_TEN; // Строго БЕЗ NOSTART, чтобы завершить транзакцию STOP-битом
    msg.len = sizeof(dummy_clocks);
    msg.buf = dummy_clocks;

    ret = i2c_transfer(client->adapter, &msg, 1);
    if (ret < 0) {
        dev_err(priv->dev, "Wake-up clocks injection failed: %d\n", ret);
        return ret;
    }

    dev_info(priv->dev, "I2C Wake-up clocks generated successfully.\n");
    return 0;
}