return 0;
 }
 
-int qnoc_probe(struct platform_device *pdev, size_t cd_size, int cd_num,
-              const struct clk_bulk_data *cd)
+static const char * const bus_clocks[] = {
+       "bus", "bus_a",
+};
+
+int qnoc_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
        const struct qcom_icc_desc *desc;
        struct qcom_icc_provider *qp;
        struct icc_node *node;
        size_t num_nodes, i;
+       const char * const *cds;
+       int cd_num;
        int ret;
 
        /* wait for the RPM proxy */
        qnodes = desc->nodes;
        num_nodes = desc->num_nodes;
 
-       qp = devm_kzalloc(dev, sizeof(*qp), GFP_KERNEL);
+       cds = bus_clocks;
+       cd_num = ARRAY_SIZE(bus_clocks);
+
+       qp = devm_kzalloc(dev, struct_size(qp, bus_clks, cd_num), GFP_KERNEL);
        if (!qp)
                return -ENOMEM;
 
        if (!data)
                return -ENOMEM;
 
-       qp->bus_clks = devm_kmemdup(dev, cd, cd_size,
-                                   GFP_KERNEL);
-       if (!qp->bus_clks)
-               return -ENOMEM;
-
+       for (i = 0; i < cd_num; i++)
+               qp->bus_clks[i].id = cds[i];
        qp->num_clks = cd_num;
+
        ret = devm_clk_bulk_get(dev, qp->num_clks, qp->bus_clks);
        if (ret)
                return ret;
 
  */
 struct qcom_icc_provider {
        struct icc_provider provider;
-       struct clk_bulk_data *bus_clks;
        int num_clks;
+       struct clk_bulk_data bus_clks[];
 };
 
 /**
        }
 
 
-int qnoc_probe(struct platform_device *pdev, size_t cd_size, int cd_num,
-              const struct clk_bulk_data *cd);
+int qnoc_probe(struct platform_device *pdev);
 int qnoc_remove(struct platform_device *pdev);
 
 #endif
 
        MSM8916_SNOC_PNOC_SLV,
 };
 
-static const struct clk_bulk_data msm8916_bus_clocks[] = {
-       { .id = "bus" },
-       { .id = "bus_a" },
-};
-
 DEFINE_QNODE(bimc_snoc_mas, MSM8916_BIMC_SNOC_MAS, 8, -1, -1, MSM8916_BIMC_SNOC_SLV);
 DEFINE_QNODE(bimc_snoc_slv, MSM8916_BIMC_SNOC_SLV, 8, -1, -1, MSM8916_SNOC_INT_0, MSM8916_SNOC_INT_1);
 DEFINE_QNODE(mas_apss, MSM8916_MASTER_AMPSS_M0, 8, -1, -1, MSM8916_SLAVE_EBI_CH0, MSM8916_BIMC_SNOC_MAS, MSM8916_SLAVE_AMPSS_L2);
        .num_nodes = ARRAY_SIZE(msm8916_pcnoc_nodes),
 };
 
-static int msm8916_qnoc_probe(struct platform_device *pdev)
-{
-       return qnoc_probe(pdev, sizeof(msm8916_bus_clocks),
-                         ARRAY_SIZE(msm8916_bus_clocks), msm8916_bus_clocks);
-}
-
 static const struct of_device_id msm8916_noc_of_match[] = {
        { .compatible = "qcom,msm8916-bimc", .data = &msm8916_bimc },
        { .compatible = "qcom,msm8916-pcnoc", .data = &msm8916_pcnoc },
 MODULE_DEVICE_TABLE(of, msm8916_noc_of_match);
 
 static struct platform_driver msm8916_noc_driver = {
-       .probe = msm8916_qnoc_probe,
+       .probe = qnoc_probe,
        .remove = qnoc_remove,
        .driver = {
                .name = "qnoc-msm8916",
 
        MSM8939_SNOC_PNOC_SLV,
 };
 
-static const struct clk_bulk_data msm8939_bus_clocks[] = {
-       { .id = "bus" },
-       { .id = "bus_a" },
-};
-
 DEFINE_QNODE(bimc_snoc_mas, MSM8939_BIMC_SNOC_MAS, 8, -1, -1, MSM8939_BIMC_SNOC_SLV);
 DEFINE_QNODE(bimc_snoc_slv, MSM8939_BIMC_SNOC_SLV, 16, -1, 2, MSM8939_SNOC_INT_0, MSM8939_SNOC_INT_1);
 DEFINE_QNODE(mas_apss, MSM8939_MASTER_AMPSS_M0, 16, -1, -1, MSM8939_SLAVE_EBI_CH0, MSM8939_BIMC_SNOC_MAS, MSM8939_SLAVE_AMPSS_L2);
        .num_nodes = ARRAY_SIZE(msm8939_pcnoc_nodes),
 };
 
-static int msm8939_qnoc_probe(struct platform_device *pdev)
-{
-       return qnoc_probe(pdev, sizeof(msm8939_bus_clocks),
-                         ARRAY_SIZE(msm8939_bus_clocks), msm8939_bus_clocks);
-}
-
 static const struct of_device_id msm8939_noc_of_match[] = {
        { .compatible = "qcom,msm8939-bimc", .data = &msm8939_bimc },
        { .compatible = "qcom,msm8939-pcnoc", .data = &msm8939_pcnoc },
 MODULE_DEVICE_TABLE(of, msm8939_noc_of_match);
 
 static struct platform_driver msm8939_noc_driver = {
-       .probe = msm8939_qnoc_probe,
+       .probe = qnoc_probe,
        .remove = qnoc_remove,
        .driver = {
                .name = "qnoc-msm8939",
 
        QCS404_SLAVE_LPASS,
 };
 
-static const struct clk_bulk_data qcs404_bus_clocks[] = {
-       { .id = "bus" },
-       { .id = "bus_a" },
-};
-
 DEFINE_QNODE(mas_apps_proc, QCS404_MASTER_AMPSS_M0, 8, 0, -1, QCS404_SLAVE_EBI_CH0, QCS404_BIMC_SNOC_SLV);
 DEFINE_QNODE(mas_oxili, QCS404_MASTER_GRAPHICS_3D, 8, -1, -1, QCS404_SLAVE_EBI_CH0, QCS404_BIMC_SNOC_SLV);
 DEFINE_QNODE(mas_mdp, QCS404_MASTER_MDP_PORT0, 8, -1, -1, QCS404_SLAVE_EBI_CH0, QCS404_BIMC_SNOC_SLV);
 };
 
 
-static int qcs404_qnoc_probe(struct platform_device *pdev)
-{
-       return qnoc_probe(pdev, sizeof(qcs404_bus_clocks),
-                         ARRAY_SIZE(qcs404_bus_clocks), qcs404_bus_clocks);
-}
-
 static const struct of_device_id qcs404_noc_of_match[] = {
        { .compatible = "qcom,qcs404-bimc", .data = &qcs404_bimc },
        { .compatible = "qcom,qcs404-pcnoc", .data = &qcs404_pcnoc },
 MODULE_DEVICE_TABLE(of, qcs404_noc_of_match);
 
 static struct platform_driver qcs404_noc_driver = {
-       .probe = qcs404_qnoc_probe,
+       .probe = qnoc_probe,
        .remove = qnoc_remove,
        .driver = {
                .name = "qnoc-qcs404",