Lines Matching +full:ls2k +full:- +full:gpio
1 // SPDX-License-Identifier: GPL-2.0+
3 * Loongson GPIO Support
5 * Copyright (C) 2022-2023 Loongson Technology Corporation Limited
13 #include <linux/gpio/driver.h>
49 writeb(bval, lgpio->reg_base + lgpio->chip_data->conf_offset + pin); in loongson_commit_direction()
56 writeb(bval, lgpio->reg_base + lgpio->chip_data->out_offset + pin); in loongson_commit_level()
64 spin_lock_irqsave(&lgpio->lock, flags); in loongson_gpio_direction_input()
66 spin_unlock_irqrestore(&lgpio->lock, flags); in loongson_gpio_direction_input()
76 spin_lock_irqsave(&lgpio->lock, flags); in loongson_gpio_direction_output()
79 spin_unlock_irqrestore(&lgpio->lock, flags); in loongson_gpio_direction_output()
90 bval = readb(lgpio->reg_base + lgpio->chip_data->in_offset + pin); in loongson_gpio_get()
101 bval = readb(lgpio->reg_base + lgpio->chip_data->conf_offset + pin); in loongson_gpio_get_direction()
113 spin_lock_irqsave(&lgpio->lock, flags); in loongson_gpio_set()
115 spin_unlock_irqrestore(&lgpio->lock, flags); in loongson_gpio_set()
120 struct platform_device *pdev = to_platform_device(chip->parent); in loongson_gpio_to_irq()
131 lgpio->reg_base = reg_base; in loongson_gpio_init()
133 if (lgpio->chip_data->mode == BIT_CTRL_MODE) { in loongson_gpio_init()
134 ret = bgpio_init(&lgpio->chip, dev, 8, in loongson_gpio_init()
135 lgpio->reg_base + lgpio->chip_data->in_offset, in loongson_gpio_init()
136 lgpio->reg_base + lgpio->chip_data->out_offset, in loongson_gpio_init()
138 lgpio->reg_base + lgpio->chip_data->conf_offset, in loongson_gpio_init()
141 dev_err(dev, "unable to init generic GPIO\n"); in loongson_gpio_init()
145 lgpio->chip.direction_input = loongson_gpio_direction_input; in loongson_gpio_init()
146 lgpio->chip.get = loongson_gpio_get; in loongson_gpio_init()
147 lgpio->chip.get_direction = loongson_gpio_get_direction; in loongson_gpio_init()
148 lgpio->chip.direction_output = loongson_gpio_direction_output; in loongson_gpio_init()
149 lgpio->chip.set = loongson_gpio_set; in loongson_gpio_init()
150 lgpio->chip.parent = dev; in loongson_gpio_init()
151 spin_lock_init(&lgpio->lock); in loongson_gpio_init()
156 lgpio->chip.can_sleep = 0; in loongson_gpio_init()
157 lgpio->chip.ngpio = ngpios; in loongson_gpio_init()
158 lgpio->chip.label = lgpio->chip_data->label; in loongson_gpio_init()
159 lgpio->chip.to_irq = loongson_gpio_to_irq; in loongson_gpio_init()
161 return devm_gpiochip_add_data(dev, &lgpio->chip, lgpio); in loongson_gpio_init()
168 struct device_node *np = pdev->dev.of_node; in loongson_gpio_probe()
169 struct device *dev = &pdev->dev; in loongson_gpio_probe()
173 return -ENOMEM; in loongson_gpio_probe()
175 lgpio->chip_data = device_get_match_data(dev); in loongson_gpio_probe()
202 .compatible = "loongson,ls2k-gpio",
206 .compatible = "loongson,ls7a-gpio",
224 .name = "loongson-gpio",
237 MODULE_DESCRIPTION("Loongson gpio driver");