]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
ARM: nomadik: migrate MMC/SD card support to device tree
authorLinus Walleij <linus.walleij@linaro.org>
Sun, 6 Jan 2013 00:47:29 +0000 (01:47 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 28 Jan 2013 22:24:40 +0000 (23:24 +0100)
This moves over the MMC/SD card support to the device tree probe
path. The special GPIO to bias the card detect line is kept,
but the pin property is moved to the device tree as part of
the MMC/SD card node.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Documentation/devicetree/bindings/arm/ste-nomadik.txt
arch/arm/boot/dts/ste-nomadik-s8815.dts
arch/arm/boot/dts/ste-nomadik-stn8815.dtsi
arch/arm/mach-nomadik/cpu-8815.c

index a97316073afef24dda669f4c88723c5cb61d167e..19bca04b81c91c3dab487177f88a3057dd991f92 100644 (file)
@@ -21,4 +21,7 @@ usb-s8815 {
                        interrupts = <19 0x1>;
                        interrupt-parent = <&gpio3>;
                };
+               mmcsd-gpio {
+                       gpios = <&gpio3 16 0x1>;
+               };
 };
index cc777109f98f95b762128bcf0f71f384a9a97169..b28fbf3408e3b29c265db2f7448649819fe85df1 100644 (file)
@@ -22,5 +22,9 @@
                        interrupts = <19 0x1>;
                        interrupt-parent = <&gpio3>;
                };
+               /* This will bias the MMC/SD card detect line */
+               mmcsd-gpio {
+                       gpios = <&gpio3 16 0x1>;
+               };
        };
 };
index f129425883a44c36bce478243173480689123773..0164edc78eedfd266ed2656e75d63637ae0f4e38 100644 (file)
                        interrupt-parent = <&vica>;
                        interrupts = <10>;
                };
+
+               mmcsd: sdi@101f6000 {
+                       compatible = "arm,pl18x", "arm,primecell";
+                       reg = <0x101f6000 0x1000>;
+                       interrupt-parent = <&vica>;
+                       interrupts = <22>;
+                       max-frequency = <48000000>;
+                       bus-width = <4>;
+                       mmc-cap-mmc-highspeed;
+                       mmc-cap-sd-highspeed;
+                       cd-gpios = <&gpio3 15 0x1>;
+                       cd-inverted;
+               };
        };
 };
index 339496f151386948ca754071cad2778f75e1cc18..5ad301e4eb2fffecb299c6cb224e98f6a2bf165b 100644 (file)
@@ -36,6 +36,7 @@
 #include <linux/of_platform.h>
 #include <linux/mtd/fsmc.h>
 #include <linux/gpio.h>
+#include <linux/amba/mmci.h>
 
 #include <mach/hardware.h>
 #include <mach/irqs.h>
@@ -297,6 +298,50 @@ static int __init cpu8815_eth_init(void)
 }
 device_initcall(cpu8815_eth_init);
 
+/*
+ * TODO:
+ * cannot be set from device tree, convert to a proper DT
+ * binding.
+ */
+static struct mmci_platform_data mmcsd_plat_data = {
+       .ocr_mask = MMC_VDD_29_30,
+};
+
+/*
+ * This GPIO pin turns on a line that is used to detect card insertion
+ * on this board.
+ */
+static int __init cpu8815_mmcsd_init(void)
+{
+       struct device_node *cdbias;
+       int gpio, err;
+
+       cdbias = of_find_node_by_path("/usb-s8815/mmcsd-gpio");
+       if (!cdbias) {
+               pr_info("could not find MMC/SD card detect bias node\n");
+               return 0;
+       }
+       gpio = of_get_gpio(cdbias, 0);
+       if (gpio < 0) {
+               pr_info("could not obtain MMC/SD card detect bias GPIO\n");
+               return 0;
+       }
+       err = gpio_request(gpio, "card detect bias");
+       if (err) {
+               pr_info("failed to request card detect bias GPIO %d\n", gpio);
+               return -ENODEV;
+       }
+       err = gpio_direction_output(gpio, 0);
+       if (err){
+               pr_info("failed to set GPIO %d as output, low\n", gpio);
+               return err;
+       }
+       pr_info("enabled USB-S8815 CD bias GPIO %d, low\n", gpio);
+       return 0;
+}
+device_initcall(cpu8815_mmcsd_init);
+
+
 /* These are mostly to get the right device names for the clock lookups */
 static struct of_dev_auxdata cpu8815_auxdata_lookup[] __initdata = {
        OF_DEV_AUXDATA("st,nomadik-gpio", NOMADIK_GPIO0_BASE,
@@ -319,7 +364,8 @@ static struct of_dev_auxdata cpu8815_auxdata_lookup[] __initdata = {
                "rtc-pl031", NULL),
        OF_DEV_AUXDATA("stericsson,fsmc-nand", NOMADIK_FSMC_BASE,
                "fsmc-nand", &cpu8815_nand_data),
-
+       OF_DEV_AUXDATA("arm,primecell", NOMADIK_SDI_BASE,
+               "mmci", &mmcsd_plat_data),
        { /* sentinel */ },
 };