Lines Matching +full:gpio +full:- +full:line

1 // SPDX-License-Identifier: GPL-2.0+
3 * Freescale MPC83xx GPIO handling.
8 #include <asm/gpio.h>
36 int gpio_request(unsigned gpio, const char *label) in gpio_request() argument
38 if (gpio >= MAX_NUM_GPIOS) in gpio_request()
39 return -1; in gpio_request()
44 int gpio_free(unsigned gpio) in gpio_free() argument
50 /* set GPIO pin 'gpio' as an input */
51 int gpio_direction_input(unsigned gpio) in gpio_direction_input() argument
55 unsigned int line; in gpio_direction_input() local
58 /* 32-bits per controller */ in gpio_direction_input()
59 ctrlr = gpio >> 5; in gpio_direction_input()
60 line = gpio & (0x1F); in gpio_direction_input()
63 line_mask = 1 << (31 - line); in gpio_direction_input()
65 clrbits_be32(&im->gpio[ctrlr].dir, line_mask); in gpio_direction_input()
70 /* set GPIO pin 'gpio' as an output, with polarity 'value' */
71 int gpio_direction_output(unsigned gpio, int value) in gpio_direction_output() argument
75 unsigned int line; in gpio_direction_output() local
80 return -1; in gpio_direction_output()
83 gpio_set_value(gpio, value); in gpio_direction_output()
85 /* 32-bits per controller */ in gpio_direction_output()
86 ctrlr = gpio >> 5; in gpio_direction_output()
87 line = gpio & (0x1F); in gpio_direction_output()
90 line_mask = 1 << (31 - line); in gpio_direction_output()
92 /* Make the line output */ in gpio_direction_output()
93 setbits_be32(&im->gpio[ctrlr].dir, line_mask); in gpio_direction_output()
98 /* read GPIO IN value of pin 'gpio' */
99 int gpio_get_value(unsigned gpio) in gpio_get_value() argument
103 unsigned int line; in gpio_get_value() local
106 /* 32-bits per controller */ in gpio_get_value()
107 ctrlr = gpio >> 5; in gpio_get_value()
108 line = gpio & (0x1F); in gpio_get_value()
111 line_mask = 1 << (31 - line); in gpio_get_value()
114 return (in_be32(&im->gpio[ctrlr].dat) & line_mask) != 0; in gpio_get_value()
117 /* write GPIO OUT value to pin 'gpio' */
118 int gpio_set_value(unsigned gpio, int value) in gpio_set_value() argument
122 unsigned int line; in gpio_set_value() local
127 return -1; in gpio_set_value()
130 /* 32-bits per controller */ in gpio_set_value()
131 ctrlr = gpio >> 5; in gpio_set_value()
132 line = gpio & (0x1F); in gpio_set_value()
135 line_mask = 1 << (31 - line); in gpio_set_value()
143 out_be32(&im->gpio[ctrlr].dat, gpio_output_value[ctrlr]); in gpio_set_value()
148 /* Configure GPIO registers early */
154 out_be32(&im->gpio[0].dir, CONFIG_MPC83XX_GPIO_0_INIT_DIRECTION); in mpc83xx_gpio_init_f()
155 out_be32(&im->gpio[0].odr, CONFIG_MPC83XX_GPIO_0_INIT_OPEN_DRAIN); in mpc83xx_gpio_init_f()
156 out_be32(&im->gpio[0].dat, CONFIG_MPC83XX_GPIO_0_INIT_VALUE); in mpc83xx_gpio_init_f()
157 out_be32(&im->gpio[0].ier, 0xFFFFFFFF); /* Clear all events */ in mpc83xx_gpio_init_f()
158 out_be32(&im->gpio[0].imr, 0); in mpc83xx_gpio_init_f()
159 out_be32(&im->gpio[0].icr, 0); in mpc83xx_gpio_init_f()
163 out_be32(&im->gpio[1].dir, CONFIG_MPC83XX_GPIO_1_INIT_DIRECTION); in mpc83xx_gpio_init_f()
164 out_be32(&im->gpio[1].odr, CONFIG_MPC83XX_GPIO_1_INIT_OPEN_DRAIN); in mpc83xx_gpio_init_f()
165 out_be32(&im->gpio[1].dat, CONFIG_MPC83XX_GPIO_1_INIT_VALUE); in mpc83xx_gpio_init_f()
166 out_be32(&im->gpio[1].ier, 0xFFFFFFFF); /* Clear all events */ in mpc83xx_gpio_init_f()
167 out_be32(&im->gpio[1].imr, 0); in mpc83xx_gpio_init_f()
168 out_be32(&im->gpio[1].icr, 0); in mpc83xx_gpio_init_f()
172 /* Initialize GPIO soft-copies */