Re: regulator_register() API

From: Mark Brown
Date: Tue Jun 09 2009 - 11:18:47 EST


On Tue, Jun 09, 2009 at 03:59:47PM +0200, Rodolfo Giometti wrote:

> Current regulator_register() implementation forces the caller to
> allocate a proper device for each regulators and also the line:

> struct regulator_init_data *init_data = dev->platform_data;

> forces the user to define the pointer platform_data as a "struct
> regulator_init_data" only.

That's not the case in current mainline - the init data is passed in as
an argument to regulator_register(). There should be no requirement
that the struct device be unique, you should be able to use the same
struct device for all the regulators on the device. It's mostly just
used for printk.

> However if the regulator_register() worked in a similar way to
> led_classdev_register(), I simply can do something like this:

> for (i = 0; i < regulators_num; i++) {
> /* init regulators structs */
> ...
>
> ret = regulator_register(&client->dev, &reg[i].dev);
> if (ret < 0)
> dev_warn(&client->dev, "unable to register\n");
> }

You can do exactly this in current mainline. You do need to supply init
data for each regulator to make them useful. The change came in commit
0527100fd11d9710c7e153d791da78824b7b46fa which was merged during the
2.6.30 merge window.

> This will keep backward compatibility with old drivers and may offer a
> more versatile way to define a regulator expecially for
> multifunctional devices.

Most of the regulators currently supported are part of multi-function
devices so they're not an unusual case here.
--
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/