|
@@ -175,3 +175,61 @@ inline int check_gpio(unsigned gpio)
|
|
|| gpio == GPIO_PJ14 || gpio == GPIO_PJ15)
|
|
|| gpio == GPIO_PJ14 || gpio == GPIO_PJ15)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
#endif
|
|
#endif
|
|
|
|
+ if (gpio >= MAX_BLACKFIN_GPIOS)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void port_setup(unsigned gpio, unsigned short usage)
|
|
|
|
+{
|
|
|
|
+#if defined(BF538_FAMILY)
|
|
|
|
+ /*
|
|
|
|
+ * BF538/9 Port C,D and E are special.
|
|
|
|
+ * Inverted PORT_FER polarity on CDE and no PORF_FER on F
|
|
|
|
+ * Regular PORT F GPIOs are handled here, CDE are exclusively
|
|
|
|
+ * managed by GPIOLIB
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ if (gpio < MAX_BLACKFIN_GPIOS || gpio >= MAX_RESOURCES)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ gpio -= MAX_BLACKFIN_GPIOS;
|
|
|
|
+
|
|
|
|
+ if (usage == GPIO_USAGE)
|
|
|
|
+ *port_fer[gpio_bank(gpio)] |= gpio_bit(gpio);
|
|
|
|
+ else
|
|
|
|
+ *port_fer[gpio_bank(gpio)] &= ~gpio_bit(gpio);
|
|
|
|
+ SSYNC();
|
|
|
|
+ return;
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+ if (check_gpio(gpio))
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+#if defined(CONFIG_BF52x) || defined(BF537_FAMILY) || defined(CONFIG_BF51x)
|
|
|
|
+ if (usage == GPIO_USAGE)
|
|
|
|
+ *port_fer[gpio_bank(gpio)] &= ~gpio_bit(gpio);
|
|
|
|
+ else
|
|
|
|
+ *port_fer[gpio_bank(gpio)] |= gpio_bit(gpio);
|
|
|
|
+ SSYNC();
|
|
|
|
+#elif defined(CONFIG_BF54x) || defined(CONFIG_BF60x)
|
|
|
|
+ if (usage == GPIO_USAGE)
|
|
|
|
+ gpio_array[gpio_bank(gpio)]->port_fer &= ~gpio_bit(gpio);
|
|
|
|
+ else
|
|
|
|
+ gpio_array[gpio_bank(gpio)]->port_fer |= gpio_bit(gpio);
|
|
|
|
+ SSYNC();
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#ifdef BF537_FAMILY
|
|
|
|
+static const s8 port_mux[] = {
|
|
|
|
+ [GPIO_PF0] = 3,
|
|
|
|
+ [GPIO_PF1] = 3,
|
|
|
|
+ [GPIO_PF2] = 4,
|
|
|
|
+ [GPIO_PF3] = 4,
|
|
|
|
+ [GPIO_PF4] = 5,
|
|
|
|
+ [GPIO_PF5] = 6,
|
|
|
|
+ [GPIO_PF6] = 7,
|
|
|
|
+ [GPIO_PF7] = 8,
|
|
|
|
+ [GPIO_PF8 ... GPIO_PF15] = -1,
|
|
|
|
+ [GPIO_PG0 ... GPIO_PG7] = -1,
|