Merge branch 'u-boot-samsung/master' into 'u-boot-arm/master'
This commit is contained in:
@@ -869,7 +869,7 @@ static void exynos4_set_mmc_clk(int dev_index, unsigned int div)
|
||||
{
|
||||
struct exynos4_clock *clk =
|
||||
(struct exynos4_clock *)samsung_get_base_clock();
|
||||
unsigned int addr;
|
||||
unsigned int addr, clear_bit, set_bit;
|
||||
|
||||
/*
|
||||
* CLK_DIV_FSYS1
|
||||
@@ -877,44 +877,26 @@ static void exynos4_set_mmc_clk(int dev_index, unsigned int div)
|
||||
* CLK_DIV_FSYS2
|
||||
* MMC2_PRE_RATIO [15:8], MMC3_PRE_RATIO [31:24]
|
||||
* CLK_DIV_FSYS3
|
||||
* MMC4_PRE_RATIO [15:8]
|
||||
* MMC4_RATIO [3:0]
|
||||
*/
|
||||
if (dev_index < 2) {
|
||||
addr = (unsigned int)&clk->div_fsys1;
|
||||
} else if (dev_index == 4) {
|
||||
clear_bit = MASK_PRE_RATIO(dev_index);
|
||||
set_bit = SET_PRE_RATIO(dev_index, div);
|
||||
} else if (dev_index == 4) {
|
||||
addr = (unsigned int)&clk->div_fsys3;
|
||||
dev_index -= 4;
|
||||
/* MMC4 is controlled with the MMC4_RATIO value */
|
||||
clear_bit = MASK_RATIO(dev_index);
|
||||
set_bit = SET_RATIO(dev_index, div);
|
||||
} else {
|
||||
addr = (unsigned int)&clk->div_fsys2;
|
||||
dev_index -= 2;
|
||||
clear_bit = MASK_PRE_RATIO(dev_index);
|
||||
set_bit = SET_PRE_RATIO(dev_index, div);
|
||||
}
|
||||
|
||||
clrsetbits_le32(addr, 0xff << ((dev_index << 4) + 8),
|
||||
(div & 0xff) << ((dev_index << 4) + 8));
|
||||
}
|
||||
|
||||
/* exynos4x12: set the mmc clock */
|
||||
static void exynos4x12_set_mmc_clk(int dev_index, unsigned int div)
|
||||
{
|
||||
struct exynos4x12_clock *clk =
|
||||
(struct exynos4x12_clock *)samsung_get_base_clock();
|
||||
unsigned int addr;
|
||||
|
||||
/*
|
||||
* CLK_DIV_FSYS1
|
||||
* MMC0_PRE_RATIO [15:8], MMC1_PRE_RATIO [31:24]
|
||||
* CLK_DIV_FSYS2
|
||||
* MMC2_PRE_RATIO [15:8], MMC3_PRE_RATIO [31:24]
|
||||
*/
|
||||
if (dev_index < 2) {
|
||||
addr = (unsigned int)&clk->div_fsys1;
|
||||
} else {
|
||||
addr = (unsigned int)&clk->div_fsys2;
|
||||
dev_index -= 2;
|
||||
}
|
||||
|
||||
clrsetbits_le32(addr, 0xff << ((dev_index << 4) + 8),
|
||||
(div & 0xff) << ((dev_index << 4) + 8));
|
||||
clrsetbits_le32(addr, clear_bit, set_bit);
|
||||
}
|
||||
|
||||
/* exynos5: set the mmc clock */
|
||||
@@ -1612,10 +1594,7 @@ void set_mmc_clk(int dev_index, unsigned int div)
|
||||
else
|
||||
exynos5_set_mmc_clk(dev_index, div);
|
||||
} else {
|
||||
if (proid_is_exynos4412())
|
||||
exynos4x12_set_mmc_clk(dev_index, div);
|
||||
else
|
||||
exynos4_set_mmc_clk(dev_index, div);
|
||||
exynos4_set_mmc_clk(dev_index, div);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ enum {
|
||||
DO_CLOCKS = 1 << 1,
|
||||
DO_MEM_RESET = 1 << 2,
|
||||
DO_UART = 1 << 3,
|
||||
DO_POWER = 1 << 4,
|
||||
};
|
||||
|
||||
int do_lowlevel_init(void)
|
||||
@@ -48,6 +49,8 @@ int do_lowlevel_init(void)
|
||||
|
||||
arch_cpu_init();
|
||||
|
||||
set_ps_hold_ctrl();
|
||||
|
||||
reset_status = get_reset_status();
|
||||
|
||||
switch (reset_status) {
|
||||
@@ -60,9 +63,12 @@ int do_lowlevel_init(void)
|
||||
break;
|
||||
default:
|
||||
/* This is a normal boot (not a wake from sleep) */
|
||||
actions = DO_CLOCKS | DO_MEM_RESET;
|
||||
actions = DO_CLOCKS | DO_MEM_RESET | DO_POWER;
|
||||
}
|
||||
|
||||
if (actions & DO_POWER)
|
||||
set_ps_hold_ctrl();
|
||||
|
||||
if (actions & DO_CLOCKS) {
|
||||
system_clock_init();
|
||||
mem_ctrl_init(actions & DO_MEM_RESET);
|
||||
|
||||
@@ -573,15 +573,26 @@ static void exynos4_i2c_config(int peripheral, int flags)
|
||||
static int exynos4_mmc_config(int peripheral, int flags)
|
||||
{
|
||||
int i, start = 0, start_ext = 0;
|
||||
unsigned int func, ext_func;
|
||||
|
||||
switch (peripheral) {
|
||||
case PERIPH_ID_SDMMC0:
|
||||
start = EXYNOS4_GPIO_K00;
|
||||
start_ext = EXYNOS4_GPIO_K13;
|
||||
func = S5P_GPIO_FUNC(0x2);
|
||||
ext_func = S5P_GPIO_FUNC(0x3);
|
||||
break;
|
||||
case PERIPH_ID_SDMMC2:
|
||||
start = EXYNOS4_GPIO_K20;
|
||||
start_ext = EXYNOS4_GPIO_K33;
|
||||
func = S5P_GPIO_FUNC(0x2);
|
||||
ext_func = S5P_GPIO_FUNC(0x3);
|
||||
break;
|
||||
case PERIPH_ID_SDMMC4:
|
||||
start = EXYNOS4_GPIO_K00;
|
||||
start_ext = EXYNOS4_GPIO_K13;
|
||||
func = S5P_GPIO_FUNC(0x3);
|
||||
ext_func = S5P_GPIO_FUNC(0x4);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
@@ -589,13 +600,14 @@ static int exynos4_mmc_config(int peripheral, int flags)
|
||||
for (i = start; i < (start + 7); i++) {
|
||||
if (i == (start + 2))
|
||||
continue;
|
||||
gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
|
||||
gpio_cfg_pin(i, func);
|
||||
gpio_set_pull(i, S5P_GPIO_PULL_NONE);
|
||||
gpio_set_drv(i, S5P_GPIO_DRV_4X);
|
||||
}
|
||||
/* SDMMC2 do not use 8bit mode at exynos4 */
|
||||
if (flags & PINMUX_FLAG_8BIT_MODE) {
|
||||
for (i = start_ext; i < (start_ext + 4); i++) {
|
||||
gpio_cfg_pin(i, S5P_GPIO_FUNC(0x3));
|
||||
gpio_cfg_pin(i, ext_func);
|
||||
gpio_set_pull(i, S5P_GPIO_PULL_NONE);
|
||||
gpio_set_drv(i, S5P_GPIO_DRV_4X);
|
||||
}
|
||||
@@ -676,15 +688,26 @@ static void exynos4x12_i2c_config(int peripheral, int flags)
|
||||
static int exynos4x12_mmc_config(int peripheral, int flags)
|
||||
{
|
||||
int i, start = 0, start_ext = 0;
|
||||
unsigned int func, ext_func;
|
||||
|
||||
switch (peripheral) {
|
||||
case PERIPH_ID_SDMMC0:
|
||||
start = EXYNOS4X12_GPIO_K00;
|
||||
start_ext = EXYNOS4X12_GPIO_K13;
|
||||
func = S5P_GPIO_FUNC(0x2);
|
||||
ext_func = S5P_GPIO_FUNC(0x3);
|
||||
break;
|
||||
case PERIPH_ID_SDMMC2:
|
||||
start = EXYNOS4X12_GPIO_K20;
|
||||
start_ext = EXYNOS4X12_GPIO_K33;
|
||||
func = S5P_GPIO_FUNC(0x2);
|
||||
ext_func = S5P_GPIO_FUNC(0x3);
|
||||
break;
|
||||
case PERIPH_ID_SDMMC4:
|
||||
start = EXYNOS4_GPIO_K00;
|
||||
start_ext = EXYNOS4_GPIO_K13;
|
||||
func = S5P_GPIO_FUNC(0x3);
|
||||
ext_func = S5P_GPIO_FUNC(0x4);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
@@ -692,13 +715,13 @@ static int exynos4x12_mmc_config(int peripheral, int flags)
|
||||
for (i = start; i < (start + 7); i++) {
|
||||
if (i == (start + 2))
|
||||
continue;
|
||||
gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
|
||||
gpio_cfg_pin(i, func);
|
||||
gpio_set_pull(i, S5P_GPIO_PULL_NONE);
|
||||
gpio_set_drv(i, S5P_GPIO_DRV_4X);
|
||||
}
|
||||
if (flags & PINMUX_FLAG_8BIT_MODE) {
|
||||
for (i = start_ext; i < (start_ext + 4); i++) {
|
||||
gpio_cfg_pin(i, S5P_GPIO_FUNC(0x3));
|
||||
gpio_cfg_pin(i, ext_func);
|
||||
gpio_set_pull(i, S5P_GPIO_PULL_NONE);
|
||||
gpio_set_drv(i, S5P_GPIO_DRV_4X);
|
||||
}
|
||||
@@ -759,10 +782,10 @@ static int exynos4_pinmux_config(int peripheral, int flags)
|
||||
break;
|
||||
case PERIPH_ID_SDMMC0:
|
||||
case PERIPH_ID_SDMMC2:
|
||||
case PERIPH_ID_SDMMC4:
|
||||
return exynos4_mmc_config(peripheral, flags);
|
||||
case PERIPH_ID_SDMMC1:
|
||||
case PERIPH_ID_SDMMC3:
|
||||
case PERIPH_ID_SDMMC4:
|
||||
debug("SDMMC device %d not implemented\n", peripheral);
|
||||
return -1;
|
||||
default:
|
||||
@@ -794,10 +817,10 @@ static int exynos4x12_pinmux_config(int peripheral, int flags)
|
||||
break;
|
||||
case PERIPH_ID_SDMMC0:
|
||||
case PERIPH_ID_SDMMC2:
|
||||
case PERIPH_ID_SDMMC4:
|
||||
return exynos4x12_mmc_config(peripheral, flags);
|
||||
case PERIPH_ID_SDMMC1:
|
||||
case PERIPH_ID_SDMMC3:
|
||||
case PERIPH_ID_SDMMC4:
|
||||
debug("SDMMC device %d not implemented\n", peripheral);
|
||||
return -1;
|
||||
default:
|
||||
|
||||
@@ -112,6 +112,12 @@ static void exynos5_set_ps_hold_ctrl(void)
|
||||
EXYNOS_PS_HOLD_CONTROL_DATA_HIGH);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set ps_hold data driving value high
|
||||
* This enables the machine to stay powered on
|
||||
* after the initial power-on condition goes away
|
||||
* (e.g. power button).
|
||||
*/
|
||||
void set_ps_hold_ctrl(void)
|
||||
{
|
||||
if (cpu_is_exynos5())
|
||||
|
||||
@@ -128,6 +128,14 @@
|
||||
interrupts = <0 78 0>;
|
||||
};
|
||||
|
||||
dwmmc@12550000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "samsung,exynos-dwmmc";
|
||||
reg = <0x12550000 0x1000>;
|
||||
interrupts = <0 131 0>;
|
||||
};
|
||||
|
||||
gpio: gpio {
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
console = "/serial@13820000";
|
||||
mmc0 = "sdhci@12510000";
|
||||
mmc2 = "sdhci@12530000";
|
||||
mmc4 = "dwmmc@12550000";
|
||||
};
|
||||
|
||||
i2c@138d0000 {
|
||||
@@ -416,6 +417,7 @@
|
||||
samsung,bus-width = <8>;
|
||||
samsung,timing = <1 3 3>;
|
||||
pwr-gpios = <&gpio 0xB2 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@12520000 {
|
||||
@@ -431,4 +433,14 @@
|
||||
sdhci@12540000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dwmmc@12550000 {
|
||||
samsung,bus-width = <8>;
|
||||
samsung,timing = <2 1 0>;
|
||||
pwr-gpios = <&gpio 0xB2 0>;
|
||||
fifoth_val = <0x203f0040>;
|
||||
bus_hz = <400000000>;
|
||||
div = <0x3>;
|
||||
index = <4>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
mmc@12200000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "samsung,exynos5250-dwmmc";
|
||||
compatible = "samsung,exynos-dwmmc";
|
||||
reg = <0x12200000 0x1000>;
|
||||
interrupts = <0 75 0>;
|
||||
};
|
||||
@@ -144,7 +144,7 @@
|
||||
mmc@12210000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "samsung,exynos5250-dwmmc";
|
||||
compatible = "samsung,exynos-dwmmc";
|
||||
reg = <0x12210000 0x1000>;
|
||||
interrupts = <0 76 0>;
|
||||
};
|
||||
@@ -152,7 +152,7 @@
|
||||
mmc@12220000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "samsung,exynos5250-dwmmc";
|
||||
compatible = "samsung,exynos-dwmmc";
|
||||
reg = <0x12220000 0x1000>;
|
||||
interrupts = <0 77 0>;
|
||||
};
|
||||
@@ -160,7 +160,7 @@
|
||||
mmc@12230000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "samsung,exynos5250-dwmmc";
|
||||
compatible = "samsung,exynos-dwmmc";
|
||||
reg = <0x12230000 0x1000>;
|
||||
interrupts = <0 78 0>;
|
||||
};
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
reg = <0x1e>;
|
||||
compatible = "google,cros-ec";
|
||||
i2c-max-frequency = <100000>;
|
||||
ec-interrupt = <&gpio 782 1>;
|
||||
ec-interrupt = <&gpio 182 1>;
|
||||
};
|
||||
|
||||
power-regulator@48 {
|
||||
@@ -60,7 +60,7 @@
|
||||
reg = <0>;
|
||||
compatible = "google,cros-ec";
|
||||
spi-max-frequency = <5000000>;
|
||||
ec-interrupt = <&gpio 782 1>;
|
||||
ec-interrupt = <&gpio 182 1>;
|
||||
optimise-flash-write;
|
||||
status = "disabled";
|
||||
};
|
||||
@@ -80,6 +80,19 @@
|
||||
reg = <0x22>;
|
||||
compatible = "maxim,max98095-codec";
|
||||
};
|
||||
|
||||
ptn3460-bridge@20 {
|
||||
compatible = "nxp,ptn3460";
|
||||
reg = <0x20>;
|
||||
/*
|
||||
* TODO(sjg@chromium.org): Use GPIOs here
|
||||
* powerdown-gpio = <&gpy2 5 0>;
|
||||
* reset-gpio = <&gpx1 5 0>;
|
||||
* edid-emulation = <5>;
|
||||
* pinctrl-names = "default";
|
||||
* pinctrl-0 = <&ptn3460_gpios>;
|
||||
*/
|
||||
};
|
||||
};
|
||||
|
||||
i2c@12c60000 {
|
||||
@@ -184,4 +197,48 @@
|
||||
/* UP LEFT */
|
||||
0x070b0067 0x070c0069>;
|
||||
};
|
||||
|
||||
fimd@14400000 {
|
||||
samsung,vl-freq = <60>;
|
||||
samsung,vl-col = <1366>;
|
||||
samsung,vl-row = <768>;
|
||||
samsung,vl-width = <1366>;
|
||||
samsung,vl-height = <768>;
|
||||
|
||||
samsung,vl-clkp;
|
||||
samsung,vl-dp;
|
||||
samsung,vl-hsp;
|
||||
samsung,vl-vsp;
|
||||
|
||||
samsung,vl-bpix = <4>;
|
||||
|
||||
samsung,vl-hspw = <32>;
|
||||
samsung,vl-hbpd = <80>;
|
||||
samsung,vl-hfpd = <48>;
|
||||
samsung,vl-vspw = <5>;
|
||||
samsung,vl-vbpd = <14>;
|
||||
samsung,vl-vfpd = <3>;
|
||||
samsung,vl-cmd-allow-len = <0xf>;
|
||||
|
||||
samsung,winid = <0>;
|
||||
samsung,interface-mode = <1>;
|
||||
samsung,dp-enabled = <1>;
|
||||
samsung,dual-lcd-enabled = <0>;
|
||||
};
|
||||
|
||||
dp@145b0000 {
|
||||
samsung,lt-status = <0>;
|
||||
|
||||
samsung,master-mode = <0>;
|
||||
samsung,bist-mode = <0>;
|
||||
samsung,bist-pattern = <0>;
|
||||
samsung,h-sync-polarity = <0>;
|
||||
samsung,v-sync-polarity = <0>;
|
||||
samsung,interlaced = <0>;
|
||||
samsung,color-space = <0>;
|
||||
samsung,dynamic-range = <0>;
|
||||
samsung,ycbcr-coeff = <0>;
|
||||
samsung,color-depth = <1>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
#define BPLL 5
|
||||
#define RPLL 6
|
||||
|
||||
#define MASK_PRE_RATIO(x) (0xff << ((x << 4) + 8))
|
||||
#define MASK_RATIO(x) (0xf << (x << 4))
|
||||
#define SET_PRE_RATIO(x, y) ((y & 0xff) << ((x << 4) + 8))
|
||||
#define SET_RATIO(x, y) ((y & 0xf) << (x << 4))
|
||||
|
||||
enum pll_src_bit {
|
||||
EXYNOS_SRC_MPLL = 6,
|
||||
EXYNOS_SRC_EPLL,
|
||||
|
||||
@@ -1726,4 +1726,5 @@ uint32_t get_reset_status(void);
|
||||
|
||||
/* Read the resume function and call it */
|
||||
void power_exit_wakeup(void);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user