]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - board/samsung/smdk5420/smdk5420.c
exynos: config: Move common options to the common headers and tidy up
[karo-tx-uboot.git] / board / samsung / smdk5420 / smdk5420.c
index 920752295354d01c26708ccebe89a18e2f25ff9e..57cc92c50b9729ea746b40cbedb928aa7ddac277 100644 (file)
 
 #include <common.h>
 #include <fdtdec.h>
+#include <errno.h>
 #include <asm/io.h>
-#include <i2c.h>
-#include <lcd.h>
-#include <spi.h>
-#include <asm/arch/board.h>
+#include <asm/gpio.h>
 #include <asm/arch/cpu.h>
-#include <asm/arch/gpio.h>
+#include <asm/arch/board.h>
+#include <asm/arch/power.h>
+#include <asm/arch/system.h>
 #include <asm/arch/pinmux.h>
 #include <asm/arch/dp_info.h>
+#include <asm/arch/xhci-exynos.h>
+#include <power/tps65090_pmic.h>
+#include <i2c.h>
+#include <lcd.h>
+#include <mmc.h>
+#include <parade.h>
+#include <spi.h>
+#include <usb.h>
+#include <dwc3-uboot.h>
+#include <samsung-usb-phy-uboot.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#ifdef CONFIG_USB_EHCI_EXYNOS
-static int board_usb_vbus_init(void)
+int exynos_init(void)
 {
-       /* Enable VBUS power switch */
-       gpio_direction_output(EXYNOS5420_GPIO_X26, 1);
-
-       /* VBUS turn ON time */
-       mdelay(3);
-
        return 0;
 }
-#endif
 
-int exynos_init(void)
+#ifdef CONFIG_LCD
+static int has_edp_bridge(void)
 {
-#ifdef CONFIG_USB_EHCI_EXYNOS
-       board_usb_vbus_init();
-#endif
-       return 0;
+       int node;
+
+       node = fdtdec_next_compatible(gd->fdt_blob, 0, COMPAT_PARADE_PS8625);
+
+       /* No node for bridge in device tree. */
+       if (node <= 0)
+               return 0;
+
+       /* Default is with bridge ic */
+       return 1;
 }
 
