Lines Matching full:line

62 	/* Line index within the aggregator device */
65 /* Custom name for the virtual line */
67 /* GPIO chip label or line name */
69 /* Can be negative to indicate lookup by line name */
158 struct gpio_aggregator_line *line; in gpio_aggregator_line_alloc() local
160 line = kzalloc(sizeof(*line), GFP_KERNEL); in gpio_aggregator_line_alloc()
161 if (!line) in gpio_aggregator_line_alloc()
165 line->key = kstrdup(key, GFP_KERNEL); in gpio_aggregator_line_alloc()
166 if (!line->key) { in gpio_aggregator_line_alloc()
167 kfree(line); in gpio_aggregator_line_alloc()
172 line->flags = GPIO_LOOKUP_FLAGS_DEFAULT; in gpio_aggregator_line_alloc()
173 line->parent = parent; in gpio_aggregator_line_alloc()
174 line->idx = idx; in gpio_aggregator_line_alloc()
175 line->offset = offset; in gpio_aggregator_line_alloc()
176 INIT_LIST_HEAD(&line->entry); in gpio_aggregator_line_alloc()
178 return line; in gpio_aggregator_line_alloc()
182 struct gpio_aggregator_line *line) in gpio_aggregator_line_add() argument
189 if (tmp->idx > line->idx) { in gpio_aggregator_line_add()
190 list_add_tail(&line->entry, &tmp->entry); in gpio_aggregator_line_add()
194 list_add_tail(&line->entry, &aggr->list_head); in gpio_aggregator_line_add()
198 struct gpio_aggregator_line *line) in gpio_aggregator_line_del() argument
202 list_del(&line->entry); in gpio_aggregator_line_del()
207 struct gpio_aggregator_line *line, *tmp; in gpio_aggregator_free_lines() local
209 list_for_each_entry_safe(line, tmp, &aggr->list_head, entry) { in gpio_aggregator_free_lines()
210 configfs_unregister_group(&line->group); in gpio_aggregator_free_lines()
222 gpio_aggregator_line_del(aggr, line); in gpio_aggregator_free_lines()
223 kfree(line->key); in gpio_aggregator_free_lines()
224 kfree(line->name); in gpio_aggregator_free_lines()
225 kfree(line); in gpio_aggregator_free_lines()
440 u32 line; in gpiochip_fwd_delay_of_xlate() local
445 line = gpiospec->args[0]; in gpiochip_fwd_delay_of_xlate()
446 if (line >= chip->ngpio) in gpiochip_fwd_delay_of_xlate()
449 timings = &fwd->delay_timings[line]; in gpiochip_fwd_delay_of_xlate()
453 return line; in gpiochip_fwd_delay_of_xlate()
586 struct gpio_aggregator_line *line; in gpio_aggregator_make_device_sw_node() local
602 list_for_each_entry(line, &aggr->list_head, entry) in gpio_aggregator_make_device_sw_node()
603 line_names[n++] = line->name ?: ""; in gpio_aggregator_make_device_sw_node()
606 "gpio-line-names", in gpio_aggregator_make_device_sw_node()
615 struct gpio_aggregator_line *line; in gpio_aggregator_activate() local
640 list_for_each_entry(line, &aggr->list_head, entry) { in gpio_aggregator_activate()
642 * - Either GPIO chip label or line name must be configured in gpio_aggregator_activate()
643 * (i.e. line->key must be non-NULL) in gpio_aggregator_activate()
644 * - Line directories must be named with sequential numeric in gpio_aggregator_activate()
647 if (!line->key || line->idx != n) { in gpio_aggregator_activate()
652 if (line->offset < 0) in gpio_aggregator_activate()
653 ret = gpio_aggregator_add_gpio(aggr, line->key, in gpio_aggregator_activate()
656 ret = gpio_aggregator_add_gpio(aggr, line->key, in gpio_aggregator_activate()
657 line->offset, &n); in gpio_aggregator_activate()
699 struct gpio_aggregator_line *line; in gpio_aggregator_lockup_configfs() local
706 list_for_each_entry(line, &aggr->list_head, entry) { in gpio_aggregator_lockup_configfs()
709 subsys, &line->group.cg_item); in gpio_aggregator_lockup_configfs()
712 &line->group.cg_item); in gpio_aggregator_lockup_configfs()
719 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_key_show() local
720 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_key_show()
724 return sysfs_emit(page, "%s\n", line->key ?: ""); in gpio_aggregator_line_key_show()
731 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_key_store() local
732 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_key_store()
747 kfree(line->key); in gpio_aggregator_line_key_store()
748 line->key = no_free_ptr(key); in gpio_aggregator_line_key_store()
757 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_name_show() local
758 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_name_show()
762 return sysfs_emit(page, "%s\n", line->name ?: ""); in gpio_aggregator_line_name_show()
769 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_name_store() local
770 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_name_store()
785 kfree(line->name); in gpio_aggregator_line_name_store()
786 line->name = no_free_ptr(name); in gpio_aggregator_line_name_store()
795 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_offset_show() local
796 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_offset_show()
800 return sysfs_emit(page, "%d\n", line->offset); in gpio_aggregator_line_offset_show()
807 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_offset_store() local
808 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_offset_store()
816 * When offset == -1, 'key' represents a line name to lookup. in gpio_aggregator_line_offset_store()
818 * the 'offset' value representing the line within that chip. in gpio_aggregator_line_offset_store()
820 * GPIOLIB uses the U16_MAX value to indicate lookup by line name so in gpio_aggregator_line_offset_store()
832 line->offset = offset; in gpio_aggregator_line_offset_store()
922 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_release() local
923 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_release()
927 gpio_aggregator_line_del(aggr, line); in gpio_aggregator_line_release()
928 kfree(line->key); in gpio_aggregator_line_release()
929 kfree(line->name); in gpio_aggregator_line_release()
930 kfree(line); in gpio_aggregator_line_release()
962 struct gpio_aggregator_line *line; in gpio_aggregator_device_make_group() local
966 ret = sscanf(name, "line%u%n", &idx, &nchar); in gpio_aggregator_device_make_group()
984 list_for_each_entry(line, &aggr->list_head, entry) in gpio_aggregator_device_make_group()
985 if (line->idx == idx) in gpio_aggregator_device_make_group()
988 line = gpio_aggregator_line_alloc(aggr, idx, NULL, -1); in gpio_aggregator_device_make_group()
989 if (IS_ERR(line)) in gpio_aggregator_device_make_group()
990 return ERR_CAST(line); in gpio_aggregator_device_make_group()
992 config_group_init_type_name(&line->group, name, &gpio_aggregator_line_type); in gpio_aggregator_device_make_group()
994 gpio_aggregator_line_add(aggr, line); in gpio_aggregator_device_make_group()
996 return &line->group; in gpio_aggregator_device_make_group()
1059 struct gpio_aggregator_line *line; in gpio_aggregator_parse() local
1076 /* Named GPIO line */ in gpio_aggregator_parse()
1077 scnprintf(name, sizeof(name), "line%u", n); in gpio_aggregator_parse()
1078 line = gpio_aggregator_line_alloc(aggr, n, key, -1); in gpio_aggregator_parse()
1079 if (IS_ERR(line)) { in gpio_aggregator_parse()
1080 error = PTR_ERR(line); in gpio_aggregator_parse()
1083 config_group_init_type_name(&line->group, name, in gpio_aggregator_parse()
1086 &line->group); in gpio_aggregator_parse()
1090 gpio_aggregator_line_add(aggr, line); in gpio_aggregator_parse()
1108 scnprintf(name, sizeof(name), "line%u", n); in gpio_aggregator_parse()
1109 line = gpio_aggregator_line_alloc(aggr, n, key, i); in gpio_aggregator_parse()
1110 if (IS_ERR(line)) { in gpio_aggregator_parse()
1111 error = PTR_ERR(line); in gpio_aggregator_parse()
1114 config_group_init_type_name(&line->group, name, in gpio_aggregator_parse()
1117 &line->group); in gpio_aggregator_parse()
1121 gpio_aggregator_line_add(aggr, line); in gpio_aggregator_parse()