Re: [PATCH 2/2] PMIC / opregion: support PMIC customized operation region for CrystalCove

Linus Walleij
2014-10-08T09:16:11Z

On Wed, Oct 8, 2014 at 10:05 AM, Lee Jones <lee.jones@linaro.org> wrote:

> With the influx of new same-chip devices, I think the MFD subsystem is
> fast becoming overloaded. I think all of the PMIC handling should in
> fact either live in Regulators or have its own subsystem.

You have a valid point, and it's been raised before that MFD risk being
a dumping ground of the same kind that drivers/misc used to be (is?).

PMIC (Power Management Integrated Circuit) is often not even a
correct name for the thing if it contains things like audio amplifiers
USB PHY intrerfaces or LED boosters as some do.

MSIC (Mixed-Signal Integrated Circuit) is the correct name for
silicon that is created as a one-stop shop for anything combining
digital and analog constructions, often in a higher micron node
(not as densely integrated) as a digital IC (the latter referred to
as SoCs, "baseband", "CPU" and whatnot).

If they shall live in MFD the driver there should (IMHO) just be
an exchange station, multiplexing messages and spawning
MFD cells into platform devices for respective *real* subsystem,
various misc stuff should not be allowed to be shoehorned
into MFD just because there is no other place to put it.

This driver clearly does not qualify, look:

> +static int intel_crc_pmic_update_power(struct regmap *regmap,
> + struct pmic_pwr_reg *preg, bool on)
> +{
> + int data;
> +
> + if (regmap_read(regmap, preg->reg, &data))
> + return -EIO;
> +
> + if (on) {
> + data |= PWR_SOURCE_SELECT | BIT(preg->bit);
> + } else {
> + data &= ~BIT(preg->bit);
> + data |= PWR_SOURCE_SELECT;
> + }
> +
> + if (regmap_write(regmap, preg->reg, data))
> + return -EIO;
> + return 0;
> +}

Selecting power source? Isn't that something and MFD cell
spawned driver in either drivers/regulator or drivers/power should
be doing?

I know I have sinned in this regard in the past. But let's move
forward with defining what this subsystem should *REALLY*
be.

Yours,
Linus Walleij