ODROID-COMMON:Integrated uSD card reset according to odroid schematic for reboot.
authorckkim <changkon12@gmail.com>
Fri, 17 Jul 2020 08:56:25 +0000 (17:56 +0900)
committerckkim <changkon12@gmail.com>
Fri, 17 Jul 2020 09:06:50 +0000 (18:06 +0900)
Signed-off-by: ckkim <changkon12@gmail.com>
Change-Id: I252cbb12a3969bd24bc49217541c96de9a53a11e

arch/arm64/boot/dts/amlogic/meson64_odroidn2.dtsi
arch/arm64/boot/dts/amlogic/meson64_odroidn2_plus.dts
drivers/amlogic/reboot/reboot.c

index ec7b9e0..8c4de6a 100644 (file)
                         "MMC_CAP_ERASE",
                         "MMC_CAP_CMD23";
                vol_switch = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>;
-               gpio_power = <&gpio_ao GPIOAO_8 GPIO_ACTIVE_HIGH>;
                vol_switch_18 = <1>;
                f_min = <400000>;
                f_max = <200000000>;
index 537d648..abb94f2 100644 (file)
        };
 }; /* end of / */
 
-&sd_emmc_b {
-       sd {
-               /delete-property/ gpio_power;
-       };
+&reboot {
+       sd_vddio_gpio = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
 };
 
 &soc_thermal {
index d476143..a4e5423 100644 (file)
@@ -39,7 +39,6 @@ static void __iomem *reboot_reason_vaddr;
 #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;
@@ -127,75 +126,69 @@ void meson_common_restart(char mode, const char *cmd)
 }
 
 #if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
-void odroidn2_card_reset(void)
+void odroid_card_reset(void)
 {
        int ret = 0;
 
        if ((sd_volsw_gpio == 0) && (sd_power_gpio == 0))
                return;
 
-       gpio_free(sd_volsw_gpio);
-       gpio_free(sd_power_gpio);
-       ret = gpio_request_one(sd_volsw_gpio,
-                       GPIOF_OUT_INIT_LOW, "REBOOT");
-       CHECK_RET(ret);
-       mdelay(10);
-       ret = gpio_direction_output(sd_volsw_gpio, 1);
-       CHECK_RET(ret);
-       ret = gpio_request_one(sd_power_gpio,
-                       GPIOF_OUT_INIT_LOW, "REBOOT");
-       CHECK_RET(ret);
-       mdelay(10);
-       ret = gpio_direction_output(sd_volsw_gpio, 0);
-       CHECK_RET(ret);
-       ret = gpio_direction_output(sd_power_gpio, 1);
-       CHECK_RET(ret);
-       mdelay(5);
-       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);
+       if (is_meson_g12b_cpu() && is_meson_rev_a()) {
+               gpio_free(sd_volsw_gpio);
+               gpio_free(sd_power_gpio);
+               ret = gpio_request_one(sd_volsw_gpio,
+                               GPIOF_OUT_INIT_LOW, "REBOOT");
+               CHECK_RET(ret);
+               mdelay(10);
+               ret = gpio_direction_output(sd_volsw_gpio, 1);
+               CHECK_RET(ret);
+               ret = gpio_request_one(sd_power_gpio,
+                               GPIOF_OUT_INIT_LOW, "REBOOT");
+               CHECK_RET(ret);
+               mdelay(10);
+               ret = gpio_direction_output(sd_volsw_gpio, 0);
+               CHECK_RET(ret);
+               ret = gpio_direction_output(sd_power_gpio, 1);
+               CHECK_RET(ret);
+               mdelay(5);
+               gpio_free(sd_volsw_gpio);
+               gpio_free(sd_power_gpio);
+       } else {
+               if (sd_vddio_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)
-       if (!board_is_odroidn2())
-               odroidc4_card_reset();
-       else
-               odroidn2_card_reset();
+       odroid_card_reset();
 #endif
        meson_common_restart(reboot_mode, cmd);
 }
@@ -203,10 +196,7 @@ static void do_aml_restart(enum reboot_mode reboot_mode, const char *cmd)
 static void do_aml_poweroff(void)
 {
 #if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
-       if (!board_is_odroidn2())
-               odroidc4_card_reset();
-       else
-               odroidn2_card_reset();
+       odroid_card_reset();
 #endif
        /* TODO: Add poweroff capability */
        __invoke_psci_fn_smc(0x82000042, 1, 0, 0);
@@ -272,13 +262,11 @@ static int aml_restart_probe(struct platform_device *pdev)
        of_node = pdev->dev.of_node;
        sd_volsw_gpio = 0;
        sd_power_gpio = 0;
+       sd_vddio_gpio = 0;
 
        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);
-       }
+       sd_vddio_gpio = of_get_named_gpio(of_node, "sd_vddio_gpio", 0);
 #endif
 
        ret = register_die_notifier(&panic_notifier);