hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/clk/clk-cdce925.c
....@@ -16,6 +16,7 @@
1616 #include <linux/module.h>
1717 #include <linux/i2c.h>
1818 #include <linux/regmap.h>
19
+#include <linux/regulator/consumer.h>
1920 #include <linux/slab.h>
2021 #include <linux/gcd.h>
2122
....@@ -602,6 +603,30 @@
602603 return &data->clk[idx].hw;
603604 }
604605
606
+static void cdce925_regulator_disable(void *regulator)
607
+{
608
+ regulator_disable(regulator);
609
+}
610
+
611
+static int cdce925_regulator_enable(struct device *dev, const char *name)
612
+{
613
+ struct regulator *regulator;
614
+ int err;
615
+
616
+ regulator = devm_regulator_get(dev, name);
617
+ if (IS_ERR(regulator))
618
+ return PTR_ERR(regulator);
619
+
620
+ err = regulator_enable(regulator);
621
+ if (err) {
622
+ dev_err(dev, "Failed to enable %s: %d\n", name, err);
623
+ return err;
624
+ }
625
+
626
+ return devm_add_action_or_reset(dev, cdce925_regulator_disable,
627
+ regulator);
628
+}
629
+
605630 /* The CDCE925 uses a funky way to read/write registers. Bulk mode is
606631 * just weird, so just use the single byte mode exclusively. */
607632 static struct regmap_bus regmap_cdce925_bus = {
....@@ -616,7 +641,7 @@
616641 struct device_node *node = client->dev.of_node;
617642 const char *parent_name;
618643 const char *pll_clk_name[MAX_NUMBER_OF_PLLS] = {NULL,};
619
- struct clk_init_data init = {};
644
+ struct clk_init_data init;
620645 u32 value;
621646 int i;
622647 int err;
....@@ -630,6 +655,15 @@
630655 };
631656
632657 dev_dbg(&client->dev, "%s\n", __func__);
658
+
659
+ err = cdce925_regulator_enable(&client->dev, "vdd");
660
+ if (err)
661
+ return err;
662
+
663
+ err = cdce925_regulator_enable(&client->dev, "vddout");
664
+ if (err)
665
+ return err;
666
+
633667 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
634668 if (!data)
635669 return -ENOMEM;
....@@ -669,8 +703,12 @@
669703
670704 /* Register PLL clocks */
671705 for (i = 0; i < data->chip_info->num_plls; ++i) {
672
- pll_clk_name[i] = kasprintf(GFP_KERNEL, "%s.pll%d",
673
- client->dev.of_node->name, i);
706
+ pll_clk_name[i] = kasprintf(GFP_KERNEL, "%pOFn.pll%d",
707
+ client->dev.of_node, i);
708
+ if (!pll_clk_name[i]) {
709
+ err = -ENOMEM;
710
+ goto error;
711
+ }
674712 init.name = pll_clk_name[i];
675713 data->pll[i].chip = data;
676714 data->pll[i].hw.init = &init;
....@@ -703,6 +741,7 @@
703741 0x12 + (i*CDCE925_OFFSET_PLL),
704742 0x07, value & 0x07);
705743 }
744
+ of_node_put(np_output);
706745 }
707746
708747 /* Register output clock Y1 */
....@@ -710,7 +749,11 @@
710749 init.flags = 0;
711750 init.num_parents = 1;
712751 init.parent_names = &parent_name; /* Mux Y1 to input */
713
- init.name = kasprintf(GFP_KERNEL, "%s.Y1", client->dev.of_node->name);
752
+ init.name = kasprintf(GFP_KERNEL, "%pOFn.Y1", client->dev.of_node);
753
+ if (!init.name) {
754
+ err = -ENOMEM;
755
+ goto error;
756
+ }
714757 data->clk[0].chip = data;
715758 data->clk[0].hw.init = &init;
716759 data->clk[0].index = 0;
....@@ -727,8 +770,12 @@
727770 init.flags = CLK_SET_RATE_PARENT;
728771 init.num_parents = 1;
729772 for (i = 1; i < data->chip_info->num_outputs; ++i) {
730
- init.name = kasprintf(GFP_KERNEL, "%s.Y%d",
731
- client->dev.of_node->name, i+1);
773
+ init.name = kasprintf(GFP_KERNEL, "%pOFn.Y%d",
774
+ client->dev.of_node, i+1);
775
+ if (!init.name) {
776
+ err = -ENOMEM;
777
+ goto error;
778
+ }
732779 data->clk[i].chip = data;
733780 data->clk[i].hw.init = &init;
734781 data->clk[i].index = i;