• Douglas Anderson's avatar
    regulator: core: Allow drivers to define their init data as const · 1de452a0
    Douglas Anderson authored
    Drivers tend to want to define the names of their regulators somewhere
    in their source file as "static const". This means, inevitable, that
    every driver out there open codes something like this:
    
    static const char * const supply_names[] = {
     "vcc", "vccl",
    };
    
    static int get_regulators(struct my_data *data)
    {
      int i;
    
      data->supplies = devm_kzalloc(...)
      if (!data->supplies)
        return -ENOMEM;
    
      for (i = 0; i < ARRAY_SIZE(supply_names); i++)
        data->supplies[i].supply = supply_names[i];
    
      return devm_regulator_bulk_get(data->dev,
                                     ARRAY_SIZE(supply_names),
    				 data->supplies);
    }
    
    Let's make this more convenient by doing providing a helper that does
    the copy.
    
    I have chosen to have the "const" input structure here be the exact
    same structure as the normal one passed to
    devm_regulator_bulk_get(). This is slightly inefficent since the input
    data can't possibly have anything useful for "ret" or consumer and
    thus we waste 8 bytes per structure. This seems an OK tradeoff for not
    introducing an extra structure.
    Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Link: https://lore.kernel.org/r/20220726103631.v2.6.I38fc508a73135a5c1b873851f3553ff2a3a625f5@changeidSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    1de452a0
devres.c 13.6 KB