Lines Matching refs:lc
797 static bool gpio_v2_line_config_debounced(struct gpio_v2_line_config *lc, in gpio_v2_line_config_debounced() argument
803 for (i = 0; i < lc->num_attrs; i++) { in gpio_v2_line_config_debounced()
804 if ((lc->attrs[i].attr.id == GPIO_V2_LINE_ATTR_ID_DEBOUNCE) && in gpio_v2_line_config_debounced()
805 (lc->attrs[i].mask & mask)) in gpio_v2_line_config_debounced()
811 static u32 gpio_v2_line_config_debounce_period(struct gpio_v2_line_config *lc, in gpio_v2_line_config_debounce_period() argument
817 for (i = 0; i < lc->num_attrs; i++) { in gpio_v2_line_config_debounce_period()
818 if ((lc->attrs[i].attr.id == GPIO_V2_LINE_ATTR_ID_DEBOUNCE) && in gpio_v2_line_config_debounce_period()
819 (lc->attrs[i].mask & mask)) in gpio_v2_line_config_debounce_period()
820 return lc->attrs[i].attr.debounce_period_us; in gpio_v2_line_config_debounce_period()
841 struct gpio_v2_line_config *lc, in edge_detector_setup() argument
856 if (gpio_v2_line_config_debounced(lc, line_idx)) { in edge_detector_setup()
857 debounce_period_us = gpio_v2_line_config_debounce_period(lc, line_idx); in edge_detector_setup()
891 struct gpio_v2_line_config *lc, in edge_detector_update() argument
896 gpio_v2_line_config_debounce_period(lc, line_idx); in edge_detector_update()
914 return edge_detector_setup(line, lc, line_idx, eflags); in edge_detector_update()
917 static u64 gpio_v2_line_config_flags(struct gpio_v2_line_config *lc, in gpio_v2_line_config_flags() argument
923 for (i = 0; i < lc->num_attrs; i++) { in gpio_v2_line_config_flags()
924 if ((lc->attrs[i].attr.id == GPIO_V2_LINE_ATTR_ID_FLAGS) && in gpio_v2_line_config_flags()
925 (lc->attrs[i].mask & mask)) in gpio_v2_line_config_flags()
926 return lc->attrs[i].attr.flags; in gpio_v2_line_config_flags()
928 return lc->flags; in gpio_v2_line_config_flags()
931 static int gpio_v2_line_config_output_value(struct gpio_v2_line_config *lc, in gpio_v2_line_config_output_value() argument
937 for (i = 0; i < lc->num_attrs; i++) { in gpio_v2_line_config_output_value()
938 if ((lc->attrs[i].attr.id == GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES) && in gpio_v2_line_config_output_value()
939 (lc->attrs[i].mask & mask)) in gpio_v2_line_config_output_value()
940 return !!(lc->attrs[i].attr.values & mask); in gpio_v2_line_config_output_value()
994 static int gpio_v2_line_config_validate(struct gpio_v2_line_config *lc, in gpio_v2_line_config_validate() argument
1001 if (lc->num_attrs > GPIO_V2_LINE_NUM_ATTRS_MAX) in gpio_v2_line_config_validate()
1004 if (memchr_inv(lc->padding, 0, sizeof(lc->padding))) in gpio_v2_line_config_validate()
1008 flags = gpio_v2_line_config_flags(lc, i); in gpio_v2_line_config_validate()
1014 if (gpio_v2_line_config_debounced(lc, i) && in gpio_v2_line_config_validate()
1174 struct gpio_v2_line_config *lc) in linereq_set_config_unlocked() argument
1184 flags = gpio_v2_line_config_flags(lc, i); in linereq_set_config_unlocked()
1195 int val = gpio_v2_line_config_output_value(lc, i); in linereq_set_config_unlocked()
1206 ret = edge_detector_update(&lr->lines[i], lc, i, in linereq_set_config_unlocked()
1222 struct gpio_v2_line_config lc; in linereq_set_config() local
1225 if (copy_from_user(&lc, ip, sizeof(lc))) in linereq_set_config()
1228 ret = gpio_v2_line_config_validate(&lc, lr->num_lines); in linereq_set_config()
1234 ret = linereq_set_config_unlocked(lr, &lc); in linereq_set_config()
1407 struct gpio_v2_line_config *lc; in linereq_create() local
1423 lc = &ulr.config; in linereq_create()
1424 ret = gpio_v2_line_config_validate(lc, ulr.num_lines); in linereq_create()
1477 flags = gpio_v2_line_config_flags(lc, i); in linereq_create()
1489 int val = gpio_v2_line_config_output_value(lc, i); in linereq_create()
1499 ret = edge_detector_setup(&lr->lines[i], lc, i, in linereq_create()