lkml.org 
[lkml]   [2015]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 4/4] regulator: qcom: Rework to single platform device
On 03/02/15 20:25, Bjorn Andersson wrote:
> + match = of_match_device(rpm_of_match, &pdev->dev);
> + for (reg = match->data; reg->name; reg++) {
> + vreg = devm_kmalloc(&pdev->dev, sizeof(*vreg), GFP_KERNEL);
> + if (!vreg) {
> + dev_err(&pdev->dev, "failed to allocate vreg\n");
> + return -ENOMEM;
> + }
> + memcpy(vreg, reg->template, sizeof(*vreg));
> + mutex_init(&vreg->lock);
> +
> + vreg->dev = &pdev->dev;
> + vreg->resource = reg->resource;
> +
> + vreg->desc.id = -1;
> + vreg->desc.owner = THIS_MODULE;
> + vreg->desc.type = REGULATOR_VOLTAGE;
> + vreg->desc.name = reg->name;
> + vreg->desc.supply_name = reg->supply;
> + vreg->desc.of_match = reg->name;
> + vreg->desc.of_parse_cb = rpm_reg_of_parse;
> +
> + vreg->rpm = dev_get_drvdata(pdev->dev.parent);
> + if (!vreg->rpm) {
> + dev_err(&pdev->dev, "unable to retrieve handle to rpm\n");
> + return -ENODEV;
> + }
>
> - rdev = devm_regulator_register(&pdev->dev, &vreg->desc, &config);
> - if (IS_ERR(rdev)) {
> - dev_err(&pdev->dev, "can't register regulator\n");
> - return PTR_ERR(rdev);
> + config.dev = &pdev->dev;
> + config.driver_data = vreg;
> + rdev = devm_regulator_register(&pdev->dev, &vreg->desc, &config);
> + if (IS_ERR(rdev)) {
> + dev_err(&pdev->dev, "can't register regulator\n");
> + return PTR_ERR(rdev);
> + }
> }
>
> return 0;

There's another problem with this of_parse_cb design. The regulator
framework requires supplies to be registered before consumers of the
supplies are registered. So when we register L23 we need to make sure
it's supply is already registered (S8 for example). If we used
of_regulator_match() we could sort the array by hand so that we always
register the supplies first. Or we could modify the regulator framework
to have a concept of "orphaned" supplies like the clock framework has so
that when a regulator is registered it waits until its supply is registered.

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project



\
 
 \ /
  Last update: 2015-03-04 20:41    [W:0.209 / U:1.356 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site