aboutsummaryrefslogtreecommitdiff
path: root/board/overo/overo.c
diff options
context:
space:
mode:
authorSteve Sakoman2010-08-24 10:37:29 -0700
committerSandeep Paulraj2010-09-08 14:51:45 -0400
commita06e1629f4f53db7d1b9fefec6dfabf6438b2d55 (patch)
treea9ab34d972c4356ee58d96a7ea98646e3e68b7d2 /board/overo/overo.c
parent08cbba2abf2d581d2431c982d21be1cbf055da78 (diff)
ARMV7: OMAP: Overo: Autodetect presence/absence of transceiver on mmc2
An upcoming version of Overo uses a Wifi/BT module with 1.8V signaling, eliminating the need for an external transceiver to handle the level shifting. This patch detects whether an external transceiver is present and adjusts the pinmux settings as appropriate. Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
Diffstat (limited to 'board/overo/overo.c')
-rw-r--r--board/overo/overo.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/board/overo/overo.c b/board/overo/overo.c
index 4a609172011..1b67f1f5024 100644
--- a/board/overo/overo.c
+++ b/board/overo/overo.c
@@ -103,6 +103,39 @@ int get_board_revision(void)
}
/*
+ * Routine: get_sdio2_config
+ * Description: Return information about the wifi module connection
+ * Returns 0 if the module connects though a level translator
+ * Returns 1 if the module connects directly
+ */
+int get_sdio2_config(void)
+{
+ int sdio_direct;
+
+ if (!omap_request_gpio(130) && !omap_request_gpio(139)) {
+
+ omap_set_gpio_direction(130, 0);
+ omap_set_gpio_direction(139, 1);
+
+ sdio_direct = 1;
+ omap_set_gpio_dataout(130, 0);
+ if (omap_get_gpio_datain(139) == 0) {
+ omap_set_gpio_dataout(130, 1);
+ if (omap_get_gpio_datain(139) == 1)
+ sdio_direct = 0;
+ }
+
+ omap_free_gpio(130);
+ omap_free_gpio(139);
+ } else {
+ printf("Error: unable to acquire sdio2 clk GPIOs\n");
+ sdio_direct = -1;
+ }
+
+ return sdio_direct;
+}
+
+/*
* Routine: misc_init_r
* Description: Configure board specific parts
*/
@@ -116,6 +149,20 @@ int misc_init_r(void)
#endif
printf("Board revision: %d\n", get_board_revision());
+
+ switch (get_sdio2_config()) {
+ case 0:
+ printf("Tranceiver detected on mmc2\n");
+ MUX_OVERO_SDIO2_TRANSCEIVER();
+ break;
+ case 1:
+ printf("Direct connection on mmc2\n");
+ MUX_OVERO_SDIO2_DIRECT();
+ break;
+ default:
+ printf("Unable to detect mmc2 connection type\n");
+ }
+
dieid_num_r();
return 0;