On Mon, Jun 09, 2014 at 11:37:47AM +0200, Javier Martinez Canillas wrote:

> +     case REGULATOR_MODE_STANDBY:                    /* switch off */
> +             if (id != MAX77802_LDO1 && id != MAX77802_LDO20 &&
> +                     id != MAX77802_LDO21 && id != MAX77802_LDO3) {
> +                     val = MAX77802_OPMODE_STANDBY;
> +                     break;
> +             }
> +             /* no break */

This sounds very broken...

> +             /* OK if some GPIOs aren't defined */
> +             if (!gpio_is_valid(gpio))
> +                     continue;
> +
> +             /* If a GPIO is valid, we'd better be able to claim it */
> +             ret = devm_gpio_request_one(dev, gpio, GPIOF_OUT_INIT_HIGH,
> +                                         "max77802 selb");
> +             if (ret) {
> +                     dev_err(dev, "can't claim gpio[%d]: %d\n", i, ret);
> +                     return ret;
> +             }

Can this use the GPIO descriptor API?

> +static void max77802_copy_reg(struct device *dev, struct regmap *regmap,
> +                           int from_reg, int to_reg)
> +{
> +     int val;
> +     int ret;
> +
> +     if (from_reg == to_reg)
> +             return;
> +
> +     ret = regmap_read(regmap, from_reg, &val);
> +     if (!ret)
> +             ret = regmap_write(regmap, to_reg, val);
> +
> +     if (ret)
> +             dev_warn(dev, "Copy err %d => %d (%d)\n",
> +                      from_reg, to_reg, ret);
> +}

This doesn't look at all device specific, better implement it in generic
code.

> +     if (pdata->num_regulators != MAX77802_MAX_REGULATORS) {
> +             dev_err(&pdev->dev,
> +                     "Invalid initial data for regulator's initialiation: " \
> +                     "expected %d, pdata/dt provided %d\n",
> +                     MAX77802_MAX_REGULATORS,
> +                     pdata->num_regulators);
> +             return -EINVAL;
> +     }

Don't split log messages over multiple lines so people can find the log
message in the kernel source with grep, though in any case checking for
this is a bug - the driver should always be at least able to read the
current state from the hardware.

> +static int __init max77802_pmic_init(void)
> +{
> +     return platform_driver_register(&max77802_pmic_driver);
> +}
> +subsys_initcall(max77802_pmic_init);

module_platform_driver().

Attachment: signature.asc
Description: Digital signature

Reply via email to