.. | .. |
---|
115 | 115 | [S5M8767_BUCK9] = &buck_voltage_val3, |
---|
116 | 116 | }; |
---|
117 | 117 | |
---|
118 | | -static unsigned int s5m8767_opmode_reg[][4] = { |
---|
| 118 | +static const unsigned int s5m8767_opmode_reg[][4] = { |
---|
119 | 119 | /* {OFF, ON, LOWPOWER, SUSPEND} */ |
---|
120 | 120 | /* LDO1 ... LDO28 */ |
---|
121 | 121 | {0x0, 0x3, 0x2, 0x1}, /* LDO1 */ |
---|
.. | .. |
---|
339 | 339 | unsigned int new_sel) |
---|
340 | 340 | { |
---|
341 | 341 | 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]; |
---|
346 | 342 | |
---|
347 | 343 | 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), |
---|
349 | 345 | s5m8767->ramp_delay * 1000); |
---|
350 | 346 | return 0; |
---|
351 | 347 | } |
---|
.. | .. |
---|
447 | 443 | } |
---|
448 | 444 | if (mode != S5M8767_ENCTRL_USE_GPIO) { |
---|
449 | 445 | 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); |
---|
452 | 448 | return; |
---|
453 | 449 | } |
---|
454 | 450 | |
---|
455 | 451 | if (!rdata->ext_control_gpiod) { |
---|
456 | 452 | 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); |
---|
459 | 455 | return; |
---|
460 | 456 | } |
---|
461 | 457 | |
---|
.. | .. |
---|
565 | 561 | pdata->opmode = rmode; |
---|
566 | 562 | for_each_child_of_node(regulators_np, reg_np) { |
---|
567 | 563 | 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)) |
---|
569 | 565 | break; |
---|
570 | 566 | |
---|
571 | 567 | if (i == ARRAY_SIZE(regulators)) { |
---|
572 | 568 | 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); |
---|
575 | 571 | continue; |
---|
576 | 572 | } |
---|
577 | 573 | |
---|
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); |
---|
585 | 585 | return PTR_ERR(rdata->ext_control_gpiod); |
---|
| 586 | + } |
---|
586 | 587 | |
---|
587 | 588 | rdata->id = i; |
---|
588 | 589 | rdata->initdata = of_get_regulator_init_data( |
---|
.. | .. |
---|
594 | 595 | if (of_property_read_u32(reg_np, "op_mode", |
---|
595 | 596 | &rmode->mode)) { |
---|
596 | 597 | dev_warn(iodev->dev, |
---|
597 | | - "no op_mode property property at %pOF\n", |
---|
| 598 | + "no op_mode property at %pOF\n", |
---|
598 | 599 | reg_np); |
---|
599 | 600 | |
---|
600 | 601 | rmode->mode = S5M8767_OPMODE_NORMAL_MODE; |
---|
.. | .. |
---|
956 | 957 | config.regmap = iodev->regmap_pmic; |
---|
957 | 958 | config.of_node = pdata->regulators[i].reg_node; |
---|
958 | 959 | 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 */ |
---|
960 | 962 | s5m8767_regulator_config_ext_control(s5m8767, |
---|
961 | 963 | &pdata->regulators[i], &config); |
---|
962 | 964 | |
---|
| 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 | + } |
---|
963 | 971 | rdev = devm_regulator_register(&pdev->dev, ®ulators[id], |
---|
964 | 972 | &config); |
---|
965 | 973 | if (IS_ERR(rdev)) { |
---|
.. | .. |
---|
996 | 1004 | .probe = s5m8767_pmic_probe, |
---|
997 | 1005 | .id_table = s5m8767_pmic_id, |
---|
998 | 1006 | }; |
---|
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); |
---|
1011 | 1008 | |
---|
1012 | 1009 | /* Module information */ |
---|
1013 | 1010 | MODULE_AUTHOR("Sangbeom Kim <sbkim73@samsung.com>"); |
---|
1014 | | -MODULE_DESCRIPTION("SAMSUNG S5M8767 Regulator Driver"); |
---|
| 1011 | +MODULE_DESCRIPTION("Samsung S5M8767 Regulator Driver"); |
---|
1015 | 1012 | MODULE_LICENSE("GPL"); |
---|