uint chained_irq;
/* egpio info */
- struct egpio_chip *chip;
int nchips;
+ struct egpio_chip chip[] __counted_by(nchips);
};
static inline void egpio_writew(u16 value, struct egpio_info *ei, int reg)
int i;
/* Initialize ei data structure. */
- ei = devm_kzalloc(&pdev->dev, sizeof(*ei), GFP_KERNEL);
+ ei = devm_kzalloc(&pdev->dev, struct_size(ei, chip, pdata->num_chips), GFP_KERNEL);
if (!ei)
return -ENOMEM;
+ ei->nchips = pdata->num_chips;
+
spin_lock_init(&ei->lock);
/* Find chained irq */
platform_set_drvdata(pdev, ei);
- ei->nchips = pdata->num_chips;
- ei->chip = devm_kcalloc(&pdev->dev,
- ei->nchips, sizeof(struct egpio_chip),
- GFP_KERNEL);
- if (!ei->chip)
- return -ENOMEM;
-
for (i = 0; i < ei->nchips; i++) {
ei->chip[i].reg_start = pdata->chip[i].reg_start;
ei->chip[i].cached_values = pdata->chip[i].initial_values;