Re: [PATCH 4/4] regulator: qcom: Rework to single platform device

From: Stephen Boyd
Date: Wed Mar 04 2015 - 14:35:51 EST


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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/