static int fpga_csi_bridge_probe(struct i2c_client *client)
{
struct fpga_csi_bridge_priv *priv;
struct device *dev = &client->dev;
int ret;
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
if (!priv)
return -ENOMEM;
priv->client = client;
mutex_init(&priv->lock);
i2c_set_clientdata(client, priv);
/* ... (Ваш существующий код работы с reset_gpio, parse_dt, v4l2_init) ... */
/* ----------------------------------------------------------------- */
/* FPGA Manager core registration */
/* ----------------------------------------------------------------- */
priv->fpga_priv.dev = dev;
priv->fpga_priv.command_transfer = sysconfig_i2c_cmd_transfer;
priv->fpga_priv.bitstream_burst_write_init = sysconfig_i2c_bitstream_burst_init;
priv->fpga_priv.bitstream_burst_write = sysconfig_i2c_bitstream_burst_write;
priv->fpga_priv.bitstream_burst_write_complete = sysconfig_i2c_bitstream_burst_complete;
ret = sysconfig_probe(&priv->fpga_priv);
if (ret) {
dev_err(dev, "Failed to register integrated Lattice FPGA Manager\n");
return ret;
}
/* ----------------------------------------------------------------- */
/* Create the direct sysfs file manually */
/* ----------------------------------------------------------------- */
ret = device_create_file(dev, &dev_attr_load_fpga);
if (ret) {
dev_err(dev, "Failed to create sysfs interface file\n");
return ret;
}
dev_info(dev, "Direct sysfs FPGA loader interface successfully initialized\n");
return 0;
}