|
@@ -25,6 +25,8 @@
|
|
|
#include <asm/io.h>
|
|
|
#include <asm/errno.h>
|
|
|
#include <asm/arch/db8500_pincfg.h>
|
|
|
+#include <asm/arch/prcmu.h>
|
|
|
+#include <asm/arch/hardware.h>
|
|
|
|
|
|
#include "db8500_pins.h"
|
|
|
|
|
@@ -164,3 +166,88 @@ int dram_init(void)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+static int raise_ab8500_gpio16(void)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ /* selection */
|
|
|
+ ret = ab8500_read(AB8500_MISC, AB8500_GPIO_SEL2_REG);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ ret |= 0x80;
|
|
|
+ ret = ab8500_write(AB8500_MISC, AB8500_GPIO_SEL2_REG, ret);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ /* direction */
|
|
|
+ ret = ab8500_read(AB8500_MISC, AB8500_GPIO_DIR2_REG);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ ret |= 0x80;
|
|
|
+ ret = ab8500_write(AB8500_MISC, AB8500_GPIO_DIR2_REG, ret);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ /* out */
|
|
|
+ ret = ab8500_read(AB8500_MISC, AB8500_GPIO_OUT2_REG);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ ret |= 0x80;
|
|
|
+ ret = ab8500_write(AB8500_MISC, AB8500_GPIO_OUT2_REG, ret);
|
|
|
+
|
|
|
+out:
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static int raise_ab8500_gpio26(void)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ /* selection */
|
|
|
+ ret = ab8500_read(AB8500_MISC, AB8500_GPIO_DIR4_REG);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ ret |= 0x2;
|
|
|
+ ret = ab8500_write(AB8500_MISC, AB8500_GPIO_DIR4_REG, ret);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ /* out */
|
|
|
+ ret = ab8500_read(AB8500_MISC, AB8500_GPIO_OUT4_REG);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ ret |= 0x2;
|
|
|
+ ret = ab8500_write(AB8500_MISC, AB8500_GPIO_OUT4_REG, ret);
|
|
|
+
|
|
|
+out:
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+int board_late_init(void)
|
|
|
+{
|
|
|
+ /* enable 3V3 for LAN controller */
|
|
|
+ if (raise_ab8500_gpio26() >= 0) {
|
|
|
+ /* Turn on FSMC device */
|
|
|
+ writel(0x1, 0x8000f000);
|
|
|
+ writel(0x1, 0x8000f008);
|
|
|
+
|
|
|
+ /* setup FSMC for LAN controler */
|
|
|
+ writel(0x305b, 0x80000000);
|
|
|
+
|
|
|
+ /* run at the highest possible speed */
|
|
|
+ writel(0x01010210, 0x80000004);
|
|
|
+ } else
|
|
|
+ printf("error: can't raise GPIO26\n");
|
|
|
+
|
|
|
+ /* enable 3v6 for GBF chip */
|
|
|
+ if ((raise_ab8500_gpio16() < 0))
|
|
|
+ printf("error: cant' raise GPIO16\n");
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|