• Home
  • Raw
  • Download

Lines Matching +full:dout +full:- +full:gpios

4  * Copyright 2008 - 2013 Xilinx, Inc.
12 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
42 * struct xgpio_instance - Stores information about GPIO device
59 if (gpio >= chip->gpio_width[0]) in xgpio_index()
76 return gpio - chip->gpio_width[0]; in xgpio_offset()
82 * xgpio_get - Read the specified signal of the GPIO device.
98 val = xgpio_readreg(mm_gc->regs + XGPIO_DATA_OFFSET + in xgpio_get()
105 * xgpio_set - Write the specified signal of the GPIO device.
121 spin_lock_irqsave(&chip->gpio_lock[index], flags); in xgpio_set()
125 chip->gpio_state[index] |= BIT(offset); in xgpio_set()
127 chip->gpio_state[index] &= ~BIT(offset); in xgpio_set()
129 xgpio_writereg(mm_gc->regs + XGPIO_DATA_OFFSET + in xgpio_set()
130 xgpio_regoffset(chip, gpio), chip->gpio_state[index]); in xgpio_set()
132 spin_unlock_irqrestore(&chip->gpio_lock[index], flags); in xgpio_set()
136 * xgpio_set_multiple - Write the specified signals of the GPIO device.
138 * @mask: Mask of the GPIOS to modify.
153 spin_lock_irqsave(&chip->gpio_lock[index], flags); in xgpio_set_multiple()
156 for (i = 0; i < gc->ngpio; i++) { in xgpio_set_multiple()
160 xgpio_writereg(mm_gc->regs + XGPIO_DATA_OFFSET + in xgpio_set_multiple()
162 chip->gpio_state[index]); in xgpio_set_multiple()
163 spin_unlock_irqrestore(&chip->gpio_lock[index], flags); in xgpio_set_multiple()
165 spin_lock_irqsave(&chip->gpio_lock[index], flags); in xgpio_set_multiple()
170 chip->gpio_state[index] |= BIT(offset); in xgpio_set_multiple()
172 chip->gpio_state[index] &= ~BIT(offset); in xgpio_set_multiple()
176 xgpio_writereg(mm_gc->regs + XGPIO_DATA_OFFSET + in xgpio_set_multiple()
177 xgpio_regoffset(chip, i), chip->gpio_state[index]); in xgpio_set_multiple()
179 spin_unlock_irqrestore(&chip->gpio_lock[index], flags); in xgpio_set_multiple()
183 * xgpio_dir_in - Set the direction of the specified GPIO signal as input.
188 * 0 - if direction of GPIO signals is set as input
199 spin_lock_irqsave(&chip->gpio_lock[index], flags); in xgpio_dir_in()
202 chip->gpio_dir[index] |= BIT(offset); in xgpio_dir_in()
203 xgpio_writereg(mm_gc->regs + XGPIO_TRI_OFFSET + in xgpio_dir_in()
204 xgpio_regoffset(chip, gpio), chip->gpio_dir[index]); in xgpio_dir_in()
206 spin_unlock_irqrestore(&chip->gpio_lock[index], flags); in xgpio_dir_in()
212 * xgpio_dir_out - Set the direction of the specified GPIO signal as output.
231 spin_lock_irqsave(&chip->gpio_lock[index], flags); in xgpio_dir_out()
235 chip->gpio_state[index] |= BIT(offset); in xgpio_dir_out()
237 chip->gpio_state[index] &= ~BIT(offset); in xgpio_dir_out()
238 xgpio_writereg(mm_gc->regs + XGPIO_DATA_OFFSET + in xgpio_dir_out()
239 xgpio_regoffset(chip, gpio), chip->gpio_state[index]); in xgpio_dir_out()
242 chip->gpio_dir[index] &= ~BIT(offset); in xgpio_dir_out()
243 xgpio_writereg(mm_gc->regs + XGPIO_TRI_OFFSET + in xgpio_dir_out()
244 xgpio_regoffset(chip, gpio), chip->gpio_dir[index]); in xgpio_dir_out()
246 spin_unlock_irqrestore(&chip->gpio_lock[index], flags); in xgpio_dir_out()
252 * xgpio_save_regs - Set initial values of GPIO pins
260 xgpio_writereg(mm_gc->regs + XGPIO_DATA_OFFSET, chip->gpio_state[0]); in xgpio_save_regs()
261 xgpio_writereg(mm_gc->regs + XGPIO_TRI_OFFSET, chip->gpio_dir[0]); in xgpio_save_regs()
263 if (!chip->gpio_width[1]) in xgpio_save_regs()
266 xgpio_writereg(mm_gc->regs + XGPIO_DATA_OFFSET + XGPIO_CHANNEL_OFFSET, in xgpio_save_regs()
267 chip->gpio_state[1]); in xgpio_save_regs()
268 xgpio_writereg(mm_gc->regs + XGPIO_TRI_OFFSET + XGPIO_CHANNEL_OFFSET, in xgpio_save_regs()
269 chip->gpio_dir[1]); in xgpio_save_regs()
273 * xgpio_remove - Remove method for the GPIO device.
284 of_mm_gpiochip_remove(&chip->mmchip); in xgpio_remove()
290 * xgpio_of_probe - Probe method for the GPIO device.
301 struct device_node *np = pdev->dev.of_node; in xgpio_probe()
304 chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); in xgpio_probe()
306 return -ENOMEM; in xgpio_probe()
311 of_property_read_u32(np, "xlnx,dout-default", &chip->gpio_state[0]); in xgpio_probe()
314 if (of_property_read_u32(np, "xlnx,tri-default", &chip->gpio_dir[0])) in xgpio_probe()
315 chip->gpio_dir[0] = 0xFFFFFFFF; in xgpio_probe()
321 if (of_property_read_u32(np, "xlnx,gpio-width", &chip->gpio_width[0])) in xgpio_probe()
322 chip->gpio_width[0] = 32; in xgpio_probe()
324 spin_lock_init(&chip->gpio_lock[0]); in xgpio_probe()
326 if (of_property_read_u32(np, "xlnx,is-dual", &is_dual)) in xgpio_probe()
331 of_property_read_u32(np, "xlnx,dout-default-2", in xgpio_probe()
332 &chip->gpio_state[1]); in xgpio_probe()
335 if (of_property_read_u32(np, "xlnx,tri-default-2", in xgpio_probe()
336 &chip->gpio_dir[1])) in xgpio_probe()
337 chip->gpio_dir[1] = 0xFFFFFFFF; in xgpio_probe()
343 if (of_property_read_u32(np, "xlnx,gpio2-width", in xgpio_probe()
344 &chip->gpio_width[1])) in xgpio_probe()
345 chip->gpio_width[1] = 32; in xgpio_probe()
347 spin_lock_init(&chip->gpio_lock[1]); in xgpio_probe()
350 chip->mmchip.gc.ngpio = chip->gpio_width[0] + chip->gpio_width[1]; in xgpio_probe()
351 chip->mmchip.gc.parent = &pdev->dev; in xgpio_probe()
352 chip->mmchip.gc.direction_input = xgpio_dir_in; in xgpio_probe()
353 chip->mmchip.gc.direction_output = xgpio_dir_out; in xgpio_probe()
354 chip->mmchip.gc.get = xgpio_get; in xgpio_probe()
355 chip->mmchip.gc.set = xgpio_set; in xgpio_probe()
356 chip->mmchip.gc.set_multiple = xgpio_set_multiple; in xgpio_probe()
358 chip->mmchip.save_regs = xgpio_save_regs; in xgpio_probe()
361 status = of_mm_gpiochip_add_data(np, &chip->mmchip, chip); in xgpio_probe()
372 { .compatible = "xlnx,xps-gpio-1.00.a", },
382 .name = "gpio-xilinx",