mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
ODROID-COMMON: Modified to uSD reset for hw_rev0.4
Change-Id: Ib723d0cbfacce651f6df2419d15fa231c67a58d6 Signed-off-by: femto <ckkim@hardkernel.com>
This commit is contained in:
@@ -41,9 +41,12 @@
|
||||
#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/platform_data/board_odroid.h>
|
||||
|
||||
int sd_volsw_gpio;
|
||||
int sd_power_gpio;
|
||||
int sd_vddio_gpio;
|
||||
|
||||
#define CHECK_RET(ret) { \
|
||||
if (ret) \
|
||||
pr_err("[%s] gpio op failed(%d) at line %d\n",\
|
||||
@@ -130,7 +133,7 @@ void meson_common_restart(char mode, const char *cmd)
|
||||
}
|
||||
|
||||
#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
|
||||
void odroid_card_reset(void)
|
||||
void odroidn2_card_reset(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
@@ -157,11 +160,48 @@ void odroid_card_reset(void)
|
||||
gpio_free(sd_volsw_gpio);
|
||||
gpio_free(sd_power_gpio);
|
||||
}
|
||||
void odroidc4_card_reset(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if ((sd_vddio_gpio == 0) && (sd_power_gpio == 0) &&
|
||||
(sd_power_gpio == 0))
|
||||
return;
|
||||
|
||||
gpio_free(sd_volsw_gpio);
|
||||
gpio_free(sd_vddio_gpio);
|
||||
gpio_free(sd_power_gpio);
|
||||
|
||||
ret = gpio_request_one(sd_volsw_gpio,
|
||||
GPIOF_OUT_INIT_LOW, "REBOOT");
|
||||
CHECK_RET(ret);
|
||||
ret = gpio_request_one(sd_vddio_gpio,
|
||||
GPIOF_OUT_INIT_LOW, "REBOOT");
|
||||
CHECK_RET(ret);
|
||||
ret = gpio_request_one(sd_power_gpio,
|
||||
GPIOF_OUT_INIT_LOW, "REBOOT");
|
||||
CHECK_RET(ret);
|
||||
mdelay(100);
|
||||
ret = gpio_direction_input(sd_vddio_gpio);
|
||||
CHECK_RET(ret);
|
||||
ret = gpio_direction_input(sd_power_gpio);
|
||||
CHECK_RET(ret);
|
||||
ret = gpio_direction_input(sd_volsw_gpio);
|
||||
CHECK_RET(ret);
|
||||
mdelay(5);
|
||||
gpio_free(sd_vddio_gpio);
|
||||
gpio_free(sd_power_gpio);
|
||||
gpio_free(sd_volsw_gpio);
|
||||
}
|
||||
#endif // CONFIG_ARCH_MESON64_ODROID_COMMON
|
||||
|
||||
static void do_aml_restart(enum reboot_mode reboot_mode, const char *cmd)
|
||||
{
|
||||
#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
|
||||
odroid_card_reset();
|
||||
if (!board_is_odroidn2())
|
||||
odroidc4_card_reset();
|
||||
else
|
||||
odroidn2_card_reset();
|
||||
#endif
|
||||
meson_common_restart(reboot_mode, cmd);
|
||||
}
|
||||
@@ -210,6 +250,10 @@ static int aml_restart_probe(struct platform_device *pdev)
|
||||
|
||||
sd_volsw_gpio = of_get_named_gpio(of_node, "sd_volsw_gpio", 0);
|
||||
sd_power_gpio = of_get_named_gpio(of_node, "sd_power_gpio", 0);
|
||||
if (!board_is_odroidn2()) {
|
||||
sd_vddio_gpio = 0;
|
||||
sd_vddio_gpio = of_get_named_gpio(of_node, "sd_vddio_gpio", 0);
|
||||
}
|
||||
#endif
|
||||
ret = register_die_notifier(&panic_notifier);
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user