.determine_rate = raspberrypi_pll_determine_rate,
 };
 
-static int raspberrypi_register_pllb(struct raspberrypi_clk *rpi)
+static struct clk_hw *raspberrypi_register_pllb(struct raspberrypi_clk *rpi)
 {
        struct raspberrypi_clk_data *data;
        struct clk_init_data init = {};
 
        data = devm_kzalloc(rpi->dev, sizeof(*data), GFP_KERNEL);
        if (!data)
-               return -ENOMEM;
+               return ERR_PTR(-ENOMEM);
        data->rpi = rpi;
        data->id = RPI_FIRMWARE_ARM_CLK_ID;
 
        if (ret) {
                dev_err(rpi->dev, "Failed to get %s min freq: %d\n",
                        init.name, ret);
-               return ret;
+               return ERR_PTR(ret);
        }
 
        ret = raspberrypi_clock_property(rpi->firmware, data,
        if (ret) {
                dev_err(rpi->dev, "Failed to get %s max freq: %d\n",
                        init.name, ret);
-               return ret;
+               return ERR_PTR(ret);
        }
 
        if (!min_rate || !max_rate) {
                dev_err(rpi->dev, "Unexpected frequency range: min %u, max %u\n",
                        min_rate, max_rate);
-               return -EINVAL;
+               return ERR_PTR(-EINVAL);
        }
 
        dev_info(rpi->dev, "CPU frequency range: min %u, max %u\n",
        data->hw.init = &init;
 
        ret = devm_clk_hw_register(rpi->dev, &data->hw);
-       if (!ret)
-               clk_hw_set_rate_range(&data->hw,
-                                     min_rate * RPI_FIRMWARE_PLLB_ARM_DIV_RATE,
-                                     max_rate * RPI_FIRMWARE_PLLB_ARM_DIV_RATE);
+       if (ret)
+               return ERR_PTR(ret);
 
-       return ret;
+       clk_hw_set_rate_range(&data->hw,
+                             min_rate * RPI_FIRMWARE_PLLB_ARM_DIV_RATE,
+                             max_rate * RPI_FIRMWARE_PLLB_ARM_DIV_RATE);
+
+       return &data->hw;
 }
 
 static struct clk_fixed_factor raspberrypi_clk_pllb_arm = {
        },
 };
 
-static int raspberrypi_register_pllb_arm(struct raspberrypi_clk *rpi)
+static struct clk_hw *raspberrypi_register_pllb_arm(struct raspberrypi_clk *rpi)
 {
        int ret;
 
        ret = devm_clk_hw_register(rpi->dev, &raspberrypi_clk_pllb_arm.hw);
        if (ret) {
                dev_err(rpi->dev, "Failed to initialize pllb_arm\n");
-               return ret;
+               return ERR_PTR(ret);
        }
 
        ret = devm_clk_hw_register_clkdev(rpi->dev,
                                          NULL, "cpu0");
        if (ret) {
                dev_err(rpi->dev, "Failed to initialize clkdev\n");
-               return ret;
+               return ERR_PTR(ret);
        }
 
-       return 0;
+       return &raspberrypi_clk_pllb_arm.hw;
 }
 
 static int raspberrypi_clk_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        struct rpi_firmware *firmware;
        struct raspberrypi_clk *rpi;
-       int ret;
+       struct clk_hw *hw;
 
        /*
         * We can be probed either through the an old-fashioned
        rpi->firmware = firmware;
        platform_set_drvdata(pdev, rpi);
 
-       ret = raspberrypi_register_pllb(rpi);
-       if (ret) {
-               dev_err(dev, "Failed to initialize pllb, %d\n", ret);
-               return ret;
+       hw = raspberrypi_register_pllb(rpi);
+       if (IS_ERR(hw)) {
+               dev_err(dev, "Failed to initialize pllb, %ld\n", PTR_ERR(hw));
+               return PTR_ERR(hw);
        }
 
-       ret = raspberrypi_register_pllb_arm(rpi);
-       if (ret)
-               return ret;
+       hw = raspberrypi_register_pllb_arm(rpi);
+       if (IS_ERR(hw))
+               return PTR_ERR(hw);
 
        rpi->cpufreq = platform_device_register_data(dev, "raspberrypi-cpufreq",
                                                     -1, NULL, 0);