Lines Matching full:bank

351  * given a pin number that is local to a pin controller, find out the pin bank
352 * and the register base of the pin bank.
356 struct samsung_pin_bank **bank) in pin_to_reg_bank() argument
368 if (bank) in pin_to_reg_bank()
369 *bank = b; in pin_to_reg_bank()
378 struct samsung_pin_bank *bank; in samsung_pinmux_setup() local
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()
406 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_pinmux_setup()
413 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_pinmux_setup()
442 struct samsung_pin_bank *bank; in samsung_pinconf_rw() local
451 pin_to_reg_bank(drvdata, pin, &reg_base, &pin_offset, &bank); in samsung_pinconf_rw()
452 type = bank->type; in samsung_pinconf_rw()
466 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_pinconf_rw()
483 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_pinconf_rw()
552 * The samsung_gpio_set_vlaue() should be called with "bank->slock" held
558 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_set_value() local
559 const struct samsung_pin_bank_type *type = bank->type; in samsung_gpio_set_value()
563 reg = bank->pctl_base + bank->pctl_offset; in samsung_gpio_set_value()
576 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_set() local
577 struct samsung_pinctrl_drv_data *drvdata = bank->drvdata; in samsung_gpio_set()
587 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_set()
589 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_set()
601 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_get() local
602 const struct samsung_pin_bank_type *type = bank->type; in samsung_gpio_get()
603 struct samsung_pinctrl_drv_data *drvdata = bank->drvdata; in samsung_gpio_get()
606 reg = bank->pctl_base + bank->pctl_offset; in samsung_gpio_get()
624 * The samsung_gpio_set_direction() should be called with "bank->slock" held
633 struct samsung_pin_bank *bank; in samsung_gpio_set_direction() local
637 bank = gpiochip_get_data(gc); in samsung_gpio_set_direction()
638 type = bank->type; in samsung_gpio_set_direction()
640 reg = bank->pctl_base + bank->pctl_offset in samsung_gpio_set_direction()
663 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_direction_input() local
664 struct samsung_pinctrl_drv_data *drvdata = bank->drvdata; in samsung_gpio_direction_input()
674 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_direction_input()
676 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_direction_input()
687 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_direction_output() local
688 struct samsung_pinctrl_drv_data *drvdata = bank->drvdata; in samsung_gpio_direction_output()
698 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_direction_output()
701 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_direction_output()
714 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_to_irq() local
717 if (!bank->irq_domain) in samsung_gpio_to_irq()
720 virq = irq_create_mapping(bank->irq_domain, offset); in samsung_gpio_to_irq()
727 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_add_pin_ranges() local
729 bank->grange.name = bank->name; in samsung_add_pin_ranges()
730 bank->grange.id = bank->id; in samsung_add_pin_ranges()
731 bank->grange.pin_base = bank->pin_base; in samsung_add_pin_ranges()
732 bank->grange.base = gc->base; in samsung_add_pin_ranges()
733 bank->grange.npins = bank->nr_pins; in samsung_add_pin_ranges()
734 bank->grange.gc = &bank->gpio_chip; in samsung_add_pin_ranges()
735 pinctrl_add_gpio_range(bank->drvdata->pctl_dev, &bank->grange); in samsung_add_pin_ranges()
926 int pin, bank, ret; in samsung_pinctrl_register() local
957 /* for each pin, the name of the pin is pin-bank name + pin number */ in samsung_pinctrl_register()
958 for (bank = 0; bank < drvdata->nr_banks; bank++) { in samsung_pinctrl_register()
959 pin_bank = &drvdata->pin_banks[bank]; in samsung_pinctrl_register()
960 pin_bank->id = bank; in samsung_pinctrl_register()
987 struct samsung_pin_bank *bank = drvdata->pin_banks; in samsung_pinctrl_unregister() local
990 for (i = 0; i < drvdata->nr_banks; ++i, ++bank) in samsung_pinctrl_unregister()
991 pinctrl_remove_gpio_range(drvdata->pctl_dev, &bank->grange); in samsung_pinctrl_unregister()
1012 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_set_pud() local
1013 const struct samsung_pin_bank_type *type = bank->type; in samsung_gpio_set_pud()
1017 reg = bank->pctl_base + bank->pctl_offset; in samsung_gpio_set_pud()
1032 struct samsung_pin_bank *bank = gpiochip_get_data(gc); in samsung_gpio_set_config() local
1033 struct samsung_pinctrl_drv_data *drvdata = bank->drvdata; in samsung_gpio_set_config()
1058 raw_spin_lock_irqsave(&bank->slock, flags); in samsung_gpio_set_config()
1060 raw_spin_unlock_irqrestore(&bank->slock, flags); in samsung_gpio_set_config()
1084 struct samsung_pin_bank *bank = drvdata->pin_banks; in samsung_gpiolib_register() local
1089 for (i = 0; i < drvdata->nr_banks; ++i, ++bank) { in samsung_gpiolib_register()
1090 bank->gpio_chip = samsung_gpiolib_chip; in samsung_gpiolib_register()
1092 gc = &bank->gpio_chip; in samsung_gpiolib_register()
1094 gc->ngpio = bank->nr_pins; in samsung_gpiolib_register()
1096 gc->fwnode = bank->fwnode; in samsung_gpiolib_register()
1097 gc->label = bank->name; in samsung_gpiolib_register()
1099 ret = devm_gpiochip_add_data(&pdev->dev, gc, bank); in samsung_gpiolib_register()
1134 struct samsung_pin_bank *bank; in samsung_banks_node_put() local
1137 bank = d->pin_banks; in samsung_banks_node_put()
1138 for (i = 0; i < d->nr_banks; ++i, ++bank) in samsung_banks_node_put()
1139 fwnode_handle_put(bank->fwnode); in samsung_banks_node_put()
1144 * skipping optional "-gpio" node suffix. When found, assign node to the bank.
1148 const char *suffix = "-gpio-bank"; in samsung_banks_node_get()
1149 struct samsung_pin_bank *bank; in samsung_banks_node_get() local
1151 /* Pin bank names are up to 4 characters */ in samsung_banks_node_get()
1156 bank = d->pin_banks; in samsung_banks_node_get()
1157 for (i = 0; i < d->nr_banks; ++i, ++bank) { in samsung_banks_node_get()
1158 strscpy(node_name, bank->name, sizeof(node_name)); in samsung_banks_node_get()
1161 dev_err(dev, "Too long pin bank name '%s', ignoring\n", in samsung_banks_node_get()
1162 bank->name); in samsung_banks_node_get()
1171 if (of_node_name_eq(np, bank->name)) in samsung_banks_node_get()
1176 bank->fwnode = child; in samsung_banks_node_get()
1178 dev_warn(dev, "Missing node for bank %s - invalid DTB\n", in samsung_banks_node_get()
1179 bank->name); in samsung_banks_node_get()
1191 struct samsung_pin_bank *bank; in samsung_pinctrl_get_soc_data() local
1225 bank = d->pin_banks; in samsung_pinctrl_get_soc_data()
1227 for (i = 0; i < ctrl->nr_banks; ++i, ++bdata, ++bank) { in samsung_pinctrl_get_soc_data()
1228 bank->type = bdata->type; in samsung_pinctrl_get_soc_data()
1229 bank->pctl_offset = bdata->pctl_offset; in samsung_pinctrl_get_soc_data()
1230 bank->nr_pins = bdata->nr_pins; in samsung_pinctrl_get_soc_data()
1231 bank->eint_func = bdata->eint_func; in samsung_pinctrl_get_soc_data()
1232 bank->eint_type = bdata->eint_type; in samsung_pinctrl_get_soc_data()
1233 bank->eint_mask = bdata->eint_mask; in samsung_pinctrl_get_soc_data()
1234 bank->eint_offset = bdata->eint_offset; in samsung_pinctrl_get_soc_data()
1235 bank->eint_con_offset = bdata->eint_con_offset; in samsung_pinctrl_get_soc_data()
1236 bank->eint_mask_offset = bdata->eint_mask_offset; in samsung_pinctrl_get_soc_data()
1237 bank->eint_pend_offset = bdata->eint_pend_offset; in samsung_pinctrl_get_soc_data()
1238 bank->eint_fltcon_offset = bdata->eint_fltcon_offset; in samsung_pinctrl_get_soc_data()
1239 bank->name = bdata->name; in samsung_pinctrl_get_soc_data()
1241 raw_spin_lock_init(&bank->slock); in samsung_pinctrl_get_soc_data()
1242 bank->drvdata = d; in samsung_pinctrl_get_soc_data()
1243 bank->pin_base = d->nr_pins; in samsung_pinctrl_get_soc_data()
1244 d->nr_pins += bank->nr_pins; in samsung_pinctrl_get_soc_data()
1246 bank->eint_base = virt_base[0]; in samsung_pinctrl_get_soc_data()
1247 bank->pctl_base = virt_base[bdata->pctl_res_idx]; in samsung_pinctrl_get_soc_data()
1341 struct samsung_pin_bank *bank; in samsung_pinctrl_suspend() local
1352 bank = &drvdata->pin_banks[i]; in samsung_pinctrl_suspend()
1353 const void __iomem *reg = bank->pctl_base + bank->pctl_offset; in samsung_pinctrl_suspend()
1354 const u8 *offs = bank->type->reg_offset; in samsung_pinctrl_suspend()
1355 const u8 *widths = bank->type->fld_width; in samsung_pinctrl_suspend()
1364 bank->pm_save[type] = readl(reg + offs[type]); in samsung_pinctrl_suspend()
1366 if (widths[PINCFG_TYPE_FUNC] * bank->nr_pins > 32) { in samsung_pinctrl_suspend()
1368 bank->pm_save[PINCFG_TYPE_NUM] = in samsung_pinctrl_suspend()
1371 bank->name, reg, in samsung_pinctrl_suspend()
1372 bank->pm_save[PINCFG_TYPE_FUNC], in samsung_pinctrl_suspend()
1373 bank->pm_save[PINCFG_TYPE_NUM]); in samsung_pinctrl_suspend()
1375 pr_debug("Save %s @ %p (con %#010x)\n", bank->name, in samsung_pinctrl_suspend()
1376 reg, bank->pm_save[PINCFG_TYPE_FUNC]); in samsung_pinctrl_suspend()
1381 bank = &drvdata->pin_banks[i]; in samsung_pinctrl_suspend()
1383 drvdata->suspend(bank); in samsung_pinctrl_suspend()
1405 struct samsung_pin_bank *bank; in samsung_pinctrl_resume() local
1421 bank = &drvdata->pin_banks[i]; in samsung_pinctrl_resume()
1423 drvdata->resume(bank); in samsung_pinctrl_resume()
1427 bank = &drvdata->pin_banks[i]; in samsung_pinctrl_resume()
1428 void __iomem *reg = bank->pctl_base + bank->pctl_offset; in samsung_pinctrl_resume()
1429 const u8 *offs = bank->type->reg_offset; in samsung_pinctrl_resume()
1430 const u8 *widths = bank->type->fld_width; in samsung_pinctrl_resume()
1437 if (widths[PINCFG_TYPE_FUNC] * bank->nr_pins > 32) { in samsung_pinctrl_resume()
1440 bank->name, reg, in samsung_pinctrl_resume()
1443 bank->pm_save[PINCFG_TYPE_FUNC], in samsung_pinctrl_resume()
1444 bank->pm_save[PINCFG_TYPE_NUM]); in samsung_pinctrl_resume()
1445 writel(bank->pm_save[PINCFG_TYPE_NUM], in samsung_pinctrl_resume()
1448 pr_debug("%s @ %p (con %#010x => %#010x)\n", bank->name, in samsung_pinctrl_resume()
1450 bank->pm_save[PINCFG_TYPE_FUNC]); in samsung_pinctrl_resume()
1454 writel(bank->pm_save[type], reg + offs[type]); in samsung_pinctrl_resume()