mmc: host: atmel-mci: Add support for non-removable slots
authorTimo Kokkonen <timo.kokkonen@offcode.fi>
Mon, 3 Nov 2014 11:12:59 +0000 (13:12 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 10 Nov 2014 11:40:48 +0000 (12:40 +0100)
Add support for non-removable slots which have no card detection GPIO
and which should not be polled for a card change.

Signed-off-by: Timo Kokkonen <timo.kokkonen@offcode.fi>
Acked-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/atmel-mci.c
include/linux/atmel-mci.h

index 0b9ddf8aed0439e676db1ee73811e17dee66d5b7..d9646e5ae2c838427ba7182c847eb0c789b35b0e 100644 (file)
@@ -560,6 +560,9 @@ atmci_of_init(struct platform_device *pdev)
                pdata->slot[slot_id].detect_is_active_high =
                        of_property_read_bool(cnp, "cd-inverted");
 
+               pdata->slot[slot_id].non_removable =
+                       of_property_read_bool(cnp, "non-removable");
+
                pdata->slot[slot_id].wp_pin =
                        of_get_named_gpio(cnp, "wp-gpios", 0);
        }
@@ -2206,8 +2209,12 @@ static int __init atmci_init_slot(struct atmel_mci *host,
                }
        }
 
-       if (!gpio_is_valid(slot->detect_pin))
-               mmc->caps |= MMC_CAP_NEEDS_POLL;
+       if (!gpio_is_valid(slot->detect_pin)) {
+               if (slot_data->non_removable)
+                       mmc->caps |= MMC_CAP_NONREMOVABLE;
+               else
+                       mmc->caps |= MMC_CAP_NEEDS_POLL;
+       }
 
        if (gpio_is_valid(slot->wp_pin)) {
                if (devm_gpio_request(&host->pdev->dev, slot->wp_pin,
index 91b77f8d495da646da8975014e9ce118f405880e..9177947bf032f2c19c01e3a9b5385741cfede896 100644 (file)
@@ -11,6 +11,7 @@
  * @detect_pin: GPIO pin wired to the card detect switch
  * @wp_pin: GPIO pin wired to the write protect sensor
  * @detect_is_active_high: The state of the detect pin when it is active
+ * @non_removable: The slot is not removable, only detect once
  *
  * If a given slot is not present on the board, @bus_width should be
  * set to 0. The other fields are ignored in this case.
@@ -26,6 +27,7 @@ struct mci_slot_pdata {
        int                     detect_pin;
        int                     wp_pin;
        bool                    detect_is_active_high;
+       bool                    non_removable;
 };
 
 /**