Lines Matching refs:pctldev

35 int pinmux_check_ops(struct pinctrl_dev *pctldev)
37 const struct pinmux_ops *ops = pctldev->desc->pmxops;
47 dev_err(pctldev->dev, "pinmux ops lacks necessary functions\n");
51 nfuncs = ops->get_functions_count(pctldev);
53 const char *fname = ops->get_function_name(pctldev,
56 dev_err(pctldev->dev, "pinmux ops has no name for function%u\n",
81 * @pctldev: the associated pin controller device
87 bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, unsigned int pin)
89 struct pin_desc *desc = pin_desc_get(pctldev, pin);
90 const struct pinmux_ops *ops = pctldev->desc->pmxops;
104 * @pctldev: the associated pin controller device
111 static int pin_request(struct pinctrl_dev *pctldev,
116 const struct pinmux_ops *ops = pctldev->desc->pmxops;
119 desc = pin_desc_get(pctldev, pin);
121 dev_err(pctldev->dev,
127 dev_dbg(pctldev->dev, "request pin %d (%s) for %s\n",
132 dev_err(pctldev->dev,
139 dev_err(pctldev->dev,
156 if (!try_module_get(pctldev->owner)) {
157 dev_err(pctldev->dev,
170 status = ops->gpio_request_enable(pctldev, gpio_range, pin);
172 status = ops->request(pctldev, pin);
177 module_put(pctldev->owner);
191 dev_err_probe(pctldev->dev, status, "pin-%d (%s)\n",
199 * @pctldev: pin controller device handling this pin
208 static const char *pin_free(struct pinctrl_dev *pctldev, int pin,
211 const struct pinmux_ops *ops = pctldev->desc->pmxops;
215 desc = pin_desc_get(pctldev, pin);
217 dev_err(pctldev->dev,
238 ops->gpio_disable_free(pctldev, gpio_range, pin);
240 ops->free(pctldev, pin);
251 module_put(pctldev->owner);
258 * @pctldev: pin controller device affected
263 int pinmux_request_gpio(struct pinctrl_dev *pctldev,
275 ret = pin_request(pctldev, pin, owner, range);
284 * @pctldev: the pin controller device for the pin
288 void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned int pin,
293 owner = pin_free(pctldev, pin, range);
299 * @pctldev: the pin controller handling this pin
304 int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
311 ops = pctldev->desc->pmxops;
314 ret = ops->gpio_set_direction(pctldev, range, pin, input);
321 static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
324 const struct pinmux_ops *ops = pctldev->desc->pmxops;
325 unsigned int nfuncs = ops->get_functions_count(pctldev);
328 /* See if this pctldev has this function */
330 const char *fname = ops->get_function_name(pctldev, selector);
344 struct pinctrl_dev *pctldev = setting->pctldev;
345 const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
352 dev_err(pctldev->dev, "does not support mux function\n");
356 ret = pinmux_func_name_to_selector(pctldev, map->data.mux.function);
358 dev_err(pctldev->dev, "invalid function %s in map table\n",
364 ret = pmxops->get_function_groups(pctldev, setting->data.mux.func,
367 dev_err(pctldev->dev, "can't query groups for function %s\n",
372 dev_err(pctldev->dev,
381 dev_err(pctldev->dev,
390 ret = pinctrl_get_group_selector(pctldev, group);
392 dev_err(pctldev->dev, "invalid group %s in map table\n",
408 struct pinctrl_dev *pctldev = setting->pctldev;
409 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
410 const struct pinmux_ops *ops = pctldev->desc->pmxops;
418 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
425 gname = pctlops->get_group_name(pctldev,
427 dev_warn(pctldev->dev,
435 ret = pin_request(pctldev, pins[i], setting->dev_name, NULL);
440 desc = pin_desc_get(pctldev, pins[i]);
442 gname = pctlops->get_group_name(pctldev,
444 dev_err_probe(pctldev->dev, ret,
448 pinctrl_dev_get_name(pctldev));
455 desc = pin_desc_get(pctldev, pins[i]);
457 dev_warn(pctldev->dev,
465 ret = ops->set_mux(pctldev, setting->data.mux.func,
475 desc = pin_desc_get(pctldev, pins[i]);
482 pin_free(pctldev, pins[i], NULL);
489 struct pinctrl_dev *pctldev = setting->pctldev;
490 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
498 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
504 gname = pctlops->get_group_name(pctldev,
506 dev_warn(pctldev->dev,
514 desc = pin_desc_get(pctldev, pins[i]);
516 dev_warn(pctldev->dev,
522 pin_free(pctldev, pins[i], NULL);
526 gname = pctlops->get_group_name(pctldev,
528 dev_warn(pctldev->dev,
542 struct pinctrl_dev *pctldev = s->private;
543 const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
550 mutex_lock(&pctldev->mutex);
551 nfuncs = pmxops->get_functions_count(pctldev);
553 const char *func = pmxops->get_function_name(pctldev,
560 ret = pmxops->get_function_groups(pctldev, func_selector,
577 mutex_unlock(&pctldev->mutex);
584 struct pinctrl_dev *pctldev = s->private;
585 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
586 const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
600 mutex_lock(&pctldev->mutex);
603 for (i = 0; i < pctldev->desc->npins; i++) {
607 pin = pctldev->desc->pins[i].number;
608 desc = pin_desc_get(pctldev, pin);
614 !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev)))
641 pmxops->get_function_name(pctldev,
643 pctlops->get_group_name(pctldev,
649 mutex_unlock(&pctldev->mutex);
664 struct pinctrl_dev *pctldev = setting->pctldev;
665 const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
666 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
669 pctlops->get_group_name(pctldev, setting->data.mux.group),
671 pmxops->get_function_name(pctldev, setting->data.mux.func),
682 struct pinctrl_dev *pctldev = sfile->private;
683 const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
716 ret = pinmux_func_name_to_selector(pctldev, fname);
718 dev_err(pctldev->dev, "invalid function %s in map table\n", fname);
723 ret = pmxops->get_function_groups(pctldev, fsel, &groups, &num_groups);
725 dev_err(pctldev->dev, "no groups for function %d (%s)", fsel, fname);
731 dev_err(pctldev->dev, "invalid group %s", gname);
735 ret = pinctrl_get_group_selector(pctldev, gname);
740 ret = pmxops->set_mux(pctldev, fsel, gsel);
742 dev_err(pctldev->dev, "set_mux() failed: %d", ret);
767 struct pinctrl_dev *pctldev)
770 devroot, pctldev, &pinmux_functions_fops);
772 devroot, pctldev, &pinmux_pins_fops);
774 devroot, pctldev, &pinmux_select_ops);
783 * @pctldev: pin controller device
785 int pinmux_generic_get_function_count(struct pinctrl_dev *pctldev)
787 return pctldev->num_functions;
793 * @pctldev: pin controller device
797 pinmux_generic_get_function_name(struct pinctrl_dev *pctldev,
802 function = radix_tree_lookup(&pctldev->pin_function_tree,
813 * @pctldev: pin controller device
818 int pinmux_generic_get_function_groups(struct pinctrl_dev *pctldev,
825 function = radix_tree_lookup(&pctldev->pin_function_tree,
828 dev_err(pctldev->dev, "%s could not find function%i\n",
841 * @pctldev: pin controller device
844 struct function_desc *pinmux_generic_get_function(struct pinctrl_dev *pctldev,
849 function = radix_tree_lookup(&pctldev->pin_function_tree,
860 * @pctldev: pin controller device
866 int pinmux_generic_add_function(struct pinctrl_dev *pctldev,
878 selector = pinmux_func_name_to_selector(pctldev, name);
882 selector = pctldev->num_functions;
884 function = devm_kzalloc(pctldev->dev, sizeof(*function), GFP_KERNEL);
893 error = radix_tree_insert(&pctldev->pin_function_tree, selector, function);
897 pctldev->num_functions++;
905 * @pctldev: pin controller device
910 int pinmux_generic_remove_function(struct pinctrl_dev *pctldev,
915 function = radix_tree_lookup(&pctldev->pin_function_tree,
920 radix_tree_delete(&pctldev->pin_function_tree, selector);
921 devm_kfree(pctldev->dev, function);
923 pctldev->num_functions--;
931 * @pctldev: pin controller device
937 void pinmux_generic_free_functions(struct pinctrl_dev *pctldev)
942 radix_tree_for_each_slot(slot, &pctldev->pin_function_tree, &iter, 0)
943 radix_tree_delete(&pctldev->pin_function_tree, iter.index);
945 pctldev->num_functions = 0;