Lines Matching refs:pctldev

75 const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev)  in pinctrl_dev_get_name()  argument
78 return pctldev->desc->name; in pinctrl_dev_get_name()
82 const char *pinctrl_dev_get_devname(struct pinctrl_dev *pctldev) in pinctrl_dev_get_devname() argument
84 return dev_name(pctldev->dev); in pinctrl_dev_get_devname()
88 void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev) in pinctrl_dev_get_drvdata() argument
90 return pctldev->driver_data; in pinctrl_dev_get_drvdata()
103 struct pinctrl_dev *pctldev = NULL; in get_pinctrl_dev_from_devname() local
110 list_for_each_entry(pctldev, &pinctrldev_list, node) { in get_pinctrl_dev_from_devname()
111 if (!strcmp(dev_name(pctldev->dev), devname)) { in get_pinctrl_dev_from_devname()
114 return pctldev; in get_pinctrl_dev_from_devname()
125 struct pinctrl_dev *pctldev; in get_pinctrl_dev_from_of_node() local
129 list_for_each_entry(pctldev, &pinctrldev_list, node) in get_pinctrl_dev_from_of_node()
130 if (pctldev->dev->of_node == np) { in get_pinctrl_dev_from_of_node()
132 return pctldev; in get_pinctrl_dev_from_of_node()
145 int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name) in pin_get_from_name() argument
150 for (i = 0; i < pctldev->desc->npins; i++) { in pin_get_from_name()
153 pin = pctldev->desc->pins[i].number; in pin_get_from_name()
154 desc = pin_desc_get(pctldev, pin); in pin_get_from_name()
168 const char *pin_get_name(struct pinctrl_dev *pctldev, const unsigned pin) in pin_get_name() argument
172 desc = pin_desc_get(pctldev, pin); in pin_get_name()
174 dev_err(pctldev->dev, "failed to get pin(%d) name\n", in pin_get_name()
190 bool pin_is_valid(struct pinctrl_dev *pctldev, int pin) in pin_is_valid() argument
197 mutex_lock(&pctldev->mutex); in pin_is_valid()
198 pindesc = pin_desc_get(pctldev, pin); in pin_is_valid()
199 mutex_unlock(&pctldev->mutex); in pin_is_valid()
206 static void pinctrl_free_pindescs(struct pinctrl_dev *pctldev, in pinctrl_free_pindescs() argument
215 pindesc = radix_tree_lookup(&pctldev->pin_desc_tree, in pinctrl_free_pindescs()
218 radix_tree_delete(&pctldev->pin_desc_tree, in pinctrl_free_pindescs()
227 static int pinctrl_register_one_pin(struct pinctrl_dev *pctldev, in pinctrl_register_one_pin() argument
232 pindesc = pin_desc_get(pctldev, number); in pinctrl_register_one_pin()
235 pctldev->desc->name); in pinctrl_register_one_pin()
241 dev_err(pctldev->dev, "failed to alloc struct pin_desc\n"); in pinctrl_register_one_pin()
246 pindesc->pctldev = pctldev; in pinctrl_register_one_pin()
260 radix_tree_insert(&pctldev->pin_desc_tree, number, pindesc); in pinctrl_register_one_pin()
262 number, pindesc->name, pctldev->desc->name); in pinctrl_register_one_pin()
266 static int pinctrl_register_pins(struct pinctrl_dev *pctldev, in pinctrl_register_pins() argument
274 ret = pinctrl_register_one_pin(pctldev, in pinctrl_register_pins()
315 pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, unsigned gpio) in pinctrl_match_gpio_range() argument
319 mutex_lock(&pctldev->mutex); in pinctrl_match_gpio_range()
321 list_for_each_entry(range, &pctldev->gpio_ranges, node) { in pinctrl_match_gpio_range()
325 mutex_unlock(&pctldev->mutex); in pinctrl_match_gpio_range()
329 mutex_unlock(&pctldev->mutex); in pinctrl_match_gpio_range()
349 struct pinctrl_dev *pctldev; in pinctrl_ready_for_gpio_range() local
356 list_for_each_entry(pctldev, &pinctrldev_list, node) { in pinctrl_ready_for_gpio_range()
358 mutex_lock(&pctldev->mutex); in pinctrl_ready_for_gpio_range()
359 list_for_each_entry(range, &pctldev->gpio_ranges, node) { in pinctrl_ready_for_gpio_range()
364 mutex_unlock(&pctldev->mutex); in pinctrl_ready_for_gpio_range()
368 mutex_unlock(&pctldev->mutex); in pinctrl_ready_for_gpio_range()
394 struct pinctrl_dev *pctldev = NULL; in pinctrl_get_device_gpio_range() local
399 list_for_each_entry(pctldev, &pinctrldev_list, node) { in pinctrl_get_device_gpio_range()
402 range = pinctrl_match_gpio_range(pctldev, gpio); in pinctrl_get_device_gpio_range()
404 *outdev = pctldev; in pinctrl_get_device_gpio_range()
424 void pinctrl_add_gpio_range(struct pinctrl_dev *pctldev, in pinctrl_add_gpio_range() argument
427 mutex_lock(&pctldev->mutex); in pinctrl_add_gpio_range()
428 list_add_tail(&range->node, &pctldev->gpio_ranges); in pinctrl_add_gpio_range()
429 mutex_unlock(&pctldev->mutex); in pinctrl_add_gpio_range()
433 void pinctrl_add_gpio_ranges(struct pinctrl_dev *pctldev, in pinctrl_add_gpio_ranges() argument
440 pinctrl_add_gpio_range(pctldev, &ranges[i]); in pinctrl_add_gpio_ranges()
447 struct pinctrl_dev *pctldev; in pinctrl_find_and_add_gpio_range() local
449 pctldev = get_pinctrl_dev_from_devname(devname); in pinctrl_find_and_add_gpio_range()
456 if (!pctldev) { in pinctrl_find_and_add_gpio_range()
459 pinctrl_add_gpio_range(pctldev, range); in pinctrl_find_and_add_gpio_range()
461 return pctldev; in pinctrl_find_and_add_gpio_range()
465 int pinctrl_get_group_pins(struct pinctrl_dev *pctldev, const char *pin_group, in pinctrl_get_group_pins() argument
468 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinctrl_get_group_pins()
474 gs = pinctrl_get_group_selector(pctldev, pin_group); in pinctrl_get_group_pins()
478 return pctlops->get_group_pins(pctldev, gs, pins, num_pins); in pinctrl_get_group_pins()
488 pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev, in pinctrl_find_gpio_range_from_pin() argument
493 mutex_lock(&pctldev->mutex); in pinctrl_find_gpio_range_from_pin()
495 list_for_each_entry(range, &pctldev->gpio_ranges, node) { in pinctrl_find_gpio_range_from_pin()
509 mutex_unlock(&pctldev->mutex); in pinctrl_find_gpio_range_from_pin()
519 void pinctrl_remove_gpio_range(struct pinctrl_dev *pctldev, in pinctrl_remove_gpio_range() argument
522 mutex_lock(&pctldev->mutex); in pinctrl_remove_gpio_range()
524 mutex_unlock(&pctldev->mutex); in pinctrl_remove_gpio_range()
533 int pinctrl_get_group_selector(struct pinctrl_dev *pctldev, in pinctrl_get_group_selector() argument
536 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinctrl_get_group_selector()
537 unsigned ngroups = pctlops->get_groups_count(pctldev); in pinctrl_get_group_selector()
541 const char *gname = pctlops->get_group_name(pctldev, in pinctrl_get_group_selector()
544 dev_dbg(pctldev->dev, in pinctrl_get_group_selector()
554 dev_err(pctldev->dev, "does not have pin group %s\n", in pinctrl_get_group_selector()
570 struct pinctrl_dev *pctldev; in pinctrl_request_gpio() local
575 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range); in pinctrl_request_gpio()
582 mutex_lock(&pctldev->mutex); in pinctrl_request_gpio()
587 ret = pinmux_request_gpio(pctldev, range, pin, gpio); in pinctrl_request_gpio()
589 mutex_unlock(&pctldev->mutex); in pinctrl_request_gpio()
605 struct pinctrl_dev *pctldev; in pinctrl_free_gpio() local
610 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range); in pinctrl_free_gpio()
614 mutex_lock(&pctldev->mutex); in pinctrl_free_gpio()
619 pinmux_free_gpio(pctldev, pin, range); in pinctrl_free_gpio()
621 mutex_unlock(&pctldev->mutex); in pinctrl_free_gpio()
627 struct pinctrl_dev *pctldev; in pinctrl_gpio_direction() local
632 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range); in pinctrl_gpio_direction()
637 mutex_lock(&pctldev->mutex); in pinctrl_gpio_direction()
641 ret = pinmux_gpio_direction(pctldev, range, pin, input); in pinctrl_gpio_direction()
643 mutex_unlock(&pctldev->mutex); in pinctrl_gpio_direction()
732 setting->pctldev = get_pinctrl_dev_from_devname(map->ctrl_dev_name); in add_setting()
733 if (setting->pctldev == NULL) { in add_setting()
1221 int pinctrl_force_sleep(struct pinctrl_dev *pctldev) in pinctrl_force_sleep() argument
1223 if (!IS_ERR(pctldev->p) && !IS_ERR(pctldev->hog_sleep)) in pinctrl_force_sleep()
1224 return pinctrl_select_state(pctldev->p, pctldev->hog_sleep); in pinctrl_force_sleep()
1233 int pinctrl_force_default(struct pinctrl_dev *pctldev) in pinctrl_force_default() argument
1235 if (!IS_ERR(pctldev->p) && !IS_ERR(pctldev->hog_default)) in pinctrl_force_default()
1236 return pinctrl_select_state(pctldev->p, pctldev->hog_default); in pinctrl_force_default()
1307 struct pinctrl_dev *pctldev = s->private; in pinctrl_pins_show() local
1308 const struct pinctrl_ops *ops = pctldev->desc->pctlops; in pinctrl_pins_show()
1311 seq_printf(s, "registered pins: %d\n", pctldev->desc->npins); in pinctrl_pins_show()
1313 mutex_lock(&pctldev->mutex); in pinctrl_pins_show()
1316 for (i = 0; i < pctldev->desc->npins; i++) { in pinctrl_pins_show()
1319 pin = pctldev->desc->pins[i].number; in pinctrl_pins_show()
1320 desc = pin_desc_get(pctldev, pin); in pinctrl_pins_show()
1330 ops->pin_dbg_show(pctldev, s, pin); in pinctrl_pins_show()
1335 mutex_unlock(&pctldev->mutex); in pinctrl_pins_show()
1342 struct pinctrl_dev *pctldev = s->private; in pinctrl_groups_show() local
1343 const struct pinctrl_ops *ops = pctldev->desc->pctlops; in pinctrl_groups_show()
1346 mutex_lock(&pctldev->mutex); in pinctrl_groups_show()
1348 ngroups = ops->get_groups_count(pctldev); in pinctrl_groups_show()
1354 const char *gname = ops->get_group_name(pctldev, selector); in pinctrl_groups_show()
1360 ret = ops->get_group_pins(pctldev, selector, in pinctrl_groups_show()
1368 pname = pin_get_name(pctldev, pins[i]); in pinctrl_groups_show()
1370 mutex_unlock(&pctldev->mutex); in pinctrl_groups_show()
1380 mutex_unlock(&pctldev->mutex); in pinctrl_groups_show()
1387 struct pinctrl_dev *pctldev = s->private; in pinctrl_gpioranges_show() local
1392 mutex_lock(&pctldev->mutex); in pinctrl_gpioranges_show()
1395 list_for_each_entry(range, &pctldev->gpio_ranges, node) { in pinctrl_gpioranges_show()
1413 mutex_unlock(&pctldev->mutex); in pinctrl_gpioranges_show()
1420 struct pinctrl_dev *pctldev; in pinctrl_devices_show() local
1426 list_for_each_entry(pctldev, &pinctrldev_list, node) { in pinctrl_devices_show()
1427 seq_printf(s, "%s ", pctldev->desc->name); in pinctrl_devices_show()
1428 if (pctldev->desc->pmxops) in pinctrl_devices_show()
1432 if (pctldev->desc->confops) in pinctrl_devices_show()
1516 struct pinctrl_dev *pctldev = setting->pctldev; in pinctrl_show() local
1520 pinctrl_dev_get_name(pctldev)); in pinctrl_show()
1616 static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev) in pinctrl_init_device_debugfs() argument
1620 device_root = debugfs_create_dir(dev_name(pctldev->dev), in pinctrl_init_device_debugfs()
1622 pctldev->device_root = device_root; in pinctrl_init_device_debugfs()
1626 dev_name(pctldev->dev)); in pinctrl_init_device_debugfs()
1630 device_root, pctldev, &pinctrl_pins_ops); in pinctrl_init_device_debugfs()
1632 device_root, pctldev, &pinctrl_groups_ops); in pinctrl_init_device_debugfs()
1634 device_root, pctldev, &pinctrl_gpioranges_ops); in pinctrl_init_device_debugfs()
1635 if (pctldev->desc->pmxops) in pinctrl_init_device_debugfs()
1636 pinmux_init_device_debugfs(device_root, pctldev); in pinctrl_init_device_debugfs()
1637 if (pctldev->desc->confops) in pinctrl_init_device_debugfs()
1638 pinconf_init_device_debugfs(device_root, pctldev); in pinctrl_init_device_debugfs()
1641 static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev) in pinctrl_remove_device_debugfs() argument
1643 debugfs_remove_recursive(pctldev->device_root); in pinctrl_remove_device_debugfs()
1665 static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev) in pinctrl_init_device_debugfs() argument
1673 static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev) in pinctrl_remove_device_debugfs() argument
1679 static int pinctrl_check_ops(struct pinctrl_dev *pctldev) in pinctrl_check_ops() argument
1681 const struct pinctrl_ops *ops = pctldev->desc->pctlops; in pinctrl_check_ops()
1703 struct pinctrl_dev *pctldev; in pinctrl_register() local
1711 pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL); in pinctrl_register()
1712 if (pctldev == NULL) { in pinctrl_register()
1718 pctldev->owner = pctldesc->owner; in pinctrl_register()
1719 pctldev->desc = pctldesc; in pinctrl_register()
1720 pctldev->driver_data = driver_data; in pinctrl_register()
1721 INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL); in pinctrl_register()
1722 INIT_LIST_HEAD(&pctldev->gpio_ranges); in pinctrl_register()
1723 pctldev->dev = dev; in pinctrl_register()
1724 mutex_init(&pctldev->mutex); in pinctrl_register()
1727 if (pinctrl_check_ops(pctldev)) { in pinctrl_register()
1734 if (pinmux_check_ops(pctldev)) in pinctrl_register()
1740 if (pinconf_check_ops(pctldev)) in pinctrl_register()
1746 ret = pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins); in pinctrl_register()
1749 pinctrl_free_pindescs(pctldev, pctldesc->pins, in pinctrl_register()
1755 list_add_tail(&pctldev->node, &pinctrldev_list); in pinctrl_register()
1758 pctldev->p = pinctrl_get(pctldev->dev); in pinctrl_register()
1760 if (!IS_ERR(pctldev->p)) { in pinctrl_register()
1761 pctldev->hog_default = in pinctrl_register()
1762 pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT); in pinctrl_register()
1763 if (IS_ERR(pctldev->hog_default)) { in pinctrl_register()
1766 if (pinctrl_select_state(pctldev->p, in pinctrl_register()
1767 pctldev->hog_default)) in pinctrl_register()
1772 pctldev->hog_sleep = in pinctrl_register()
1773 pinctrl_lookup_state(pctldev->p, in pinctrl_register()
1775 if (IS_ERR(pctldev->hog_sleep)) in pinctrl_register()
1779 pinctrl_init_device_debugfs(pctldev); in pinctrl_register()
1781 return pctldev; in pinctrl_register()
1784 mutex_destroy(&pctldev->mutex); in pinctrl_register()
1785 kfree(pctldev); in pinctrl_register()
1796 void pinctrl_unregister(struct pinctrl_dev *pctldev) in pinctrl_unregister() argument
1799 if (pctldev == NULL) in pinctrl_unregister()
1802 mutex_lock(&pctldev->mutex); in pinctrl_unregister()
1803 pinctrl_remove_device_debugfs(pctldev); in pinctrl_unregister()
1804 mutex_unlock(&pctldev->mutex); in pinctrl_unregister()
1806 if (!IS_ERR(pctldev->p)) in pinctrl_unregister()
1807 pinctrl_put(pctldev->p); in pinctrl_unregister()
1810 mutex_lock(&pctldev->mutex); in pinctrl_unregister()
1812 list_del(&pctldev->node); in pinctrl_unregister()
1814 pinctrl_free_pindescs(pctldev, pctldev->desc->pins, in pinctrl_unregister()
1815 pctldev->desc->npins); in pinctrl_unregister()
1817 list_for_each_entry_safe(range, n, &pctldev->gpio_ranges, node) in pinctrl_unregister()
1820 mutex_unlock(&pctldev->mutex); in pinctrl_unregister()
1821 mutex_destroy(&pctldev->mutex); in pinctrl_unregister()
1822 kfree(pctldev); in pinctrl_unregister()