Lines Matching refs:gdev

107 	struct gpio_device *gdev;  in gpio_to_desc()  local
112 list_for_each_entry(gdev, &gpio_devices, list) { in gpio_to_desc()
113 if (gdev->base <= gpio && in gpio_to_desc()
114 gdev->base + gdev->ngpio > gpio) { in gpio_to_desc()
116 return &gdev->descs[gpio - gdev->base]; in gpio_to_desc()
142 struct gpio_device *gdev = chip->gpiodev; in gpiochip_get_desc() local
144 if (hwnum >= gdev->ngpio) in gpiochip_get_desc()
147 return &gdev->descs[hwnum]; in gpiochip_get_desc()
162 return desc->gdev->base + (desc - &desc->gdev->descs[0]); in desc_to_gpio()
173 if (!desc || !desc->gdev) in gpiod_to_chip()
175 return desc->gdev->chip; in gpiod_to_chip()
182 struct gpio_device *gdev; in gpiochip_find_base() local
185 list_for_each_entry_reverse(gdev, &gpio_devices, list) { in gpiochip_find_base()
187 if (gdev->base + gdev->ngpio <= base) in gpiochip_find_base()
191 base = gdev->base - ngpio; in gpiochip_find_base()
244 static int gpiodev_add_to_list(struct gpio_device *gdev) in gpiodev_add_to_list() argument
250 list_add_tail(&gdev->list, &gpio_devices); in gpiodev_add_to_list()
255 if (gdev->base + gdev->ngpio <= next->base) { in gpiodev_add_to_list()
257 list_add(&gdev->list, &gpio_devices); in gpiodev_add_to_list()
262 if (prev->base + prev->ngpio <= gdev->base) { in gpiodev_add_to_list()
264 list_add_tail(&gdev->list, &gpio_devices); in gpiodev_add_to_list()
274 if (prev->base + prev->ngpio <= gdev->base in gpiodev_add_to_list()
275 && gdev->base + gdev->ngpio <= next->base) { in gpiodev_add_to_list()
276 list_add(&gdev->list, &prev->list); in gpiodev_add_to_list()
281 dev_err(&gdev->dev, "GPIO integer space overlap, cannot add chip\n"); in gpiodev_add_to_list()
290 struct gpio_device *gdev; in gpio_name_to_desc() local
295 list_for_each_entry(gdev, &gpio_devices, list) { in gpio_name_to_desc()
298 for (i = 0; i != gdev->ngpio; ++i) { in gpio_name_to_desc()
299 struct gpio_desc *desc = &gdev->descs[i]; in gpio_name_to_desc()
324 struct gpio_device *gdev = gc->gpiodev; in gpiochip_set_desc_names() local
336 dev_warn(&gdev->dev, in gpiochip_set_desc_names()
343 gdev->descs[i].name = gc->names[i]; in gpiochip_set_desc_names()
411 struct gpio_device *gdev; member
487 struct gpio_device *gdev = lh->gdev; in linehandle_release() local
494 put_device(&gdev->dev); in linehandle_release()
508 static int linehandle_create(struct gpio_device *gdev, void __user *ip) in linehandle_create() argument
545 lh->gdev = gdev; in linehandle_create()
546 get_device(&gdev->dev); in linehandle_create()
564 if (offset >= gdev->ngpio) { in linehandle_create()
569 desc = &gdev->descs[offset]; in linehandle_create()
602 dev_dbg(&gdev->dev, "registered chardev handle for line %d\n", in linehandle_create()
637 dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", in linehandle_create()
650 put_device(&gdev->dev); in linehandle_create()
674 struct gpio_device *gdev; member
752 struct gpio_device *gdev = le->gdev; in lineevent_release() local
758 put_device(&gdev->dev); in lineevent_release()
861 static int lineevent_create(struct gpio_device *gdev, void __user *ip) in lineevent_create() argument
880 le->gdev = gdev; in lineevent_create()
881 get_device(&gdev->dev); in lineevent_create()
898 if (offset >= gdev->ngpio) { in lineevent_create()
916 desc = &gdev->descs[offset]; in lineevent_create()
1001 put_device(&gdev->dev); in lineevent_create()
1010 struct gpio_device *gdev = filp->private_data; in gpio_ioctl() local
1011 struct gpio_chip *chip = gdev->chip; in gpio_ioctl()
1024 strncpy(chipinfo.name, dev_name(&gdev->dev), in gpio_ioctl()
1027 strncpy(chipinfo.label, gdev->label, in gpio_ioctl()
1030 chipinfo.lines = gdev->ngpio; in gpio_ioctl()
1040 if (lineinfo.line_offset >= gdev->ngpio) in gpio_ioctl()
1043 desc = &gdev->descs[lineinfo.line_offset]; in gpio_ioctl()
1083 return linehandle_create(gdev, ip); in gpio_ioctl()
1085 return lineevent_create(gdev, ip); in gpio_ioctl()
1106 struct gpio_device *gdev = container_of(inode->i_cdev, in gpio_chrdev_open() local
1110 if (!gdev->chip) in gpio_chrdev_open()
1112 get_device(&gdev->dev); in gpio_chrdev_open()
1113 filp->private_data = gdev; in gpio_chrdev_open()
1126 struct gpio_device *gdev = container_of(inode->i_cdev, in gpio_chrdev_release() local
1129 put_device(&gdev->dev); in gpio_chrdev_release()
1147 struct gpio_device *gdev = dev_get_drvdata(dev); in gpiodevice_release() local
1149 list_del(&gdev->list); in gpiodevice_release()
1150 ida_simple_remove(&gpio_ida, gdev->id); in gpiodevice_release()
1151 kfree_const(gdev->label); in gpiodevice_release()
1152 kfree(gdev->descs); in gpiodevice_release()
1153 kfree(gdev); in gpiodevice_release()
1156 static int gpiochip_setup_dev(struct gpio_device *gdev) in gpiochip_setup_dev() argument
1160 cdev_init(&gdev->chrdev, &gpio_fileops); in gpiochip_setup_dev()
1161 gdev->chrdev.owner = THIS_MODULE; in gpiochip_setup_dev()
1162 gdev->dev.devt = MKDEV(MAJOR(gpio_devt), gdev->id); in gpiochip_setup_dev()
1164 status = cdev_device_add(&gdev->chrdev, &gdev->dev); in gpiochip_setup_dev()
1168 chip_dbg(gdev->chip, "added GPIO chardev (%d:%d)\n", in gpiochip_setup_dev()
1169 MAJOR(gpio_devt), gdev->id); in gpiochip_setup_dev()
1171 status = gpiochip_sysfs_register(gdev); in gpiochip_setup_dev()
1176 gdev->dev.release = gpiodevice_release; in gpiochip_setup_dev()
1178 __func__, gdev->base, gdev->base + gdev->ngpio - 1, in gpiochip_setup_dev()
1179 dev_name(&gdev->dev), gdev->chip->label ? : "generic"); in gpiochip_setup_dev()
1184 cdev_device_del(&gdev->chrdev, &gdev->dev); in gpiochip_setup_dev()
1225 struct gpio_device *gdev; in gpiochip_setup_devs() local
1228 list_for_each_entry(gdev, &gpio_devices, list) { in gpiochip_setup_devs()
1229 err = gpiochip_setup_dev(gdev); in gpiochip_setup_devs()
1232 dev_name(&gdev->dev), err); in gpiochip_setup_devs()
1244 struct gpio_device *gdev; in gpiochip_add_data_with_key() local
1250 gdev = kzalloc(sizeof(*gdev), GFP_KERNEL); in gpiochip_add_data_with_key()
1251 if (!gdev) in gpiochip_add_data_with_key()
1253 gdev->dev.bus = &gpio_bus_type; in gpiochip_add_data_with_key()
1254 gdev->chip = chip; in gpiochip_add_data_with_key()
1255 chip->gpiodev = gdev; in gpiochip_add_data_with_key()
1257 gdev->dev.parent = chip->parent; in gpiochip_add_data_with_key()
1258 gdev->dev.of_node = chip->parent->of_node; in gpiochip_add_data_with_key()
1264 gdev->dev.of_node = chip->of_node; in gpiochip_add_data_with_key()
1266 chip->of_node = gdev->dev.of_node; in gpiochip_add_data_with_key()
1269 gdev->id = ida_simple_get(&gpio_ida, 0, 0, GFP_KERNEL); in gpiochip_add_data_with_key()
1270 if (gdev->id < 0) { in gpiochip_add_data_with_key()
1271 status = gdev->id; in gpiochip_add_data_with_key()
1274 dev_set_name(&gdev->dev, "gpiochip%d", gdev->id); in gpiochip_add_data_with_key()
1275 device_initialize(&gdev->dev); in gpiochip_add_data_with_key()
1276 dev_set_drvdata(&gdev->dev, gdev); in gpiochip_add_data_with_key()
1278 gdev->owner = chip->parent->driver->owner; in gpiochip_add_data_with_key()
1281 gdev->owner = chip->owner; in gpiochip_add_data_with_key()
1283 gdev->owner = THIS_MODULE; in gpiochip_add_data_with_key()
1285 gdev->descs = kcalloc(chip->ngpio, sizeof(gdev->descs[0]), GFP_KERNEL); in gpiochip_add_data_with_key()
1286 if (!gdev->descs) { in gpiochip_add_data_with_key()
1301 gdev->label = kstrdup_const(chip->label ?: "unknown", GFP_KERNEL); in gpiochip_add_data_with_key()
1302 if (!gdev->label) { in gpiochip_add_data_with_key()
1307 gdev->ngpio = chip->ngpio; in gpiochip_add_data_with_key()
1308 gdev->data = data; in gpiochip_add_data_with_key()
1334 gdev->base = base; in gpiochip_add_data_with_key()
1336 status = gpiodev_add_to_list(gdev); in gpiochip_add_data_with_key()
1345 struct gpio_desc *desc = &gdev->descs[i]; in gpiochip_add_data_with_key()
1347 desc->gdev = gdev; in gpiochip_add_data_with_key()
1359 INIT_LIST_HEAD(&gdev->pin_ranges); in gpiochip_add_data_with_key()
1395 status = gpiochip_setup_dev(gdev); in gpiochip_add_data_with_key()
1410 list_del(&gdev->list); in gpiochip_add_data_with_key()
1413 kfree_const(gdev->label); in gpiochip_add_data_with_key()
1415 kfree(gdev->descs); in gpiochip_add_data_with_key()
1417 ida_simple_remove(&gpio_ida, gdev->id); in gpiochip_add_data_with_key()
1420 gdev->base, gdev->base + gdev->ngpio - 1, in gpiochip_add_data_with_key()
1422 kfree(gdev); in gpiochip_add_data_with_key()
1448 struct gpio_device *gdev = chip->gpiodev; in gpiochip_remove() local
1455 gpiochip_sysfs_unregister(gdev); in gpiochip_remove()
1458 gdev->chip = NULL; in gpiochip_remove()
1468 gdev->data = NULL; in gpiochip_remove()
1471 for (i = 0; i < gdev->ngpio; i++) { in gpiochip_remove()
1472 desc = &gdev->descs[i]; in gpiochip_remove()
1479 dev_crit(&gdev->dev, in gpiochip_remove()
1488 cdev_device_del(&gdev->chrdev, &gdev->dev); in gpiochip_remove()
1489 put_device(&gdev->dev); in gpiochip_remove()
1584 struct gpio_device *gdev; in gpiochip_find() local
1589 list_for_each_entry(gdev, &gpio_devices, list) in gpiochip_find()
1590 if (gdev->chip && match(gdev->chip, data)) { in gpiochip_find()
1591 chip = gdev->chip; in gpiochip_find()
2149 struct gpio_device *gdev = chip->gpiodev; in gpiochip_add_pingroup_range() local
2162 pin_range->range.base = gdev->base + gpio_offset; in gpiochip_add_pingroup_range()
2179 list_add_tail(&pin_range->node, &gdev->pin_ranges); in gpiochip_add_pingroup_range()
2207 struct gpio_device *gdev = chip->gpiodev; in gpiochip_add_pin_range() local
2220 pin_range->range.base = gdev->base + gpio_offset; in gpiochip_add_pin_range()
2236 list_add_tail(&pin_range->node, &gdev->pin_ranges); in gpiochip_add_pin_range()
2249 struct gpio_device *gdev = chip->gpiodev; in gpiochip_remove_pin_ranges() local
2251 list_for_each_entry_safe(pin_range, tmp, &gdev->pin_ranges, node) { in gpiochip_remove_pin_ranges()
2268 struct gpio_chip *chip = desc->gdev->chip; in gpiod_request_commit()
2328 if (!desc->gdev) { in validate_desc()
2332 if (!desc->gdev->chip) { in validate_desc()
2333 dev_warn(&desc->gdev->dev, in validate_desc()
2355 struct gpio_device *gdev; in gpiod_request() local
2358 gdev = desc->gdev; in gpiod_request()
2360 if (try_module_get(gdev->owner)) { in gpiod_request()
2363 module_put(gdev->owner); in gpiod_request()
2365 get_device(&gdev->dev); in gpiod_request()
2386 chip = desc->gdev->chip; in gpiod_free_commit()
2409 if (desc && desc->gdev && gpiod_free_commit(desc)) { in gpiod_free()
2410 module_put(desc->gdev->owner); in gpiod_free()
2411 put_device(&desc->gdev->dev); in gpiod_free()
2519 chip = desc->gdev->chip; in gpiod_direction_input()
2548 struct gpio_chip *gc = desc->gdev->chip; in gpiod_direction_output_raw_commit()
2616 gc = desc->gdev->chip; in gpiod_direction_output()
2660 chip = desc->gdev->chip; in gpiod_set_debounce()
2699 chip = desc->gdev->chip; in gpiod_set_transitory()
2708 dev_dbg(&desc->gdev->dev, "Persistence not supported for GPIO %d\n", in gpiod_set_transitory()
2758 chip = desc->gdev->chip; in gpiod_get_raw_value_commit()
2793 struct gpio_chip *chip = desc_array[i]->gdev->chip; in gpiod_get_array_value_complex()
2823 (desc_array[i]->gdev->chip == chip)); in gpiod_get_array_value_complex()
2863 WARN_ON(desc->gdev->chip->can_sleep); in gpiod_get_raw_value()
2884 WARN_ON(desc->gdev->chip->can_sleep); in gpiod_get_value()
2950 struct gpio_chip *chip = desc->gdev->chip; in gpio_set_open_drain_value_commit()
2977 struct gpio_chip *chip = desc->gdev->chip; in gpio_set_open_source_value_commit()
3000 chip = desc->gdev->chip; in gpiod_set_raw_value_commit()
3036 struct gpio_chip *chip = desc_array[i]->gdev->chip; in gpiod_set_array_value_complex()
3083 (desc_array[i]->gdev->chip == chip)); in gpiod_set_array_value_complex()
3109 WARN_ON(desc->gdev->chip->can_sleep); in gpiod_set_raw_value()
3149 WARN_ON(desc->gdev->chip->can_sleep); in gpiod_set_value()
3206 return desc->gdev->chip->can_sleep; in gpiod_cansleep()
3240 if (!desc || IS_ERR(desc) || !desc->gdev || !desc->gdev->chip) in gpiod_to_irq()
3243 chip = desc->gdev->chip; in gpiod_to_irq()
4273 static void gpiolib_dbg_show(struct seq_file *s, struct gpio_device *gdev) in gpiolib_dbg_show() argument
4276 struct gpio_chip *chip = gdev->chip; in gpiolib_dbg_show()
4277 unsigned gpio = gdev->base; in gpiolib_dbg_show()
4278 struct gpio_desc *gdesc = &gdev->descs[0]; in gpiolib_dbg_show()
4282 for (i = 0; i < gdev->ngpio; i++, gpio++, gdesc++) { in gpiolib_dbg_show()
4306 struct gpio_device *gdev = NULL; in gpiolib_seq_start() local
4312 list_for_each_entry(gdev, &gpio_devices, list) in gpiolib_seq_start()
4315 return gdev; in gpiolib_seq_start()
4325 struct gpio_device *gdev = v; in gpiolib_seq_next() local
4329 if (list_is_last(&gdev->list, &gpio_devices)) in gpiolib_seq_next()
4332 ret = list_entry(gdev->list.next, struct gpio_device, list); in gpiolib_seq_next()
4347 struct gpio_device *gdev = v; in gpiolib_seq_show() local
4348 struct gpio_chip *chip = gdev->chip; in gpiolib_seq_show()
4353 dev_name(&gdev->dev)); in gpiolib_seq_show()
4358 dev_name(&gdev->dev), in gpiolib_seq_show()
4359 gdev->base, gdev->base + gdev->ngpio - 1); in gpiolib_seq_show()
4374 gpiolib_dbg_show(s, gdev); in gpiolib_seq_show()