Lines Matching defs:fwd
261 #define fwd_tmp_values(fwd) &(fwd)->tmp[0]
262 #define fwd_tmp_descs(fwd) (void *)&(fwd)->tmp[BITS_TO_LONGS((fwd)->chip.ngpio)]
268 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
270 return gpiod_get_direction(fwd->descs[offset]);
275 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
277 return gpiod_direction_input(fwd->descs[offset]);
283 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
285 return gpiod_direction_output(fwd->descs[offset], value);
290 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
292 return chip->can_sleep ? gpiod_get_value_cansleep(fwd->descs[offset])
293 : gpiod_get_value(fwd->descs[offset]);
296 static int gpio_fwd_get_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
299 struct gpio_desc **descs = fwd_tmp_descs(fwd);
300 unsigned long *values = fwd_tmp_values(fwd);
304 bitmap_clear(values, 0, fwd->chip.ngpio);
305 for_each_set_bit(i, mask, fwd->chip.ngpio)
306 descs[j++] = fwd->descs[i];
308 if (fwd->chip.can_sleep)
316 for_each_set_bit(i, mask, fwd->chip.ngpio)
325 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
330 mutex_lock(&fwd->mlock);
331 error = gpio_fwd_get_multiple(fwd, mask, bits);
332 mutex_unlock(&fwd->mlock);
334 spin_lock_irqsave(&fwd->slock, flags);
335 error = gpio_fwd_get_multiple(fwd, mask, bits);
336 spin_unlock_irqrestore(&fwd->slock, flags);
344 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
346 bool is_active_low = gpiod_is_active_low(fwd->descs[offset]);
349 delay_timings = &fwd->delay_timings[offset];
365 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
368 gpiod_set_value_cansleep(fwd->descs[offset], value);
370 gpiod_set_value(fwd->descs[offset], value);
372 if (fwd->delay_timings)
376 static void gpio_fwd_set_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
379 struct gpio_desc **descs = fwd_tmp_descs(fwd);
380 unsigned long *values = fwd_tmp_values(fwd);
383 for_each_set_bit(i, mask, fwd->chip.ngpio) {
385 descs[j++] = fwd->descs[i];
388 if (fwd->chip.can_sleep)
397 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
401 mutex_lock(&fwd->mlock);
402 gpio_fwd_set_multiple(fwd, mask, bits);
403 mutex_unlock(&fwd->mlock);
405 spin_lock_irqsave(&fwd->slock, flags);
406 gpio_fwd_set_multiple(fwd, mask, bits);
407 spin_unlock_irqrestore(&fwd->slock, flags);
414 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
416 return gpiod_set_config(fwd->descs[offset], config);
421 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
423 return gpiod_to_irq(fwd->descs[offset]);
439 struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
450 timings = &fwd->delay_timings[line];
458 struct gpiochip_fwd *fwd)
460 fwd->delay_timings = devm_kcalloc(dev, chip->ngpio,
461 sizeof(*fwd->delay_timings),
463 if (!fwd->delay_timings)
473 struct gpiochip_fwd *fwd)
500 struct gpiochip_fwd *fwd;
505 fwd = devm_kzalloc(dev, struct_size(fwd, tmp, fwd_tmp_size(ngpios)),
507 if (!fwd)
510 chip = &fwd->chip;
543 fwd->descs = descs;
546 mutex_init(&fwd->mlock);
548 spin_lock_init(&fwd->slock);
551 error = gpiochip_fwd_setup_delay_line(dev, chip, fwd);
556 error = devm_gpiochip_add_data(dev, chip, fwd);
560 return fwd;
572 struct gpiochip_fwd *fwd;
591 fwd = gpiochip_fwd_create(dev, n, descs, features);
592 if (IS_ERR(fwd))
593 return PTR_ERR(fwd);
595 platform_set_drvdata(pdev, fwd);