Lines Matching +full:g6 +full:- +full:pinctrl

1 // SPDX-License-Identifier: GPL-2.0-only
3 * PIC32 pinctrl driver
15 #include <linux/pinctrl/pinconf.h>
16 #include <linux/pinctrl/pinconf-generic.h>
17 #include <linux/pinctrl/pinctrl.h>
18 #include <linux/pinctrl/pinmux.h>
23 #include <asm/mach-pic32/pic32.h>
25 #include "pinctrl-utils.h"
26 #include "pinctrl-pic32.h"
160 PINCTRL_PIN(102, "G6"),
221 "D9", "G6", "B8", "B15", "D4", "B0", "E3", "B7",
255 "D9", "G6", "B8", "B15", "D4", "B0", "E3", "B7",
260 "D9", "G6", "B8", "B15", "D4", "B0", "E3", "B7",
1590 PIC32_PINCTRL_GROUP(102, G6,
1702 return &pctl->gpio_banks[pin / PINS_PER_BANK]; in pctl_to_bank()
1709 return pctl->ngroups; in pic32_pinctrl_get_groups_count()
1717 return pctl->groups[group].name; in pic32_pinctrl_get_group_name()
1727 *pins = &pctl->groups[group].pin; in pic32_pinctrl_get_group_pins()
1745 return pctl->nfunctions; in pic32_pinmux_get_functions_count()
1753 return pctl->functions[func].name; in pic32_pinmux_get_function_name()
1763 *groups = pctl->functions[func].groups; in pic32_pinmux_get_function_groups()
1764 *num_groups = pctl->functions[func].ngroups; in pic32_pinmux_get_function_groups()
1773 const struct pic32_pin_group *pg = &pctl->groups[group]; in pic32_pinmux_enable()
1774 const struct pic32_function *pf = &pctl->functions[func]; in pic32_pinmux_enable()
1775 const char *fname = pf->name; in pic32_pinmux_enable()
1776 struct pic32_desc_function *functions = pg->functions; in pic32_pinmux_enable()
1778 while (functions->name) { in pic32_pinmux_enable()
1779 if (!strcmp(functions->name, fname)) { in pic32_pinmux_enable()
1780 dev_dbg(pctl->dev, in pic32_pinmux_enable()
1782 fname, functions->muxreg, functions->muxval); in pic32_pinmux_enable()
1784 writel(functions->muxval, pctl->reg_base + functions->muxreg); in pic32_pinmux_enable()
1792 dev_err(pctl->dev, "cannot mux pin %u to function %u\n", group, func); in pic32_pinmux_enable()
1794 return -EINVAL; in pic32_pinmux_enable()
1802 struct pic32_gpio_bank *bank = gpiochip_get_data(range->gc); in pic32_gpio_request_enable()
1803 u32 mask = BIT(offset - bank->gpio_chip.base); in pic32_gpio_request_enable()
1805 dev_dbg(pctl->dev, "requesting gpio %d in bank %d with mask 0x%x\n", in pic32_gpio_request_enable()
1806 offset, bank->gpio_chip.base, mask); in pic32_gpio_request_enable()
1808 writel(mask, bank->reg_base + PIC32_CLR(ANSEL_REG)); in pic32_gpio_request_enable()
1819 writel(mask, bank->reg_base + PIC32_SET(TRIS_REG)); in pic32_gpio_direction_input()
1828 return !!(readl(bank->reg_base + PORT_REG) & BIT(offset)); in pic32_gpio_get()
1838 writel(mask, bank->reg_base + PIC32_SET(PORT_REG)); in pic32_gpio_set()
1840 writel(mask, bank->reg_base + PIC32_CLR(PORT_REG)); in pic32_gpio_set()
1850 writel(mask, bank->reg_base + PIC32_CLR(TRIS_REG)); in pic32_gpio_direction_output()
1859 struct gpio_chip *chip = range->gc; in pic32_gpio_set_direction()
1884 u32 mask = BIT(pin - bank->gpio_chip.base); in pic32_pinconf_get()
1889 arg = !!(readl(bank->reg_base + CNPU_REG) & mask); in pic32_pinconf_get()
1892 arg = !!(readl(bank->reg_base + CNPD_REG) & mask); in pic32_pinconf_get()
1895 arg = !(readl(bank->reg_base + ANSEL_REG) & mask); in pic32_pinconf_get()
1898 arg = !!(readl(bank->reg_base + ANSEL_REG) & mask); in pic32_pinconf_get()
1901 arg = !!(readl(bank->reg_base + ODCU_REG) & mask); in pic32_pinconf_get()
1904 arg = !!(readl(bank->reg_base + TRIS_REG) & mask); in pic32_pinconf_get()
1907 arg = !(readl(bank->reg_base + TRIS_REG) & mask); in pic32_pinconf_get()
1910 dev_err(pctl->dev, "Property %u not supported\n", param); in pic32_pinconf_get()
1911 return -ENOTSUPP; in pic32_pinconf_get()
1927 u32 offset = pin - bank->gpio_chip.base; in pic32_pinconf_set()
1930 dev_dbg(pctl->dev, "setting pin %d bank %d mask 0x%x\n", in pic32_pinconf_set()
1931 pin, bank->gpio_chip.base, mask); in pic32_pinconf_set()
1939 dev_dbg(pctl->dev, " pullup\n"); in pic32_pinconf_set()
1940 writel(mask, bank->reg_base +PIC32_SET(CNPU_REG)); in pic32_pinconf_set()
1943 dev_dbg(pctl->dev, " pulldown\n"); in pic32_pinconf_set()
1944 writel(mask, bank->reg_base + PIC32_SET(CNPD_REG)); in pic32_pinconf_set()
1947 dev_dbg(pctl->dev, " digital\n"); in pic32_pinconf_set()
1948 writel(mask, bank->reg_base + PIC32_CLR(ANSEL_REG)); in pic32_pinconf_set()
1951 dev_dbg(pctl->dev, " analog\n"); in pic32_pinconf_set()
1952 writel(mask, bank->reg_base + PIC32_SET(ANSEL_REG)); in pic32_pinconf_set()
1955 dev_dbg(pctl->dev, " opendrain\n"); in pic32_pinconf_set()
1956 writel(mask, bank->reg_base + PIC32_SET(ODCU_REG)); in pic32_pinconf_set()
1959 pic32_gpio_direction_input(&bank->gpio_chip, offset); in pic32_pinconf_set()
1962 pic32_gpio_direction_output(&bank->gpio_chip, in pic32_pinconf_set()
1966 dev_err(pctl->dev, "Property %u not supported\n", in pic32_pinconf_set()
1968 return -ENOTSUPP; in pic32_pinconf_set()
1982 .name = "pic32-pinctrl",
1993 if (readl(bank->reg_base + TRIS_REG) & BIT(offset)) in pic32_gpio_get_direction()
2003 writel(0, bank->reg_base + CNF_REG); in pic32_gpio_irq_ack()
2010 writel(BIT(PIC32_CNCON_ON), bank->reg_base + PIC32_CLR(CNCON_REG)); in pic32_gpio_irq_mask()
2017 writel(BIT(PIC32_CNCON_ON), bank->reg_base + PIC32_SET(CNCON_REG)); in pic32_gpio_irq_unmask()
2024 pic32_gpio_direction_input(chip, data->hwirq); in pic32_gpio_irq_startup()
2033 u32 mask = BIT(data->hwirq); in pic32_gpio_irq_set_type()
2038 writel(mask, bank->reg_base + PIC32_SET(CNEN_REG)); in pic32_gpio_irq_set_type()
2040 writel(mask, bank->reg_base + PIC32_CLR(CNNE_REG)); in pic32_gpio_irq_set_type()
2042 writel(BIT(PIC32_CNCON_EDGE), bank->reg_base + PIC32_SET(CNCON_REG)); in pic32_gpio_irq_set_type()
2046 writel(mask, bank->reg_base + PIC32_CLR(CNEN_REG)); in pic32_gpio_irq_set_type()
2048 writel(mask, bank->reg_base + PIC32_SET(CNNE_REG)); in pic32_gpio_irq_set_type()
2050 writel(BIT(PIC32_CNCON_EDGE), bank->reg_base + PIC32_SET(CNCON_REG)); in pic32_gpio_irq_set_type()
2054 writel(mask, bank->reg_base + PIC32_SET(CNEN_REG)); in pic32_gpio_irq_set_type()
2056 writel(mask, bank->reg_base + PIC32_SET(CNNE_REG)); in pic32_gpio_irq_set_type()
2058 writel(BIT(PIC32_CNCON_EDGE), bank->reg_base + PIC32_SET(CNCON_REG)); in pic32_gpio_irq_set_type()
2061 return -EINVAL; in pic32_gpio_irq_set_type()
2076 cnen_rise = readl(bank->reg_base + CNEN_REG); in pic32_gpio_get_pending()
2077 cnne_fall = readl(bank->reg_base + CNNE_REG); in pic32_gpio_get_pending()
2100 stat = readl(bank->reg_base + CNF_REG); in pic32_gpio_irq_handler()
2104 generic_handle_irq(irq_linear_revmap(gc->irq.domain, pin)); in pic32_gpio_irq_handler()
2154 pctl = devm_kzalloc(&pdev->dev, sizeof(*pctl), GFP_KERNEL); in pic32_pinctrl_probe()
2156 return -ENOMEM; in pic32_pinctrl_probe()
2157 pctl->dev = &pdev->dev; in pic32_pinctrl_probe()
2158 dev_set_drvdata(&pdev->dev, pctl); in pic32_pinctrl_probe()
2161 pctl->reg_base = devm_ioremap_resource(&pdev->dev, res); in pic32_pinctrl_probe()
2162 if (IS_ERR(pctl->reg_base)) in pic32_pinctrl_probe()
2163 return PTR_ERR(pctl->reg_base); in pic32_pinctrl_probe()
2165 pctl->clk = devm_clk_get(&pdev->dev, NULL); in pic32_pinctrl_probe()
2166 if (IS_ERR(pctl->clk)) { in pic32_pinctrl_probe()
2167 ret = PTR_ERR(pctl->clk); in pic32_pinctrl_probe()
2168 dev_err(&pdev->dev, "clk get failed\n"); in pic32_pinctrl_probe()
2172 ret = clk_prepare_enable(pctl->clk); in pic32_pinctrl_probe()
2174 dev_err(&pdev->dev, "clk enable failed\n"); in pic32_pinctrl_probe()
2178 pctl->pins = pic32_pins; in pic32_pinctrl_probe()
2179 pctl->npins = ARRAY_SIZE(pic32_pins); in pic32_pinctrl_probe()
2180 pctl->functions = pic32_functions; in pic32_pinctrl_probe()
2181 pctl->nfunctions = ARRAY_SIZE(pic32_functions); in pic32_pinctrl_probe()
2182 pctl->groups = pic32_groups; in pic32_pinctrl_probe()
2183 pctl->ngroups = ARRAY_SIZE(pic32_groups); in pic32_pinctrl_probe()
2184 pctl->gpio_banks = pic32_gpio_banks; in pic32_pinctrl_probe()
2185 pctl->nbanks = ARRAY_SIZE(pic32_gpio_banks); in pic32_pinctrl_probe()
2187 pic32_pinctrl_desc.pins = pctl->pins; in pic32_pinctrl_probe()
2188 pic32_pinctrl_desc.npins = pctl->npins; in pic32_pinctrl_probe()
2192 pctl->pctldev = devm_pinctrl_register(&pdev->dev, &pic32_pinctrl_desc, in pic32_pinctrl_probe()
2194 if (IS_ERR(pctl->pctldev)) { in pic32_pinctrl_probe()
2195 dev_err(&pdev->dev, "Failed to register pinctrl device\n"); in pic32_pinctrl_probe()
2196 return PTR_ERR(pctl->pctldev); in pic32_pinctrl_probe()
2204 struct device_node *np = pdev->dev.of_node; in pic32_gpio_probe()
2210 if (of_property_read_u32(np, "microchip,gpio-bank", &id)) { in pic32_gpio_probe()
2211 dev_err(&pdev->dev, "microchip,gpio-bank property not found\n"); in pic32_gpio_probe()
2212 return -EINVAL; in pic32_gpio_probe()
2216 dev_err(&pdev->dev, "invalid microchip,gpio-bank property\n"); in pic32_gpio_probe()
2217 return -EINVAL; in pic32_gpio_probe()
2222 bank->reg_base = devm_platform_ioremap_resource(pdev, 0); in pic32_gpio_probe()
2223 if (IS_ERR(bank->reg_base)) in pic32_gpio_probe()
2224 return PTR_ERR(bank->reg_base); in pic32_gpio_probe()
2230 bank->clk = devm_clk_get(&pdev->dev, NULL); in pic32_gpio_probe()
2231 if (IS_ERR(bank->clk)) { in pic32_gpio_probe()
2232 ret = PTR_ERR(bank->clk); in pic32_gpio_probe()
2233 dev_err(&pdev->dev, "clk get failed\n"); in pic32_gpio_probe()
2237 ret = clk_prepare_enable(bank->clk); in pic32_gpio_probe()
2239 dev_err(&pdev->dev, "clk enable failed\n"); in pic32_gpio_probe()
2243 bank->gpio_chip.parent = &pdev->dev; in pic32_gpio_probe()
2244 bank->gpio_chip.of_node = np; in pic32_gpio_probe()
2245 girq = &bank->gpio_chip.irq; in pic32_gpio_probe()
2246 girq->chip = &bank->irq_chip; in pic32_gpio_probe()
2247 girq->parent_handler = pic32_gpio_irq_handler; in pic32_gpio_probe()
2248 girq->num_parents = 1; in pic32_gpio_probe()
2249 girq->parents = devm_kcalloc(&pdev->dev, 1, sizeof(*girq->parents), in pic32_gpio_probe()
2251 if (!girq->parents) in pic32_gpio_probe()
2252 return -ENOMEM; in pic32_gpio_probe()
2253 girq->default_type = IRQ_TYPE_NONE; in pic32_gpio_probe()
2254 girq->handler = handle_level_irq; in pic32_gpio_probe()
2255 girq->parents[0] = irq; in pic32_gpio_probe()
2256 ret = gpiochip_add_data(&bank->gpio_chip, bank); in pic32_gpio_probe()
2258 dev_err(&pdev->dev, "Failed to add GPIO chip %u: %d\n", in pic32_gpio_probe()
2266 { .compatible = "microchip,pic32mzda-pinctrl", },
2272 .name = "pic32-pinctrl",
2280 { .compatible = "microchip,pic32mzda-gpio", },
2286 .name = "pic32-gpio",