Lines Matching refs:aggr
93 static int aggr_add_gpio(struct gpio_aggregator *aggr, const char *key,
98 lookups = krealloc(aggr->lookups, struct_size(lookups, table, *n + 2),
109 aggr->lookups = lookups;
113 static int aggr_parse(struct gpio_aggregator *aggr)
115 char *args = aggr->args;
135 error = aggr_add_gpio(aggr, name, U16_MAX, &n);
151 error = aggr_add_gpio(aggr, name, i, &n);
172 struct gpio_aggregator *aggr;
177 aggr = kzalloc(sizeof(*aggr) + count + 1, GFP_KERNEL);
178 if (!aggr)
181 memcpy(aggr->args, buf, count + 1);
183 aggr->lookups = kzalloc(struct_size(aggr->lookups, table, 1),
185 if (!aggr->lookups) {
191 id = idr_alloc(&gpio_aggregator_idr, aggr, 0, 0, GFP_KERNEL);
199 aggr->lookups->dev_id = kasprintf(GFP_KERNEL, "%s.%d", DRV_NAME, id);
200 if (!aggr->lookups->dev_id) {
205 res = aggr_parse(aggr);
209 gpiod_add_lookup_table(aggr->lookups);
217 aggr->pdev = pdev;
221 gpiod_remove_lookup_table(aggr->lookups);
223 kfree(aggr->lookups->dev_id);
229 kfree(aggr->lookups);
231 kfree(aggr);
237 static void gpio_aggregator_free(struct gpio_aggregator *aggr)
239 platform_device_unregister(aggr->pdev);
240 gpiod_remove_lookup_table(aggr->lookups);
241 kfree(aggr->lookups->dev_id);
242 kfree(aggr->lookups);
243 kfree(aggr);
249 struct gpio_aggregator *aggr;
261 aggr = idr_remove(&gpio_aggregator_idr, id);
263 if (!aggr)
266 gpio_aggregator_free(aggr);