diff --git a/drivers/cam_icp/icp_hw/a5_hw/a5_core.c b/drivers/cam_icp/icp_hw/a5_hw/a5_core.c index 3e4c6f8d9d69..0301120b1978 100644 --- a/drivers/cam_icp/icp_hw/a5_hw/a5_core.c +++ b/drivers/cam_icp/icp_hw/a5_hw/a5_core.c @@ -199,10 +199,22 @@ static int32_t cam_a5_download_fw(void *device_priv) pdev = soc_info->pdev; cam_a5_soc_info = soc_info->soc_private; - rc = request_firmware(&core_info->fw_elf, "CAMERA_ICP.elf", &pdev->dev); - if (rc) { - CAM_ERR(CAM_ICP, "Failed to locate fw: %d", rc); - return rc; + if (cam_a5_soc_info->fw_name) { + CAM_INFO(CAM_ICP, "Downloading firmware %s", + cam_a5_soc_info->fw_name); + rc = request_firmware(&core_info->fw_elf, + cam_a5_soc_info->fw_name, &pdev->dev); + if (rc) { + CAM_ERR(CAM_ICP, "Failed to locate fw: %d", rc); + return rc; + } + } else { + rc = request_firmware(&core_info->fw_elf, + "CAMERA_ICP.elf", &pdev->dev); + if (rc) { + CAM_ERR(CAM_ICP, "Failed to locate fw: %d", rc); + return rc; + } } if (!core_info->fw_elf) { diff --git a/drivers/cam_icp/icp_hw/a5_hw/a5_soc.c b/drivers/cam_icp/icp_hw/a5_hw/a5_soc.c index 6e9bace10ca4..e19396ee2adc 100644 --- a/drivers/cam_icp/icp_hw/a5_hw/a5_soc.c +++ b/drivers/cam_icp/icp_hw/a5_hw/a5_soc.c @@ -32,7 +32,6 @@ static int cam_a5_get_dt_properties(struct cam_hw_soc_info *soc_info) } a5_soc_info = soc_info->soc_private; - fw_name = a5_soc_info->fw_name; rc = of_property_read_string(of_node, "fw_name", &fw_name); if (rc < 0) { @@ -40,6 +39,8 @@ static int cam_a5_get_dt_properties(struct cam_hw_soc_info *soc_info) goto end; } + a5_soc_info->fw_name = fw_name; + rc = of_property_read_u32(of_node, "qos-val", &a5_soc_info->a5_qos_val); if (rc < 0) { diff --git a/drivers/cam_icp/icp_hw/a5_hw/a5_soc.h b/drivers/cam_icp/icp_hw/a5_hw/a5_soc.h index 8b5bc1c23c26..3c962ce01f2d 100644 --- a/drivers/cam_icp/icp_hw/a5_hw/a5_soc.h +++ b/drivers/cam_icp/icp_hw/a5_hw/a5_soc.h @@ -18,7 +18,7 @@ struct a5_ubwc_cfg_ext { }; struct a5_soc_info { - char *fw_name; + const char *fw_name; bool ubwc_config_ext; uint32_t a5_qos_val; union {