• Home
  • Raw
  • Download

Lines Matching +full:pin +full:- +full:settings

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Core driver for the pin config portions of the pin control subsystem
5 * Copyright (C) 2011 ST-Ericsson SA
6 * Written on behalf of Linaro for ST-Ericsson
27 const struct pinconf_ops *ops = pctldev->desc->confops; in pinconf_check_ops()
30 if (!ops->pin_config_set && !ops->pin_config_group_set) { in pinconf_check_ops()
31 dev_err(pctldev->dev, in pinconf_check_ops()
33 return -EINVAL; in pinconf_check_ops()
40 if (!map->data.configs.group_or_pin) { in pinconf_validate_map()
41 pr_err("failed to register map %s (%d): no group/pin given\n", in pinconf_validate_map()
42 map->name, i); in pinconf_validate_map()
43 return -EINVAL; in pinconf_validate_map()
46 if (!map->data.configs.num_configs || in pinconf_validate_map()
47 !map->data.configs.configs) { in pinconf_validate_map()
49 map->name, i); in pinconf_validate_map()
50 return -EINVAL; in pinconf_validate_map()
56 int pin_config_get_for_pin(struct pinctrl_dev *pctldev, unsigned pin, in pin_config_get_for_pin() argument
59 const struct pinconf_ops *ops = pctldev->desc->confops; in pin_config_get_for_pin()
61 if (!ops || !ops->pin_config_get) { in pin_config_get_for_pin()
62 dev_dbg(pctldev->dev, in pin_config_get_for_pin()
63 "cannot get pin configuration, .pin_config_get missing in driver\n"); in pin_config_get_for_pin()
64 return -ENOTSUPP; in pin_config_get_for_pin()
67 return ops->pin_config_get(pctldev, pin, config); in pin_config_get_for_pin()
79 ret = -EINVAL; in pin_config_group_get()
83 mutex_lock(&pctldev->mutex); in pin_config_group_get()
85 ops = pctldev->desc->confops; in pin_config_group_get()
87 if (!ops || !ops->pin_config_group_get) { in pin_config_group_get()
88 dev_dbg(pctldev->dev, in pin_config_group_get()
89 "cannot get configuration for pin group, missing group config get function in driver\n"); in pin_config_group_get()
90 ret = -ENOTSUPP; in pin_config_group_get()
100 ret = ops->pin_config_group_get(pctldev, selector, config); in pin_config_group_get()
103 mutex_unlock(&pctldev->mutex); in pin_config_group_get()
110 struct pinctrl_dev *pctldev = setting->pctldev; in pinconf_map_to_setting()
111 int pin; in pinconf_map_to_setting() local
113 switch (setting->type) { in pinconf_map_to_setting()
115 pin = pin_get_from_name(pctldev, in pinconf_map_to_setting()
116 map->data.configs.group_or_pin); in pinconf_map_to_setting()
117 if (pin < 0) { in pinconf_map_to_setting()
118 dev_err(pctldev->dev, "could not map pin config for \"%s\"", in pinconf_map_to_setting()
119 map->data.configs.group_or_pin); in pinconf_map_to_setting()
120 return pin; in pinconf_map_to_setting()
122 setting->data.configs.group_or_pin = pin; in pinconf_map_to_setting()
125 pin = pinctrl_get_group_selector(pctldev, in pinconf_map_to_setting()
126 map->data.configs.group_or_pin); in pinconf_map_to_setting()
127 if (pin < 0) { in pinconf_map_to_setting()
128 dev_err(pctldev->dev, "could not map group config for \"%s\"", in pinconf_map_to_setting()
129 map->data.configs.group_or_pin); in pinconf_map_to_setting()
130 return pin; in pinconf_map_to_setting()
132 setting->data.configs.group_or_pin = pin; in pinconf_map_to_setting()
135 return -EINVAL; in pinconf_map_to_setting()
138 setting->data.configs.num_configs = map->data.configs.num_configs; in pinconf_map_to_setting()
139 setting->data.configs.configs = map->data.configs.configs; in pinconf_map_to_setting()
150 struct pinctrl_dev *pctldev = setting->pctldev; in pinconf_apply_setting()
151 const struct pinconf_ops *ops = pctldev->desc->confops; in pinconf_apply_setting()
155 dev_err(pctldev->dev, "missing confops\n"); in pinconf_apply_setting()
156 return -EINVAL; in pinconf_apply_setting()
159 switch (setting->type) { in pinconf_apply_setting()
161 if (!ops->pin_config_set) { in pinconf_apply_setting()
162 dev_err(pctldev->dev, "missing pin_config_set op\n"); in pinconf_apply_setting()
163 return -EINVAL; in pinconf_apply_setting()
165 ret = ops->pin_config_set(pctldev, in pinconf_apply_setting()
166 setting->data.configs.group_or_pin, in pinconf_apply_setting()
167 setting->data.configs.configs, in pinconf_apply_setting()
168 setting->data.configs.num_configs); in pinconf_apply_setting()
170 dev_err(pctldev->dev, in pinconf_apply_setting()
171 "pin_config_set op failed for pin %d\n", in pinconf_apply_setting()
172 setting->data.configs.group_or_pin); in pinconf_apply_setting()
177 if (!ops->pin_config_group_set) { in pinconf_apply_setting()
178 dev_err(pctldev->dev, in pinconf_apply_setting()
180 return -EINVAL; in pinconf_apply_setting()
182 ret = ops->pin_config_group_set(pctldev, in pinconf_apply_setting()
183 setting->data.configs.group_or_pin, in pinconf_apply_setting()
184 setting->data.configs.configs, in pinconf_apply_setting()
185 setting->data.configs.num_configs); in pinconf_apply_setting()
187 dev_err(pctldev->dev, in pinconf_apply_setting()
189 setting->data.configs.group_or_pin); in pinconf_apply_setting()
194 return -EINVAL; in pinconf_apply_setting()
200 int pinconf_set_config(struct pinctrl_dev *pctldev, unsigned pin, in pinconf_set_config() argument
205 ops = pctldev->desc->confops; in pinconf_set_config()
206 if (!ops || !ops->pin_config_set) in pinconf_set_config()
207 return -ENOTSUPP; in pinconf_set_config()
209 return ops->pin_config_set(pctldev, pin, configs, nconfigs); in pinconf_set_config()
221 confops = pctldev->desc->confops; in pinconf_show_config()
227 if (confops && confops->pin_config_config_dbg_show) in pinconf_show_config()
228 confops->pin_config_config_dbg_show(pctldev, s, in pinconf_show_config()
240 pctldev = get_pinctrl_dev_from_devname(map->ctrl_dev_name); in pinconf_show_map()
242 switch (map->type) { in pinconf_show_map()
244 seq_puts(s, "pin "); in pinconf_show_map()
253 seq_printf(s, "%s\n", map->data.configs.group_or_pin); in pinconf_show_map()
255 pinconf_show_config(s, pctldev, map->data.configs.configs, in pinconf_show_map()
256 map->data.configs.num_configs); in pinconf_show_map()
262 struct pinctrl_dev *pctldev = setting->pctldev; in pinconf_show_setting()
263 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinconf_show_setting()
266 switch (setting->type) { in pinconf_show_setting()
268 desc = pin_desc_get(setting->pctldev, in pinconf_show_setting()
269 setting->data.configs.group_or_pin); in pinconf_show_setting()
270 seq_printf(s, "pin %s (%d)", desc->name, in pinconf_show_setting()
271 setting->data.configs.group_or_pin); in pinconf_show_setting()
275 pctlops->get_group_name(pctldev, in pinconf_show_setting()
276 setting->data.configs.group_or_pin), in pinconf_show_setting()
277 setting->data.configs.group_or_pin); in pinconf_show_setting()
284 * FIXME: We should really get the pin controller to dump the config in pinconf_show_setting()
287 pinconf_show_config(s, pctldev, setting->data.configs.configs, in pinconf_show_setting()
288 setting->data.configs.num_configs); in pinconf_show_setting()
292 struct seq_file *s, int pin) in pinconf_dump_pin() argument
294 const struct pinconf_ops *ops = pctldev->desc->confops; in pinconf_dump_pin()
296 /* no-op when not using generic pin config */ in pinconf_dump_pin()
297 pinconf_generic_dump_pins(pctldev, s, NULL, pin); in pinconf_dump_pin()
298 if (ops && ops->pin_config_dbg_show) in pinconf_dump_pin()
299 ops->pin_config_dbg_show(pctldev, s, pin); in pinconf_dump_pin()
304 struct pinctrl_dev *pctldev = s->private; in pinconf_pins_show()
305 unsigned i, pin; in pinconf_pins_show() local
307 seq_puts(s, "Pin config settings per pin\n"); in pinconf_pins_show()
308 seq_puts(s, "Format: pin (name): configs\n"); in pinconf_pins_show()
310 mutex_lock(&pctldev->mutex); in pinconf_pins_show()
312 /* The pin number can be retrived from the pin controller descriptor */ in pinconf_pins_show()
313 for (i = 0; i < pctldev->desc->npins; i++) { in pinconf_pins_show()
316 pin = pctldev->desc->pins[i].number; in pinconf_pins_show()
317 desc = pin_desc_get(pctldev, pin); in pinconf_pins_show()
318 /* Skip if we cannot search the pin */ in pinconf_pins_show()
322 seq_printf(s, "pin %d (%s): ", pin, desc->name); in pinconf_pins_show()
324 pinconf_dump_pin(pctldev, s, pin); in pinconf_pins_show()
328 mutex_unlock(&pctldev->mutex); in pinconf_pins_show()
337 const struct pinconf_ops *ops = pctldev->desc->confops; in pinconf_dump_group()
339 /* no-op when not using generic pin config */ in pinconf_dump_group()
341 if (ops && ops->pin_config_group_dbg_show) in pinconf_dump_group()
342 ops->pin_config_group_dbg_show(pctldev, s, selector); in pinconf_dump_group()
347 struct pinctrl_dev *pctldev = s->private; in pinconf_groups_show()
348 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; in pinconf_groups_show()
349 unsigned ngroups = pctlops->get_groups_count(pctldev); in pinconf_groups_show()
352 seq_puts(s, "Pin config settings per pin group\n"); in pinconf_groups_show()
356 const char *gname = pctlops->get_group_name(pctldev, selector); in pinconf_groups_show()
373 debugfs_create_file("pinconf-pins", S_IFREG | S_IRUGO, in pinconf_init_device_debugfs()
375 debugfs_create_file("pinconf-groups", S_IFREG | S_IRUGO, in pinconf_init_device_debugfs()