Lines Matching +full:ls1x +full:- +full:gpio
1 // SPDX-License-Identifier: GPL-2.0-only
3 * GPIO Driver for Loongson 1 SoC
5 * Copyright (C) 2015-2023 Keguang Zhang <[email protected]>
9 #include <linux/gpio/driver.h>
13 /* Loongson 1 GPIO Register Definitions */
29 raw_spin_lock_irqsave(&gc->bgpio_lock, flags); in ls1x_gpio_request()
30 __raw_writel(__raw_readl(ls1x_gc->reg_base + GPIO_CFG) | BIT(offset), in ls1x_gpio_request()
31 ls1x_gc->reg_base + GPIO_CFG); in ls1x_gpio_request()
32 raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); in ls1x_gpio_request()
42 raw_spin_lock_irqsave(&gc->bgpio_lock, flags); in ls1x_gpio_free()
43 __raw_writel(__raw_readl(ls1x_gc->reg_base + GPIO_CFG) & ~BIT(offset), in ls1x_gpio_free()
44 ls1x_gc->reg_base + GPIO_CFG); in ls1x_gpio_free()
45 raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); in ls1x_gpio_free()
50 struct device *dev = &pdev->dev; in ls1x_gpio_probe()
56 return -ENOMEM; in ls1x_gpio_probe()
58 ls1x_gc->reg_base = devm_platform_ioremap_resource(pdev, 0); in ls1x_gpio_probe()
59 if (IS_ERR(ls1x_gc->reg_base)) in ls1x_gpio_probe()
60 return PTR_ERR(ls1x_gc->reg_base); in ls1x_gpio_probe()
62 ret = bgpio_init(&ls1x_gc->gc, dev, 4, ls1x_gc->reg_base + GPIO_DATA, in ls1x_gpio_probe()
63 ls1x_gc->reg_base + GPIO_OUTPUT, NULL, in ls1x_gpio_probe()
64 NULL, ls1x_gc->reg_base + GPIO_DIR, 0); in ls1x_gpio_probe()
68 ls1x_gc->gc.owner = THIS_MODULE; in ls1x_gpio_probe()
69 ls1x_gc->gc.request = ls1x_gpio_request; in ls1x_gpio_probe()
70 ls1x_gc->gc.free = ls1x_gpio_free; in ls1x_gpio_probe()
75 ls1x_gc->gc.ngpio = 0; in ls1x_gpio_probe()
77 ret = devm_gpiochip_add_data(dev, &ls1x_gc->gc, ls1x_gc); in ls1x_gpio_probe()
83 dev_info(dev, "GPIO controller registered with %d pins\n", in ls1x_gpio_probe()
84 ls1x_gc->gc.ngpio); in ls1x_gpio_probe()
88 dev_err(dev, "failed to register GPIO controller\n"); in ls1x_gpio_probe()
93 { .compatible = "loongson,ls1x-gpio" },
101 .name = "ls1x-gpio",
109 MODULE_DESCRIPTION("Loongson1 GPIO driver");