void msm_vidc_free_platform_resources( struct msm_vidc_platform_resources *res) { msm_vidc_free_clock_table(res); msm_vidc_free_regulator_table(res); msm_vidc_free_freq_table(res); msm_vidc_free_reg_table(res); msm_vidc_free_bus_vectors(res); msm_vidc_free_iommu_groups(res); }
static int msm_vidc_load_freq_table(struct msm_vidc_platform_resources *res) { int rc = 0; int num_elements = 0; struct platform_device *pdev = res->pdev; if (!of_find_property(pdev->dev.of_node, "qcom,load-freq-tbl", NULL)) { /* qcom,load-freq-tbl is an optional property. It likely won't * be present on cores that we can't clock scale on. */ dprintk(VIDC_DBG, "qcom,load-freq-tbl not found\n"); return 0; } num_elements = get_u32_array_num_elements(pdev, "qcom,load-freq-tbl"); num_elements /= sizeof(*res->load_freq_tbl) / sizeof(u32); if (num_elements == 0) { dprintk(VIDC_ERR, "no elements in frequency table\n"); return rc; } res->load_freq_tbl = devm_kzalloc(&pdev->dev, num_elements * sizeof(*res->load_freq_tbl), GFP_KERNEL); if (!res->load_freq_tbl) { dprintk(VIDC_ERR, "%s Failed to alloc load_freq_tbl\n", __func__); return -ENOMEM; } if (of_property_read_u32_array(pdev->dev.of_node, "qcom,load-freq-tbl", (u32 *)res->load_freq_tbl, num_elements * sizeof(*res->load_freq_tbl) / sizeof(u32))) { dprintk(VIDC_ERR, "Failed to read frequency table\n"); msm_vidc_free_freq_table(res); return -EINVAL; } res->load_freq_tbl_size = num_elements; return rc; }