Lines Matching full:line

64 	/* Line index within the aggregator device */
67 /* Custom name for the virtual line */
69 /* GPIO chip label or line name */
71 /* Can be negative to indicate lookup by line name */
160 struct gpio_aggregator_line *line; in gpio_aggregator_line_alloc() local
162 line = kzalloc(sizeof(*line), GFP_KERNEL); in gpio_aggregator_line_alloc()
163 if (!line) in gpio_aggregator_line_alloc()
167 line->key = kstrdup(key, GFP_KERNEL); in gpio_aggregator_line_alloc()
168 if (!line->key) { in gpio_aggregator_line_alloc()
169 kfree(line); in gpio_aggregator_line_alloc()
174 line->flags = GPIO_LOOKUP_FLAGS_DEFAULT; in gpio_aggregator_line_alloc()
175 line->parent = parent; in gpio_aggregator_line_alloc()
176 line->idx = idx; in gpio_aggregator_line_alloc()
177 line->offset = offset; in gpio_aggregator_line_alloc()
178 INIT_LIST_HEAD(&line->entry); in gpio_aggregator_line_alloc()
180 return line; in gpio_aggregator_line_alloc()
184 struct gpio_aggregator_line *line) in gpio_aggregator_line_add() argument
191 if (tmp->idx > line->idx) { in gpio_aggregator_line_add()
192 list_add_tail(&line->entry, &tmp->entry); in gpio_aggregator_line_add()
196 list_add_tail(&line->entry, &aggr->list_head); in gpio_aggregator_line_add()
200 struct gpio_aggregator_line *line) in gpio_aggregator_line_del() argument
204 list_del(&line->entry); in gpio_aggregator_line_del()
209 struct gpio_aggregator_line *line, *tmp; in gpio_aggregator_free_lines() local
211 list_for_each_entry_safe(line, tmp, &aggr->list_head, entry) { in gpio_aggregator_free_lines()
212 configfs_unregister_group(&line->group); in gpio_aggregator_free_lines()
224 gpio_aggregator_line_del(aggr, line); in gpio_aggregator_free_lines()
225 kfree(line->key); in gpio_aggregator_free_lines()
226 kfree(line->name); in gpio_aggregator_free_lines()
227 kfree(line); in gpio_aggregator_free_lines()
272 * -ENODEV if there is no GPIO desc for the line. in gpio_fwd_get_direction()
458 u32 line; in gpiochip_fwd_delay_of_xlate() local
463 line = gpiospec->args[0]; in gpiochip_fwd_delay_of_xlate()
464 if (line >= chip->ngpio) in gpiochip_fwd_delay_of_xlate()
467 timings = &fwd->delay_timings[line]; in gpiochip_fwd_delay_of_xlate()
471 return line; in gpiochip_fwd_delay_of_xlate()
521 * gpiochip_fwd_gpio_request - Request a line of the GPIO forwarder
523 * @offset: the offset of the line to request
536 * gpiochip_fwd_gpio_get_direction - Return the current direction of a GPIO forwarder line
538 * @offset: the offset of the line
551 * gpiochip_fwd_gpio_direction_output - Set a GPIO forwarder line direction to
554 * @offset: the offset of the line
569 * gpiochip_fwd_gpio_direction_input - Set a GPIO forwarder line direction to input
571 * @offset: the offset of the line
584 * gpiochip_fwd_gpio_get - Return a GPIO forwarder line's value
586 * @offset: the offset of the line
602 * @mask: bit mask array; one bit per line; BITS_PER_LONG bits per word defines
604 * @bits: bit value array; one bit per line; BITS_PER_LONG bits per word will
619 * gpiochip_fwd_gpio_set - Assign value to a GPIO forwarder line.
621 * @offset: the offset of the line
654 * gpiochip_fwd_gpio_set_config - Set @config for a GPIO forwarder line
656 * @offset: the offset of the line
672 * gpiochip_fwd_gpio_to_irq - Return the IRQ corresponding to a GPIO forwarder line
674 * @offset: the offset of the line
676 * Returns: The Linux IRQ corresponding to the passed line, or an error code in
882 struct gpio_aggregator_line *line; in gpio_aggregator_make_device_sw_node() local
898 list_for_each_entry(line, &aggr->list_head, entry) in gpio_aggregator_make_device_sw_node()
899 line_names[n++] = line->name ?: ""; in gpio_aggregator_make_device_sw_node()
902 "gpio-line-names", in gpio_aggregator_make_device_sw_node()
911 struct gpio_aggregator_line *line; in gpio_aggregator_activate() local
936 list_for_each_entry(line, &aggr->list_head, entry) { in gpio_aggregator_activate()
938 * - Either GPIO chip label or line name must be configured in gpio_aggregator_activate()
939 * (i.e. line->key must be non-NULL) in gpio_aggregator_activate()
940 * - Line directories must be named with sequential numeric in gpio_aggregator_activate()
943 if (!line->key || line->idx != n) { in gpio_aggregator_activate()
948 if (line->offset < 0) in gpio_aggregator_activate()
949 ret = gpio_aggregator_add_gpio(aggr, line->key, in gpio_aggregator_activate()
952 ret = gpio_aggregator_add_gpio(aggr, line->key, in gpio_aggregator_activate()
953 line->offset, &n); in gpio_aggregator_activate()
995 struct gpio_aggregator_line *line; in gpio_aggregator_lockup_configfs() local
1002 list_for_each_entry(line, &aggr->list_head, entry) { in gpio_aggregator_lockup_configfs()
1005 subsys, &line->group.cg_item); in gpio_aggregator_lockup_configfs()
1008 &line->group.cg_item); in gpio_aggregator_lockup_configfs()
1015 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_key_show() local
1016 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_key_show()
1020 return sysfs_emit(page, "%s\n", line->key ?: ""); in gpio_aggregator_line_key_show()
1027 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_key_store() local
1028 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_key_store()
1043 kfree(line->key); in gpio_aggregator_line_key_store()
1044 line->key = no_free_ptr(key); in gpio_aggregator_line_key_store()
1053 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_name_show() local
1054 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_name_show()
1058 return sysfs_emit(page, "%s\n", line->name ?: ""); in gpio_aggregator_line_name_show()
1065 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_name_store() local
1066 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_name_store()
1081 kfree(line->name); in gpio_aggregator_line_name_store()
1082 line->name = no_free_ptr(name); in gpio_aggregator_line_name_store()
1091 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_offset_show() local
1092 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_offset_show()
1096 return sysfs_emit(page, "%d\n", line->offset); in gpio_aggregator_line_offset_show()
1103 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_offset_store() local
1104 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_offset_store()
1112 * When offset == -1, 'key' represents a line name to lookup. in gpio_aggregator_line_offset_store()
1114 * the 'offset' value representing the line within that chip. in gpio_aggregator_line_offset_store()
1116 * GPIOLIB uses the U16_MAX value to indicate lookup by line name so in gpio_aggregator_line_offset_store()
1128 line->offset = offset; in gpio_aggregator_line_offset_store()
1218 struct gpio_aggregator_line *line = to_gpio_aggregator_line(item); in gpio_aggregator_line_release() local
1219 struct gpio_aggregator *aggr = line->parent; in gpio_aggregator_line_release()
1223 gpio_aggregator_line_del(aggr, line); in gpio_aggregator_line_release()
1224 kfree(line->key); in gpio_aggregator_line_release()
1225 kfree(line->name); in gpio_aggregator_line_release()
1226 kfree(line); in gpio_aggregator_line_release()
1258 struct gpio_aggregator_line *line; in gpio_aggregator_device_make_group() local
1262 ret = sscanf(name, "line%u%n", &idx, &nchar); in gpio_aggregator_device_make_group()
1280 list_for_each_entry(line, &aggr->list_head, entry) in gpio_aggregator_device_make_group()
1281 if (line->idx == idx) in gpio_aggregator_device_make_group()
1284 line = gpio_aggregator_line_alloc(aggr, idx, NULL, -1); in gpio_aggregator_device_make_group()
1285 if (IS_ERR(line)) in gpio_aggregator_device_make_group()
1286 return ERR_CAST(line); in gpio_aggregator_device_make_group()
1288 config_group_init_type_name(&line->group, name, &gpio_aggregator_line_type); in gpio_aggregator_device_make_group()
1290 gpio_aggregator_line_add(aggr, line); in gpio_aggregator_device_make_group()
1292 return &line->group; in gpio_aggregator_device_make_group()
1355 struct gpio_aggregator_line *line; in gpio_aggregator_parse() local
1372 /* Named GPIO line */ in gpio_aggregator_parse()
1373 scnprintf(name, sizeof(name), "line%u", n); in gpio_aggregator_parse()
1374 line = gpio_aggregator_line_alloc(aggr, n, key, -1); in gpio_aggregator_parse()
1375 if (IS_ERR(line)) { in gpio_aggregator_parse()
1376 error = PTR_ERR(line); in gpio_aggregator_parse()
1379 config_group_init_type_name(&line->group, name, in gpio_aggregator_parse()
1382 &line->group); in gpio_aggregator_parse()
1386 gpio_aggregator_line_add(aggr, line); in gpio_aggregator_parse()
1404 scnprintf(name, sizeof(name), "line%u", n); in gpio_aggregator_parse()
1405 line = gpio_aggregator_line_alloc(aggr, n, key, i); in gpio_aggregator_parse()
1406 if (IS_ERR(line)) { in gpio_aggregator_parse()
1407 error = PTR_ERR(line); in gpio_aggregator_parse()
1410 config_group_init_type_name(&line->group, name, in gpio_aggregator_parse()
1413 &line->group); in gpio_aggregator_parse()
1417 gpio_aggregator_line_add(aggr, line); in gpio_aggregator_parse()