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

6  * (C) Copyright 2007-2011
10 * SPDX-License-Identifier: GPL-2.0+
21 #include <dm/device-internal.h>
22 #include <dt-bindings/gpio/gpio.h>
30 const char *bank_name; /* Name of bank, e.g. "B" */
38 u32 bank = GPIO_BANK(pin); in sunxi_gpio_output() local
40 struct sunxi_gpio *pio = BANK_TO_GPIO(bank); in sunxi_gpio_output()
42 dat = readl(&pio->dat); in sunxi_gpio_output()
48 writel(dat, &pio->dat); in sunxi_gpio_output()
56 u32 bank = GPIO_BANK(pin); in sunxi_gpio_input() local
58 struct sunxi_gpio *pio = BANK_TO_GPIO(bank); in sunxi_gpio_input()
60 dat = readl(&pio->dat); in sunxi_gpio_input()
100 int sunxi_name_to_gpio(const char *name) in sunxi_name_to_gpio() argument
107 if (*name == 'P' || *name == 'p') in sunxi_name_to_gpio()
108 name++; in sunxi_name_to_gpio()
109 if (*name >= 'A') { in sunxi_name_to_gpio()
110 group = *name - (*name > 'a' ? 'a' : 'A'); in sunxi_name_to_gpio()
112 name++; in sunxi_name_to_gpio()
115 pin = simple_strtol(name, &eptr, 10); in sunxi_name_to_gpio()
116 if (!*name || *eptr) in sunxi_name_to_gpio()
117 return -1; in sunxi_name_to_gpio()
119 return -1; in sunxi_name_to_gpio()
124 int sunxi_name_to_gpio_bank(const char *name) in sunxi_name_to_gpio_bank() argument
128 if (*name == 'P' || *name == 'p') in sunxi_name_to_gpio_bank()
129 name++; in sunxi_name_to_gpio_bank()
130 if (*name >= 'A') { in sunxi_name_to_gpio_bank()
131 group = *name - (*name > 'a' ? 'a' : 'A'); in sunxi_name_to_gpio_bank()
135 return -1; in sunxi_name_to_gpio_bank()
140 int sunxi_name_to_gpio(const char *name) in sunxi_name_to_gpio() argument
147 if (strcasecmp(name, "AXP0-VBUS-DETECT") == 0) { in sunxi_name_to_gpio()
150 name = lookup; in sunxi_name_to_gpio()
151 } else if (strcasecmp(name, "AXP0-VBUS-ENABLE") == 0) { in sunxi_name_to_gpio()
154 name = lookup; in sunxi_name_to_gpio()
157 ret = gpio_lookup_name(name, NULL, NULL, &gpio); in sunxi_name_to_gpio()
166 sunxi_gpio_set_cfgbank(plat->regs, offset, SUNXI_GPIO_INPUT); in sunxi_gpio_direction_input()
177 sunxi_gpio_set_cfgbank(plat->regs, offset, SUNXI_GPIO_OUTPUT); in sunxi_gpio_direction_output()
178 clrsetbits_le32(&plat->regs->dat, 1 << num, value ? (1 << num) : 0); in sunxi_gpio_direction_output()
189 dat = readl(&plat->regs->dat); in sunxi_gpio_get_value()
201 clrsetbits_le32(&plat->regs->dat, 1 << num, value ? (1 << num) : 0); in sunxi_gpio_set_value()
210 func = sunxi_gpio_get_cfgbank(plat->regs, offset); in sunxi_gpio_get_function()
224 ret = device_get_child(dev, args->args[0], &desc->dev); in sunxi_gpio_xlate()
227 desc->offset = args->args[1]; in sunxi_gpio_xlate()
228 desc->flags = args->args[2] & GPIO_ACTIVE_LOW ? GPIOD_ACTIVE_LOW : 0; in sunxi_gpio_xlate()
243 * Returns the name of a GPIO bank
247 * @bank: Bank number (0, 1..n-1)
248 * @return allocated string containing the name
250 static char *gpio_bank_name(int bank) in gpio_bank_name() argument
252 char *name; in gpio_bank_name() local
254 name = malloc(3); in gpio_bank_name()
255 if (name) { in gpio_bank_name()
256 name[0] = 'P'; in gpio_bank_name()
257 name[1] = 'A' + bank; in gpio_bank_name()
258 name[2] = '\0'; in gpio_bank_name()
261 return name; in gpio_bank_name()
271 uc_priv->gpio_count = plat->gpio_count; in gpio_sunxi_probe()
272 uc_priv->bank_name = plat->bank_name; in gpio_sunxi_probe()
284 * We have a top-level GPIO device with no actual GPIOs. It has a child
285 * device for each Sunxi bank.
291 struct sunxi_gpio_platdata *plat = parent->platdata; in gpio_sunxi_bind()
293 int bank, ret; in gpio_sunxi_bind() local
300 for (bank = 0; bank < soc_data->no_banks; bank++) { in gpio_sunxi_bind()
306 return -ENOMEM; in gpio_sunxi_bind()
307 plat->regs = &ctlr->gpio_bank[bank]; in gpio_sunxi_bind()
308 plat->bank_name = gpio_bank_name(soc_data->start + bank); in gpio_sunxi_bind()
309 plat->gpio_count = SUNXI_GPIOS_PER_BANK; in gpio_sunxi_bind()
311 ret = device_bind(parent, parent->driver, in gpio_sunxi_bind()
312 plat->bank_name, plat, -1, &dev); in gpio_sunxi_bind()
327 .start = 'L' - 'A',
332 .start = 'L' - 'A',
337 .start = 'L' - 'A',
345 ID("allwinner,sun4i-a10-pinctrl", a_all),
346 ID("allwinner,sun5i-a10s-pinctrl", a_all),
347 ID("allwinner,sun5i-a13-pinctrl", a_all),
348 ID("allwinner,sun6i-a31-pinctrl", a_all),
349 ID("allwinner,sun6i-a31s-pinctrl", a_all),
350 ID("allwinner,sun7i-a20-pinctrl", a_all),
351 ID("allwinner,sun8i-a23-pinctrl", a_all),
352 ID("allwinner,sun8i-a33-pinctrl", a_all),
353 ID("allwinner,sun8i-a83t-pinctrl", a_all),
354 ID("allwinner,sun8i-h3-pinctrl", a_all),
355 ID("allwinner,sun8i-r40-pinctrl", a_all),
356 ID("allwinner,sun9i-a80-pinctrl", a_all),
357 ID("allwinner,sun6i-a31-r-pinctrl", l_2),
358 ID("allwinner,sun8i-a23-r-pinctrl", l_1),
359 ID("allwinner,sun8i-a83t-r-pinctrl", l_1),
360 ID("allwinner,sun8i-h3-r-pinctrl", l_1),
361 ID("allwinner,sun9i-a80-r-pinctrl", l_3),
366 .name = "gpio_sunxi",