Lines Matching +full:loongson +full:- +full:1
1 // SPDX-License-Identifier: GPL-2.0+
3 * Loongson GPIO Support
5 * Copyright (C) 2022-2023 Loongson Technology Corporation Limited
47 u8 bval = input ? 1 : 0; in loongson_commit_direction()
49 writeb(bval, lgpio->reg_base + lgpio->chip_data->conf_offset + pin); in loongson_commit_direction()
54 u8 bval = high ? 1 : 0; in loongson_commit_level()
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()
65 loongson_commit_direction(lgpio, pin, 1); 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()
91 val = bval & 1; in loongson_gpio_get()
101 bval = readb(lgpio->reg_base + lgpio->chip_data->conf_offset + pin); in loongson_gpio_get_direction()
102 if (bval & 1) 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()
121 struct platform_device *pdev = to_platform_device(chip->parent); in loongson_gpio_to_irq()
124 if (lgpio->chip_data->mode == BIT_CTRL_MODE) { in loongson_gpio_to_irq()
126 u = readl(lgpio->reg_base + lgpio->chip_data->inten_offset + (offset / 32) * 4); in loongson_gpio_to_irq()
128 writel(u, lgpio->reg_base + lgpio->chip_data->inten_offset + (offset / 32) * 4); in loongson_gpio_to_irq()
130 writeb(1, lgpio->reg_base + lgpio->chip_data->inten_offset + offset); in loongson_gpio_to_irq()
141 lgpio->reg_base = reg_base; in loongson_gpio_init()
142 if (lgpio->chip_data->mode == BIT_CTRL_MODE) { in loongson_gpio_init()
143 ret = bgpio_init(&lgpio->chip, dev, 8, in loongson_gpio_init()
144 lgpio->reg_base + lgpio->chip_data->in_offset, in loongson_gpio_init()
145 lgpio->reg_base + lgpio->chip_data->out_offset, in loongson_gpio_init()
147 lgpio->reg_base + lgpio->chip_data->conf_offset, in loongson_gpio_init()
154 lgpio->chip.direction_input = loongson_gpio_direction_input; in loongson_gpio_init()
155 lgpio->chip.get = loongson_gpio_get; in loongson_gpio_init()
156 lgpio->chip.get_direction = loongson_gpio_get_direction; in loongson_gpio_init()
157 lgpio->chip.direction_output = loongson_gpio_direction_output; in loongson_gpio_init()
158 lgpio->chip.set = loongson_gpio_set; in loongson_gpio_init()
159 lgpio->chip.parent = dev; in loongson_gpio_init()
160 spin_lock_init(&lgpio->lock); in loongson_gpio_init()
163 lgpio->chip.label = lgpio->chip_data->label; in loongson_gpio_init()
164 lgpio->chip.can_sleep = false; in loongson_gpio_init()
165 if (lgpio->chip_data->inten_offset) in loongson_gpio_init()
166 lgpio->chip.to_irq = loongson_gpio_to_irq; in loongson_gpio_init()
168 return devm_gpiochip_add_data(dev, &lgpio->chip, lgpio); in loongson_gpio_init()
175 struct device *dev = &pdev->dev; in loongson_gpio_probe()
179 return -ENOMEM; in loongson_gpio_probe()
181 lgpio->chip_data = device_get_match_data(dev); in loongson_gpio_probe()
275 /* Loongson-3A6000 node GPIO */
286 .compatible = "loongson,ls2k-gpio",
290 .compatible = "loongson,ls2k0500-gpio0",
294 .compatible = "loongson,ls2k0500-gpio1",
298 .compatible = "loongson,ls2k2000-gpio0",
302 .compatible = "loongson,ls2k2000-gpio1",
306 .compatible = "loongson,ls2k2000-gpio2",
310 .compatible = "loongson,ls3a5000-gpio",
314 .compatible = "loongson,ls7a-gpio",
318 .compatible = "loongson,ls7a2000-gpio1",
322 .compatible = "loongson,ls7a2000-gpio2",
326 .compatible = "loongson,ls3a6000-gpio",
372 .name = "loongson-gpio",
385 MODULE_DESCRIPTION("Loongson gpio driver");