Lines Matching refs:gdev

110 	struct gpio_device *gdev;  in gpio_to_desc()  local
115 list_for_each_entry(gdev, &gpio_devices, list) { in gpio_to_desc()
116 if (gdev->base <= gpio && in gpio_to_desc()
117 gdev->base + gdev->ngpio > gpio) { in gpio_to_desc()
119 return &gdev->descs[gpio - gdev->base]; in gpio_to_desc()
145 struct gpio_device *gdev = chip->gpiodev; in gpiochip_get_desc() local
147 if (hwnum >= gdev->ngpio) in gpiochip_get_desc()
150 return &gdev->descs[hwnum]; in gpiochip_get_desc()
165 return desc->gdev->base + (desc - &desc->gdev->descs[0]); in desc_to_gpio()
176 if (!desc || !desc->gdev) in gpiod_to_chip()
178 return desc->gdev->chip; in gpiod_to_chip()
185 struct gpio_device *gdev; in gpiochip_find_base() local
188 list_for_each_entry_reverse(gdev, &gpio_devices, list) { in gpiochip_find_base()
190 if (gdev->base + gdev->ngpio <= base) in gpiochip_find_base()
194 base = gdev->base - ngpio; in gpiochip_find_base()
247 static int gpiodev_add_to_list(struct gpio_device *gdev) in gpiodev_add_to_list() argument
253 list_add_tail(&gdev->list, &gpio_devices); in gpiodev_add_to_list()
258 if (gdev->base + gdev->ngpio <= next->base) { in gpiodev_add_to_list()
260 list_add(&gdev->list, &gpio_devices); in gpiodev_add_to_list()
265 if (prev->base + prev->ngpio <= gdev->base) { in gpiodev_add_to_list()
267 list_add_tail(&gdev->list, &gpio_devices); in gpiodev_add_to_list()
277 if (prev->base + prev->ngpio <= gdev->base in gpiodev_add_to_list()
278 && gdev->base + gdev->ngpio <= next->base) { in gpiodev_add_to_list()
279 list_add(&gdev->list, &prev->list); in gpiodev_add_to_list()
284 dev_err(&gdev->dev, "GPIO integer space overlap, cannot add chip\n"); in gpiodev_add_to_list()
293 struct gpio_device *gdev; in gpio_name_to_desc() local
298 list_for_each_entry(gdev, &gpio_devices, list) { in gpio_name_to_desc()
301 for (i = 0; i != gdev->ngpio; ++i) { in gpio_name_to_desc()
302 struct gpio_desc *desc = &gdev->descs[i]; in gpio_name_to_desc()
327 struct gpio_device *gdev = gc->gpiodev; in gpiochip_set_desc_names() local
339 dev_warn(&gdev->dev, in gpiochip_set_desc_names()
346 gdev->descs[i].name = gc->names[i]; in gpiochip_set_desc_names()
415 struct gpio_device *gdev; member
493 struct gpio_device *gdev = lh->gdev; in linehandle_release() local
500 put_device(&gdev->dev); in linehandle_release()
514 static int linehandle_create(struct gpio_device *gdev, void __user *ip) in linehandle_create() argument
559 lh->gdev = gdev; in linehandle_create()
560 get_device(&gdev->dev); in linehandle_create()
578 if (offset >= gdev->ngpio) { in linehandle_create()
583 desc = &gdev->descs[offset]; in linehandle_create()
616 dev_dbg(&gdev->dev, "registered chardev handle for line %d\n", in linehandle_create()
651 dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", in linehandle_create()
664 put_device(&gdev->dev); in linehandle_create()
688 struct gpio_device *gdev; member
766 struct gpio_device *gdev = le->gdev; in lineevent_release() local
772 put_device(&gdev->dev); in lineevent_release()
882 static int lineevent_create(struct gpio_device *gdev, void __user *ip) in lineevent_create() argument
901 le->gdev = gdev; in lineevent_create()
902 get_device(&gdev->dev); in lineevent_create()
919 if (offset >= gdev->ngpio) { in lineevent_create()
939 desc = &gdev->descs[offset]; in lineevent_create()
1021 put_device(&gdev->dev); in lineevent_create()
1030 struct gpio_device *gdev = filp->private_data; in gpio_ioctl() local
1031 struct gpio_chip *chip = gdev->chip; in gpio_ioctl()
1044 strncpy(chipinfo.name, dev_name(&gdev->dev), in gpio_ioctl()
1047 strncpy(chipinfo.label, gdev->label, in gpio_ioctl()
1050 chipinfo.lines = gdev->ngpio; in gpio_ioctl()
1060 if (lineinfo.line_offset >= gdev->ngpio) in gpio_ioctl()
1063 desc = &gdev->descs[lineinfo.line_offset]; in gpio_ioctl()
1106 return linehandle_create(gdev, ip); in gpio_ioctl()
1108 return lineevent_create(gdev, ip); in gpio_ioctl()
1129 struct gpio_device *gdev = container_of(inode->i_cdev, in gpio_chrdev_open() local
1133 if (!gdev->chip) in gpio_chrdev_open()
1135 get_device(&gdev->dev); in gpio_chrdev_open()
1136 filp->private_data = gdev; in gpio_chrdev_open()
1149 struct gpio_device *gdev = container_of(inode->i_cdev, in gpio_chrdev_release() local
1152 put_device(&gdev->dev); in gpio_chrdev_release()
1170 struct gpio_device *gdev = dev_get_drvdata(dev); in gpiodevice_release() local
1172 list_del(&gdev->list); in gpiodevice_release()
1173 ida_simple_remove(&gpio_ida, gdev->id); in gpiodevice_release()
1174 kfree_const(gdev->label); in gpiodevice_release()
1175 kfree(gdev->descs); in gpiodevice_release()
1176 kfree(gdev); in gpiodevice_release()
1179 static int gpiochip_setup_dev(struct gpio_device *gdev) in gpiochip_setup_dev() argument
1183 cdev_init(&gdev->chrdev, &gpio_fileops); in gpiochip_setup_dev()
1184 gdev->chrdev.owner = THIS_MODULE; in gpiochip_setup_dev()
1185 gdev->dev.devt = MKDEV(MAJOR(gpio_devt), gdev->id); in gpiochip_setup_dev()
1187 ret = cdev_device_add(&gdev->chrdev, &gdev->dev); in gpiochip_setup_dev()
1191 chip_dbg(gdev->chip, "added GPIO chardev (%d:%d)\n", in gpiochip_setup_dev()
1192 MAJOR(gpio_devt), gdev->id); in gpiochip_setup_dev()
1194 ret = gpiochip_sysfs_register(gdev); in gpiochip_setup_dev()
1199 gdev->dev.release = gpiodevice_release; in gpiochip_setup_dev()
1201 __func__, gdev->base, gdev->base + gdev->ngpio - 1, in gpiochip_setup_dev()
1202 dev_name(&gdev->dev), gdev->chip->label ? : "generic"); in gpiochip_setup_dev()
1207 cdev_device_del(&gdev->chrdev, &gdev->dev); in gpiochip_setup_dev()
1248 struct gpio_device *gdev; in gpiochip_setup_devs() local
1251 list_for_each_entry(gdev, &gpio_devices, list) { in gpiochip_setup_devs()
1252 ret = gpiochip_setup_dev(gdev); in gpiochip_setup_devs()
1255 dev_name(&gdev->dev), ret); in gpiochip_setup_devs()
1267 struct gpio_device *gdev; in gpiochip_add_data_with_key() local
1273 gdev = kzalloc(sizeof(*gdev), GFP_KERNEL); in gpiochip_add_data_with_key()
1274 if (!gdev) in gpiochip_add_data_with_key()
1276 gdev->dev.bus = &gpio_bus_type; in gpiochip_add_data_with_key()
1277 gdev->chip = chip; in gpiochip_add_data_with_key()
1278 chip->gpiodev = gdev; in gpiochip_add_data_with_key()
1280 gdev->dev.parent = chip->parent; in gpiochip_add_data_with_key()
1281 gdev->dev.of_node = chip->parent->of_node; in gpiochip_add_data_with_key()
1287 gdev->dev.of_node = chip->of_node; in gpiochip_add_data_with_key()
1289 chip->of_node = gdev->dev.of_node; in gpiochip_add_data_with_key()
1292 gdev->id = ida_simple_get(&gpio_ida, 0, 0, GFP_KERNEL); in gpiochip_add_data_with_key()
1293 if (gdev->id < 0) { in gpiochip_add_data_with_key()
1294 ret = gdev->id; in gpiochip_add_data_with_key()
1297 dev_set_name(&gdev->dev, "gpiochip%d", gdev->id); in gpiochip_add_data_with_key()
1298 device_initialize(&gdev->dev); in gpiochip_add_data_with_key()
1299 dev_set_drvdata(&gdev->dev, gdev); in gpiochip_add_data_with_key()
1301 gdev->owner = chip->parent->driver->owner; in gpiochip_add_data_with_key()
1304 gdev->owner = chip->owner; in gpiochip_add_data_with_key()
1306 gdev->owner = THIS_MODULE; in gpiochip_add_data_with_key()
1308 gdev->descs = kcalloc(chip->ngpio, sizeof(gdev->descs[0]), GFP_KERNEL); in gpiochip_add_data_with_key()
1309 if (!gdev->descs) { in gpiochip_add_data_with_key()
1324 gdev->label = kstrdup_const(chip->label ?: "unknown", GFP_KERNEL); in gpiochip_add_data_with_key()
1325 if (!gdev->label) { in gpiochip_add_data_with_key()
1330 gdev->ngpio = chip->ngpio; in gpiochip_add_data_with_key()
1331 gdev->data = data; in gpiochip_add_data_with_key()
1357 gdev->base = base; in gpiochip_add_data_with_key()
1359 ret = gpiodev_add_to_list(gdev); in gpiochip_add_data_with_key()
1368 gdev->descs[i].gdev = gdev; in gpiochip_add_data_with_key()
1371 INIT_LIST_HEAD(&gdev->pin_ranges); in gpiochip_add_data_with_key()
1391 struct gpio_desc *desc = &gdev->descs[i]; in gpiochip_add_data_with_key()
1431 ret = gpiochip_setup_dev(gdev); in gpiochip_add_data_with_key()
1450 list_del(&gdev->list); in gpiochip_add_data_with_key()
1453 kfree_const(gdev->label); in gpiochip_add_data_with_key()
1455 kfree(gdev->descs); in gpiochip_add_data_with_key()
1457 ida_simple_remove(&gpio_ida, gdev->id); in gpiochip_add_data_with_key()
1461 gdev->base, gdev->base + gdev->ngpio - 1, in gpiochip_add_data_with_key()
1463 kfree(gdev); in gpiochip_add_data_with_key()
1489 struct gpio_device *gdev = chip->gpiodev; in gpiochip_remove() local
1496 gpiochip_sysfs_unregister(gdev); in gpiochip_remove()
1499 gdev->chip = NULL; in gpiochip_remove()
1509 gdev->data = NULL; in gpiochip_remove()
1512 for (i = 0; i < gdev->ngpio; i++) { in gpiochip_remove()
1513 desc = &gdev->descs[i]; in gpiochip_remove()
1520 dev_crit(&gdev->dev, in gpiochip_remove()
1529 cdev_device_del(&gdev->chrdev, &gdev->dev); in gpiochip_remove()
1530 put_device(&gdev->dev); in gpiochip_remove()
1595 struct gpio_device *gdev; in gpiochip_find() local
1600 list_for_each_entry(gdev, &gpio_devices, list) in gpiochip_find()
1601 if (gdev->chip && match(gdev->chip, data)) { in gpiochip_find()
1602 chip = gdev->chip; in gpiochip_find()
2534 struct gpio_device *gdev = chip->gpiodev; in gpiochip_add_pingroup_range() local
2547 pin_range->range.base = gdev->base + gpio_offset; in gpiochip_add_pingroup_range()
2564 list_add_tail(&pin_range->node, &gdev->pin_ranges); in gpiochip_add_pingroup_range()
2592 struct gpio_device *gdev = chip->gpiodev; in gpiochip_add_pin_range() local
2605 pin_range->range.base = gdev->base + gpio_offset; in gpiochip_add_pin_range()
2621 list_add_tail(&pin_range->node, &gdev->pin_ranges); in gpiochip_add_pin_range()
2634 struct gpio_device *gdev = chip->gpiodev; in gpiochip_remove_pin_ranges() local
2636 list_for_each_entry_safe(pin_range, tmp, &gdev->pin_ranges, node) { in gpiochip_remove_pin_ranges()
2653 struct gpio_chip *chip = desc->gdev->chip; in gpiod_request_commit()
2721 if (!desc->gdev) { in validate_desc()
2725 if (!desc->gdev->chip) { in validate_desc()
2726 dev_warn(&desc->gdev->dev, in validate_desc()
2748 struct gpio_device *gdev; in gpiod_request() local
2751 gdev = desc->gdev; in gpiod_request()
2753 if (try_module_get(gdev->owner)) { in gpiod_request()
2756 module_put(gdev->owner); in gpiod_request()
2758 get_device(&gdev->dev); in gpiod_request()
2779 chip = desc->gdev->chip; in gpiod_free_commit()
2803 if (desc && desc->gdev && gpiod_free_commit(desc)) { in gpiod_free()
2804 module_put(desc->gdev->owner); in gpiod_free()
2805 put_device(&desc->gdev->dev); in gpiod_free()
2947 chip = desc->gdev->chip; in gpiod_direction_input()
2994 struct gpio_chip *gc = desc->gdev->chip; in gpiod_direction_output_raw_commit()
3085 gc = desc->gdev->chip; in gpiod_direction_output()
3144 chip = desc->gdev->chip; in gpiod_set_debounce()
3183 chip = desc->gdev->chip; in gpiod_set_transitory()
3192 dev_dbg(&desc->gdev->dev, "Persistence not supported for GPIO %d\n", in gpiod_set_transitory()
3242 chip = desc->gdev->chip; in gpiod_get_raw_value_commit()
3307 struct gpio_chip *chip = desc_array[i]->gdev->chip; in gpiod_get_array_value_complex()
3341 (desc_array[i]->gdev->chip == chip)); in gpiod_get_array_value_complex()
3386 WARN_ON(desc->gdev->chip->can_sleep); in gpiod_get_raw_value()
3407 WARN_ON(desc->gdev->chip->can_sleep); in gpiod_get_value()
3481 struct gpio_chip *chip = desc->gdev->chip; in gpio_set_open_drain_value_commit()
3506 struct gpio_chip *chip = desc->gdev->chip; in gpio_set_open_source_value_commit()
3527 chip = desc->gdev->chip; in gpiod_set_raw_value_commit()
3590 struct gpio_chip *chip = desc_array[i]->gdev->chip; in gpiod_set_array_value_complex()
3648 (desc_array[i]->gdev->chip == chip)); in gpiod_set_array_value_complex()
3674 WARN_ON(desc->gdev->chip->can_sleep); in gpiod_set_raw_value()
3715 WARN_ON(desc->gdev->chip->can_sleep); in gpiod_set_value()
3779 return desc->gdev->chip->can_sleep; in gpiod_cansleep()
3821 if (!desc || IS_ERR(desc) || !desc->gdev || !desc->gdev->chip) in gpiod_to_irq()
3824 chip = desc->gdev->chip; in gpiod_to_irq()
4921 static void gpiolib_dbg_show(struct seq_file *s, struct gpio_device *gdev) in gpiolib_dbg_show() argument
4924 struct gpio_chip *chip = gdev->chip; in gpiolib_dbg_show()
4925 unsigned gpio = gdev->base; in gpiolib_dbg_show()
4926 struct gpio_desc *gdesc = &gdev->descs[0]; in gpiolib_dbg_show()
4931 for (i = 0; i < gdev->ngpio; i++, gpio++, gdesc++) { in gpiolib_dbg_show()
4957 struct gpio_device *gdev = NULL; in gpiolib_seq_start() local
4963 list_for_each_entry(gdev, &gpio_devices, list) in gpiolib_seq_start()
4966 return gdev; in gpiolib_seq_start()
4976 struct gpio_device *gdev = v; in gpiolib_seq_next() local
4980 if (list_is_last(&gdev->list, &gpio_devices)) in gpiolib_seq_next()
4983 ret = list_entry(gdev->list.next, struct gpio_device, list); in gpiolib_seq_next()
4998 struct gpio_device *gdev = v; in gpiolib_seq_show() local
4999 struct gpio_chip *chip = gdev->chip; in gpiolib_seq_show()
5004 dev_name(&gdev->dev)); in gpiolib_seq_show()
5009 dev_name(&gdev->dev), in gpiolib_seq_show()
5010 gdev->base, gdev->base + gdev->ngpio - 1); in gpiolib_seq_show()
5025 gpiolib_dbg_show(s, gdev); in gpiolib_seq_show()