mmc: fsl_esdhc: Fix wp_enable issue
authorYe Li <ye.li@nxp.com>
Mon, 7 Jan 2019 09:10:27 +0000 (09:10 +0000)
committerPeng Fan <peng.fan@nxp.com>
Fri, 3 May 2019 12:04:30 +0000 (20:04 +0800)
The wp-gpios property is used for gpio, if this is set, the WP pin is muxed
to gpio function, can't be used as internal WP checking. However the codes
remain to use internal WP checking.

This patch changes to examine the "fsl,wp-controller" for enabling internal WP
checking, and "wp-gpios" for muxing to gpio.

Signed-off-by: Ye Li <ye.li@nxp.com>
drivers/mmc/fsl_esdhc.c

index 60972014c49a0598cee3042a446bdd30dadf0674..1b7de74a72d15da124291c6d897d48adb7f6e801 100644 (file)
@@ -297,6 +297,13 @@ static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc,
                                printf("\nThe SD card is locked. Can not write to a locked card.\n\n");
                                return -ETIMEDOUT;
                        }
+               } else {
+#ifdef CONFIG_DM_GPIO
+                       if (dm_gpio_is_valid(&priv->wp_gpio) && dm_gpio_get_value(&priv->wp_gpio)) {
+                               printf("\nThe SD card is locked. Can not write to a locked card.\n\n");
+                               return -ETIMEDOUT;
+                       }
+#endif
                }
 
                esdhc_clrsetbits32(&regs->wml, WML_WR_WML_MASK,
@@ -1502,14 +1509,15 @@ static int fsl_esdhc_probe(struct udevice *dev)
 #endif
        }
 
-       priv->wp_enable = 1;
-
+       if (dev_read_prop(dev, "fsl,wp-controller", NULL)) {
+               priv->wp_enable = 1;
+       } else {
+               priv->wp_enable = 0;
 #ifdef CONFIG_DM_GPIO
-       ret = gpio_request_by_name(dev, "wp-gpios", 0, &priv->wp_gpio,
+               gpio_request_by_name(dev, "wp-gpios", 0, &priv->wp_gpio,
                                   GPIOD_IS_IN);
-       if (ret)
-               priv->wp_enable = 0;
 #endif
+       }
 
        priv->vs18_enable = 0;