{
        struct clk_si514 *data;
        struct clk_init_data init;
-       struct clk *clk;
        int err;
 
        data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
 
        i2c_set_clientdata(client, data);
 
-       clk = devm_clk_register(&client->dev, &data->hw);
-       if (IS_ERR(clk)) {
+       err = devm_clk_hw_register(&client->dev, &data->hw);
+       if (err) {
                dev_err(&client->dev, "clock registration failed\n");
-               return PTR_ERR(clk);
+               return err;
        }
-       err = of_clk_add_provider(client->dev.of_node, of_clk_src_simple_get,
-                       clk);
+       err = of_clk_add_hw_provider(client->dev.of_node, of_clk_hw_simple_get,
+                                    &data->hw);
        if (err) {
                dev_err(&client->dev, "unable to add clk provider\n");
                return err;