Lines Matching refs:pctldev
32 int pinmux_check_ops(struct pinctrl_dev *pctldev) in pinmux_check_ops() argument
34 const struct pinmux_ops *ops = pctldev->desc->pmxops; in pinmux_check_ops()
44 dev_err(pctldev->dev, "pinmux ops lacks necessary functions\n"); in pinmux_check_ops()
48 nfuncs = ops->get_functions_count(pctldev); in pinmux_check_ops()
50 const char *fname = ops->get_function_name(pctldev, in pinmux_check_ops()
53 dev_err(pctldev->dev, "pinmux ops has no name for function%u\n", in pinmux_check_ops()
84 bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, unsigned pin) in pinmux_can_be_used_for_gpio() argument
86 struct pin_desc *desc = pin_desc_get(pctldev, pin); in pinmux_can_be_used_for_gpio()
87 const struct pinmux_ops *ops = pctldev->desc->pmxops; in pinmux_can_be_used_for_gpio()
108 static int pin_request(struct pinctrl_dev *pctldev, in pin_request() argument
113 const struct pinmux_ops *ops = pctldev->desc->pmxops; in pin_request()
116 desc = pin_desc_get(pctldev, pin); in pin_request()
118 dev_err(pctldev->dev, in pin_request()
124 dev_dbg(pctldev->dev, "request pin %d (%s) for %s\n", in pin_request()
129 dev_err(pctldev->dev, in pin_request()
136 dev_err(pctldev->dev, in pin_request()
153 if (!try_module_get(pctldev->owner)) { in pin_request()
154 dev_err(pctldev->dev, in pin_request()
167 status = ops->gpio_request_enable(pctldev, gpio_range, pin); in pin_request()
169 status = ops->request(pctldev, pin); in pin_request()
174 dev_err(pctldev->dev, "request() failed for pin %d\n", pin); in pin_request()
175 module_put(pctldev->owner); in pin_request()
190 dev_err(pctldev->dev, "pin-%d (%s) status %d\n", in pin_request()
207 static const char *pin_free(struct pinctrl_dev *pctldev, int pin, in pin_free() argument
210 const struct pinmux_ops *ops = pctldev->desc->pmxops; in pin_free()
214 desc = pin_desc_get(pctldev, pin); in pin_free()
216 dev_err(pctldev->dev, in pin_free()
237 ops->gpio_disable_free(pctldev, gpio_range, pin); in pin_free()
239 ops->free(pctldev, pin); in pin_free()
250 module_put(pctldev->owner); in pin_free()
262 int pinmux_request_gpio(struct pinctrl_dev *pctldev, in pinmux_request_gpio() argument
274 ret = pin_request(pctldev, pin, owner, range); in pinmux_request_gpio()
287 void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin, in pinmux_free_gpio() argument
292 owner = pin_free(pctldev, pin, range); in pinmux_free_gpio()
303 int pinmux_gpio_direction(struct pinctrl_dev *pctldev, in pinmux_gpio_direction() argument
310 ops = pctldev->desc->pmxops; in pinmux_gpio_direction()
313 ret = ops->gpio_set_direction(pctldev, range, pin, input); in pinmux_gpio_direction()
320 static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev, in pinmux_func_name_to_selector() argument
323 const struct pinmux_ops *ops = pctldev->desc->pmxops; in pinmux_func_name_to_selector()
324 unsigned nfuncs = ops->get_functions_count(pctldev); in pinmux_func_name_to_selector()
329 const char *fname = ops->get_function_name(pctldev, selector); in pinmux_func_name_to_selector()
343 struct pinctrl_dev *pctldev = setting->pctldev; in pinmux_map_to_setting() local
344 const struct pinmux_ops *pmxops = pctldev->desc->pmxops; in pinmux_map_to_setting()
351 dev_err(pctldev->dev, "does not support mux function\n"); in pinmux_map_to_setting()
355 ret = pinmux_func_name_to_selector(pctldev, map->data.mux.function); in pinmux_map_to_setting()
357 dev_err(pctldev->dev, "invalid function %s in map table\n", in pinmux_map_to_setting()
363 ret = pmxops->get_function_groups(pctldev, setting->data.mux.func, in pinmux_map_to_setting()
366 dev_err(pctldev->dev, "can't query groups for function %s\n", in pinmux_map_to_setting()
371 dev_err(pctldev->dev, in pinmux_map_to_setting()
380 dev_err(pctldev->dev, in pinmux_map_to_setting()
389 ret = pinctrl_get_group_selector(pctldev, group); in pinmux_map_to_setting()
391 dev_err(pctldev->dev, "invalid group %s in map table\n", in pinmux_map_to_setting()
407 struct pinctrl_dev *pctldev = setting->pctldev; in pinmux_enable_setting() local
408 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinmux_enable_setting()
409 const struct pinmux_ops *ops = pctldev->desc->pmxops; in pinmux_enable_setting()
417 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, in pinmux_enable_setting()
424 gname = pctlops->get_group_name(pctldev, in pinmux_enable_setting()
426 dev_warn(pctldev->dev, in pinmux_enable_setting()
434 ret = pin_request(pctldev, pins[i], setting->dev_name, NULL); in pinmux_enable_setting()
439 desc = pin_desc_get(pctldev, pins[i]); in pinmux_enable_setting()
441 gname = pctlops->get_group_name(pctldev, in pinmux_enable_setting()
443 dev_err(pctldev->dev, in pinmux_enable_setting()
447 pinctrl_dev_get_name(pctldev)); in pinmux_enable_setting()
454 desc = pin_desc_get(pctldev, pins[i]); in pinmux_enable_setting()
456 dev_warn(pctldev->dev, in pinmux_enable_setting()
464 ret = ops->set_mux(pctldev, setting->data.mux.func, in pinmux_enable_setting()
474 desc = pin_desc_get(pctldev, pins[i]); in pinmux_enable_setting()
481 pin_free(pctldev, pins[i], NULL); in pinmux_enable_setting()
488 struct pinctrl_dev *pctldev = setting->pctldev; in pinmux_disable_setting() local
489 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinmux_disable_setting()
497 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, in pinmux_disable_setting()
503 gname = pctlops->get_group_name(pctldev, in pinmux_disable_setting()
505 dev_warn(pctldev->dev, in pinmux_disable_setting()
513 desc = pin_desc_get(pctldev, pins[i]); in pinmux_disable_setting()
515 dev_warn(pctldev->dev, in pinmux_disable_setting()
521 pin_free(pctldev, pins[i], NULL); in pinmux_disable_setting()
525 gname = pctlops->get_group_name(pctldev, in pinmux_disable_setting()
527 dev_warn(pctldev->dev, in pinmux_disable_setting()
541 struct pinctrl_dev *pctldev = s->private; in pinmux_functions_show() local
542 const struct pinmux_ops *pmxops = pctldev->desc->pmxops; in pinmux_functions_show()
549 mutex_lock(&pctldev->mutex); in pinmux_functions_show()
550 nfuncs = pmxops->get_functions_count(pctldev); in pinmux_functions_show()
552 const char *func = pmxops->get_function_name(pctldev, in pinmux_functions_show()
559 ret = pmxops->get_function_groups(pctldev, func_selector, in pinmux_functions_show()
576 mutex_unlock(&pctldev->mutex); in pinmux_functions_show()
583 struct pinctrl_dev *pctldev = s->private; in pinmux_pins_show() local
584 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinmux_pins_show()
585 const struct pinmux_ops *pmxops = pctldev->desc->pmxops; in pinmux_pins_show()
599 mutex_lock(&pctldev->mutex); in pinmux_pins_show()
602 for (i = 0; i < pctldev->desc->npins; i++) { in pinmux_pins_show()
606 pin = pctldev->desc->pins[i].number; in pinmux_pins_show()
607 desc = pin_desc_get(pctldev, pin); in pinmux_pins_show()
613 !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev))) in pinmux_pins_show()
640 pmxops->get_function_name(pctldev, in pinmux_pins_show()
642 pctlops->get_group_name(pctldev, in pinmux_pins_show()
648 mutex_unlock(&pctldev->mutex); in pinmux_pins_show()
663 struct pinctrl_dev *pctldev = setting->pctldev; in pinmux_show_setting() local
664 const struct pinmux_ops *pmxops = pctldev->desc->pmxops; in pinmux_show_setting()
665 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinmux_show_setting()
668 pctlops->get_group_name(pctldev, setting->data.mux.group), in pinmux_show_setting()
670 pmxops->get_function_name(pctldev, setting->data.mux.func), in pinmux_show_setting()
682 struct pinctrl_dev *pctldev = sfile->private; in pinmux_select() local
683 const struct pinmux_ops *pmxops = pctldev->desc->pmxops; in pinmux_select()
724 ret = pinmux_func_name_to_selector(pctldev, fname); in pinmux_select()
726 dev_err(pctldev->dev, "invalid function %s in map table\n", fname); in pinmux_select()
731 ret = pmxops->get_function_groups(pctldev, fsel, &groups, &num_groups); in pinmux_select()
733 dev_err(pctldev->dev, "no groups for function %d (%s)", fsel, fname); in pinmux_select()
739 dev_err(pctldev->dev, "invalid group %s", gname); in pinmux_select()
743 ret = pinctrl_get_group_selector(pctldev, gname); in pinmux_select()
745 dev_err(pctldev->dev, "failed to get group selector for %s", gname); in pinmux_select()
750 ret = pmxops->set_mux(pctldev, fsel, gsel); in pinmux_select()
752 dev_err(pctldev->dev, "set_mux() failed: %d", ret); in pinmux_select()
777 struct pinctrl_dev *pctldev) in pinmux_init_device_debugfs() argument
780 devroot, pctldev, &pinmux_functions_fops); in pinmux_init_device_debugfs()
782 devroot, pctldev, &pinmux_pins_fops); in pinmux_init_device_debugfs()
784 devroot, pctldev, &pinmux_select_ops); in pinmux_init_device_debugfs()
795 int pinmux_generic_get_function_count(struct pinctrl_dev *pctldev) in pinmux_generic_get_function_count() argument
797 return pctldev->num_functions; in pinmux_generic_get_function_count()
807 pinmux_generic_get_function_name(struct pinctrl_dev *pctldev, in pinmux_generic_get_function_name() argument
812 function = radix_tree_lookup(&pctldev->pin_function_tree, in pinmux_generic_get_function_name()
828 int pinmux_generic_get_function_groups(struct pinctrl_dev *pctldev, in pinmux_generic_get_function_groups() argument
835 function = radix_tree_lookup(&pctldev->pin_function_tree, in pinmux_generic_get_function_groups()
838 dev_err(pctldev->dev, "%s could not find function%i\n", in pinmux_generic_get_function_groups()
854 struct function_desc *pinmux_generic_get_function(struct pinctrl_dev *pctldev, in pinmux_generic_get_function() argument
859 function = radix_tree_lookup(&pctldev->pin_function_tree, in pinmux_generic_get_function()
876 int pinmux_generic_add_function(struct pinctrl_dev *pctldev, in pinmux_generic_add_function() argument
888 selector = pinmux_func_name_to_selector(pctldev, name); in pinmux_generic_add_function()
892 selector = pctldev->num_functions; in pinmux_generic_add_function()
894 function = devm_kzalloc(pctldev->dev, sizeof(*function), GFP_KERNEL); in pinmux_generic_add_function()
903 radix_tree_insert(&pctldev->pin_function_tree, selector, function); in pinmux_generic_add_function()
905 pctldev->num_functions++; in pinmux_generic_add_function()
918 int pinmux_generic_remove_function(struct pinctrl_dev *pctldev, in pinmux_generic_remove_function() argument
923 function = radix_tree_lookup(&pctldev->pin_function_tree, in pinmux_generic_remove_function()
928 radix_tree_delete(&pctldev->pin_function_tree, selector); in pinmux_generic_remove_function()
929 devm_kfree(pctldev->dev, function); in pinmux_generic_remove_function()
931 pctldev->num_functions--; in pinmux_generic_remove_function()
945 void pinmux_generic_free_functions(struct pinctrl_dev *pctldev) in pinmux_generic_free_functions() argument
950 radix_tree_for_each_slot(slot, &pctldev->pin_function_tree, &iter, 0) in pinmux_generic_free_functions()
951 radix_tree_delete(&pctldev->pin_function_tree, iter.index); in pinmux_generic_free_functions()
953 pctldev->num_functions = 0; in pinmux_generic_free_functions()