-#ifdef CONFIG_LCD
-void cfg_lcd_gpio(void)
+void exynos_lcd_power_on(void)
 {
-       struct exynos5_gpio_part1 *gpio1 =
-               (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1();
+#ifdef CONFIG_POWER_TPS65090
+       int ret;
+
+       ret = tps65090_init();
+       if (ret < 0) {
+               printf("%s: tps65090_init() failed\n", __func__);
+               return;
+       }
 
-       /* For Backlight */
-       gpio_cfg_pin(EXYNOS5420_GPIO_B20, S5P_GPIO_OUTPUT);
-       gpio_set_value(EXYNOS5420_GPIO_B20, 1);
+       tps65090_fet_enable(6);
+#endif
 
-       /* LCD power on */
-       gpio_cfg_pin(EXYNOS5420_GPIO_X15, S5P_GPIO_OUTPUT);
-       gpio_set_value(EXYNOS5420_GPIO_X15, 1);
+       mdelay(5);
 
-       /* Set Hotplug detect for DP */
-       gpio_cfg_pin(EXYNOS5420_GPIO_X07, S5P_GPIO_FUNC(0x3));
+       if (has_edp_bridge())
+               if (parade_init(gd->fdt_blob))
+                       printf("%s: ps8625_init() failed\n", __func__);
 }
 
-vidinfo_t panel_info = {
-       .vl_freq        = 60,
-       .vl_col         = 2560,
-       .vl_row         = 1600,
-       .vl_width       = 2560,
-       .vl_height      = 1600,
-       .vl_clkp        = CONFIG_SYS_LOW,
-       .vl_hsp         = CONFIG_SYS_LOW,
-       .vl_vsp         = CONFIG_SYS_LOW,
-       .vl_dp          = CONFIG_SYS_LOW,
-       .vl_bpix        = 4,    /* LCD_BPP = 2^4, for output conosle on LCD */
-
-       /* wDP panel timing infomation */
-       .vl_hspw        = 32,
-       .vl_hbpd        = 80,
-       .vl_hfpd        = 48,
-
-       .vl_vspw        = 6,
-       .vl_vbpd        = 37,
-       .vl_vfpd        = 3,
-       .vl_cmd_allow_len = 0xf,
-
-       .win_id         = 3,
-       .cfg_gpio       = cfg_lcd_gpio,
-       .backlight_on   = NULL,
-       .lcd_power_on   = NULL,
-       .reset_lcd      = NULL,
-       .dual_lcd_enabled = 0,
-
-       .init_delay     = 0,
-       .power_on_delay = 0,
-       .reset_delay    = 0,
-       .interface_mode = FIMD_RGB_INTERFACE,
-       .dp_enabled     = 1,
-};
+void exynos_backlight_on(unsigned int onoff)
+{
+#ifdef CONFIG_POWER_TPS65090
+       tps65090_fet_enable(1);
+#endif
+}
+#endif
 
-static struct edp_device_info edp_info = {
-       .disp_info = {
-               .h_res = 2560,
-               .h_sync_width = 32,
-               .h_back_porch = 80,
-               .h_front_porch = 48,
-               .v_res = 1600,
-               .v_sync_width  = 6,
-               .v_back_porch = 37,
-               .v_front_porch = 3,
-               .v_sync_rate = 60,
-       },
-       .lt_info = {
-               .lt_status = DP_LT_NONE,
-       },
-       .video_info = {
-               .master_mode = 0,
-               .bist_mode = DP_DISABLE,
-               .bist_pattern = NO_PATTERN,
-               .h_sync_polarity = 0,
-               .v_sync_polarity = 0,
-               .interlaced = 0,
-               .color_space = COLOR_RGB,
-               .dynamic_range = VESA,
-               .ycbcr_coeff = COLOR_YCBCR601,
-               .color_depth = COLOR_8,
-       },
-};
+int board_get_revision(void)
+{
+       return 0;
+}
 
-static struct exynos_dp_platform_data dp_platform_data = {
-       .phy_enable     = set_dp_phy_ctrl,
-       .edp_dev_info   = &edp_info,
+#ifdef CONFIG_USB_DWC3
+static struct dwc3_device dwc3_device_data = {
+       .maximum_speed = USB_SPEED_SUPER,
+       .base = 0x12400000,
+       .dr_mode = USB_DR_MODE_PERIPHERAL,
+       .index = 0,
 };
 
-void init_panel_info(vidinfo_t *vid)
+int usb_gadget_handle_interrupts(void)
+{
+       dwc3_uboot_handle_interrupt(0);
+       return 0;
+}
+
+int board_usb_init(int index, enum usb_init_type init)
 {
-       vid->rgb_mode   = MODE_RGB_P;
+       struct exynos_usb3_phy *phy = (struct exynos_usb3_phy *)
+               samsung_get_base_usb3_phy();
 
-       exynos_set_dp_platform_data(&dp_platform_data);
+       if (!phy) {
+               error("usb3 phy not supported");
+               return -ENODEV;
+       }
+
+       set_usbdrd_phy_ctrl(POWER_USB_DRD_PHY_CTRL_EN);
+       exynos5_usb3_phy_init(phy);
+
+       return dwc3_uboot_init(&dwc3_device_data);
 }
 #endif
+#ifdef CONFIG_SET_DFU_ALT_INFO
+char *get_dfu_alt_system(char *interface, char *devstr)
+{
+       return getenv("dfu_alt_system");
+}
 
-int board_get_revision(void)
+char *get_dfu_alt_boot(char *interface, char *devstr)
 {
-       return 0;
+       struct mmc *mmc;
+       char *alt_boot;
+       int dev_num;
+
+       dev_num = simple_strtoul(devstr, NULL, 10);
+
+       mmc = find_mmc_device(dev_num);
+       if (!mmc)
+               return NULL;
+
+       if (mmc_init(mmc))
+               return NULL;
+
+       if (IS_SD(mmc))
+               alt_boot = CONFIG_DFU_ALT_BOOT_SD;
+       else
+               alt_boot = CONFIG_DFU_ALT_BOOT_EMMC;
+
+       return alt_boot;
 }
+#endif