Lines Matching refs:lgpio
44 static inline void loongson_commit_direction(struct loongson_gpio_chip *lgpio, unsigned int pin,
49 writeb(bval, lgpio->reg_base + lgpio->chip_data->conf_offset + pin);
52 static void loongson_commit_level(struct loongson_gpio_chip *lgpio, unsigned int pin, int high)
56 writeb(bval, lgpio->reg_base + lgpio->chip_data->out_offset + pin);
62 struct loongson_gpio_chip *lgpio = to_loongson_gpio_chip(chip);
64 spin_lock_irqsave(&lgpio->lock, flags);
65 loongson_commit_direction(lgpio, pin, 1);
66 spin_unlock_irqrestore(&lgpio->lock, flags);
74 struct loongson_gpio_chip *lgpio = to_loongson_gpio_chip(chip);
76 spin_lock_irqsave(&lgpio->lock, flags);
77 loongson_commit_level(lgpio, pin, value);
78 loongson_commit_direction(lgpio, pin, 0);
79 spin_unlock_irqrestore(&lgpio->lock, flags);
88 struct loongson_gpio_chip *lgpio = to_loongson_gpio_chip(chip);
90 bval = readb(lgpio->reg_base + lgpio->chip_data->in_offset + pin);
99 struct loongson_gpio_chip *lgpio = to_loongson_gpio_chip(chip);
101 bval = readb(lgpio->reg_base + lgpio->chip_data->conf_offset + pin);
111 struct loongson_gpio_chip *lgpio = to_loongson_gpio_chip(chip);
113 spin_lock_irqsave(&lgpio->lock, flags);
114 loongson_commit_level(lgpio, pin, value);
115 spin_unlock_irqrestore(&lgpio->lock, flags);
125 static int loongson_gpio_init(struct device *dev, struct loongson_gpio_chip *lgpio,
131 lgpio->reg_base = reg_base;
133 if (lgpio->chip_data->mode == BIT_CTRL_MODE) {
134 ret = bgpio_init(&lgpio->chip, dev, 8,
135 lgpio->reg_base + lgpio->chip_data->in_offset,
136 lgpio->reg_base + lgpio->chip_data->out_offset,
138 lgpio->reg_base + lgpio->chip_data->conf_offset,
145 lgpio->chip.direction_input = loongson_gpio_direction_input;
146 lgpio->chip.get = loongson_gpio_get;
147 lgpio->chip.get_direction = loongson_gpio_get_direction;
148 lgpio->chip.direction_output = loongson_gpio_direction_output;
149 lgpio->chip.set = loongson_gpio_set;
150 lgpio->chip.parent = dev;
151 spin_lock_init(&lgpio->lock);
156 lgpio->chip.can_sleep = 0;
157 lgpio->chip.ngpio = ngpios;
158 lgpio->chip.label = lgpio->chip_data->label;
159 lgpio->chip.to_irq = loongson_gpio_to_irq;
161 return devm_gpiochip_add_data(dev, &lgpio->chip, lgpio);
167 struct loongson_gpio_chip *lgpio;
171 lgpio = devm_kzalloc(dev, sizeof(*lgpio), GFP_KERNEL);
172 if (!lgpio)
175 lgpio->chip_data = device_get_match_data(dev);
181 return loongson_gpio_init(dev, lgpio, np, reg_base);