Lines Matching +full:dual +full:- +full:direction

4  * SPDX-License-Identifier:	GPL-2.0+
55 if (gpio >= priv->gpio_min && gpio <= priv->gpio_max) { in gpio_get_controller()
56 debug("%s: reg: %x, min-max: %d-%d\n", __func__, in gpio_get_controller()
57 (u32)priv->regs, priv->gpio_min, priv->gpio_max); in gpio_get_controller()
75 gpio_priv = gpio - priv->gpio_min; in get_name()
77 return *priv->gpio_name[gpio_priv].name ? in get_name()
78 priv->gpio_name[gpio_priv].name : "UNKNOWN"; in get_name()
90 gpio_priv = gpio - priv->gpio_min; in gpio_get_output_value()
91 val = !!(priv->gpiodata_store & (1 << gpio_priv)); in gpio_get_output_value()
93 (u32)priv->regs, gpio_priv, val); in gpio_get_output_value()
97 return -1; in gpio_get_output_value()
108 regs = priv->regs; in gpio_get_input_value()
109 gpio_priv = gpio - priv->gpio_min; in gpio_get_input_value()
110 val = readl(&regs->gpiodata); in gpio_get_input_value()
113 (u32)priv->regs, gpio_priv, val); in gpio_get_input_value()
117 return -1; in gpio_get_input_value()
120 /* Set gpio direction */
121 static int gpio_set_direction(unsigned gpio, enum gpio_direction direction) in gpio_set_direction() argument
128 regs = priv->regs; in gpio_set_direction()
129 val = readl(&regs->gpiodir); in gpio_set_direction()
131 gpio_priv = gpio - priv->gpio_min; in gpio_set_direction()
132 if (direction == GPIO_DIRECTION_OUT) in gpio_set_direction()
137 writel(val, &regs->gpiodir); in gpio_set_direction()
139 (u32)priv->regs, gpio_priv, val); in gpio_set_direction()
144 return -1; in gpio_set_direction()
147 /* Get gpio direction */
155 regs = priv->regs; in gpio_get_direction()
156 gpio_priv = gpio - priv->gpio_min; in gpio_get_direction()
157 val = readl(&regs->gpiodir); in gpio_get_direction()
160 (u32)priv->regs, gpio_priv, val); in gpio_get_direction()
165 return -1; in gpio_get_direction()
193 regs = priv->regs; in gpio_set_output_value()
194 gpio_priv = gpio - priv->gpio_min; in gpio_set_output_value()
195 val = priv->gpiodata_store; in gpio_set_output_value()
201 writel(val, &regs->gpiodata); in gpio_set_output_value()
203 (u32)priv->regs, gpio_priv, val); in gpio_set_output_value()
204 priv->gpiodata_store = val; in gpio_set_output_value()
209 return -1; in gpio_set_output_value()
217 return -1; in gpio_set_value()
250 printf("\n%s: %s/%x (%d-%d)\n", __func__, priv->name, in gpio_info()
251 (u32)priv->regs, priv->gpio_min, priv->gpio_max); in gpio_info()
253 for (gpio = priv->gpio_min; gpio <= priv->gpio_max; gpio++) { in gpio_info()
271 return -EINVAL; in gpio_request()
275 gpio_priv = gpio - priv->gpio_min; in gpio_request()
278 strncpy(priv->gpio_name[gpio_priv].name, label, in gpio_request()
280 priv->gpio_name[gpio_priv].name[GPIO_NAME_SIZE - 1] = in gpio_request()
286 return -1; in gpio_request()
295 return -EINVAL; in gpio_free()
299 gpio_priv = gpio - priv->gpio_min; in gpio_free()
300 priv->gpio_name[gpio_priv].name[0] = '\0'; in gpio_free()
306 return -1; in gpio_free()
317 strncpy(priv->name, name, GPIO_NAME_SIZE); in gpio_alloc()
318 priv->name[GPIO_NAME_SIZE - 1] = '\0'; in gpio_alloc()
320 priv->regs = (struct gpio_regs *)baseaddr; in gpio_alloc()
322 priv->gpio_min = xilinx_gpio_max; in gpio_alloc()
323 xilinx_gpio_max = priv->gpio_min + gpio_no; in gpio_alloc()
324 priv->gpio_max = xilinx_gpio_max - 1; in gpio_alloc()
326 priv->gpio_name = calloc(gpio_no, sizeof(struct gpio_names)); in gpio_alloc()
328 INIT_LIST_HEAD(&priv->list); in gpio_alloc()
329 list_add_tail(&priv->list, &gpio_list); in gpio_alloc()
331 printf("%s: Add %s (%d-%d)\n", __func__, name, in gpio_alloc()
332 priv->gpio_min, priv->gpio_max); in gpio_alloc()
335 return priv->gpio_min; in gpio_alloc()
338 /* Dual channel gpio is one IP with two independent channels */