Lines Matching +full:- +full:group
1 // SPDX-License-Identifier: GPL-2.0-only
3 * GPIO driver for the ACCES 104-DIO-48E series
6 * This driver supports the following ACCES devices: 104-DIO-48E and
7 * 104-DIO-24E.
23 #include "gpio-i8255.h"
33 MODULE_PARM_DESC(base, "ACCES 104-DIO-48E base addresses");
38 MODULE_PARM_DESC(irq, "ACCES 104-DIO-48E interrupt line numbers");
110 * struct dio48e_gpio - GPIO device private data structure
125 static void dio48e_regmap_lock(void *lock_arg) __acquires(&dio48egpio->lock) in dio48e_regmap_lock()
130 raw_spin_lock_irqsave(&dio48egpio->lock, flags); in dio48e_regmap_lock()
131 dio48egpio->flags = flags; in dio48e_regmap_lock()
134 static void dio48e_regmap_unlock(void *lock_arg) __releases(&dio48egpio->lock) in dio48e_regmap_unlock()
138 raw_spin_unlock_irqrestore(&dio48egpio->lock, dio48egpio->flags); in dio48e_regmap_unlock()
141 static void pit_regmap_lock(void *lock_arg) __acquires(&dio48egpio->lock) in pit_regmap_lock()
146 raw_spin_lock_irqsave(&dio48egpio->lock, flags); in pit_regmap_lock()
147 dio48egpio->flags = flags; in pit_regmap_lock()
149 iowrite8(0x00, dio48egpio->regs + DIO48E_ENABLE_COUNTER_TIMER_ADDRESSING); in pit_regmap_lock()
152 static void pit_regmap_unlock(void *lock_arg) __releases(&dio48egpio->lock) in pit_regmap_unlock()
156 ioread8(dio48egpio->regs + DIO48E_DISABLE_COUNTER_TIMER_ADDRESSING); in pit_regmap_unlock()
158 raw_spin_unlock_irqrestore(&dio48egpio->lock, dio48egpio->flags); in pit_regmap_unlock()
167 const unsigned int prev_mask = dio48egpio->irq_mask; in dio48e_handle_mask_sync()
176 dio48egpio->irq_mask = mask_buf; in dio48e_handle_mask_sync()
180 err = regmap_write(dio48egpio->map, DIO48E_CLEAR_INTERRUPT, 0x00); in dio48e_handle_mask_sync()
183 return regmap_write(dio48egpio->map, DIO48E_ENABLE_INTERRUPT, 0x00); in dio48e_handle_mask_sync()
188 return regmap_read(dio48egpio->map, DIO48E_DISABLE_INTERRUPT, &val); in dio48e_handle_mask_sync()
195 "PPI Group 0 Port A 0", "PPI Group 0 Port A 1", "PPI Group 0 Port A 2",
196 "PPI Group 0 Port A 3", "PPI Group 0 Port A 4", "PPI Group 0 Port A 5",
197 "PPI Group 0 Port A 6", "PPI Group 0 Port A 7", "PPI Group 0 Port B 0",
198 "PPI Group 0 Port B 1", "PPI Group 0 Port B 2", "PPI Group 0 Port B 3",
199 "PPI Group 0 Port B 4", "PPI Group 0 Port B 5", "PPI Group 0 Port B 6",
200 "PPI Group 0 Port B 7", "PPI Group 0 Port C 0", "PPI Group 0 Port C 1",
201 "PPI Group 0 Port C 2", "PPI Group 0 Port C 3", "PPI Group 0 Port C 4",
202 "PPI Group 0 Port C 5", "PPI Group 0 Port C 6", "PPI Group 0 Port C 7",
203 "PPI Group 1 Port A 0", "PPI Group 1 Port A 1", "PPI Group 1 Port A 2",
204 "PPI Group 1 Port A 3", "PPI Group 1 Port A 4", "PPI Group 1 Port A 5",
205 "PPI Group 1 Port A 6", "PPI Group 1 Port A 7", "PPI Group 1 Port B 0",
206 "PPI Group 1 Port B 1", "PPI Group 1 Port B 2", "PPI Group 1 Port B 3",
207 "PPI Group 1 Port B 4", "PPI Group 1 Port B 5", "PPI Group 1 Port B 6",
208 "PPI Group 1 Port B 7", "PPI Group 1 Port C 0", "PPI Group 1 Port C 1",
209 "PPI Group 1 Port C 2", "PPI Group 1 Port C 3", "PPI Group 1 Port C 4",
210 "PPI Group 1 Port C 5", "PPI Group 1 Port C 6", "PPI Group 1 Port C 7"
236 dev_err(dev, "Unable to lock port addresses (0x%X-0x%X)\n", in dio48e_probe()
238 return -EBUSY; in dio48e_probe()
243 return -ENOMEM; in dio48e_probe()
247 return -ENOMEM; in dio48e_probe()
249 dio48egpio->regs = regs; in dio48e_probe()
251 raw_spin_lock_init(&dio48egpio->lock); in dio48e_probe()
273 dio48egpio->map = map; in dio48e_probe()
295 return -ENOMEM; in dio48e_probe()
297 chip->name = name; in dio48e_probe()
298 chip->mask_base = DIO48E_ENABLE_INTERRUPT; in dio48e_probe()
299 chip->ack_base = DIO48E_CLEAR_INTERRUPT; in dio48e_probe()
300 chip->no_status = true; in dio48e_probe()
301 chip->num_regs = 1; in dio48e_probe()
302 chip->irqs = dio48e_regmap_irqs; in dio48e_probe()
303 chip->num_irqs = ARRAY_SIZE(dio48e_regmap_irqs); in dio48e_probe()
304 chip->handle_mask_sync = dio48e_handle_mask_sync; in dio48e_probe()
305 chip->irq_drv_data = dio48egpio; in dio48e_probe()
334 .name = "104-dio-48e"
340 MODULE_DESCRIPTION("ACCES 104-DIO-48E GPIO driver");