samsung: board: support eMMC reset using DT

Some exynos boards require special handling of nRESET_OUT line for eMMC
memory to perform complete reboot e.g. Odroid X2/U3/XU3 boards.

This will support eMMC reset using DT from reset_misc of samsung common
board file.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
master
Joonyoung Shim 10 years ago committed by Minkyu Kang
parent a276172cf3
commit aa8e00fab5
  1. 28
      board/samsung/common/board.c
  2. 8
      board/samsung/odroid/odroid.c
  3. 15
      doc/device-tree-bindings/exynos/emmc-reset.txt

@ -355,3 +355,31 @@ int misc_init_r(void)
return 0;
}
#endif
void reset_misc(void)
{
struct gpio_desc gpio = {};
int node;
node = fdt_node_offset_by_compatible(gd->fdt_blob, 0,
"samsung,emmc-reset");
if (node < 0)
return;
gpio_request_by_name_nodev(gd->fdt_blob, node, "reset-gpio", 0, &gpio,
GPIOD_IS_OUT);
if (dm_gpio_is_valid(&gpio)) {
/*
* Reset eMMC
*
* FIXME: Need to optimize delay time. Minimum 1usec pulse is
* required by 'JEDEC Standard No.84-A441' (eMMC)
* document but real delay time is expected to greater
* than 1usec.
*/
dm_gpio_set_value(&gpio, 0);
mdelay(10);
dm_gpio_set_value(&gpio, 1);
}
}

@ -503,11 +503,3 @@ int board_usb_init(int index, enum usb_init_type init)
return s3c_udc_probe(&s5pc210_otg_data);
}
#endif
void reset_misc(void)
{
/* Reset eMMC*/
gpio_set_value(EXYNOS4X12_GPIO_K12, 0);
mdelay(10);
gpio_set_value(EXYNOS4X12_GPIO_K12, 1);
}

@ -0,0 +1,15 @@
* Samsung eMMC reset
Some exynos boards require special handling of nRESET_OUT line for eMMC memory
to perform complete reboot.
Required properties:
- compatible: should be "samsung,emmc-reset"
- reset-gpio: gpio chip for eMMC reset.
Example:
emmc-reset {
compatible = "samsung,emmc-reset";
reset-gpio = <&gpk1 2 0>;
};
Loading…
Cancel
Save