hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/regulator/s5m8767.c
....@@ -115,7 +115,7 @@
115115 [S5M8767_BUCK9] = &buck_voltage_val3,
116116 };
117117
118
-static unsigned int s5m8767_opmode_reg[][4] = {
118
+static const unsigned int s5m8767_opmode_reg[][4] = {
119119 /* {OFF, ON, LOWPOWER, SUSPEND} */
120120 /* LDO1 ... LDO28 */
121121 {0x0, 0x3, 0x2, 0x1}, /* LDO1 */
....@@ -339,13 +339,9 @@
339339 unsigned int new_sel)
340340 {
341341 struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev);
342
- const struct sec_voltage_desc *desc;
343
- int reg_id = rdev_get_id(rdev);
344
-
345
- desc = reg_voltage_map[reg_id];
346342
347343 if ((old_sel < new_sel) && s5m8767->ramp_delay)
348
- return DIV_ROUND_UP(desc->step * (new_sel - old_sel),
344
+ return DIV_ROUND_UP(rdev->desc->uV_step * (new_sel - old_sel),
349345 s5m8767->ramp_delay * 1000);
350346 return 0;
351347 }
....@@ -447,15 +443,15 @@
447443 }
448444 if (mode != S5M8767_ENCTRL_USE_GPIO) {
449445 dev_warn(s5m8767->dev,
450
- "ext-control for %s: mismatched op_mode (%x), ignoring\n",
451
- rdata->reg_node->name, mode);
446
+ "ext-control for %pOFn: mismatched op_mode (%x), ignoring\n",
447
+ rdata->reg_node, mode);
452448 return;
453449 }
454450
455451 if (!rdata->ext_control_gpiod) {
456452 dev_warn(s5m8767->dev,
457
- "ext-control for %s: GPIO not valid, ignoring\n",
458
- rdata->reg_node->name);
453
+ "ext-control for %pOFn: GPIO not valid, ignoring\n",
454
+ rdata->reg_node);
459455 return;
460456 }
461457
....@@ -565,24 +561,29 @@
565561 pdata->opmode = rmode;
566562 for_each_child_of_node(regulators_np, reg_np) {
567563 for (i = 0; i < ARRAY_SIZE(regulators); i++)
568
- if (!of_node_cmp(reg_np->name, regulators[i].name))
564
+ if (of_node_name_eq(reg_np, regulators[i].name))
569565 break;
570566
571567 if (i == ARRAY_SIZE(regulators)) {
572568 dev_warn(iodev->dev,
573
- "don't know how to configure regulator %s\n",
574
- reg_np->name);
569
+ "don't know how to configure regulator %pOFn\n",
570
+ reg_np);
575571 continue;
576572 }
577573
578
- rdata->ext_control_gpiod = devm_gpiod_get_from_of_node(&pdev->dev,
579
- reg_np,
580
- "s5m8767,pmic-ext-control-gpios",
581
- 0,
582
- GPIOD_OUT_HIGH,
583
- "s5m8767");
584
- if (IS_ERR(rdata->ext_control_gpiod))
574
+ rdata->ext_control_gpiod = devm_fwnode_gpiod_get(
575
+ &pdev->dev,
576
+ of_fwnode_handle(reg_np),
577
+ "s5m8767,pmic-ext-control",
578
+ GPIOD_OUT_HIGH | GPIOD_FLAGS_BIT_NONEXCLUSIVE,
579
+ "s5m8767");
580
+ if (PTR_ERR(rdata->ext_control_gpiod) == -ENOENT) {
581
+ rdata->ext_control_gpiod = NULL;
582
+ } else if (IS_ERR(rdata->ext_control_gpiod)) {
583
+ of_node_put(reg_np);
584
+ of_node_put(regulators_np);
585585 return PTR_ERR(rdata->ext_control_gpiod);
586
+ }
586587
587588 rdata->id = i;
588589 rdata->initdata = of_get_regulator_init_data(
....@@ -594,7 +595,7 @@
594595 if (of_property_read_u32(reg_np, "op_mode",
595596 &rmode->mode)) {
596597 dev_warn(iodev->dev,
597
- "no op_mode property property at %pOF\n",
598
+ "no op_mode property at %pOF\n",
598599 reg_np);
599600
600601 rmode->mode = S5M8767_OPMODE_NORMAL_MODE;
....@@ -956,10 +957,17 @@
956957 config.regmap = iodev->regmap_pmic;
957958 config.of_node = pdata->regulators[i].reg_node;
958959 config.ena_gpiod = NULL;
959
- if (pdata->regulators[i].ext_control_gpiod)
960
+ if (pdata->regulators[i].ext_control_gpiod) {
961
+ /* Assigns config.ena_gpiod */
960962 s5m8767_regulator_config_ext_control(s5m8767,
961963 &pdata->regulators[i], &config);
962964
965
+ /*
966
+ * Hand the GPIO descriptor management over to the
967
+ * regulator core, remove it from devres management.
968
+ */
969
+ devm_gpiod_unhinge(s5m8767->dev, config.ena_gpiod);
970
+ }
963971 rdev = devm_regulator_register(&pdev->dev, &regulators[id],
964972 &config);
965973 if (IS_ERR(rdev)) {
....@@ -996,20 +1004,9 @@
9961004 .probe = s5m8767_pmic_probe,
9971005 .id_table = s5m8767_pmic_id,
9981006 };
999
-
1000
-static int __init s5m8767_pmic_init(void)
1001
-{
1002
- return platform_driver_register(&s5m8767_pmic_driver);
1003
-}
1004
-subsys_initcall(s5m8767_pmic_init);
1005
-
1006
-static void __exit s5m8767_pmic_exit(void)
1007
-{
1008
- platform_driver_unregister(&s5m8767_pmic_driver);
1009
-}
1010
-module_exit(s5m8767_pmic_exit);
1007
+module_platform_driver(s5m8767_pmic_driver);
10111008
10121009 /* Module information */
10131010 MODULE_AUTHOR("Sangbeom Kim <sbkim73@samsung.com>");
1014
-MODULE_DESCRIPTION("SAMSUNG S5M8767 Regulator Driver");
1011
+MODULE_DESCRIPTION("Samsung S5M8767 Regulator Driver");
10151012 MODULE_LICENSE("GPL");