Lines Matching refs:chip
57 static inline int xgpio_index(struct xgpio_instance *chip, int gpio) in xgpio_index() argument
59 if (gpio >= chip->gpio_width[0]) in xgpio_index()
65 static inline int xgpio_regoffset(struct xgpio_instance *chip, int gpio) in xgpio_regoffset() argument
67 if (xgpio_index(chip, gpio)) in xgpio_regoffset()
73 static inline int xgpio_offset(struct xgpio_instance *chip, int gpio) in xgpio_offset() argument
75 if (xgpio_index(chip, gpio)) in xgpio_offset()
76 return gpio - chip->gpio_width[0]; in xgpio_offset()
95 struct xgpio_instance *chip = in xgpio_get() local
100 xgpio_regoffset(chip, gpio)); in xgpio_get()
102 return !!(val & BIT(xgpio_offset(chip, gpio))); in xgpio_get()
118 struct xgpio_instance *chip = in xgpio_set() local
120 int index = xgpio_index(chip, gpio); in xgpio_set()
121 int offset = xgpio_offset(chip, gpio); in xgpio_set()
123 spin_lock_irqsave(&chip->gpio_lock[index], flags); in xgpio_set()
127 chip->gpio_state[index] |= BIT(offset); in xgpio_set()
129 chip->gpio_state[index] &= ~BIT(offset); in xgpio_set()
132 xgpio_regoffset(chip, gpio), chip->gpio_state[index]); in xgpio_set()
134 spin_unlock_irqrestore(&chip->gpio_lock[index], flags); in xgpio_set()
150 struct xgpio_instance *chip = in xgpio_dir_in() local
152 int index = xgpio_index(chip, gpio); in xgpio_dir_in()
153 int offset = xgpio_offset(chip, gpio); in xgpio_dir_in()
155 spin_lock_irqsave(&chip->gpio_lock[index], flags); in xgpio_dir_in()
158 chip->gpio_dir[index] |= BIT(offset); in xgpio_dir_in()
160 xgpio_regoffset(chip, gpio), chip->gpio_dir[index]); in xgpio_dir_in()
162 spin_unlock_irqrestore(&chip->gpio_lock[index], flags); in xgpio_dir_in()
183 struct xgpio_instance *chip = in xgpio_dir_out() local
185 int index = xgpio_index(chip, gpio); in xgpio_dir_out()
186 int offset = xgpio_offset(chip, gpio); in xgpio_dir_out()
188 spin_lock_irqsave(&chip->gpio_lock[index], flags); in xgpio_dir_out()
192 chip->gpio_state[index] |= BIT(offset); in xgpio_dir_out()
194 chip->gpio_state[index] &= ~BIT(offset); in xgpio_dir_out()
196 xgpio_regoffset(chip, gpio), chip->gpio_state[index]); in xgpio_dir_out()
199 chip->gpio_dir[index] &= ~BIT(offset); in xgpio_dir_out()
201 xgpio_regoffset(chip, gpio), chip->gpio_dir[index]); in xgpio_dir_out()
203 spin_unlock_irqrestore(&chip->gpio_lock[index], flags); in xgpio_dir_out()
214 struct xgpio_instance *chip = in xgpio_save_regs() local
217 xgpio_writereg(mm_gc->regs + XGPIO_DATA_OFFSET, chip->gpio_state[0]); in xgpio_save_regs()
218 xgpio_writereg(mm_gc->regs + XGPIO_TRI_OFFSET, chip->gpio_dir[0]); in xgpio_save_regs()
220 if (!chip->gpio_width[1]) in xgpio_save_regs()
224 chip->gpio_state[1]); in xgpio_save_regs()
226 chip->gpio_dir[1]); in xgpio_save_regs()
237 struct xgpio_instance *chip = platform_get_drvdata(pdev); in xgpio_remove() local
239 of_mm_gpiochip_remove(&chip->mmchip); in xgpio_remove()
254 struct xgpio_instance *chip; in xgpio_probe() local
259 chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); in xgpio_probe()
260 if (!chip) in xgpio_probe()
263 platform_set_drvdata(pdev, chip); in xgpio_probe()
266 of_property_read_u32(np, "xlnx,dout-default", &chip->gpio_state[0]); in xgpio_probe()
269 if (of_property_read_u32(np, "xlnx,tri-default", &chip->gpio_dir[0])) in xgpio_probe()
270 chip->gpio_dir[0] = 0xFFFFFFFF; in xgpio_probe()
276 if (of_property_read_u32(np, "xlnx,gpio-width", &chip->gpio_width[0])) in xgpio_probe()
277 chip->gpio_width[0] = 32; in xgpio_probe()
279 spin_lock_init(&chip->gpio_lock[0]); in xgpio_probe()
287 &chip->gpio_state[1]); in xgpio_probe()
291 &chip->gpio_dir[1])) in xgpio_probe()
292 chip->gpio_dir[1] = 0xFFFFFFFF; in xgpio_probe()
299 &chip->gpio_width[1])) in xgpio_probe()
300 chip->gpio_width[1] = 32; in xgpio_probe()
302 spin_lock_init(&chip->gpio_lock[1]); in xgpio_probe()
305 chip->mmchip.gc.ngpio = chip->gpio_width[0] + chip->gpio_width[1]; in xgpio_probe()
306 chip->mmchip.gc.dev = &pdev->dev; in xgpio_probe()
307 chip->mmchip.gc.direction_input = xgpio_dir_in; in xgpio_probe()
308 chip->mmchip.gc.direction_output = xgpio_dir_out; in xgpio_probe()
309 chip->mmchip.gc.get = xgpio_get; in xgpio_probe()
310 chip->mmchip.gc.set = xgpio_set; in xgpio_probe()
312 chip->mmchip.save_regs = xgpio_save_regs; in xgpio_probe()
315 status = of_mm_gpiochip_add(np, &chip->mmchip); in xgpio_probe()