struct max77686_clk_driver_data {
enum max77686_chip_name chip;
- struct max77686_clk_init_data *max_clk_data;
size_t num_clks;
+ struct max77686_clk_init_data max_clk_data[] __counted_by(num_clks);
};
static const struct
struct regmap *regmap;
int i, ret, num_clks;
- drv_data = devm_kzalloc(dev, sizeof(*drv_data), GFP_KERNEL);
- if (!drv_data)
- return -ENOMEM;
-
- regmap = dev_get_regmap(parent, NULL);
- if (!regmap) {
- dev_err(dev, "Failed to get rtc regmap\n");
- return -ENODEV;
- }
-
- drv_data->chip = id->driver_data;
-
- switch (drv_data->chip) {
+ switch (id->driver_data) {
case CHIP_MAX77686:
num_clks = MAX77686_CLKS_NUM;
hw_clks = max77686_hw_clks_info;
return -EINVAL;
}
- drv_data->num_clks = num_clks;
- drv_data->max_clk_data = devm_kcalloc(dev, num_clks,
- sizeof(*drv_data->max_clk_data),
- GFP_KERNEL);
- if (!drv_data->max_clk_data)
+ drv_data = devm_kzalloc(dev, struct_size(drv_data, max_clk_data, num_clks), GFP_KERNEL);
+ if (!drv_data)
return -ENOMEM;
+ drv_data->num_clks = num_clks;
+ drv_data->chip = id->driver_data;
+
+ regmap = dev_get_regmap(parent, NULL);
+ if (!regmap) {
+ dev_err(dev, "Failed to get rtc regmap\n");
+ return -ENODEV;
+ }
+
for (i = 0; i < num_clks; i++) {
struct max77686_clk_init_data *max_clk_data;
const char *clk_name;