summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2020-04-15 13:02:13 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2020-04-15 13:02:13 +0000
commit85ebd7e10a5796dc0c10465a5590e28aaa43e64b (patch)
treef4fe0d17ea4a95e74cd250c0ce2316d5721df7f0
parent643ce948780fdbb21bda30d44a7e234952279797 (diff)
Notes
-rw-r--r--sys/dev/mmc/mmc_fdt_helpers.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/sys/dev/mmc/mmc_fdt_helpers.c b/sys/dev/mmc/mmc_fdt_helpers.c
index 9dabedb91a7d..a80da9e89d5f 100644
--- a/sys/dev/mmc/mmc_fdt_helpers.c
+++ b/sys/dev/mmc/mmc_fdt_helpers.c
@@ -217,7 +217,7 @@ cd_card_task(void *arg, int pending __unused)
/*
* Card detect setup.
*/
-static void
+static bool
cd_setup(struct mmc_fdt_helper *helper, phandle_t node)
{
int pincaps;
@@ -233,7 +233,7 @@ cd_setup(struct mmc_fdt_helper *helper, phandle_t node)
helper->cd_disabled = true;
if (bootverbose)
device_printf(dev, "Non-removable media\n");
- return;
+ return (false);
}
/*
@@ -246,14 +246,14 @@ cd_setup(struct mmc_fdt_helper *helper, phandle_t node)
*/
if (gpio_pin_get_by_ofw_property(dev, node, "cd-gpios",
&helper->cd_pin))
- return;
+ return (false);
if (gpio_pin_getcaps(helper->cd_pin, &pincaps) != 0 ||
!(pincaps & GPIO_PIN_INPUT)) {
device_printf(dev, "Cannot read card-detect gpio pin; "
"setting card-always-present flag.\n");
helper->cd_disabled = true;
- return;
+ return (false);
}
/*
@@ -313,6 +313,8 @@ without_interrupts:
device_get_nameunit(helper->cd_pin->dev), helper->cd_pin->pin,
cd_mode_str);
}
+
+ return (true);
}
/*
@@ -354,14 +356,16 @@ mmc_fdt_gpio_setup(device_t dev, phandle_t node, struct mmc_fdt_helper *helper,
helper->dev = dev;
helper->cd_handler = handler;
- cd_setup(helper, node);
wp_setup(helper, node);
- /*
- * Schedule a card detection
- */
- taskqueue_enqueue_timeout_sbt(taskqueue_swi_giant,
- &helper->cd_delayed_task, mstosbt(500), 0, C_PREL(2));
+ if (cd_setup(helper, node)) {
+ /*
+ * Schedule a card detection
+ */
+ taskqueue_enqueue_timeout_sbt(taskqueue_swi_giant,
+ &helper->cd_delayed_task, mstosbt(500), 0, C_PREL(2));
+ }
+
return (0);
}