Lines Matching refs:fwd

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