Lines Matching +full:mux +full:- +full:ctrl +full:- +full:list

1 // SPDX-License-Identifier: GPL-2.0+
3 // pin-controller/pin-mux/pin-config/gpio-driver for Samsung's SoC's.
31 #include "pinctrl-samsung.h"
36 /* list of all possible config options supported */
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 },
52 return pmx->nr_groups; in samsung_get_group_count()
60 return pmx->pin_groups[group].name; in samsung_get_group_name()
70 *pins = pmx->pin_groups[group].pins; in samsung_get_group_pins()
71 *num_pins = pmx->pin_groups[group].num_pins; in samsung_get_group_pins()
89 return -ENOMEM; in reserve_map()
91 memset(new_map + old_num, 0, (new_num - old_num) * sizeof(*new_map)); in reserve_map()
104 return -ENOSPC; in add_map_mux()
107 (*map)[*num_maps].data.mux.group = group; in add_map_mux()
108 (*map)[*num_maps].data.mux.function = function; in add_map_mux()
122 return -ENOSPC; in add_map_configs()
127 return -ENOMEM; in add_map_configs()
148 return -ENOMEM; in add_config()
188 ret = of_property_read_u32(np, "samsung,pin-function", &val); in samsung_dt_subnode_to_map()
200 } else if (ret != -EINVAL) { in samsung_dt_subnode_to_map()
225 num_maps, group, np->full_name); in samsung_dt_subnode_to_map()
263 return samsung_dt_subnode_to_map(drvdata, pctldev->dev, in samsung_dt_node_to_map()
269 ret = samsung_dt_subnode_to_map(drvdata, pctldev->dev, np, map, in samsung_dt_node_to_map()
307 /* list of pinctrl callbacks for the pinctrl core */
325 return drvdata->nr_functions; in samsung_get_functions_count()
335 return drvdata->pmx_functions[selector].name; in samsung_pinmux_get_fname()
346 *groups = drvdata->pmx_functions[selector].groups; in samsung_pinmux_get_groups()
347 *num_groups = drvdata->pmx_functions[selector].num_groups; in samsung_pinmux_get_groups()
361 b = drvdata->pin_banks; in pin_to_reg_bank()
363 while ((pin >= b->pin_base) && in pin_to_reg_bank()
364 ((b->pin_base + b->nr_pins - 1) < pin)) in pin_to_reg_bank()
367 *reg = b->pctl_base + b->pctl_offset; in pin_to_reg_bank()
368 *offset = pin - b->pin_base; in pin_to_reg_bank()
387 func = &drvdata->pmx_functions[selector]; in samsung_pinmux_setup()
388 grp = &drvdata->pin_groups[group]; in samsung_pinmux_setup()
390 pin_to_reg_bank(drvdata, grp->pins[0], &reg, &pin_offset, &bank); in samsung_pinmux_setup()
391 type = bank->type; in samsung_pinmux_setup()
392 mask = (1 << type->fld_width[PINCFG_TYPE_FUNC]) - 1; in samsung_pinmux_setup()
393 shift = pin_offset * type->fld_width[PINCFG_TYPE_FUNC]; in samsung_pinmux_setup()
396 shift -= 32; in samsung_pinmux_setup()
400 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_pinmux_setup()
402 data = readl(reg + type->reg_offset[PINCFG_TYPE_FUNC]); in samsung_pinmux_setup()
404 data |= func->val << shift; in samsung_pinmux_setup()
405 writel(data, reg + type->reg_offset[PINCFG_TYPE_FUNC]); in samsung_pinmux_setup()
407 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_pinmux_setup()
419 /* list of pinmux callbacks for the pinmux vertical in pinctrl core */
442 type = bank->type; in samsung_pinconf_rw()
444 if (cfg_type >= PINCFG_TYPE_NUM || !type->fld_width[cfg_type]) in samsung_pinconf_rw()
445 return -EINVAL; in samsung_pinconf_rw()
447 width = type->fld_width[cfg_type]; in samsung_pinconf_rw()
448 cfg_reg = type->reg_offset[cfg_type]; in samsung_pinconf_rw()
450 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_pinconf_rw()
452 mask = (1 << width) - 1; in samsung_pinconf_rw()
467 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_pinconf_rw()
504 pins = drvdata->pin_groups[group].pins; in samsung_pinconf_group_set()
506 for (cnt = 0; cnt < drvdata->pin_groups[group].num_pins; cnt++) in samsung_pinconf_group_set()
520 pins = drvdata->pin_groups[group].pins; in samsung_pinconf_group_get()
525 /* list of pinconfig callbacks for pinconfig vertical in the pinctrl code */
534 * The samsung_gpio_set_vlaue() should be called with "bank->slock" held
541 const struct samsung_pin_bank_type *type = bank->type; in samsung_gpio_set_value()
545 reg = bank->pctl_base + bank->pctl_offset; in samsung_gpio_set_value()
547 data = readl(reg + type->reg_offset[PINCFG_TYPE_DAT]); in samsung_gpio_set_value()
551 writel(data, reg + type->reg_offset[PINCFG_TYPE_DAT]); in samsung_gpio_set_value()
560 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_set()
562 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_set()
571 const struct samsung_pin_bank_type *type = bank->type; in samsung_gpio_get()
573 reg = bank->pctl_base + bank->pctl_offset; in samsung_gpio_get()
575 data = readl(reg + type->reg_offset[PINCFG_TYPE_DAT]); in samsung_gpio_get()
582 * The samsung_gpio_set_direction() should be called with "bank->slock" held
596 type = bank->type; in samsung_gpio_set_direction()
598 reg = bank->pctl_base + bank->pctl_offset in samsung_gpio_set_direction()
599 + type->reg_offset[PINCFG_TYPE_FUNC]; in samsung_gpio_set_direction()
601 mask = (1 << type->fld_width[PINCFG_TYPE_FUNC]) - 1; in samsung_gpio_set_direction()
602 shift = offset * type->fld_width[PINCFG_TYPE_FUNC]; in samsung_gpio_set_direction()
605 shift -= 32; in samsung_gpio_set_direction()
625 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_direction_input()
627 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_direction_input()
639 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_direction_output()
642 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_direction_output()
656 if (!bank->irq_domain) in samsung_gpio_to_irq()
657 return -ENXIO; in samsung_gpio_to_irq()
659 virq = irq_create_mapping(bank->irq_domain, offset); in samsung_gpio_to_irq()
661 return (virq) ? : -ENXIO; in samsung_gpio_to_irq()
668 bank->grange.name = bank->name; in samsung_add_pin_ranges()
669 bank->grange.id = bank->id; in samsung_add_pin_ranges()
670 bank->grange.pin_base = bank->pin_base; in samsung_add_pin_ranges()
671 bank->grange.base = gc->base; in samsung_add_pin_ranges()
672 bank->grange.npins = bank->nr_pins; in samsung_add_pin_ranges()
673 bank->grange.gc = &bank->gpio_chip; in samsung_add_pin_ranges()
674 pinctrl_add_gpio_range(bank->drvdata->pctl_dev, &bank->grange); in samsung_add_pin_ranges()
684 struct pinctrl_desc *ctrldesc = &drvdata->pctl; in samsung_pinctrl_create_groups()
689 groups = devm_kcalloc(dev, ctrldesc->npins, sizeof(*groups), in samsung_pinctrl_create_groups()
692 return ERR_PTR(-EINVAL); in samsung_pinctrl_create_groups()
695 pdesc = ctrldesc->pins; in samsung_pinctrl_create_groups()
696 for (i = 0; i < ctrldesc->npins; ++i, ++pdesc, ++grp) { in samsung_pinctrl_create_groups()
697 grp->name = pdesc->name; in samsung_pinctrl_create_groups()
698 grp->pins = &pdesc->number; in samsung_pinctrl_create_groups()
699 grp->num_pins = 1; in samsung_pinctrl_create_groups()
702 *cnt = ctrldesc->npins; in samsung_pinctrl_create_groups()
715 if (of_property_read_u32(func_np, "samsung,pin-function", &func->val)) in samsung_pinctrl_create_function()
720 dev_err(dev, "invalid pin list in %pOFn node", func_np); in samsung_pinctrl_create_function()
721 return -EINVAL; in samsung_pinctrl_create_function()
724 func->name = func_np->full_name; in samsung_pinctrl_create_function()
726 func->groups = devm_kcalloc(dev, npins, sizeof(char *), GFP_KERNEL); in samsung_pinctrl_create_function()
727 if (!func->groups) in samsung_pinctrl_create_function()
728 return -ENOMEM; in samsung_pinctrl_create_function()
742 func->groups[i] = gname; in samsung_pinctrl_create_function()
745 func->num_groups = npins; in samsung_pinctrl_create_function()
755 struct device_node *dev_np = dev->of_node; in samsung_pinctrl_create_functions()
769 "samsung,pin-function", NULL)) in samsung_pinctrl_create_functions()
777 "samsung,pin-function", NULL)) in samsung_pinctrl_create_functions()
786 return ERR_PTR(-ENOMEM); in samsung_pinctrl_create_functions()
832 * from device node of the pin-controller. A pin group is formed with all
839 struct device *dev = &pdev->dev; in samsung_pinctrl_parse_dt()
856 drvdata->pin_groups = groups; in samsung_pinctrl_parse_dt()
857 drvdata->nr_groups = grp_cnt; in samsung_pinctrl_parse_dt()
858 drvdata->pmx_functions = functions; in samsung_pinctrl_parse_dt()
859 drvdata->nr_functions = func_cnt; in samsung_pinctrl_parse_dt()
868 struct pinctrl_desc *ctrldesc = &drvdata->pctl; in samsung_pinctrl_register()
874 ctrldesc->name = "samsung-pinctrl"; in samsung_pinctrl_register()
875 ctrldesc->owner = THIS_MODULE; in samsung_pinctrl_register()
876 ctrldesc->pctlops = &samsung_pctrl_ops; in samsung_pinctrl_register()
877 ctrldesc->pmxops = &samsung_pinmux_ops; in samsung_pinctrl_register()
878 ctrldesc->confops = &samsung_pinconf_ops; in samsung_pinctrl_register()
880 pindesc = devm_kcalloc(&pdev->dev, in samsung_pinctrl_register()
881 drvdata->nr_pins, sizeof(*pindesc), in samsung_pinctrl_register()
884 return -ENOMEM; in samsung_pinctrl_register()
885 ctrldesc->pins = pindesc; in samsung_pinctrl_register()
886 ctrldesc->npins = drvdata->nr_pins; in samsung_pinctrl_register()
889 for (pin = 0, pdesc = pindesc; pin < ctrldesc->npins; pin++, pdesc++) in samsung_pinctrl_register()
890 pdesc->number = pin; in samsung_pinctrl_register()
894 * the pins which belong to this pin-controller. in samsung_pinctrl_register()
896 pin_names = devm_kzalloc(&pdev->dev, in samsung_pinctrl_register()
898 drvdata->nr_pins), in samsung_pinctrl_register()
901 return -ENOMEM; in samsung_pinctrl_register()
903 /* for each pin, the name of the pin is pin-bank name + pin number */ in samsung_pinctrl_register()
904 for (bank = 0; bank < drvdata->nr_banks; bank++) { in samsung_pinctrl_register()
905 pin_bank = &drvdata->pin_banks[bank]; in samsung_pinctrl_register()
906 pin_bank->id = bank; in samsung_pinctrl_register()
907 for (pin = 0; pin < pin_bank->nr_pins; pin++) { in samsung_pinctrl_register()
908 sprintf(pin_names, "%s-%d", pin_bank->name, pin); in samsung_pinctrl_register()
909 pdesc = pindesc + pin_bank->pin_base + pin; in samsung_pinctrl_register()
910 pdesc->name = pin_names; in samsung_pinctrl_register()
919 ret = devm_pinctrl_register_and_init(&pdev->dev, ctrldesc, drvdata, in samsung_pinctrl_register()
920 &drvdata->pctl_dev); in samsung_pinctrl_register()
922 dev_err(&pdev->dev, "could not register pinctrl driver\n"); in samsung_pinctrl_register()
933 struct samsung_pin_bank *bank = drvdata->pin_banks; in samsung_pinctrl_unregister()
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()
958 struct samsung_pin_bank *bank = drvdata->pin_banks; in samsung_gpiolib_register()
963 for (i = 0; i < drvdata->nr_banks; ++i, ++bank) { in samsung_gpiolib_register()
964 bank->gpio_chip = samsung_gpiolib_chip; in samsung_gpiolib_register()
966 gc = &bank->gpio_chip; in samsung_gpiolib_register()
967 gc->base = -1; /* Dynamic allocation */ in samsung_gpiolib_register()
968 gc->ngpio = bank->nr_pins; in samsung_gpiolib_register()
969 gc->parent = &pdev->dev; in samsung_gpiolib_register()
970 gc->fwnode = bank->fwnode; in samsung_gpiolib_register()
971 gc->label = bank->name; in samsung_gpiolib_register()
973 ret = devm_gpiochip_add_data(&pdev->dev, gc, bank); in samsung_gpiolib_register()
975 dev_err(&pdev->dev, "failed to register gpio_chip %s, error code: %d\n", in samsung_gpiolib_register()
976 gc->label, ret); in samsung_gpiolib_register()
987 struct device_node *node = pdev->dev.of_node; in samsung_pinctrl_get_soc_data_for_of_alias()
993 dev_err(&pdev->dev, "failed to get alias id\n"); in samsung_pinctrl_get_soc_data_for_of_alias()
997 of_data = of_device_get_match_data(&pdev->dev); in samsung_pinctrl_get_soc_data_for_of_alias()
998 if (id >= of_data->num_ctrl) { in samsung_pinctrl_get_soc_data_for_of_alias()
999 dev_err(&pdev->dev, "invalid alias id %d\n", id); in samsung_pinctrl_get_soc_data_for_of_alias()
1003 return &(of_data->ctrl[id]); in samsung_pinctrl_get_soc_data_for_of_alias()
1011 bank = d->pin_banks; in samsung_banks_node_put()
1012 for (i = 0; i < d->nr_banks; ++i, ++bank) in samsung_banks_node_put()
1013 fwnode_handle_put(bank->fwnode); in samsung_banks_node_put()
1018 * skipping optional "-gpio" node suffix. When found, assign node to the bank.
1022 const char *suffix = "-gpio-bank"; in samsung_banks_node_get()
1030 bank = d->pin_banks; in samsung_banks_node_get()
1031 for (i = 0; i < d->nr_banks; ++i, ++bank) { in samsung_banks_node_get()
1032 strscpy(node_name, bank->name, sizeof(node_name)); in samsung_banks_node_get()
1036 bank->name); in samsung_banks_node_get()
1045 if (of_node_name_eq(np, bank->name)) in samsung_banks_node_get()
1050 bank->fwnode = child; in samsung_banks_node_get()
1052 dev_warn(dev, "Missing node for bank %s - invalid DTB\n", in samsung_banks_node_get()
1053 bank->name); in samsung_banks_node_get()
1064 const struct samsung_pin_ctrl *ctrl; in samsung_pinctrl_get_soc_data() local
1070 ctrl = samsung_pinctrl_get_soc_data_for_of_alias(pdev); in samsung_pinctrl_get_soc_data()
1071 if (!ctrl) in samsung_pinctrl_get_soc_data()
1072 return ERR_PTR(-ENOENT); in samsung_pinctrl_get_soc_data()
1074 d->suspend = ctrl->suspend; in samsung_pinctrl_get_soc_data()
1075 d->resume = ctrl->resume; in samsung_pinctrl_get_soc_data()
1076 d->nr_banks = ctrl->nr_banks; in samsung_pinctrl_get_soc_data()
1077 d->pin_banks = devm_kcalloc(&pdev->dev, d->nr_banks, in samsung_pinctrl_get_soc_data()
1078 sizeof(*d->pin_banks), GFP_KERNEL); in samsung_pinctrl_get_soc_data()
1079 if (!d->pin_banks) in samsung_pinctrl_get_soc_data()
1080 return ERR_PTR(-ENOMEM); in samsung_pinctrl_get_soc_data()
1082 if (ctrl->nr_ext_resources + 1 > SAMSUNG_PINCTRL_NUM_RESOURCES) in samsung_pinctrl_get_soc_data()
1083 return ERR_PTR(-EINVAL); in samsung_pinctrl_get_soc_data()
1085 for (i = 0; i < ctrl->nr_ext_resources + 1; i++) { in samsung_pinctrl_get_soc_data()
1088 dev_err(&pdev->dev, "failed to get mem%d resource\n", i); in samsung_pinctrl_get_soc_data()
1089 return ERR_PTR(-EINVAL); in samsung_pinctrl_get_soc_data()
1091 virt_base[i] = devm_ioremap(&pdev->dev, res->start, in samsung_pinctrl_get_soc_data()
1094 dev_err(&pdev->dev, "failed to ioremap %pR\n", res); in samsung_pinctrl_get_soc_data()
1095 return ERR_PTR(-EIO); in samsung_pinctrl_get_soc_data()
1099 bank = d->pin_banks; in samsung_pinctrl_get_soc_data()
1100 bdata = ctrl->pin_banks; in samsung_pinctrl_get_soc_data()
1101 for (i = 0; i < ctrl->nr_banks; ++i, ++bdata, ++bank) { in samsung_pinctrl_get_soc_data()
1102 bank->type = bdata->type; in samsung_pinctrl_get_soc_data()
1103 bank->pctl_offset = bdata->pctl_offset; in samsung_pinctrl_get_soc_data()
1104 bank->nr_pins = bdata->nr_pins; in samsung_pinctrl_get_soc_data()
1105 bank->eint_func = bdata->eint_func; in samsung_pinctrl_get_soc_data()
1106 bank->eint_type = bdata->eint_type; in samsung_pinctrl_get_soc_data()
1107 bank->eint_mask = bdata->eint_mask; in samsung_pinctrl_get_soc_data()
1108 bank->eint_offset = bdata->eint_offset; in samsung_pinctrl_get_soc_data()
1109 bank->eint_con_offset = bdata->eint_con_offset; in samsung_pinctrl_get_soc_data()
1110 bank->eint_mask_offset = bdata->eint_mask_offset; in samsung_pinctrl_get_soc_data()
1111 bank->eint_pend_offset = bdata->eint_pend_offset; in samsung_pinctrl_get_soc_data()
1112 bank->name = bdata->name; in samsung_pinctrl_get_soc_data()
1114 raw_spin_lock_init(&bank->slock); in samsung_pinctrl_get_soc_data()
1115 bank->drvdata = d; in samsung_pinctrl_get_soc_data()
1116 bank->pin_base = d->nr_pins; in samsung_pinctrl_get_soc_data()
1117 d->nr_pins += bank->nr_pins; in samsung_pinctrl_get_soc_data()
1119 bank->eint_base = virt_base[0]; in samsung_pinctrl_get_soc_data()
1120 bank->pctl_base = virt_base[bdata->pctl_res_idx]; in samsung_pinctrl_get_soc_data()
1127 d->virt_base = virt_base[0]; in samsung_pinctrl_get_soc_data()
1129 samsung_banks_node_get(&pdev->dev, d); in samsung_pinctrl_get_soc_data()
1131 return ctrl; in samsung_pinctrl_get_soc_data()
1137 const struct samsung_pin_ctrl *ctrl; in samsung_pinctrl_probe() local
1138 struct device *dev = &pdev->dev; in samsung_pinctrl_probe()
1143 return -ENOMEM; in samsung_pinctrl_probe()
1145 ctrl = samsung_pinctrl_get_soc_data(drvdata, pdev); in samsung_pinctrl_probe()
1146 if (IS_ERR(ctrl)) { in samsung_pinctrl_probe()
1147 dev_err(&pdev->dev, "driver data not available\n"); in samsung_pinctrl_probe()
1148 return PTR_ERR(ctrl); in samsung_pinctrl_probe()
1150 drvdata->dev = dev; in samsung_pinctrl_probe()
1153 if (ret < 0 && ret != -ENXIO) in samsung_pinctrl_probe()
1156 drvdata->irq = ret; in samsung_pinctrl_probe()
1158 if (ctrl->retention_data) { in samsung_pinctrl_probe()
1159 drvdata->retention_ctrl = ctrl->retention_data->init(drvdata, in samsung_pinctrl_probe()
1160 ctrl->retention_data); in samsung_pinctrl_probe()
1161 if (IS_ERR(drvdata->retention_ctrl)) { in samsung_pinctrl_probe()
1162 ret = PTR_ERR(drvdata->retention_ctrl); in samsung_pinctrl_probe()
1171 if (ctrl->eint_gpio_init) in samsung_pinctrl_probe()
1172 ctrl->eint_gpio_init(drvdata); in samsung_pinctrl_probe()
1173 if (ctrl->eint_wkup_init) in samsung_pinctrl_probe()
1174 ctrl->eint_wkup_init(drvdata); in samsung_pinctrl_probe()
1180 ret = pinctrl_enable(drvdata->pctl_dev); in samsung_pinctrl_probe()
1196 * samsung_pinctrl_suspend - save pinctrl state for suspend
1205 for (i = 0; i < drvdata->nr_banks; i++) { in samsung_pinctrl_suspend()
1206 struct samsung_pin_bank *bank = &drvdata->pin_banks[i]; in samsung_pinctrl_suspend()
1207 const void __iomem *reg = bank->pctl_base + bank->pctl_offset; in samsung_pinctrl_suspend()
1208 const u8 *offs = bank->type->reg_offset; in samsung_pinctrl_suspend()
1209 const u8 *widths = bank->type->fld_width; in samsung_pinctrl_suspend()
1218 bank->pm_save[type] = readl(reg + offs[type]); in samsung_pinctrl_suspend()
1220 if (widths[PINCFG_TYPE_FUNC] * bank->nr_pins > 32) { in samsung_pinctrl_suspend()
1222 bank->pm_save[PINCFG_TYPE_NUM] = in samsung_pinctrl_suspend()
1225 bank->name, reg, in samsung_pinctrl_suspend()
1226 bank->pm_save[PINCFG_TYPE_FUNC], in samsung_pinctrl_suspend()
1227 bank->pm_save[PINCFG_TYPE_NUM]); in samsung_pinctrl_suspend()
1229 pr_debug("Save %s @ %p (con %#010x)\n", bank->name, in samsung_pinctrl_suspend()
1230 reg, bank->pm_save[PINCFG_TYPE_FUNC]); in samsung_pinctrl_suspend()
1234 if (drvdata->suspend) in samsung_pinctrl_suspend()
1235 drvdata->suspend(drvdata); in samsung_pinctrl_suspend()
1236 if (drvdata->retention_ctrl && drvdata->retention_ctrl->enable) in samsung_pinctrl_suspend()
1237 drvdata->retention_ctrl->enable(drvdata); in samsung_pinctrl_suspend()
1243 * samsung_pinctrl_resume - restore pinctrl state from suspend
1255 if (drvdata->resume) in samsung_pinctrl_resume()
1256 drvdata->resume(drvdata); in samsung_pinctrl_resume()
1258 for (i = 0; i < drvdata->nr_banks; i++) { in samsung_pinctrl_resume()
1259 struct samsung_pin_bank *bank = &drvdata->pin_banks[i]; in samsung_pinctrl_resume()
1260 void __iomem *reg = bank->pctl_base + bank->pctl_offset; in samsung_pinctrl_resume()
1261 const u8 *offs = bank->type->reg_offset; in samsung_pinctrl_resume()
1262 const u8 *widths = bank->type->fld_width; in samsung_pinctrl_resume()
1269 if (widths[PINCFG_TYPE_FUNC] * bank->nr_pins > 32) { in samsung_pinctrl_resume()
1272 bank->name, reg, in samsung_pinctrl_resume()
1275 bank->pm_save[PINCFG_TYPE_FUNC], in samsung_pinctrl_resume()
1276 bank->pm_save[PINCFG_TYPE_NUM]); in samsung_pinctrl_resume()
1277 writel(bank->pm_save[PINCFG_TYPE_NUM], in samsung_pinctrl_resume()
1280 pr_debug("%s @ %p (con %#010x => %#010x)\n", bank->name, in samsung_pinctrl_resume()
1282 bank->pm_save[PINCFG_TYPE_FUNC]); in samsung_pinctrl_resume()
1286 writel(bank->pm_save[type], reg + offs[type]); in samsung_pinctrl_resume()
1289 if (drvdata->retention_ctrl && drvdata->retention_ctrl->disable) in samsung_pinctrl_resume()
1290 drvdata->retention_ctrl->disable(drvdata); in samsung_pinctrl_resume()
1297 { .compatible = "samsung,exynos3250-pinctrl",
1299 { .compatible = "samsung,exynos4210-pinctrl",
1301 { .compatible = "samsung,exynos4x12-pinctrl",
1303 { .compatible = "samsung,exynos5250-pinctrl",
1305 { .compatible = "samsung,exynos5260-pinctrl",
1307 { .compatible = "samsung,exynos5410-pinctrl",
1309 { .compatible = "samsung,exynos5420-pinctrl",
1311 { .compatible = "samsung,s5pv210-pinctrl",
1315 { .compatible = "google,gs101-pinctrl",
1317 { .compatible = "samsung,exynos5433-pinctrl",
1319 { .compatible = "samsung,exynos7-pinctrl",
1321 { .compatible = "samsung,exynos7885-pinctrl",
1323 { .compatible = "samsung,exynos850-pinctrl",
1325 { .compatible = "samsung,exynosautov9-pinctrl",
1327 { .compatible = "samsung,exynosautov920-pinctrl",
1329 { .compatible = "tesla,fsd-pinctrl",
1333 { .compatible = "samsung,s3c64xx-pinctrl",
1347 .name = "samsung-pinctrl",