blob: 55f0ea255b302d604dd9cfae47496f27202f69c7 [file] [log] [blame]
Rajeshwari Birjee106bd92013-12-26 09:44:24 +05301/*
2 * Copyright (C) 2013 Samsung Electronics
3 *
4 * SPDX-License-Identifier: GPL-2.0+
5 */
6
7#include <common.h>
8#include <fdtdec.h>
9#include <asm/io.h>
10#include <i2c.h>
11#include <lcd.h>
Sjoerd Simonsa7b99202014-12-05 18:12:22 +010012#include <parade.h>
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053013#include <spi.h>
Ajay Kumara99cea02014-09-05 16:53:36 +053014#include <errno.h>
Simon Glass903fd792014-10-20 19:48:37 -060015#include <asm/gpio.h>
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053016#include <asm/arch/board.h>
17#include <asm/arch/cpu.h>
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053018#include <asm/arch/pinmux.h>
Ajay Kumara99cea02014-09-05 16:53:36 +053019#include <asm/arch/system.h>
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053020#include <asm/arch/dp_info.h>
Ajay Kumara99cea02014-09-05 16:53:36 +053021#include <power/tps65090_pmic.h>
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053022
23DECLARE_GLOBAL_DATA_PTR;
24
25#ifdef CONFIG_USB_EHCI_EXYNOS
26static int board_usb_vbus_init(void)
27{
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053028 /* Enable VBUS power switch */
Akshay Saraswatf6ae1ca2014-05-13 10:30:14 +053029 gpio_direction_output(EXYNOS5420_GPIO_X26, 1);
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053030
31 /* VBUS turn ON time */
32 mdelay(3);
33
34 return 0;
35}
36#endif
37
38int exynos_init(void)
39{
40#ifdef CONFIG_USB_EHCI_EXYNOS
41 board_usb_vbus_init();
42#endif
43 return 0;
44}
45
46#ifdef CONFIG_LCD
Ajay Kumara99cea02014-09-05 16:53:36 +053047static int has_edp_bridge(void)
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053048{
Ajay Kumara99cea02014-09-05 16:53:36 +053049 int node;
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053050
Ajay Kumara99cea02014-09-05 16:53:36 +053051 node = fdtdec_next_compatible(gd->fdt_blob, 0, COMPAT_PARADE_PS8625);
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053052
Ajay Kumara99cea02014-09-05 16:53:36 +053053 /* No node for bridge in device tree. */
54 if (node <= 0)
55 return 0;
56
57 /* Default is with bridge ic */
58 return 1;
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053059}
60
Ajay Kumara99cea02014-09-05 16:53:36 +053061void exynos_lcd_power_on(void)
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053062{
Ajay Kumara99cea02014-09-05 16:53:36 +053063 int ret;
Rajeshwari Birjee106bd92013-12-26 09:44:24 +053064
Ajay Kumara99cea02014-09-05 16:53:36 +053065#ifdef CONFIG_POWER_TPS65090
66 ret = tps65090_init();
67 if (ret < 0) {
68 printf("%s: tps65090_init() failed\n", __func__);
69 return;
70 }
71
72 tps65090_fet_enable(6);
73#endif
74
75 mdelay(5);
76
77 /* TODO(ajaykumar.rs@samsung.com): Use device tree */
Simon Glass7f196102014-10-20 19:48:39 -060078 gpio_request(EXYNOS5420_GPIO_X35, "edp_slp#");
Ajay Kumara99cea02014-09-05 16:53:36 +053079 gpio_direction_output(EXYNOS5420_GPIO_X35, 1); /* EDP_SLP# */
80 mdelay(10);
Simon Glass7f196102014-10-20 19:48:39 -060081 gpio_request(EXYNOS5420_GPIO_Y77, "edp_rst#");
Ajay Kumara99cea02014-09-05 16:53:36 +053082 gpio_direction_output(EXYNOS5420_GPIO_Y77, 1); /* EDP_RST# */
Simon Glass7f196102014-10-20 19:48:39 -060083 gpio_request(EXYNOS5420_GPIO_X26, "edp_hpd");
Ajay Kumara99cea02014-09-05 16:53:36 +053084 gpio_direction_input(EXYNOS5420_GPIO_X26); /* EDP_HPD */
85 gpio_set_pull(EXYNOS5420_GPIO_X26, S5P_GPIO_PULL_NONE);
86
87 if (has_edp_bridge())
88 if (parade_init(gd->fdt_blob))
89 printf("%s: ps8625_init() failed\n", __func__);
90}
91
92void exynos_backlight_on(unsigned int onoff)
93{
94 /* For PWM */
Simon Glass7f196102014-10-20 19:48:39 -060095 gpio_request(EXYNOS5420_GPIO_B20, "backlight_on");
Ajay Kumara99cea02014-09-05 16:53:36 +053096 gpio_cfg_pin(EXYNOS5420_GPIO_B20, S5P_GPIO_FUNC(0x1));
97 gpio_set_value(EXYNOS5420_GPIO_B20, 1);
98
99#ifdef CONFIG_POWER_TPS65090
100 tps65090_fet_enable(1);
101#endif
Rajeshwari Birjee106bd92013-12-26 09:44:24 +0530102}
103#endif
104
105int board_get_revision(void)
106{
107 return 0;
108}