Lines Matching refs:fwd

273 #define fwd_tmp_values(fwd)	&(fwd)->tmp[0]  argument
274 #define fwd_tmp_descs(fwd) (void *)&(fwd)->tmp[BITS_TO_LONGS((fwd)->chip.ngpio)] argument
280 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_get_direction() local
282 return gpiod_get_direction(fwd->descs[offset]); in gpio_fwd_get_direction()
287 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_direction_input() local
289 return gpiod_direction_input(fwd->descs[offset]); in gpio_fwd_direction_input()
295 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_direction_output() local
297 return gpiod_direction_output(fwd->descs[offset], value); in gpio_fwd_direction_output()
302 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_get() local
304 return chip->can_sleep ? gpiod_get_value_cansleep(fwd->descs[offset]) in gpio_fwd_get()
305 : gpiod_get_value(fwd->descs[offset]); in gpio_fwd_get()
308 static int gpio_fwd_get_multiple(struct gpiochip_fwd *fwd, unsigned long *mask, in gpio_fwd_get_multiple() argument
311 struct gpio_desc **descs = fwd_tmp_descs(fwd); in gpio_fwd_get_multiple()
312 unsigned long *values = fwd_tmp_values(fwd); in gpio_fwd_get_multiple()
316 bitmap_clear(values, 0, fwd->chip.ngpio); in gpio_fwd_get_multiple()
317 for_each_set_bit(i, mask, fwd->chip.ngpio) in gpio_fwd_get_multiple()
318 descs[j++] = fwd->descs[i]; in gpio_fwd_get_multiple()
320 if (fwd->chip.can_sleep) in gpio_fwd_get_multiple()
328 for_each_set_bit(i, mask, fwd->chip.ngpio) in gpio_fwd_get_multiple()
337 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_get_multiple_locked() local
342 mutex_lock(&fwd->mlock); in gpio_fwd_get_multiple_locked()
343 error = gpio_fwd_get_multiple(fwd, mask, bits); in gpio_fwd_get_multiple_locked()
344 mutex_unlock(&fwd->mlock); in gpio_fwd_get_multiple_locked()
346 spin_lock_irqsave(&fwd->slock, flags); in gpio_fwd_get_multiple_locked()
347 error = gpio_fwd_get_multiple(fwd, mask, bits); in gpio_fwd_get_multiple_locked()
348 spin_unlock_irqrestore(&fwd->slock, flags); in gpio_fwd_get_multiple_locked()
356 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_delay() local
358 bool is_active_low = gpiod_is_active_low(fwd->descs[offset]); in gpio_fwd_delay()
361 delay_timings = &fwd->delay_timings[offset]; in gpio_fwd_delay()
377 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_set() local
380 gpiod_set_value_cansleep(fwd->descs[offset], value); in gpio_fwd_set()
382 gpiod_set_value(fwd->descs[offset], value); in gpio_fwd_set()
384 if (fwd->delay_timings) in gpio_fwd_set()
388 static void gpio_fwd_set_multiple(struct gpiochip_fwd *fwd, unsigned long *mask, in gpio_fwd_set_multiple() argument
391 struct gpio_desc **descs = fwd_tmp_descs(fwd); in gpio_fwd_set_multiple()
392 unsigned long *values = fwd_tmp_values(fwd); in gpio_fwd_set_multiple()
395 for_each_set_bit(i, mask, fwd->chip.ngpio) { in gpio_fwd_set_multiple()
397 descs[j++] = fwd->descs[i]; in gpio_fwd_set_multiple()
400 if (fwd->chip.can_sleep) in gpio_fwd_set_multiple()
409 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_set_multiple_locked() local
413 mutex_lock(&fwd->mlock); in gpio_fwd_set_multiple_locked()
414 gpio_fwd_set_multiple(fwd, mask, bits); in gpio_fwd_set_multiple_locked()
415 mutex_unlock(&fwd->mlock); in gpio_fwd_set_multiple_locked()
417 spin_lock_irqsave(&fwd->slock, flags); in gpio_fwd_set_multiple_locked()
418 gpio_fwd_set_multiple(fwd, mask, bits); in gpio_fwd_set_multiple_locked()
419 spin_unlock_irqrestore(&fwd->slock, flags); in gpio_fwd_set_multiple_locked()
426 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_set_config() local
428 return gpiod_set_config(fwd->descs[offset], config); in gpio_fwd_set_config()
433 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpio_fwd_to_irq() local
435 return gpiod_to_irq(fwd->descs[offset]); in gpio_fwd_to_irq()
451 struct gpiochip_fwd *fwd = gpiochip_get_data(chip); in gpiochip_fwd_delay_of_xlate() local
462 timings = &fwd->delay_timings[line]; in gpiochip_fwd_delay_of_xlate()
470 struct gpiochip_fwd *fwd) in gpiochip_fwd_setup_delay_line() argument
472 fwd->delay_timings = devm_kcalloc(dev, chip->ngpio, in gpiochip_fwd_setup_delay_line()
473 sizeof(*fwd->delay_timings), in gpiochip_fwd_setup_delay_line()
475 if (!fwd->delay_timings) in gpiochip_fwd_setup_delay_line()
485 struct gpiochip_fwd *fwd) in gpiochip_fwd_setup_delay_line() argument
512 struct gpiochip_fwd *fwd; in gpiochip_fwd_create() local
517 fwd = devm_kzalloc(dev, struct_size(fwd, tmp, fwd_tmp_size(ngpios)), in gpiochip_fwd_create()
519 if (!fwd) in gpiochip_fwd_create()
522 chip = &fwd->chip; in gpiochip_fwd_create()
555 fwd->descs = descs; in gpiochip_fwd_create()
558 mutex_init(&fwd->mlock); in gpiochip_fwd_create()
560 spin_lock_init(&fwd->slock); in gpiochip_fwd_create()
563 error = gpiochip_fwd_setup_delay_line(dev, chip, fwd); in gpiochip_fwd_create()
568 error = devm_gpiochip_add_data(dev, chip, fwd); in gpiochip_fwd_create()
572 return fwd; in gpiochip_fwd_create()
584 struct gpiochip_fwd *fwd; in gpio_aggregator_probe() local
603 fwd = gpiochip_fwd_create(dev, n, descs, features); in gpio_aggregator_probe()
604 if (IS_ERR(fwd)) in gpio_aggregator_probe()
605 return PTR_ERR(fwd); in gpio_aggregator_probe()
607 platform_set_drvdata(pdev, fwd); in gpio_aggregator_probe()