Lines Matching +full:write +full:- +full:protect
57 helper->props = mmc_helper.props; in mmc_fdt_parse()
63 if (regulator_get_by_ofw_property(dev, 0, "vmmc-supply", in mmc_fdt_parse()
64 &helper->vmmc_supply) == 0) { in mmc_fdt_parse()
66 device_printf(dev, "vmmc-supply regulator found\n"); in mmc_fdt_parse()
68 if (regulator_get_by_ofw_property(dev, 0, "vqmmc-supply", in mmc_fdt_parse()
69 &helper->vqmmc_supply) == 0) { in mmc_fdt_parse()
71 device_printf(dev, "vqmmc-supply regulator found\n"); in mmc_fdt_parse()
74 if (helper->vqmmc_supply != NULL) { in mmc_fdt_parse()
75 if (regulator_check_voltage(helper->vqmmc_supply, 1200000) == 0) in mmc_fdt_parse()
76 host->caps |= MMC_CAP_SIGNALING_120; in mmc_fdt_parse()
78 host->caps &= ~( MMC_CAP_MMC_HS400_120 | in mmc_fdt_parse()
81 if (regulator_check_voltage(helper->vqmmc_supply, 1800000) == 0) in mmc_fdt_parse()
82 host->caps |= MMC_CAP_SIGNALING_180; in mmc_fdt_parse()
84 host->caps &= ~(MMC_CAP_MMC_HS400_180 | in mmc_fdt_parse()
91 if (regulator_check_voltage(helper->vqmmc_supply, 3300000) == 0) in mmc_fdt_parse()
92 host->caps |= MMC_CAP_SIGNALING_330; in mmc_fdt_parse()
94 host->caps |= MMC_CAP_SIGNALING_330; in mmc_fdt_parse()
96 if (OF_hasprop(node, "mmc-pwrseq")) { in mmc_fdt_parse()
97 if (OF_getencprop(node, "mmc-pwrseq", &pwrseq_xref, sizeof(pwrseq_xref)) == -1) { in mmc_fdt_parse()
101 helper->mmc_pwrseq = OF_device_from_xref(pwrseq_xref); in mmc_fdt_parse()
115 &helper->cd_delayed_task, -(hz / 2)); in cd_intr()
125 if(helper->cd_handler && cd_present != helper->cd_present) in cd_card_task()
126 helper->cd_handler(helper->dev, in cd_card_task()
128 helper->cd_present = cd_present; in cd_card_task()
130 /* If we're polling re-schedule the task */ in cd_card_task()
131 if (helper->cd_ihandler == NULL) in cd_card_task()
133 &helper->cd_delayed_task, mstosbt(500), 0, C_PREL(2)); in cd_card_task()
146 dev = helper->dev; in cd_setup()
148 TIMEOUT_TASK_INIT(taskqueue_swi_giant, &helper->cd_delayed_task, 0, in cd_setup()
152 * If the device is flagged as non-removable, set that slot option, and in cd_setup()
155 if (helper->props & MMC_PROP_NON_REMOVABLE) { in cd_setup()
156 helper->cd_disabled = true; in cd_setup()
158 device_printf(dev, "Non-removable media\n"); in cd_setup()
163 * If there is no cd-gpios property, then presumably the hardware in cd_setup()
170 if (gpio_pin_get_by_ofw_property(dev, node, "cd-gpios", in cd_setup()
171 &helper->cd_pin)) in cd_setup()
174 if (gpio_pin_getcaps(helper->cd_pin, &pincaps) != 0 || in cd_setup()
176 device_printf(dev, "Cannot read card-detect gpio pin; " in cd_setup()
177 "setting card-always-present flag.\n"); in cd_setup()
178 helper->cd_disabled = true; in cd_setup()
194 if (helper->cd_handler == NULL) { in cd_setup()
204 if ((helper->cd_ires = gpio_alloc_intr_resource(dev, &helper->cd_irid, in cd_setup()
205 RF_ACTIVE, helper->cd_pin, GPIO_INTR_EDGE_BOTH)) == NULL) { in cd_setup()
212 if (bus_setup_intr(dev, helper->cd_ires, INTR_TYPE_BIO | INTR_MPSAFE, in cd_setup()
213 NULL, cd_intr, helper, &helper->cd_ihandler) != 0) { in cd_setup()
214 device_printf(dev, "Unable to setup card-detect irq handler\n"); in cd_setup()
215 helper->cd_ihandler = NULL; in cd_setup()
224 if (helper->cd_ihandler == NULL) { in cd_setup()
233 device_get_nameunit(helper->cd_pin->dev), helper->cd_pin->pin, in cd_setup()
239 * Write protect setup.
246 dev = helper->dev; in wp_setup()
248 if (OF_hasprop(node, "disable-wp")) { in wp_setup()
249 helper->wp_disabled = true; in wp_setup()
251 device_printf(dev, "Write protect disabled\n"); in wp_setup()
255 if (gpio_pin_get_by_ofw_property(dev, node, "wp-gpios", &helper->wp_pin)) in wp_setup()
259 device_printf(dev, "Write protect switch on %s pin %u\n", in wp_setup()
260 device_get_nameunit(helper->wp_pin->dev), helper->wp_pin->pin); in wp_setup()
275 helper->dev = dev; in mmc_fdt_gpio_setup()
276 helper->cd_handler = handler; in mmc_fdt_gpio_setup()
284 &helper->cd_delayed_task, mstosbt(500), 0, C_PREL(2)); in mmc_fdt_gpio_setup()
295 if (helper->cd_ihandler != NULL) in mmc_fdt_gpio_teardown()
296 bus_teardown_intr(helper->dev, helper->cd_ires, helper->cd_ihandler); in mmc_fdt_gpio_teardown()
297 if (helper->wp_pin != NULL) in mmc_fdt_gpio_teardown()
298 gpio_pin_release(helper->wp_pin); in mmc_fdt_gpio_teardown()
299 if (helper->cd_pin != NULL) in mmc_fdt_gpio_teardown()
300 gpio_pin_release(helper->cd_pin); in mmc_fdt_gpio_teardown()
301 if (helper->cd_ires != NULL) in mmc_fdt_gpio_teardown()
302 bus_release_resource(helper->dev, SYS_RES_IRQ, 0, helper->cd_ires); in mmc_fdt_gpio_teardown()
304 taskqueue_drain_timeout(taskqueue_swi_giant, &helper->cd_delayed_task); in mmc_fdt_gpio_teardown()
312 if (helper->cd_disabled) in mmc_fdt_gpio_get_present()
314 if (helper->cd_pin == NULL) in mmc_fdt_gpio_get_present()
317 gpio_pin_is_active(helper->cd_pin, &pinstate); in mmc_fdt_gpio_get_present()
319 return (pinstate ^ (bool)(helper->props & MMC_PROP_CD_INVERTED)); in mmc_fdt_gpio_get_present()
327 if (helper->wp_disabled) in mmc_fdt_gpio_get_readonly()
330 if (helper->wp_pin == NULL) in mmc_fdt_gpio_get_readonly()
333 gpio_pin_is_active(helper->wp_pin, &pinstate); in mmc_fdt_gpio_get_readonly()
335 return (pinstate ^ (bool)(helper->props & MMC_PROP_WP_INVERTED)); in mmc_fdt_gpio_get_readonly()
348 if (helper->vmmc_supply) { in mmc_fdt_set_power()
349 rv = regulator_status(helper->vmmc_supply, ®_status); in mmc_fdt_set_power()
351 regulator_disable(helper->vmmc_supply); in mmc_fdt_set_power()
353 if (helper->vqmmc_supply) { in mmc_fdt_set_power()
354 rv = regulator_status(helper->vqmmc_supply, ®_status); in mmc_fdt_set_power()
356 regulator_disable(helper->vqmmc_supply); in mmc_fdt_set_power()
358 if (helper->mmc_pwrseq) in mmc_fdt_set_power()
359 MMC_PWRSEQ_SET_POWER(helper->mmc_pwrseq, false); in mmc_fdt_set_power()
362 if (helper->vmmc_supply) { in mmc_fdt_set_power()
363 rv = regulator_status(helper->vmmc_supply, ®_status); in mmc_fdt_set_power()
365 regulator_enable(helper->vmmc_supply); in mmc_fdt_set_power()
367 if (helper->vqmmc_supply) { in mmc_fdt_set_power()
368 rv = regulator_status(helper->vqmmc_supply, ®_status); in mmc_fdt_set_power()
370 regulator_enable(helper->vqmmc_supply); in mmc_fdt_set_power()
372 if (helper->mmc_pwrseq) in mmc_fdt_set_power()
373 MMC_PWRSEQ_SET_POWER(helper->mmc_pwrseq, true); in mmc_fdt_set_power()