Lines Matching refs:gpio
69 static void tqmx86_gpio_clrsetbits(struct tqmx86_gpio_data *gpio, in tqmx86_gpio_clrsetbits() argument
71 __must_hold(&gpio->spinlock) in tqmx86_gpio_clrsetbits()
73 u8 val = tqmx86_gpio_read(gpio, reg); in tqmx86_gpio_clrsetbits()
78 tqmx86_gpio_write(gpio, val, reg); in tqmx86_gpio_clrsetbits()
83 struct tqmx86_gpio_data *gpio = gpiochip_get_data(chip); in tqmx86_gpio_get() local
85 return !!(tqmx86_gpio_read(gpio, TQMX86_GPIOD) & BIT(offset)); in tqmx86_gpio_get()
88 static void _tqmx86_gpio_set(struct tqmx86_gpio_data *gpio, unsigned int offset, in _tqmx86_gpio_set() argument
90 __must_hold(&gpio->spinlock) in _tqmx86_gpio_set()
92 __assign_bit(offset, gpio->output, value); in _tqmx86_gpio_set()
93 tqmx86_gpio_write(gpio, bitmap_get_value8(gpio->output, 0), TQMX86_GPIOD); in _tqmx86_gpio_set()
99 struct tqmx86_gpio_data *gpio = gpiochip_get_data(chip); in tqmx86_gpio_set() local
101 guard(raw_spinlock_irqsave)(&gpio->spinlock); in tqmx86_gpio_set()
103 _tqmx86_gpio_set(gpio, offset, value); in tqmx86_gpio_set()
111 struct tqmx86_gpio_data *gpio = gpiochip_get_data(chip); in tqmx86_gpio_direction_input() local
113 guard(raw_spinlock_irqsave)(&gpio->spinlock); in tqmx86_gpio_direction_input()
115 tqmx86_gpio_clrsetbits(gpio, BIT(offset), 0, TQMX86_GPIODD); in tqmx86_gpio_direction_input()
124 struct tqmx86_gpio_data *gpio = gpiochip_get_data(chip); in tqmx86_gpio_direction_output() local
126 guard(raw_spinlock_irqsave)(&gpio->spinlock); in tqmx86_gpio_direction_output()
128 _tqmx86_gpio_set(gpio, offset, value); in tqmx86_gpio_direction_output()
129 tqmx86_gpio_clrsetbits(gpio, 0, BIT(offset), TQMX86_GPIODD); in tqmx86_gpio_direction_output()
137 struct tqmx86_gpio_data *gpio = gpiochip_get_data(chip); in tqmx86_gpio_get_direction() local
140 val = tqmx86_gpio_read(gpio, TQMX86_GPIODD); in tqmx86_gpio_get_direction()
148 static void tqmx86_gpio_irq_config(struct tqmx86_gpio_data *gpio, int hwirq) in tqmx86_gpio_irq_config() argument
149 __must_hold(&gpio->spinlock) in tqmx86_gpio_irq_config()
154 if (gpio->irq_type[hwirq] & TQMX86_INT_UNMASKED) { in tqmx86_gpio_irq_config()
155 type = gpio->irq_type[hwirq] & TQMX86_INT_TRIG_MASK; in tqmx86_gpio_irq_config()
158 type = tqmx86_gpio_get(&gpio->chip, hwirq) in tqmx86_gpio_irq_config()
163 tqmx86_gpio_clrsetbits(gpio, in tqmx86_gpio_irq_config()
171 struct tqmx86_gpio_data *gpio = gpiochip_get_data( in tqmx86_gpio_irq_mask() local
174 scoped_guard(raw_spinlock_irqsave, &gpio->spinlock) { in tqmx86_gpio_irq_mask()
175 gpio->irq_type[data->hwirq] &= ~TQMX86_INT_UNMASKED; in tqmx86_gpio_irq_mask()
176 tqmx86_gpio_irq_config(gpio, data->hwirq); in tqmx86_gpio_irq_mask()
179 gpiochip_disable_irq(&gpio->chip, irqd_to_hwirq(data)); in tqmx86_gpio_irq_mask()
184 struct tqmx86_gpio_data *gpio = gpiochip_get_data( in tqmx86_gpio_irq_unmask() local
187 gpiochip_enable_irq(&gpio->chip, irqd_to_hwirq(data)); in tqmx86_gpio_irq_unmask()
189 guard(raw_spinlock_irqsave)(&gpio->spinlock); in tqmx86_gpio_irq_unmask()
191 gpio->irq_type[data->hwirq] |= TQMX86_INT_UNMASKED; in tqmx86_gpio_irq_unmask()
192 tqmx86_gpio_irq_config(gpio, data->hwirq); in tqmx86_gpio_irq_unmask()
197 struct tqmx86_gpio_data *gpio = gpiochip_get_data( in tqmx86_gpio_irq_set_type() local
216 guard(raw_spinlock_irqsave)(&gpio->spinlock); in tqmx86_gpio_irq_set_type()
218 gpio->irq_type[data->hwirq] &= ~TQMX86_INT_TRIG_MASK; in tqmx86_gpio_irq_set_type()
219 gpio->irq_type[data->hwirq] |= new_type; in tqmx86_gpio_irq_set_type()
220 tqmx86_gpio_irq_config(gpio, data->hwirq); in tqmx86_gpio_irq_set_type()
228 struct tqmx86_gpio_data *gpio = gpiochip_get_data(chip); in tqmx86_gpio_irq_handler() local
236 irq_status = tqmx86_gpio_read(gpio, TQMX86_GPIIS); in tqmx86_gpio_irq_handler()
237 tqmx86_gpio_write(gpio, irq_status, TQMX86_GPIIS); in tqmx86_gpio_irq_handler()
241 scoped_guard(raw_spinlock_irqsave, &gpio->spinlock) { in tqmx86_gpio_irq_handler()
268 if ((gpio->irq_type[hwirq] & TQMX86_INT_TRIG_MASK) == in tqmx86_gpio_irq_handler()
270 tqmx86_gpio_irq_config(gpio, hwirq); in tqmx86_gpio_irq_handler()
275 generic_handle_domain_irq(gpio->chip.irq.domain, in tqmx86_gpio_irq_handler()
327 struct tqmx86_gpio_data *gpio; in tqmx86_gpio_probe() local
348 gpio = devm_kzalloc(dev, sizeof(*gpio), GFP_KERNEL); in tqmx86_gpio_probe()
349 if (!gpio) in tqmx86_gpio_probe()
352 raw_spin_lock_init(&gpio->spinlock); in tqmx86_gpio_probe()
353 gpio->io_base = io_base; in tqmx86_gpio_probe()
355 tqmx86_gpio_write(gpio, (u8)~TQMX86_DIR_INPUT_MASK, TQMX86_GPIODD); in tqmx86_gpio_probe()
362 tqmx86_gpio_write(gpio, 0, TQMX86_GPIOD); in tqmx86_gpio_probe()
364 chip = &gpio->chip; in tqmx86_gpio_probe()
383 tqmx86_gpio_write(gpio, 0, TQMX86_GPIIC); in tqmx86_gpio_probe()
386 irq_status = tqmx86_gpio_read(gpio, TQMX86_GPIIS); in tqmx86_gpio_probe()
387 tqmx86_gpio_write(gpio, irq_status, TQMX86_GPIIS); in tqmx86_gpio_probe()
408 ret = devm_gpiochip_add_data(dev, chip, gpio); in tqmx86_gpio_probe()