Lines Matching +full:bank +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0+
3 // pin-controller/pin-mux/pin-config/gpio-driver for Samsung's SoC's.
28 #include <dt-bindings/pinctrl/samsung.h>
31 #include "pinctrl-samsung.h"
41 { "samsung,pin-pud", PINCFG_TYPE_PUD },
42 { "samsung,pin-drv", PINCFG_TYPE_DRV },
43 { "samsung,pin-con-pdn", PINCFG_TYPE_CON_PDN },
44 { "samsung,pin-pud-pdn", PINCFG_TYPE_PUD_PDN },
45 { "samsung,pin-val", PINCFG_TYPE_DAT },
54 return pmx->nr_groups; in samsung_get_group_count()
62 return pmx->pin_groups[group].name; in samsung_get_group_name()
72 *pins = pmx->pin_groups[group].pins; in samsung_get_group_pins()
73 *num_pins = pmx->pin_groups[group].num_pins; in samsung_get_group_pins()
91 return -ENOMEM; in reserve_map()
93 memset(new_map + old_num, 0, (new_num - old_num) * sizeof(*new_map)); in reserve_map()
106 return -ENOSPC; in add_map_mux()
124 return -ENOSPC; in add_map_configs()
129 return -ENOMEM; in add_map_configs()
150 return -ENOMEM; in add_config()
190 ret = of_property_read_u32(np, "samsung,pin-function", &val); in samsung_dt_subnode_to_map()
202 } else if (ret != -EINVAL) { in samsung_dt_subnode_to_map()
227 num_maps, group, np->full_name); in samsung_dt_subnode_to_map()
265 return samsung_dt_subnode_to_map(drvdata, pctldev->dev, in samsung_dt_node_to_map()
271 ret = samsung_dt_subnode_to_map(drvdata, pctldev->dev, np, map, in samsung_dt_node_to_map()
327 return drvdata->nr_functions; in samsung_get_functions_count()
330 /* return the name of the pin function specified */
337 return drvdata->pmx_functions[selector].name; in samsung_pinmux_get_fname()
348 *groups = drvdata->pmx_functions[selector].groups; in samsung_pinmux_get_groups()
349 *num_groups = drvdata->pmx_functions[selector].num_groups; in samsung_pinmux_get_groups()
354 * given a pin number that is local to a pin controller, find out the pin bank
355 * and the register base of the pin bank.
359 struct samsung_pin_bank **bank) in pin_to_reg_bank() argument
363 b = drvdata->pin_banks; in pin_to_reg_bank()
365 while ((pin >= b->pin_base) && in pin_to_reg_bank()
366 ((b->pin_base + b->nr_pins - 1) < pin)) in pin_to_reg_bank()
369 *reg = b->pctl_base + b->pctl_offset; in pin_to_reg_bank()
370 *offset = pin - b->pin_base; in pin_to_reg_bank()
371 if (bank) in pin_to_reg_bank()
372 *bank = b; in pin_to_reg_bank()
381 struct samsung_pin_bank *bank; in samsung_pinmux_setup() local
389 func = &drvdata->pmx_functions[selector]; in samsung_pinmux_setup()
390 grp = &drvdata->pin_groups[group]; in samsung_pinmux_setup()
392 pin_to_reg_bank(drvdata, grp->pins[0] - drvdata->pin_base, in samsung_pinmux_setup()
393 &reg, &pin_offset, &bank); in samsung_pinmux_setup()
394 type = bank->type; in samsung_pinmux_setup()
395 mask = (1 << type->fld_width[PINCFG_TYPE_FUNC]) - 1; in samsung_pinmux_setup()
396 shift = pin_offset * type->fld_width[PINCFG_TYPE_FUNC]; in samsung_pinmux_setup()
399 shift -= 32; in samsung_pinmux_setup()
403 spin_lock_irqsave(&bank->slock, flags); in samsung_pinmux_setup()
405 data = readl(reg + type->reg_offset[PINCFG_TYPE_FUNC]); in samsung_pinmux_setup()
407 data |= func->val << shift; in samsung_pinmux_setup()
408 writel(data, reg + type->reg_offset[PINCFG_TYPE_FUNC]); in samsung_pinmux_setup()
410 spin_unlock_irqrestore(&bank->slock, flags); in samsung_pinmux_setup()
436 struct samsung_pin_bank *bank; in samsung_pinconf_rw() local
444 pin_to_reg_bank(drvdata, pin - drvdata->pin_base, &reg_base, in samsung_pinconf_rw()
445 &pin_offset, &bank); in samsung_pinconf_rw()
446 type = bank->type; in samsung_pinconf_rw()
448 if (cfg_type >= PINCFG_TYPE_NUM || !type->fld_width[cfg_type]) in samsung_pinconf_rw()
449 return -EINVAL; in samsung_pinconf_rw()
451 width = type->fld_width[cfg_type]; in samsung_pinconf_rw()
452 cfg_reg = type->reg_offset[cfg_type]; in samsung_pinconf_rw()
454 spin_lock_irqsave(&bank->slock, flags); in samsung_pinconf_rw()
456 mask = (1 << width) - 1; in samsung_pinconf_rw()
471 spin_unlock_irqrestore(&bank->slock, flags); in samsung_pinconf_rw()
508 pins = drvdata->pin_groups[group].pins; in samsung_pinconf_group_set()
510 for (cnt = 0; cnt < drvdata->pin_groups[group].num_pins; cnt++) in samsung_pinconf_group_set()
524 pins = drvdata->pin_groups[group].pins; in samsung_pinconf_group_get()
538 * The samsung_gpio_set_vlaue() should be called with "bank->slock" held
544 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_set_value() local
545 const struct samsung_pin_bank_type *type = bank->type; in samsung_gpio_set_value()
549 reg = bank->pctl_base + bank->pctl_offset; in samsung_gpio_set_value()
551 data = readl(reg + type->reg_offset[PINCFG_TYPE_DAT]); in samsung_gpio_set_value()
555 writel(data, reg + type->reg_offset[PINCFG_TYPE_DAT]); in samsung_gpio_set_value()
561 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_set() local
564 spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_set()
566 spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_set()
574 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_get() local
575 const struct samsung_pin_bank_type *type = bank->type; in samsung_gpio_get()
577 reg = bank->pctl_base + bank->pctl_offset; in samsung_gpio_get()
579 data = readl(reg + type->reg_offset[PINCFG_TYPE_DAT]); in samsung_gpio_get()
586 * The samsung_gpio_set_direction() should be called with "bank->slock" held
595 struct samsung_pin_bank *bank; in samsung_gpio_set_direction() local
599 bank = gpiochip_get_data(gc); in samsung_gpio_set_direction()
600 type = bank->type; in samsung_gpio_set_direction()
602 reg = bank->pctl_base + bank->pctl_offset in samsung_gpio_set_direction()
603 + type->reg_offset[PINCFG_TYPE_FUNC]; in samsung_gpio_set_direction()
605 mask = (1 << type->fld_width[PINCFG_TYPE_FUNC]) - 1; in samsung_gpio_set_direction()
606 shift = offset * type->fld_width[PINCFG_TYPE_FUNC]; in samsung_gpio_set_direction()
609 shift -= 32; in samsung_gpio_set_direction()
625 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_direction_input() local
629 spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_direction_input()
631 spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_direction_input()
639 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_direction_output() local
643 spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_direction_output()
646 spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_direction_output()
657 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_to_irq() local
660 if (!bank->irq_domain) in samsung_gpio_to_irq()
661 return -ENXIO; in samsung_gpio_to_irq()
663 virq = irq_create_mapping(bank->irq_domain, offset); in samsung_gpio_to_irq()
665 return (virq) ? : -ENXIO; in samsung_gpio_to_irq()
673 struct pinctrl_desc *ctrldesc = &drvdata->pctl; in samsung_pinctrl_create_groups()
678 groups = devm_kcalloc(dev, ctrldesc->npins, sizeof(*groups), in samsung_pinctrl_create_groups()
681 return ERR_PTR(-EINVAL); in samsung_pinctrl_create_groups()
684 pdesc = ctrldesc->pins; in samsung_pinctrl_create_groups()
685 for (i = 0; i < ctrldesc->npins; ++i, ++pdesc, ++grp) { in samsung_pinctrl_create_groups()
686 grp->name = pdesc->name; in samsung_pinctrl_create_groups()
687 grp->pins = &pdesc->number; in samsung_pinctrl_create_groups()
688 grp->num_pins = 1; in samsung_pinctrl_create_groups()
691 *cnt = ctrldesc->npins; in samsung_pinctrl_create_groups()
704 if (of_property_read_u32(func_np, "samsung,pin-function", &func->val)) in samsung_pinctrl_create_function()
710 return -EINVAL; in samsung_pinctrl_create_function()
713 func->name = func_np->full_name; in samsung_pinctrl_create_function()
715 func->groups = devm_kcalloc(dev, npins, sizeof(char *), GFP_KERNEL); in samsung_pinctrl_create_function()
716 if (!func->groups) in samsung_pinctrl_create_function()
717 return -ENOMEM; in samsung_pinctrl_create_function()
726 "failed to read pin name %d from %pOFn node\n", in samsung_pinctrl_create_function()
731 func->groups[i] = gname; in samsung_pinctrl_create_function()
734 func->num_groups = npins; in samsung_pinctrl_create_function()
744 struct device_node *dev_np = dev->of_node; in samsung_pinctrl_create_functions()
758 "samsung,pin-function", NULL)) in samsung_pinctrl_create_functions()
766 "samsung,pin-function", NULL)) in samsung_pinctrl_create_functions()
775 return ERR_PTR(-ENOMEM); in samsung_pinctrl_create_functions()
821 * from device node of the pin-controller. A pin group is formed with all
828 struct device *dev = &pdev->dev; in samsung_pinctrl_parse_dt()
845 drvdata->pin_groups = groups; in samsung_pinctrl_parse_dt()
846 drvdata->nr_groups = grp_cnt; in samsung_pinctrl_parse_dt()
847 drvdata->pmx_functions = functions; in samsung_pinctrl_parse_dt()
848 drvdata->nr_functions = func_cnt; in samsung_pinctrl_parse_dt()
857 struct pinctrl_desc *ctrldesc = &drvdata->pctl; in samsung_pinctrl_register()
861 int pin, bank, ret; in samsung_pinctrl_register() local
863 ctrldesc->name = "samsung-pinctrl"; in samsung_pinctrl_register()
864 ctrldesc->owner = THIS_MODULE; in samsung_pinctrl_register()
865 ctrldesc->pctlops = &samsung_pctrl_ops; in samsung_pinctrl_register()
866 ctrldesc->pmxops = &samsung_pinmux_ops; in samsung_pinctrl_register()
867 ctrldesc->confops = &samsung_pinconf_ops; in samsung_pinctrl_register()
869 pindesc = devm_kcalloc(&pdev->dev, in samsung_pinctrl_register()
870 drvdata->nr_pins, sizeof(*pindesc), in samsung_pinctrl_register()
873 return -ENOMEM; in samsung_pinctrl_register()
874 ctrldesc->pins = pindesc; in samsung_pinctrl_register()
875 ctrldesc->npins = drvdata->nr_pins; in samsung_pinctrl_register()
877 /* dynamically populate the pin number and pin name for pindesc */ in samsung_pinctrl_register()
878 for (pin = 0, pdesc = pindesc; pin < ctrldesc->npins; pin++, pdesc++) in samsung_pinctrl_register()
879 pdesc->number = pin + drvdata->pin_base; in samsung_pinctrl_register()
883 * the pins which belong to this pin-controller. in samsung_pinctrl_register()
885 pin_names = devm_kzalloc(&pdev->dev, in samsung_pinctrl_register()
887 drvdata->nr_pins), in samsung_pinctrl_register()
890 return -ENOMEM; in samsung_pinctrl_register()
892 /* for each pin, the name of the pin is pin-bank name + pin number */ in samsung_pinctrl_register()
893 for (bank = 0; bank < drvdata->nr_banks; bank++) { in samsung_pinctrl_register()
894 pin_bank = &drvdata->pin_banks[bank]; in samsung_pinctrl_register()
895 for (pin = 0; pin < pin_bank->nr_pins; pin++) { in samsung_pinctrl_register()
896 sprintf(pin_names, "%s-%d", pin_bank->name, pin); in samsung_pinctrl_register()
897 pdesc = pindesc + pin_bank->pin_base + pin; in samsung_pinctrl_register()
898 pdesc->name = pin_names; in samsung_pinctrl_register()
907 drvdata->pctl_dev = devm_pinctrl_register(&pdev->dev, ctrldesc, in samsung_pinctrl_register()
909 if (IS_ERR(drvdata->pctl_dev)) { in samsung_pinctrl_register()
910 dev_err(&pdev->dev, "could not register pinctrl driver\n"); in samsung_pinctrl_register()
911 return PTR_ERR(drvdata->pctl_dev); in samsung_pinctrl_register()
914 for (bank = 0; bank < drvdata->nr_banks; ++bank) { in samsung_pinctrl_register()
915 pin_bank = &drvdata->pin_banks[bank]; in samsung_pinctrl_register()
916 pin_bank->grange.name = pin_bank->name; in samsung_pinctrl_register()
917 pin_bank->grange.id = bank; in samsung_pinctrl_register()
918 pin_bank->grange.pin_base = drvdata->pin_base in samsung_pinctrl_register()
919 + pin_bank->pin_base; in samsung_pinctrl_register()
920 pin_bank->grange.base = pin_bank->grange.pin_base; in samsung_pinctrl_register()
921 pin_bank->grange.npins = pin_bank->nr_pins; in samsung_pinctrl_register()
922 pin_bank->grange.gc = &pin_bank->gpio_chip; in samsung_pinctrl_register()
923 pinctrl_add_gpio_range(drvdata->pctl_dev, &pin_bank->grange); in samsung_pinctrl_register()
933 struct samsung_pin_bank *bank = drvdata->pin_banks; in samsung_pinctrl_unregister() local
936 for (i = 0; i < drvdata->nr_banks; ++i, ++bank) in samsung_pinctrl_unregister()
937 pinctrl_remove_gpio_range(drvdata->pctl_dev, &bank->grange); in samsung_pinctrl_unregister()
957 struct samsung_pin_bank *bank = drvdata->pin_banks; in samsung_gpiolib_register() local
962 for (i = 0; i < drvdata->nr_banks; ++i, ++bank) { in samsung_gpiolib_register()
963 bank->gpio_chip = samsung_gpiolib_chip; in samsung_gpiolib_register()
965 gc = &bank->gpio_chip; in samsung_gpiolib_register()
966 gc->base = bank->grange.base; in samsung_gpiolib_register()
967 gc->ngpio = bank->nr_pins; in samsung_gpiolib_register()
968 gc->parent = &pdev->dev; in samsung_gpiolib_register()
969 gc->of_node = bank->of_node; in samsung_gpiolib_register()
970 gc->label = bank->name; in samsung_gpiolib_register()
972 ret = devm_gpiochip_add_data(&pdev->dev, gc, bank); in samsung_gpiolib_register()
974 dev_err(&pdev->dev, "failed to register gpio_chip %s, error code: %d\n", in samsung_gpiolib_register()
975 gc->label, ret); in samsung_gpiolib_register()
986 struct device_node *node = pdev->dev.of_node; in samsung_pinctrl_get_soc_data_for_of_alias()
992 dev_err(&pdev->dev, "failed to get alias id\n"); in samsung_pinctrl_get_soc_data_for_of_alias()
996 of_data = of_device_get_match_data(&pdev->dev); in samsung_pinctrl_get_soc_data_for_of_alias()
997 if (id >= of_data->num_ctrl) { in samsung_pinctrl_get_soc_data_for_of_alias()
998 dev_err(&pdev->dev, "invalid alias id %d\n", id); in samsung_pinctrl_get_soc_data_for_of_alias()
1002 return &(of_data->ctrl[id]); in samsung_pinctrl_get_soc_data_for_of_alias()
1007 struct samsung_pin_bank *bank; in samsung_banks_of_node_put() local
1010 bank = d->pin_banks; in samsung_banks_of_node_put()
1011 for (i = 0; i < d->nr_banks; ++i, ++bank) in samsung_banks_of_node_put()
1012 of_node_put(bank->of_node); in samsung_banks_of_node_put()
1020 struct device_node *node = pdev->dev.of_node; in samsung_pinctrl_get_soc_data()
1024 struct samsung_pin_bank *bank; in samsung_pinctrl_get_soc_data() local
1031 return ERR_PTR(-ENOENT); in samsung_pinctrl_get_soc_data()
1033 d->suspend = ctrl->suspend; in samsung_pinctrl_get_soc_data()
1034 d->resume = ctrl->resume; in samsung_pinctrl_get_soc_data()
1035 d->nr_banks = ctrl->nr_banks; in samsung_pinctrl_get_soc_data()
1036 d->pin_banks = devm_kcalloc(&pdev->dev, d->nr_banks, in samsung_pinctrl_get_soc_data()
1037 sizeof(*d->pin_banks), GFP_KERNEL); in samsung_pinctrl_get_soc_data()
1038 if (!d->pin_banks) in samsung_pinctrl_get_soc_data()
1039 return ERR_PTR(-ENOMEM); in samsung_pinctrl_get_soc_data()
1041 if (ctrl->nr_ext_resources + 1 > SAMSUNG_PINCTRL_NUM_RESOURCES) in samsung_pinctrl_get_soc_data()
1042 return ERR_PTR(-EINVAL); in samsung_pinctrl_get_soc_data()
1044 for (i = 0; i < ctrl->nr_ext_resources + 1; i++) { in samsung_pinctrl_get_soc_data()
1047 dev_err(&pdev->dev, "failed to get mem%d resource\n", i); in samsung_pinctrl_get_soc_data()
1048 return ERR_PTR(-EINVAL); in samsung_pinctrl_get_soc_data()
1050 virt_base[i] = devm_ioremap(&pdev->dev, res->start, in samsung_pinctrl_get_soc_data()
1053 dev_err(&pdev->dev, "failed to ioremap %pR\n", res); in samsung_pinctrl_get_soc_data()
1054 return ERR_PTR(-EIO); in samsung_pinctrl_get_soc_data()
1058 bank = d->pin_banks; in samsung_pinctrl_get_soc_data()
1059 bdata = ctrl->pin_banks; in samsung_pinctrl_get_soc_data()
1060 for (i = 0; i < ctrl->nr_banks; ++i, ++bdata, ++bank) { in samsung_pinctrl_get_soc_data()
1061 bank->type = bdata->type; in samsung_pinctrl_get_soc_data()
1062 bank->pctl_offset = bdata->pctl_offset; in samsung_pinctrl_get_soc_data()
1063 bank->nr_pins = bdata->nr_pins; in samsung_pinctrl_get_soc_data()
1064 bank->eint_func = bdata->eint_func; in samsung_pinctrl_get_soc_data()
1065 bank->eint_type = bdata->eint_type; in samsung_pinctrl_get_soc_data()
1066 bank->eint_mask = bdata->eint_mask; in samsung_pinctrl_get_soc_data()
1067 bank->eint_offset = bdata->eint_offset; in samsung_pinctrl_get_soc_data()
1068 bank->name = bdata->name; in samsung_pinctrl_get_soc_data()
1070 spin_lock_init(&bank->slock); in samsung_pinctrl_get_soc_data()
1071 bank->drvdata = d; in samsung_pinctrl_get_soc_data()
1072 bank->pin_base = d->nr_pins; in samsung_pinctrl_get_soc_data()
1073 d->nr_pins += bank->nr_pins; in samsung_pinctrl_get_soc_data()
1075 bank->eint_base = virt_base[0]; in samsung_pinctrl_get_soc_data()
1076 bank->pctl_base = virt_base[bdata->pctl_res_idx]; in samsung_pinctrl_get_soc_data()
1083 d->virt_base = virt_base[0]; in samsung_pinctrl_get_soc_data()
1086 if (!of_find_property(np, "gpio-controller", NULL)) in samsung_pinctrl_get_soc_data()
1088 bank = d->pin_banks; in samsung_pinctrl_get_soc_data()
1089 for (i = 0; i < d->nr_banks; ++i, ++bank) { in samsung_pinctrl_get_soc_data()
1090 if (of_node_name_eq(np, bank->name)) { in samsung_pinctrl_get_soc_data()
1091 bank->of_node = np; in samsung_pinctrl_get_soc_data()
1097 d->pin_base = pin_base; in samsung_pinctrl_get_soc_data()
1098 pin_base += d->nr_pins; in samsung_pinctrl_get_soc_data()
1107 struct device *dev = &pdev->dev; in samsung_pinctrl_probe()
1113 return -ENOMEM; in samsung_pinctrl_probe()
1117 dev_err(&pdev->dev, "driver data not available\n"); in samsung_pinctrl_probe()
1120 drvdata->dev = dev; in samsung_pinctrl_probe()
1124 drvdata->irq = res->start; in samsung_pinctrl_probe()
1126 if (ctrl->retention_data) { in samsung_pinctrl_probe()
1127 drvdata->retention_ctrl = ctrl->retention_data->init(drvdata, in samsung_pinctrl_probe()
1128 ctrl->retention_data); in samsung_pinctrl_probe()
1129 if (IS_ERR(drvdata->retention_ctrl)) { in samsung_pinctrl_probe()
1130 ret = PTR_ERR(drvdata->retention_ctrl); in samsung_pinctrl_probe()
1143 if (ctrl->eint_gpio_init) in samsung_pinctrl_probe()
1144 ctrl->eint_gpio_init(drvdata); in samsung_pinctrl_probe()
1145 if (ctrl->eint_wkup_init) in samsung_pinctrl_probe()
1146 ctrl->eint_wkup_init(drvdata); in samsung_pinctrl_probe()
1160 * samsung_pinctrl_suspend - save pinctrl state for suspend
1169 for (i = 0; i < drvdata->nr_banks; i++) { in samsung_pinctrl_suspend()
1170 struct samsung_pin_bank *bank = &drvdata->pin_banks[i]; in samsung_pinctrl_suspend() local
1171 void __iomem *reg = bank->pctl_base + bank->pctl_offset; in samsung_pinctrl_suspend()
1172 const u8 *offs = bank->type->reg_offset; in samsung_pinctrl_suspend()
1173 const u8 *widths = bank->type->fld_width; in samsung_pinctrl_suspend()
1182 bank->pm_save[type] = readl(reg + offs[type]); in samsung_pinctrl_suspend()
1184 if (widths[PINCFG_TYPE_FUNC] * bank->nr_pins > 32) { in samsung_pinctrl_suspend()
1186 bank->pm_save[PINCFG_TYPE_NUM] = in samsung_pinctrl_suspend()
1189 bank->name, reg, in samsung_pinctrl_suspend()
1190 bank->pm_save[PINCFG_TYPE_FUNC], in samsung_pinctrl_suspend()
1191 bank->pm_save[PINCFG_TYPE_NUM]); in samsung_pinctrl_suspend()
1193 pr_debug("Save %s @ %p (con %#010x)\n", bank->name, in samsung_pinctrl_suspend()
1194 reg, bank->pm_save[PINCFG_TYPE_FUNC]); in samsung_pinctrl_suspend()
1198 if (drvdata->suspend) in samsung_pinctrl_suspend()
1199 drvdata->suspend(drvdata); in samsung_pinctrl_suspend()
1200 if (drvdata->retention_ctrl && drvdata->retention_ctrl->enable) in samsung_pinctrl_suspend()
1201 drvdata->retention_ctrl->enable(drvdata); in samsung_pinctrl_suspend()
1207 * samsung_pinctrl_resume - restore pinctrl state from suspend
1219 if (drvdata->resume) in samsung_pinctrl_resume()
1220 drvdata->resume(drvdata); in samsung_pinctrl_resume()
1222 for (i = 0; i < drvdata->nr_banks; i++) { in samsung_pinctrl_resume()
1223 struct samsung_pin_bank *bank = &drvdata->pin_banks[i]; in samsung_pinctrl_resume() local
1224 void __iomem *reg = bank->pctl_base + bank->pctl_offset; in samsung_pinctrl_resume()
1225 const u8 *offs = bank->type->reg_offset; in samsung_pinctrl_resume()
1226 const u8 *widths = bank->type->fld_width; in samsung_pinctrl_resume()
1233 if (widths[PINCFG_TYPE_FUNC] * bank->nr_pins > 32) { in samsung_pinctrl_resume()
1236 bank->name, reg, in samsung_pinctrl_resume()
1239 bank->pm_save[PINCFG_TYPE_FUNC], in samsung_pinctrl_resume()
1240 bank->pm_save[PINCFG_TYPE_NUM]); in samsung_pinctrl_resume()
1241 writel(bank->pm_save[PINCFG_TYPE_NUM], in samsung_pinctrl_resume()
1244 pr_debug("%s @ %p (con %#010x => %#010x)\n", bank->name, in samsung_pinctrl_resume()
1246 bank->pm_save[PINCFG_TYPE_FUNC]); in samsung_pinctrl_resume()
1250 writel(bank->pm_save[type], reg + offs[type]); in samsung_pinctrl_resume()
1253 if (drvdata->retention_ctrl && drvdata->retention_ctrl->disable) in samsung_pinctrl_resume()
1254 drvdata->retention_ctrl->disable(drvdata); in samsung_pinctrl_resume()
1261 { .compatible = "samsung,exynos3250-pinctrl",
1263 { .compatible = "samsung,exynos4210-pinctrl",
1265 { .compatible = "samsung,exynos4x12-pinctrl",
1267 { .compatible = "samsung,exynos5250-pinctrl",
1269 { .compatible = "samsung,exynos5260-pinctrl",
1271 { .compatible = "samsung,exynos5410-pinctrl",
1273 { .compatible = "samsung,exynos5420-pinctrl",
1275 { .compatible = "samsung,s5pv210-pinctrl",
1279 { .compatible = "samsung,exynos5433-pinctrl",
1281 { .compatible = "samsung,exynos7-pinctrl",
1285 { .compatible = "samsung,s3c64xx-pinctrl",
1289 { .compatible = "samsung,s3c2412-pinctrl",
1291 { .compatible = "samsung,s3c2416-pinctrl",
1293 { .compatible = "samsung,s3c2440-pinctrl",
1295 { .compatible = "samsung,s3c2450-pinctrl",
1309 .name = "samsung-pinctrl",