Lines Matching refs:fw_loader

250 static int vsc_get_sensor_name(struct vsc_fw_loader *fw_loader,
290 if (ret_obj->string.length >= sizeof(fw_loader->sensor_name)) {
296 memcpy(fw_loader->sensor_name, ret_obj->string.pointer,
299 string_lower(fw_loader->sensor_name, fw_loader->sensor_name);
307 static int vsc_identify_silicon(struct vsc_fw_loader *fw_loader)
309 struct vsc_rom_cmd_ack *ack = fw_loader->rx_buf;
310 struct vsc_rom_cmd *cmd = fw_loader->tx_buf;
319 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, ack, VSC_ROM_PKG_SIZE);
327 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, ack, VSC_ROM_PKG_SIZE);
343 dev_info(fw_loader->dev, "silicon stepping version is %u:%u\n",
351 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, ack, VSC_ROM_PKG_SIZE);
359 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, ack, VSC_ROM_PKG_SIZE);
368 static int vsc_identify_csi_image(struct vsc_fw_loader *fw_loader)
376 ret = request_firmware(&image, VSC_CSI_IMAGE_NAME, fw_loader->dev);
395 fw_loader->count += le32_to_cpu(img->image_count) - 1;
397 fw_loader->option =
428 frag = &fw_loader->frags[csi_image_map[i].frag_index];
439 fw_loader->csi = image;
449 static int vsc_identify_ace_image(struct vsc_fw_loader *fw_loader)
459 fw_loader->sensor_name);
461 ret = request_firmware(&image, path, fw_loader->dev);
480 fw_loader->count += le32_to_cpu(img->image_count);
505 frag = &fw_loader->frags[frag_index];
513 last_frag = &fw_loader->frags[frag_index - 1];
522 fw_loader->ace = image;
532 static int vsc_identify_cfg_image(struct vsc_fw_loader *fw_loader)
534 struct vsc_img_frag *frag = &fw_loader->frags[VSC_IMG_SKU_CFG_FRAG];
541 fw_loader->sensor_name);
543 ret = request_firmware(&image, path, fw_loader->dev);
564 fw_loader->cfg = image;
574 static int vsc_download_bootloader(struct vsc_fw_loader *fw_loader)
576 struct vsc_img_frag *frag = &fw_loader->frags[VSC_IMG_BOOTLOADER_FRAG];
577 struct vsc_rom_cmd_ack *ack = fw_loader->rx_buf;
578 struct vsc_rom_cmd *cmd = fw_loader->tx_buf;
586 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, ack, VSC_ROM_PKG_SIZE);
595 cmd->data.dl_start.option = cpu_to_le16(fw_loader->option);
603 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, NULL, VSC_ROM_PKG_SIZE);
620 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, NULL, VSC_ROM_PKG_SIZE);
631 static int vsc_download_firmware(struct vsc_fw_loader *fw_loader)
633 struct vsc_fw_cmd *cmd = fw_loader->tx_buf;
640 cmd->data.dl_set.img_cnt = cpu_to_le16(fw_loader->count);
641 put_unaligned_le16(fw_loader->option, &cmd->data.dl_set.option);
644 struct vsc_img_frag *frag = &fw_loader->frags[i];
653 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, NULL, VSC_FW_PKG_SIZE);
658 struct vsc_img_frag *frag = &fw_loader->frags[i];
667 put_unaligned_le16(fw_loader->option, &cmd->data.dl_start.option);
672 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, NULL, VSC_FW_PKG_SIZE);
683 memcpy(fw_loader->tx_buf, p, len);
684 memset(fw_loader->tx_buf + len, 0, VSC_FW_PKG_SIZE - len);
686 ret = vsc_tp_rom_xfer(fw_loader->tp, fw_loader->tx_buf,
702 return vsc_tp_rom_xfer(fw_loader->tp, cmd, NULL, VSC_FW_PKG_SIZE);
713 struct vsc_fw_loader *fw_loader __free(kfree) = NULL;
718 fw_loader = kzalloc(sizeof(*fw_loader), GFP_KERNEL);
719 if (!fw_loader)
730 fw_loader->tx_buf = tx_buf;
731 fw_loader->rx_buf = rx_buf;
733 fw_loader->tp = tp;
734 fw_loader->dev = dev;
736 ret = vsc_get_sensor_name(fw_loader, dev);
740 ret = vsc_identify_silicon(fw_loader);
744 ret = vsc_identify_csi_image(fw_loader);
748 ret = vsc_identify_ace_image(fw_loader);
752 ret = vsc_identify_cfg_image(fw_loader);
756 ret = vsc_download_bootloader(fw_loader);
758 ret = vsc_download_firmware(fw_loader);
760 release_firmware(fw_loader->cfg);
763 release_firmware(fw_loader->ace);
766 release_firmware(fw_loader->csi);