Lines Matching +full:int +full:- +full:map +full:- +full:mask
1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright 2017-2022,2024 NXP
7 * Copyright 2015-2016 Freescale Semiconductor, Inc.
28 #include "../pinctrl-utils.h"
29 #include "pinctrl-s32.h"
64 struct regmap *map; member
76 unsigned int pin_id;
77 unsigned int config;
85 unsigned int *pads;
110 s32_get_region(struct pinctrl_dev *pctldev, unsigned int pin) in s32_get_region()
114 unsigned int mem_regions = ipctl->info->soc_data->mem_regions; in s32_get_region()
115 unsigned int i; in s32_get_region()
118 pin_range = ipctl->regions[i].pin_range; in s32_get_region()
119 if (pin >= pin_range->start && pin <= pin_range->end) in s32_get_region()
120 return &ipctl->regions[i]; in s32_get_region()
126 static inline int s32_check_pin(struct pinctrl_dev *pctldev, in s32_check_pin()
127 unsigned int pin) in s32_check_pin()
129 return s32_get_region(pctldev, pin) ? 0 : -EINVAL; in s32_check_pin()
132 static inline int s32_regmap_read(struct pinctrl_dev *pctldev, in s32_regmap_read()
133 unsigned int pin, unsigned int *val) in s32_regmap_read()
136 unsigned int offset; in s32_regmap_read()
140 return -EINVAL; in s32_regmap_read()
142 offset = (pin - region->pin_range->start) * in s32_regmap_read()
143 regmap_get_reg_stride(region->map); in s32_regmap_read()
145 return regmap_read(region->map, offset, val); in s32_regmap_read()
148 static inline int s32_regmap_write(struct pinctrl_dev *pctldev, in s32_regmap_write()
149 unsigned int pin, in s32_regmap_write()
150 unsigned int val) in s32_regmap_write()
153 unsigned int offset; in s32_regmap_write()
157 return -EINVAL; in s32_regmap_write()
159 offset = (pin - region->pin_range->start) * in s32_regmap_write()
160 regmap_get_reg_stride(region->map); in s32_regmap_write()
162 return regmap_write(region->map, offset, val); in s32_regmap_write()
166 static inline int s32_regmap_update(struct pinctrl_dev *pctldev, unsigned int pin, in s32_regmap_update()
167 unsigned int mask, unsigned int val) in s32_regmap_update() argument
170 unsigned int offset; in s32_regmap_update()
174 return -EINVAL; in s32_regmap_update()
176 offset = (pin - region->pin_range->start) * in s32_regmap_update()
177 regmap_get_reg_stride(region->map); in s32_regmap_update()
179 return regmap_update_bits(region->map, offset, mask, val); in s32_regmap_update()
182 static int s32_get_groups_count(struct pinctrl_dev *pctldev) in s32_get_groups_count()
185 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_get_groups_count()
187 return info->ngroups; in s32_get_groups_count()
191 unsigned int selector) in s32_get_group_name()
194 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_get_group_name()
196 return info->groups[selector].data.name; in s32_get_group_name()
199 static int s32_get_group_pins(struct pinctrl_dev *pctldev, in s32_get_group_pins()
200 unsigned int selector, const unsigned int **pins, in s32_get_group_pins()
201 unsigned int *npins) in s32_get_group_pins()
204 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_get_group_pins()
206 *pins = info->groups[selector].data.pins; in s32_get_group_pins()
207 *npins = info->groups[selector].data.npins; in s32_get_group_pins()
213 unsigned int offset) in s32_pin_dbg_show()
215 seq_printf(s, "%s", dev_name(pctldev->dev)); in s32_pin_dbg_show()
218 static int s32_dt_group_node_to_map(struct pinctrl_dev *pctldev, in s32_dt_group_node_to_map()
220 struct pinctrl_map **map, in s32_dt_group_node_to_map() argument
221 unsigned int *reserved_maps, in s32_dt_group_node_to_map()
222 unsigned int *num_maps, in s32_dt_group_node_to_map()
226 struct device *dev = ipctl->dev; in s32_dt_group_node_to_map()
228 unsigned int n_cfgs, reserve = 1; in s32_dt_group_node_to_map()
229 int n_pins, ret; in s32_dt_group_node_to_map()
235 return -EINVAL; in s32_dt_group_node_to_map()
247 ret = pinctrl_utils_reserve_map(pctldev, map, reserved_maps, num_maps, in s32_dt_group_node_to_map()
252 ret = pinctrl_utils_add_map_mux(pctldev, map, reserved_maps, num_maps, in s32_dt_group_node_to_map()
253 np->name, func_name); in s32_dt_group_node_to_map()
258 ret = pinctrl_utils_add_map_configs(pctldev, map, reserved_maps, in s32_dt_group_node_to_map()
259 num_maps, np->name, cfgs, n_cfgs, in s32_dt_group_node_to_map()
270 static int s32_dt_node_to_map(struct pinctrl_dev *pctldev, in s32_dt_node_to_map()
272 struct pinctrl_map **map, in s32_dt_node_to_map() argument
273 unsigned int *num_maps) in s32_dt_node_to_map()
275 unsigned int reserved_maps; in s32_dt_node_to_map()
276 int ret; in s32_dt_node_to_map()
279 *map = NULL; in s32_dt_node_to_map()
283 ret = s32_dt_group_node_to_map(pctldev, np, map, in s32_dt_node_to_map()
285 np_config->name); in s32_dt_node_to_map()
287 pinctrl_utils_free_map(pctldev, *map, *num_maps); in s32_dt_node_to_map()
304 static int s32_pmx_set(struct pinctrl_dev *pctldev, unsigned int selector, in s32_pmx_set()
305 unsigned int group) in s32_pmx_set()
308 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_pmx_set()
309 int i, ret; in s32_pmx_set()
316 grp = &info->groups[group]; in s32_pmx_set()
318 dev_dbg(ipctl->dev, "set mux for function %s group %s\n", in s32_pmx_set()
319 info->functions[selector].name, grp->data.name); in s32_pmx_set()
322 for (i = 0; i < grp->data.npins; i++) { in s32_pmx_set()
323 if (s32_check_pin(pctldev, grp->data.pins[i]) != 0) { in s32_pmx_set()
324 dev_err(info->dev, "invalid pin: %u in group: %u\n", in s32_pmx_set()
325 grp->data.pins[i], group); in s32_pmx_set()
326 return -EINVAL; in s32_pmx_set()
330 for (i = 0, ret = 0; i < grp->data.npins && !ret; i++) { in s32_pmx_set()
331 ret = s32_regmap_update(pctldev, grp->data.pins[i], in s32_pmx_set()
332 S32_MSCR_SSS_MASK, grp->pin_sss[i]); in s32_pmx_set()
334 dev_err(info->dev, "Failed to set pin %u\n", in s32_pmx_set()
335 grp->data.pins[i]); in s32_pmx_set()
343 static int s32_pmx_get_funcs_count(struct pinctrl_dev *pctldev) in s32_pmx_get_funcs_count()
346 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_pmx_get_funcs_count()
348 return info->nfunctions; in s32_pmx_get_funcs_count()
352 unsigned int selector) in s32_pmx_get_func_name()
355 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_pmx_get_func_name()
357 return info->functions[selector].name; in s32_pmx_get_func_name()
360 static int s32_pmx_get_groups(struct pinctrl_dev *pctldev, in s32_pmx_get_groups()
361 unsigned int selector, in s32_pmx_get_groups()
363 unsigned int * const num_groups) in s32_pmx_get_groups()
366 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_pmx_get_groups()
368 *groups = info->functions[selector].groups; in s32_pmx_get_groups()
369 *num_groups = info->functions[selector].ngroups; in s32_pmx_get_groups()
374 static int s32_pmx_gpio_request_enable(struct pinctrl_dev *pctldev, in s32_pmx_gpio_request_enable()
376 unsigned int offset) in s32_pmx_gpio_request_enable()
380 unsigned int config; in s32_pmx_gpio_request_enable()
382 int ret; in s32_pmx_gpio_request_enable()
391 return -ENOMEM; in s32_pmx_gpio_request_enable()
393 gpio_pin->pin_id = offset; in s32_pmx_gpio_request_enable()
394 gpio_pin->config = config; in s32_pmx_gpio_request_enable()
396 spin_lock_irqsave(&ipctl->gpio_configs_lock, flags); in s32_pmx_gpio_request_enable()
397 list_add(&gpio_pin->list, &ipctl->gpio_configs); in s32_pmx_gpio_request_enable()
398 spin_unlock_irqrestore(&ipctl->gpio_configs_lock, flags); in s32_pmx_gpio_request_enable()
408 unsigned int offset) in s32_pmx_gpio_disable_free()
413 int ret; in s32_pmx_gpio_disable_free()
415 spin_lock_irqsave(&ipctl->gpio_configs_lock, flags); in s32_pmx_gpio_disable_free()
417 list_for_each_entry_safe(gpio_pin, tmp, &ipctl->gpio_configs, list) { in s32_pmx_gpio_disable_free()
418 if (gpio_pin->pin_id == offset) { in s32_pmx_gpio_disable_free()
419 ret = s32_regmap_write(pctldev, gpio_pin->pin_id, in s32_pmx_gpio_disable_free()
420 gpio_pin->config); in s32_pmx_gpio_disable_free()
424 list_del(&gpio_pin->list); in s32_pmx_gpio_disable_free()
431 spin_unlock_irqrestore(&ipctl->gpio_configs_lock, flags); in s32_pmx_gpio_disable_free()
434 static int s32_pmx_gpio_set_direction(struct pinctrl_dev *pctldev, in s32_pmx_gpio_set_direction()
436 unsigned int offset, in s32_pmx_gpio_set_direction()
442 unsigned int config = S32_MSCR_IBE; in s32_pmx_gpio_set_direction()
443 unsigned int mask = S32_MSCR_IBE | S32_MSCR_OBE; in s32_pmx_gpio_set_direction() local
449 return s32_regmap_update(pctldev, offset, mask, config); in s32_pmx_gpio_set_direction()
462 /* Set the reserved elements as -1 */
463 static const int support_slew[] = {208, -1, -1, -1, 166, 150, 133, 83};
465 static int s32_get_slew_regval(int arg) in s32_get_slew_regval()
467 unsigned int i; in s32_get_slew_regval()
475 return -EINVAL; in s32_get_slew_regval()
479 unsigned int *mask, unsigned int *config) in s32_pin_set_pull() argument
497 *mask |= S32_MSCR_PUS | S32_MSCR_PUE; in s32_pin_set_pull()
500 static int s32_parse_pincfg(unsigned long pincfg, unsigned int *mask, in s32_parse_pincfg() argument
501 unsigned int *config) in s32_parse_pincfg()
505 int ret; in s32_parse_pincfg()
516 *mask |= S32_MSCR_ODE; in s32_parse_pincfg()
520 *mask |= S32_MSCR_ODE; in s32_parse_pincfg()
527 *mask |= S32_MSCR_OBE; in s32_parse_pincfg()
534 *mask |= S32_MSCR_IBE; in s32_parse_pincfg()
541 *mask |= S32_MSCR_SRE(~0); in s32_parse_pincfg()
546 s32_pin_set_pull(param, mask, config); in s32_parse_pincfg()
550 *mask |= S32_MSCR_ODE | S32_MSCR_OBE | S32_MSCR_IBE; in s32_parse_pincfg()
551 s32_pin_set_pull(param, mask, config); in s32_parse_pincfg()
554 return -EOPNOTSUPP; in s32_parse_pincfg()
560 static int s32_pinconf_mscr_write(struct pinctrl_dev *pctldev, in s32_pinconf_mscr_write()
561 unsigned int pin_id, in s32_pinconf_mscr_write()
563 unsigned int num_configs, in s32_pinconf_mscr_write()
567 unsigned int config = 0, mask = 0; in s32_pinconf_mscr_write() local
568 int i, ret; in s32_pinconf_mscr_write()
574 dev_dbg(ipctl->dev, "pinconf set pin %s with %u configs\n", in s32_pinconf_mscr_write()
578 ret = s32_parse_pincfg(configs[i], &mask, &config); in s32_pinconf_mscr_write()
587 mask = (unsigned int)~S32_MSCR_SSS_MASK; in s32_pinconf_mscr_write()
589 if (!config && !mask) in s32_pinconf_mscr_write()
593 dev_dbg(ipctl->dev, "set: pin %u cfg 0x%x\n", pin_id, config); in s32_pinconf_mscr_write()
595 dev_dbg(ipctl->dev, "update: pin %u cfg 0x%x\n", pin_id, in s32_pinconf_mscr_write()
598 return s32_regmap_update(pctldev, pin_id, mask, config); in s32_pinconf_mscr_write()
601 static int s32_pinconf_get(struct pinctrl_dev *pctldev, in s32_pinconf_get()
602 unsigned int pin_id, in s32_pinconf_get()
605 return s32_regmap_read(pctldev, pin_id, (unsigned int *)config); in s32_pinconf_get()
608 static int s32_pinconf_set(struct pinctrl_dev *pctldev, in s32_pinconf_set()
609 unsigned int pin_id, unsigned long *configs, in s32_pinconf_set()
610 unsigned int num_configs) in s32_pinconf_set()
616 static int s32_pconf_group_set(struct pinctrl_dev *pctldev, unsigned int selector, in s32_pconf_group_set()
617 unsigned long *configs, unsigned int num_configs) in s32_pconf_group_set()
620 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_pconf_group_set()
622 int i, ret; in s32_pconf_group_set()
624 grp = &info->groups[selector]; in s32_pconf_group_set()
625 for (i = 0; i < grp->data.npins; i++) { in s32_pconf_group_set()
626 ret = s32_pinconf_mscr_write(pctldev, grp->data.pins[i], in s32_pconf_group_set()
636 struct seq_file *s, unsigned int pin_id) in s32_pinconf_dbg_show()
638 unsigned int config; in s32_pinconf_dbg_show()
639 int ret; in s32_pinconf_dbg_show()
649 struct seq_file *s, unsigned int selector) in s32_pinconf_group_dbg_show()
652 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_pinconf_group_dbg_show()
654 unsigned int config; in s32_pinconf_group_dbg_show()
656 int i, ret; in s32_pinconf_group_dbg_show()
659 grp = &info->groups[selector]; in s32_pinconf_group_dbg_show()
660 for (i = 0; i < grp->data.npins; i++) { in s32_pinconf_group_dbg_show()
661 name = pin_get_name(pctldev, grp->data.pins[i]); in s32_pinconf_group_dbg_show()
662 ret = s32_regmap_read(pctldev, grp->data.pins[i], &config); in s32_pinconf_group_dbg_show()
679 unsigned int pin) in s32_pinctrl_should_save()
681 const struct pin_desc *pd = pin_desc_get(ipctl->pctl, pin); in s32_pinctrl_should_save()
690 if (pd->mux_owner || pd->gpio_owner) in s32_pinctrl_should_save()
696 int s32_pinctrl_suspend(struct device *dev) in s32_pinctrl_suspend()
701 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_pinctrl_suspend()
702 struct s32_pinctrl_context *saved_context = &ipctl->saved_context; in s32_pinctrl_suspend()
703 int i; in s32_pinctrl_suspend()
704 int ret; in s32_pinctrl_suspend()
705 unsigned int config; in s32_pinctrl_suspend()
707 for (i = 0; i < info->soc_data->npins; i++) { in s32_pinctrl_suspend()
708 pin = &info->soc_data->pins[i]; in s32_pinctrl_suspend()
710 if (!s32_pinctrl_should_save(ipctl, pin->number)) in s32_pinctrl_suspend()
713 ret = s32_regmap_read(ipctl->pctl, pin->number, &config); in s32_pinctrl_suspend()
715 return -EINVAL; in s32_pinctrl_suspend()
717 saved_context->pads[i] = config; in s32_pinctrl_suspend()
723 int s32_pinctrl_resume(struct device *dev) in s32_pinctrl_resume()
727 const struct s32_pinctrl_soc_info *info = ipctl->info; in s32_pinctrl_resume()
729 struct s32_pinctrl_context *saved_context = &ipctl->saved_context; in s32_pinctrl_resume()
730 int ret, i; in s32_pinctrl_resume()
732 for (i = 0; i < info->soc_data->npins; i++) { in s32_pinctrl_resume()
733 pin = &info->soc_data->pins[i]; in s32_pinctrl_resume()
735 if (!s32_pinctrl_should_save(ipctl, pin->number)) in s32_pinctrl_resume()
738 ret = s32_regmap_write(ipctl->pctl, pin->number, in s32_pinctrl_resume()
739 saved_context->pads[i]); in s32_pinctrl_resume()
748 static int s32_pinctrl_parse_groups(struct device_node *np, in s32_pinctrl_parse_groups()
753 unsigned int *pins, *sss; in s32_pinctrl_parse_groups()
754 int i, npins; in s32_pinctrl_parse_groups()
757 dev = info->dev; in s32_pinctrl_parse_groups()
762 grp->data.name = np->name; in s32_pinctrl_parse_groups()
767 grp->data.name); in s32_pinctrl_parse_groups()
768 return -EINVAL; in s32_pinctrl_parse_groups()
771 dev_err(dev, "The group %s has no pins.\n", grp->data.name); in s32_pinctrl_parse_groups()
772 return -EINVAL; in s32_pinctrl_parse_groups()
775 grp->data.npins = npins; in s32_pinctrl_parse_groups()
777 pins = devm_kcalloc(info->dev, npins, sizeof(*pins), GFP_KERNEL); in s32_pinctrl_parse_groups()
778 sss = devm_kcalloc(info->dev, npins, sizeof(*sss), GFP_KERNEL); in s32_pinctrl_parse_groups()
780 return -ENOMEM; in s32_pinctrl_parse_groups()
787 dev_dbg(info->dev, "pin: 0x%x, sss: 0x%x", pins[i], sss[i]); in s32_pinctrl_parse_groups()
791 grp->data.pins = pins; in s32_pinctrl_parse_groups()
792 grp->pin_sss = sss; in s32_pinctrl_parse_groups()
797 static int s32_pinctrl_parse_functions(struct device_node *np, in s32_pinctrl_parse_functions()
805 int ret = 0; in s32_pinctrl_parse_functions()
807 dev_dbg(info->dev, "parse function(%u): %pOFn\n", index, np); in s32_pinctrl_parse_functions()
809 func = &info->functions[index]; in s32_pinctrl_parse_functions()
812 func->name = np->name; in s32_pinctrl_parse_functions()
813 func->ngroups = of_get_child_count(np); in s32_pinctrl_parse_functions()
814 if (func->ngroups == 0) { in s32_pinctrl_parse_functions()
815 dev_err(info->dev, "no groups defined in %pOF\n", np); in s32_pinctrl_parse_functions()
816 return -EINVAL; in s32_pinctrl_parse_functions()
819 groups = devm_kcalloc(info->dev, func->ngroups, in s32_pinctrl_parse_functions()
820 sizeof(*func->groups), GFP_KERNEL); in s32_pinctrl_parse_functions()
822 return -ENOMEM; in s32_pinctrl_parse_functions()
825 groups[i] = child->name; in s32_pinctrl_parse_functions()
826 grp = &info->groups[info->grp_index++]; in s32_pinctrl_parse_functions()
833 func->groups = groups; in s32_pinctrl_parse_functions()
838 static int s32_pinctrl_probe_dt(struct platform_device *pdev, in s32_pinctrl_probe_dt()
841 struct s32_pinctrl_soc_info *info = ipctl->info; in s32_pinctrl_probe_dt()
842 struct device_node *np = pdev->dev.of_node; in s32_pinctrl_probe_dt()
844 struct regmap *map; in s32_pinctrl_probe_dt() local
846 unsigned int mem_regions = info->soc_data->mem_regions; in s32_pinctrl_probe_dt()
847 int ret; in s32_pinctrl_probe_dt()
852 return -ENODEV; in s32_pinctrl_probe_dt()
855 dev_err(&pdev->dev, "mem_regions is invalid: %u\n", mem_regions); in s32_pinctrl_probe_dt()
856 return -EINVAL; in s32_pinctrl_probe_dt()
859 ipctl->regions = devm_kcalloc(&pdev->dev, mem_regions, in s32_pinctrl_probe_dt()
860 sizeof(*ipctl->regions), GFP_KERNEL); in s32_pinctrl_probe_dt()
861 if (!ipctl->regions) in s32_pinctrl_probe_dt()
862 return -ENOMEM; in s32_pinctrl_probe_dt()
869 snprintf(ipctl->regions[i].name, in s32_pinctrl_probe_dt()
870 sizeof(ipctl->regions[i].name), "map%u", i); in s32_pinctrl_probe_dt()
872 s32_regmap_config.name = ipctl->regions[i].name; in s32_pinctrl_probe_dt()
873 s32_regmap_config.max_register = resource_size(res) - in s32_pinctrl_probe_dt()
876 map = devm_regmap_init_mmio(&pdev->dev, base, in s32_pinctrl_probe_dt()
878 if (IS_ERR(map)) { in s32_pinctrl_probe_dt()
879 dev_err(&pdev->dev, "Failed to init regmap[%u]\n", i); in s32_pinctrl_probe_dt()
880 return PTR_ERR(map); in s32_pinctrl_probe_dt()
883 ipctl->regions[i].map = map; in s32_pinctrl_probe_dt()
884 ipctl->regions[i].pin_range = &info->soc_data->mem_pin_ranges[i]; in s32_pinctrl_probe_dt()
889 dev_err(&pdev->dev, "no functions defined\n"); in s32_pinctrl_probe_dt()
890 return -EINVAL; in s32_pinctrl_probe_dt()
893 info->nfunctions = nfuncs; in s32_pinctrl_probe_dt()
894 info->functions = devm_kcalloc(&pdev->dev, nfuncs, in s32_pinctrl_probe_dt()
895 sizeof(*info->functions), GFP_KERNEL); in s32_pinctrl_probe_dt()
896 if (!info->functions) in s32_pinctrl_probe_dt()
897 return -ENOMEM; in s32_pinctrl_probe_dt()
899 info->ngroups = 0; in s32_pinctrl_probe_dt()
901 info->ngroups += of_get_child_count(child); in s32_pinctrl_probe_dt()
903 info->groups = devm_kcalloc(&pdev->dev, info->ngroups, in s32_pinctrl_probe_dt()
904 sizeof(*info->groups), GFP_KERNEL); in s32_pinctrl_probe_dt()
905 if (!info->groups) in s32_pinctrl_probe_dt()
906 return -ENOMEM; in s32_pinctrl_probe_dt()
918 int s32_pinctrl_probe(struct platform_device *pdev, in s32_pinctrl_probe()
922 int ret; in s32_pinctrl_probe()
929 if (!soc_data || !soc_data->pins || !soc_data->npins) { in s32_pinctrl_probe()
930 dev_err(&pdev->dev, "wrong pinctrl info\n"); in s32_pinctrl_probe()
931 return -EINVAL; in s32_pinctrl_probe()
934 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); in s32_pinctrl_probe()
936 return -ENOMEM; in s32_pinctrl_probe()
938 info->soc_data = soc_data; in s32_pinctrl_probe()
939 info->dev = &pdev->dev; in s32_pinctrl_probe()
942 ipctl = devm_kzalloc(&pdev->dev, sizeof(*ipctl), GFP_KERNEL); in s32_pinctrl_probe()
944 return -ENOMEM; in s32_pinctrl_probe()
946 ipctl->info = info; in s32_pinctrl_probe()
947 ipctl->dev = info->dev; in s32_pinctrl_probe()
950 INIT_LIST_HEAD(&ipctl->gpio_configs); in s32_pinctrl_probe()
951 spin_lock_init(&ipctl->gpio_configs_lock); in s32_pinctrl_probe()
954 devm_kmalloc(&pdev->dev, sizeof(*s32_pinctrl_desc), GFP_KERNEL); in s32_pinctrl_probe()
956 return -ENOMEM; in s32_pinctrl_probe()
958 s32_pinctrl_desc->name = dev_name(&pdev->dev); in s32_pinctrl_probe()
959 s32_pinctrl_desc->pins = info->soc_data->pins; in s32_pinctrl_probe()
960 s32_pinctrl_desc->npins = info->soc_data->npins; in s32_pinctrl_probe()
961 s32_pinctrl_desc->pctlops = &s32_pctrl_ops; in s32_pinctrl_probe()
962 s32_pinctrl_desc->pmxops = &s32_pmx_ops; in s32_pinctrl_probe()
963 s32_pinctrl_desc->confops = &s32_pinconf_ops; in s32_pinctrl_probe()
964 s32_pinctrl_desc->owner = THIS_MODULE; in s32_pinctrl_probe()
968 dev_err(&pdev->dev, "fail to probe dt properties\n"); in s32_pinctrl_probe()
972 ipctl->pctl = devm_pinctrl_register(&pdev->dev, s32_pinctrl_desc, in s32_pinctrl_probe()
974 if (IS_ERR(ipctl->pctl)) in s32_pinctrl_probe()
975 return dev_err_probe(&pdev->dev, PTR_ERR(ipctl->pctl), in s32_pinctrl_probe()
979 saved_context = &ipctl->saved_context; in s32_pinctrl_probe()
980 saved_context->pads = in s32_pinctrl_probe()
981 devm_kcalloc(&pdev->dev, info->soc_data->npins, in s32_pinctrl_probe()
982 sizeof(*saved_context->pads), in s32_pinctrl_probe()
984 if (!saved_context->pads) in s32_pinctrl_probe()
985 return -ENOMEM; in s32_pinctrl_probe()
988 dev_info(&pdev->dev, "initialized s32 pinctrl driver\n"); in s32_pinctrl_probe()