|
@@ -932,12 +932,14 @@ static int cam_cpas_util_apply_client_ahb_vote(struct cam_hw_info *cpas_hw,
|
|
|
|
|
|
CAM_DBG(CAM_CPAS, "Required highest_level[%d]", highest_level);
|
|
|
|
|
|
- rc = cam_cpas_util_vote_bus_client_level(ahb_bus_client,
|
|
|
- highest_level);
|
|
|
- if (rc) {
|
|
|
- CAM_ERR(CAM_CPAS, "Failed in ahb vote, level=%d, rc=%d",
|
|
|
- highest_level, rc);
|
|
|
- goto unlock_bus_client;
|
|
|
+ if (cpas_core->ahb_bus_scaling_enable) {
|
|
|
+ rc = cam_cpas_util_vote_bus_client_level(ahb_bus_client,
|
|
|
+ highest_level);
|
|
|
+ if (rc) {
|
|
|
+ CAM_ERR(CAM_CPAS, "Failed in ahb vote, level=%d, rc=%d",
|
|
|
+ highest_level, rc);
|
|
|
+ goto unlock_bus_client;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
rc = cam_soc_util_set_clk_rate_level(&cpas_hw->soc_info, highest_level);
|
|
@@ -1661,6 +1663,33 @@ static int cam_cpas_util_get_internal_ops(struct platform_device *pdev,
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
+static int cam_cpas_util_create_debugfs(
|
|
|
+ struct cam_cpas *cpas_core)
|
|
|
+{
|
|
|
+ int rc = 0;
|
|
|
+
|
|
|
+ cpas_core->dentry = debugfs_create_dir("camera_cpas", NULL);
|
|
|
+ if (!cpas_core->dentry)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ if (!debugfs_create_bool("ahb_bus_scaling_enable",
|
|
|
+ 0644,
|
|
|
+ cpas_core->dentry,
|
|
|
+ &cpas_core->ahb_bus_scaling_enable)) {
|
|
|
+ CAM_ERR(CAM_CPAS,
|
|
|
+ "failed to create ahb_bus_scaling_enable entry");
|
|
|
+ rc = -ENOMEM;
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+err:
|
|
|
+ debugfs_remove_recursive(cpas_core->dentry);
|
|
|
+ cpas_core->dentry = NULL;
|
|
|
+ return rc;
|
|
|
+}
|
|
|
+
|
|
|
int cam_cpas_hw_probe(struct platform_device *pdev,
|
|
|
struct cam_hw_intf **hw_intf)
|
|
|
{
|
|
@@ -1803,6 +1832,10 @@ int cam_cpas_hw_probe(struct platform_device *pdev,
|
|
|
if (rc)
|
|
|
goto axi_cleanup;
|
|
|
|
|
|
+ rc = cam_cpas_util_create_debugfs(cpas_core);
|
|
|
+ if (rc)
|
|
|
+ CAM_WARN(CAM_CPAS, "Failed to create dentry");
|
|
|
+
|
|
|
*hw_intf = cpas_hw_intf;
|
|
|
return 0;
|
|
|
|
|
@@ -1854,6 +1887,8 @@ int cam_cpas_hw_remove(struct cam_hw_intf *cpas_hw_intf)
|
|
|
cam_cpas_util_unregister_bus_client(&cpas_core->ahb_bus_client);
|
|
|
cam_cpas_util_client_cleanup(cpas_hw);
|
|
|
cam_cpas_soc_deinit_resources(&cpas_hw->soc_info);
|
|
|
+ debugfs_remove_recursive(cpas_core->dentry);
|
|
|
+ cpas_core->dentry = NULL;
|
|
|
flush_workqueue(cpas_core->work_queue);
|
|
|
destroy_workqueue(cpas_core->work_queue);
|
|
|
mutex_destroy(&cpas_hw->hw_mutex);
|