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()
234 dev_err(pctldev->dev, "pin %d already registered\n", number); in pinctrl_register_one_pin()
240 dev_err(pctldev->dev, "failed to alloc struct pin_desc\n"); in pinctrl_register_one_pin()
245 pindesc->pctldev = pctldev; in pinctrl_register_one_pin()
259 radix_tree_insert(&pctldev->pin_desc_tree, number, pindesc); in pinctrl_register_one_pin()
261 number, pindesc->name, pctldev->desc->name); in pinctrl_register_one_pin()
265 static int pinctrl_register_pins(struct pinctrl_dev *pctldev, in pinctrl_register_pins() argument
273 ret = pinctrl_register_one_pin(pctldev, in pinctrl_register_pins()
314 pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, unsigned gpio) in pinctrl_match_gpio_range() argument
318 mutex_lock(&pctldev->mutex); in pinctrl_match_gpio_range()
320 list_for_each_entry(range, &pctldev->gpio_ranges, node) { in pinctrl_match_gpio_range()
324 mutex_unlock(&pctldev->mutex); in pinctrl_match_gpio_range()
328 mutex_unlock(&pctldev->mutex); in pinctrl_match_gpio_range()
348 struct pinctrl_dev *pctldev; in pinctrl_ready_for_gpio_range() local
358 list_for_each_entry(pctldev, &pinctrldev_list, node) { in pinctrl_ready_for_gpio_range()
360 mutex_lock(&pctldev->mutex); in pinctrl_ready_for_gpio_range()
361 list_for_each_entry(range, &pctldev->gpio_ranges, node) { in pinctrl_ready_for_gpio_range()
366 mutex_unlock(&pctldev->mutex); in pinctrl_ready_for_gpio_range()
370 mutex_unlock(&pctldev->mutex); in pinctrl_ready_for_gpio_range()
396 struct pinctrl_dev *pctldev = NULL; in pinctrl_get_device_gpio_range() local
401 list_for_each_entry(pctldev, &pinctrldev_list, node) { in pinctrl_get_device_gpio_range()
404 range = pinctrl_match_gpio_range(pctldev, gpio); in pinctrl_get_device_gpio_range()
406 *outdev = pctldev; in pinctrl_get_device_gpio_range()
426 void pinctrl_add_gpio_range(struct pinctrl_dev *pctldev, in pinctrl_add_gpio_range() argument
429 mutex_lock(&pctldev->mutex); in pinctrl_add_gpio_range()
430 list_add_tail(&range->node, &pctldev->gpio_ranges); in pinctrl_add_gpio_range()
431 mutex_unlock(&pctldev->mutex); in pinctrl_add_gpio_range()
435 void pinctrl_add_gpio_ranges(struct pinctrl_dev *pctldev, in pinctrl_add_gpio_ranges() argument
442 pinctrl_add_gpio_range(pctldev, &ranges[i]); in pinctrl_add_gpio_ranges()
449 struct pinctrl_dev *pctldev; in pinctrl_find_and_add_gpio_range() local
451 pctldev = get_pinctrl_dev_from_devname(devname); in pinctrl_find_and_add_gpio_range()
458 if (!pctldev) { in pinctrl_find_and_add_gpio_range()
461 pinctrl_add_gpio_range(pctldev, range); in pinctrl_find_and_add_gpio_range()
463 return pctldev; in pinctrl_find_and_add_gpio_range()
467 int pinctrl_get_group_pins(struct pinctrl_dev *pctldev, const char *pin_group, in pinctrl_get_group_pins() argument
470 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinctrl_get_group_pins()
476 gs = pinctrl_get_group_selector(pctldev, pin_group); in pinctrl_get_group_pins()
480 return pctlops->get_group_pins(pctldev, gs, pins, num_pins); in pinctrl_get_group_pins()
490 pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev, in pinctrl_find_gpio_range_from_pin() argument
495 mutex_lock(&pctldev->mutex); in pinctrl_find_gpio_range_from_pin()
497 list_for_each_entry(range, &pctldev->gpio_ranges, node) { in pinctrl_find_gpio_range_from_pin()
511 mutex_unlock(&pctldev->mutex); in pinctrl_find_gpio_range_from_pin()
521 void pinctrl_remove_gpio_range(struct pinctrl_dev *pctldev, in pinctrl_remove_gpio_range() argument
524 mutex_lock(&pctldev->mutex); in pinctrl_remove_gpio_range()
526 mutex_unlock(&pctldev->mutex); in pinctrl_remove_gpio_range()
535 int pinctrl_get_group_selector(struct pinctrl_dev *pctldev, in pinctrl_get_group_selector() argument
538 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinctrl_get_group_selector()
539 unsigned ngroups = pctlops->get_groups_count(pctldev); in pinctrl_get_group_selector()
543 const char *gname = pctlops->get_group_name(pctldev, in pinctrl_get_group_selector()
546 dev_dbg(pctldev->dev, in pinctrl_get_group_selector()
556 dev_err(pctldev->dev, "does not have pin group %s\n", in pinctrl_get_group_selector()
572 struct pinctrl_dev *pctldev; in pinctrl_request_gpio() local
577 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range); in pinctrl_request_gpio()
584 mutex_lock(&pctldev->mutex); in pinctrl_request_gpio()
589 ret = pinmux_request_gpio(pctldev, range, pin, gpio); in pinctrl_request_gpio()
591 mutex_unlock(&pctldev->mutex); in pinctrl_request_gpio()
607 struct pinctrl_dev *pctldev; in pinctrl_free_gpio() local
612 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range); in pinctrl_free_gpio()
616 mutex_lock(&pctldev->mutex); in pinctrl_free_gpio()
621 pinmux_free_gpio(pctldev, pin, range); in pinctrl_free_gpio()
623 mutex_unlock(&pctldev->mutex); in pinctrl_free_gpio()
629 struct pinctrl_dev *pctldev; in pinctrl_gpio_direction() local
634 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range); in pinctrl_gpio_direction()
639 mutex_lock(&pctldev->mutex); in pinctrl_gpio_direction()
643 ret = pinmux_gpio_direction(pctldev, range, pin, input); in pinctrl_gpio_direction()
645 mutex_unlock(&pctldev->mutex); in pinctrl_gpio_direction()
734 setting->pctldev = get_pinctrl_dev_from_devname(map->ctrl_dev_name); in add_setting()
735 if (setting->pctldev == NULL) { in add_setting()
1223 int pinctrl_force_sleep(struct pinctrl_dev *pctldev) in pinctrl_force_sleep() argument
1225 if (!IS_ERR(pctldev->p) && !IS_ERR(pctldev->hog_sleep)) in pinctrl_force_sleep()
1226 return pinctrl_select_state(pctldev->p, pctldev->hog_sleep); in pinctrl_force_sleep()
1235 int pinctrl_force_default(struct pinctrl_dev *pctldev) in pinctrl_force_default() argument
1237 if (!IS_ERR(pctldev->p) && !IS_ERR(pctldev->hog_default)) in pinctrl_force_default()
1238 return pinctrl_select_state(pctldev->p, pctldev->hog_default); in pinctrl_force_default()
1341 struct pinctrl_dev *pctldev = s->private; in pinctrl_pins_show() local
1342 const struct pinctrl_ops *ops = pctldev->desc->pctlops; in pinctrl_pins_show()
1345 seq_printf(s, "registered pins: %d\n", pctldev->desc->npins); in pinctrl_pins_show()
1347 mutex_lock(&pctldev->mutex); in pinctrl_pins_show()
1350 for (i = 0; i < pctldev->desc->npins; i++) { in pinctrl_pins_show()
1353 pin = pctldev->desc->pins[i].number; in pinctrl_pins_show()
1354 desc = pin_desc_get(pctldev, pin); in pinctrl_pins_show()
1364 ops->pin_dbg_show(pctldev, s, pin); in pinctrl_pins_show()
1369 mutex_unlock(&pctldev->mutex); in pinctrl_pins_show()
1376 struct pinctrl_dev *pctldev = s->private; in pinctrl_groups_show() local
1377 const struct pinctrl_ops *ops = pctldev->desc->pctlops; in pinctrl_groups_show()
1380 mutex_lock(&pctldev->mutex); in pinctrl_groups_show()
1382 ngroups = ops->get_groups_count(pctldev); in pinctrl_groups_show()
1388 const char *gname = ops->get_group_name(pctldev, selector); in pinctrl_groups_show()
1394 ret = ops->get_group_pins(pctldev, selector, in pinctrl_groups_show()
1402 pname = pin_get_name(pctldev, pins[i]); in pinctrl_groups_show()
1404 mutex_unlock(&pctldev->mutex); in pinctrl_groups_show()
1414 mutex_unlock(&pctldev->mutex); in pinctrl_groups_show()
1421 struct pinctrl_dev *pctldev = s->private; in pinctrl_gpioranges_show() local
1426 mutex_lock(&pctldev->mutex); in pinctrl_gpioranges_show()
1429 list_for_each_entry(range, &pctldev->gpio_ranges, node) { in pinctrl_gpioranges_show()
1447 mutex_unlock(&pctldev->mutex); in pinctrl_gpioranges_show()
1454 struct pinctrl_dev *pctldev; in pinctrl_devices_show() local
1460 list_for_each_entry(pctldev, &pinctrldev_list, node) { in pinctrl_devices_show()
1461 seq_printf(s, "%s ", pctldev->desc->name); in pinctrl_devices_show()
1462 if (pctldev->desc->pmxops) in pinctrl_devices_show()
1466 if (pctldev->desc->confops) in pinctrl_devices_show()
1550 struct pinctrl_dev *pctldev = setting->pctldev; in pinctrl_show() local
1554 pinctrl_dev_get_name(pctldev)); in pinctrl_show()
1650 static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev) in pinctrl_init_device_debugfs() argument
1654 device_root = debugfs_create_dir(dev_name(pctldev->dev), in pinctrl_init_device_debugfs()
1656 pctldev->device_root = device_root; in pinctrl_init_device_debugfs()
1660 dev_name(pctldev->dev)); in pinctrl_init_device_debugfs()
1664 device_root, pctldev, &pinctrl_pins_ops); in pinctrl_init_device_debugfs()
1666 device_root, pctldev, &pinctrl_groups_ops); in pinctrl_init_device_debugfs()
1668 device_root, pctldev, &pinctrl_gpioranges_ops); in pinctrl_init_device_debugfs()
1669 if (pctldev->desc->pmxops) in pinctrl_init_device_debugfs()
1670 pinmux_init_device_debugfs(device_root, pctldev); in pinctrl_init_device_debugfs()
1671 if (pctldev->desc->confops) in pinctrl_init_device_debugfs()
1672 pinconf_init_device_debugfs(device_root, pctldev); in pinctrl_init_device_debugfs()
1675 static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev) in pinctrl_remove_device_debugfs() argument
1677 debugfs_remove_recursive(pctldev->device_root); in pinctrl_remove_device_debugfs()
1699 static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev) in pinctrl_init_device_debugfs() argument
1707 static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev) in pinctrl_remove_device_debugfs() argument
1713 static int pinctrl_check_ops(struct pinctrl_dev *pctldev) in pinctrl_check_ops() argument
1715 const struct pinctrl_ops *ops = pctldev->desc->pctlops; in pinctrl_check_ops()
1737 struct pinctrl_dev *pctldev; in pinctrl_register() local
1745 pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL); in pinctrl_register()
1746 if (pctldev == NULL) { in pinctrl_register()
1752 pctldev->owner = pctldesc->owner; in pinctrl_register()
1753 pctldev->desc = pctldesc; in pinctrl_register()
1754 pctldev->driver_data = driver_data; in pinctrl_register()
1755 INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL); in pinctrl_register()
1756 INIT_LIST_HEAD(&pctldev->gpio_ranges); in pinctrl_register()
1757 pctldev->dev = dev; in pinctrl_register()
1758 mutex_init(&pctldev->mutex); in pinctrl_register()
1761 ret = pinctrl_check_ops(pctldev); in pinctrl_register()
1769 ret = pinmux_check_ops(pctldev); in pinctrl_register()
1776 ret = pinconf_check_ops(pctldev); in pinctrl_register()
1783 ret = pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins); in pinctrl_register()
1786 pinctrl_free_pindescs(pctldev, pctldesc->pins, in pinctrl_register()
1792 list_add_tail(&pctldev->node, &pinctrldev_list); in pinctrl_register()
1795 pctldev->p = pinctrl_get(pctldev->dev); in pinctrl_register()
1797 if (!IS_ERR(pctldev->p)) { in pinctrl_register()
1798 pctldev->hog_default = in pinctrl_register()
1799 pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT); in pinctrl_register()
1800 if (IS_ERR(pctldev->hog_default)) { in pinctrl_register()
1803 if (pinctrl_select_state(pctldev->p, in pinctrl_register()
1804 pctldev->hog_default)) in pinctrl_register()
1809 pctldev->hog_sleep = in pinctrl_register()
1810 pinctrl_lookup_state(pctldev->p, in pinctrl_register()
1812 if (IS_ERR(pctldev->hog_sleep)) in pinctrl_register()
1816 pinctrl_init_device_debugfs(pctldev); in pinctrl_register()
1818 return pctldev; in pinctrl_register()
1821 mutex_destroy(&pctldev->mutex); in pinctrl_register()
1822 kfree(pctldev); in pinctrl_register()
1833 void pinctrl_unregister(struct pinctrl_dev *pctldev) in pinctrl_unregister() argument
1836 if (pctldev == NULL) in pinctrl_unregister()
1839 mutex_lock(&pctldev->mutex); in pinctrl_unregister()
1840 pinctrl_remove_device_debugfs(pctldev); in pinctrl_unregister()
1841 mutex_unlock(&pctldev->mutex); in pinctrl_unregister()
1843 if (!IS_ERR(pctldev->p)) in pinctrl_unregister()
1844 pinctrl_put(pctldev->p); in pinctrl_unregister()
1847 mutex_lock(&pctldev->mutex); in pinctrl_unregister()
1849 list_del(&pctldev->node); in pinctrl_unregister()
1851 pinctrl_free_pindescs(pctldev, pctldev->desc->pins, in pinctrl_unregister()
1852 pctldev->desc->npins); in pinctrl_unregister()
1854 list_for_each_entry_safe(range, n, &pctldev->gpio_ranges, node) in pinctrl_unregister()
1857 mutex_unlock(&pctldev->mutex); in pinctrl_unregister()
1858 mutex_destroy(&pctldev->mutex); in pinctrl_unregister()
1859 kfree(pctldev); in pinctrl_unregister()