| 2140 | |
| 2141 | |
| 2142 | void pullUpDnControl (int pin, int pud) |
| 2143 | { |
| 2144 | struct wiringPiNodeStruct *node = wiringPiNodes ; |
| 2145 | |
| 2146 | setupCheck ("pullUpDnControl") ; |
| 2147 | |
| 2148 | if ((pin & PI_GPIO_MASK) == 0) // On-Board Pin |
| 2149 | { |
| 2150 | switch(wiringPiMode) { |
| 2151 | default: //WPI_MODE_GPIO_SYS |
| 2152 | fprintf(stderr, "pinMode: invalid mode\n"); |
| 2153 | return; |
| 2154 | case WPI_MODE_PINS: |
| 2155 | pin = pinToGpio [pin]; |
| 2156 | break; |
| 2157 | case WPI_MODE_PHYS: |
| 2158 | pin = physToGpio [pin]; |
| 2159 | break; |
| 2160 | case WPI_MODE_GPIO_DEVICE_BCM: |
| 2161 | return pullUpDnControlDevice(pin, pud); |
| 2162 | case WPI_MODE_GPIO_DEVICE_WPI: |
| 2163 | return pullUpDnControlDevice(pinToGpio[pin], pud); |
| 2164 | case WPI_MODE_GPIO_DEVICE_PHYS: |
| 2165 | return pullUpDnControlDevice(physToGpio[pin], pud); |
| 2166 | case WPI_MODE_GPIO: |
| 2167 | break; |
| 2168 | } |
| 2169 | |
| 2170 | if (piRP1Model()) { |
| 2171 | unsigned int pullbits = pads[1+pin] & RP1_INV_PUD_MASK; // remove bits |
| 2172 | switch (pud){ |
| 2173 | case PUD_OFF: pads[1+pin] = pullbits; break; |
| 2174 | case PUD_UP: pads[1+pin] = pullbits | RP1_PUD_UP; break; |
| 2175 | case PUD_DOWN: pads[1+pin] = pullbits | RP1_PUD_DOWN; break; |
| 2176 | default: return ; /* An illegal value */ |
| 2177 | } |
| 2178 | } else { |
| 2179 | if (piGpioPupOffset == GPPUPPDN0) |
| 2180 | { |
| 2181 | // Pi 4B pull up/down method |
| 2182 | int pullreg = GPPUPPDN0 + (pin>>4); |
| 2183 | int pullshift = (pin & 0xf) << 1; |
| 2184 | unsigned int pullbits; |
| 2185 | unsigned int pull; |
| 2186 | |
| 2187 | switch (pud) { |
| 2188 | case PUD_OFF: pull = 0; break; |
| 2189 | case PUD_UP: pull = 1; break; |
| 2190 | case PUD_DOWN: pull = 2; break; |
| 2191 | default: return ; /* An illegal value */ |
| 2192 | } |
| 2193 | |
| 2194 | pullbits = *(gpio + pullreg); |
| 2195 | pullbits &= ~(3 << pullshift); |
| 2196 | pullbits |= (pull << pullshift); |
| 2197 | *(gpio + pullreg) = pullbits; |
| 2198 | } |
| 2199 | else |