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);
        }
                }
        }
 
-       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,
 
  * @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.
        int                     detect_pin;
        int                     wp_pin;
        bool                    detect_is_active_high;
+       bool                    non_removable;
 };
 
 /**