Lines Matching full:helper
48 mmc_fdt_parse(device_t dev, phandle_t node, struct mmc_helper *helper, in mmc_fdt_parse() argument
57 helper->props = mmc_helper.props; in mmc_fdt_parse()
64 &helper->vmmc_supply) == 0) { in mmc_fdt_parse()
69 &helper->vqmmc_supply) == 0) { 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()
81 if (regulator_check_voltage(helper->vqmmc_supply, 1800000) == 0) in mmc_fdt_parse()
91 if (regulator_check_voltage(helper->vqmmc_supply, 3300000) == 0) in mmc_fdt_parse()
101 helper->mmc_pwrseq = OF_device_from_xref(pwrseq_xref); in mmc_fdt_parse()
112 struct mmc_helper *helper = arg; in cd_intr() local
115 &helper->cd_delayed_task, -(hz / 2)); in cd_intr()
121 struct mmc_helper *helper = arg; in cd_card_task() local
124 cd_present = mmc_fdt_gpio_get_present(helper); in cd_card_task()
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()
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()
140 cd_setup(struct mmc_helper *helper, phandle_t node) in cd_setup() argument
146 dev = helper->dev; in cd_setup()
148 TIMEOUT_TASK_INIT(taskqueue_bus, &helper->cd_delayed_task, 0, in cd_setup()
149 cd_card_task, helper); in cd_setup()
155 if (helper->props & MMC_PROP_NON_REMOVABLE) { in cd_setup()
156 helper->cd_disabled = true; in cd_setup()
171 &helper->cd_pin)) in cd_setup()
174 if (gpio_pin_getcaps(helper->cd_pin, &pincaps) != 0 || 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()
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()
242 wp_setup(struct mmc_helper *helper, phandle_t node) in wp_setup() argument
246 dev = helper->dev; in wp_setup()
249 helper->wp_disabled = true; in wp_setup()
255 if (gpio_pin_get_by_ofw_property(dev, node, "wp-gpios", &helper->wp_pin)) in wp_setup()
260 device_get_nameunit(helper->wp_pin->dev), helper->wp_pin->pin); in wp_setup()
264 mmc_fdt_gpio_setup(device_t dev, phandle_t node, struct mmc_helper *helper, in mmc_fdt_gpio_setup() argument
275 helper->dev = dev; in mmc_fdt_gpio_setup()
276 helper->cd_handler = handler; in mmc_fdt_gpio_setup()
277 cd_setup(helper, node); in mmc_fdt_gpio_setup()
278 wp_setup(helper, node); in mmc_fdt_gpio_setup()
284 &helper->cd_delayed_task, mstosbt(500), 0, C_PREL(2)); in mmc_fdt_gpio_setup()
289 mmc_fdt_gpio_teardown(struct mmc_helper *helper) in mmc_fdt_gpio_teardown() argument
292 if (helper == NULL) in mmc_fdt_gpio_teardown()
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_bus, &helper->cd_delayed_task); in mmc_fdt_gpio_teardown()
308 mmc_fdt_gpio_get_present(struct mmc_helper *helper) in mmc_fdt_gpio_get_present() argument
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()
323 mmc_fdt_gpio_get_readonly(struct mmc_helper *helper) in mmc_fdt_gpio_get_readonly() argument
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()
339 mmc_fdt_set_power(struct mmc_helper *helper, enum mmc_power_mode power_mode) in mmc_fdt_set_power() argument
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()