Lines Matching refs:pwrseq
23 struct mmc_pwrseq pwrseq; member
30 static void mmc_pwrseq_simple_set_gpios_value(struct mmc_pwrseq_simple *pwrseq, in mmc_pwrseq_simple_set_gpios_value() argument
35 for (i = 0; i < pwrseq->nr_gpios; i++) in mmc_pwrseq_simple_set_gpios_value()
36 if (!IS_ERR(pwrseq->reset_gpios[i])) in mmc_pwrseq_simple_set_gpios_value()
37 gpiod_set_value_cansleep(pwrseq->reset_gpios[i], value); in mmc_pwrseq_simple_set_gpios_value()
42 struct mmc_pwrseq_simple *pwrseq = container_of(host->pwrseq, in mmc_pwrseq_simple_pre_power_on() local
43 struct mmc_pwrseq_simple, pwrseq); in mmc_pwrseq_simple_pre_power_on()
45 if (!IS_ERR(pwrseq->ext_clk) && !pwrseq->clk_enabled) { in mmc_pwrseq_simple_pre_power_on()
46 clk_prepare_enable(pwrseq->ext_clk); in mmc_pwrseq_simple_pre_power_on()
47 pwrseq->clk_enabled = true; in mmc_pwrseq_simple_pre_power_on()
50 mmc_pwrseq_simple_set_gpios_value(pwrseq, 1); in mmc_pwrseq_simple_pre_power_on()
55 struct mmc_pwrseq_simple *pwrseq = container_of(host->pwrseq, in mmc_pwrseq_simple_post_power_on() local
56 struct mmc_pwrseq_simple, pwrseq); in mmc_pwrseq_simple_post_power_on()
58 mmc_pwrseq_simple_set_gpios_value(pwrseq, 0); in mmc_pwrseq_simple_post_power_on()
63 struct mmc_pwrseq_simple *pwrseq = container_of(host->pwrseq, in mmc_pwrseq_simple_power_off() local
64 struct mmc_pwrseq_simple, pwrseq); in mmc_pwrseq_simple_power_off()
66 mmc_pwrseq_simple_set_gpios_value(pwrseq, 1); in mmc_pwrseq_simple_power_off()
68 if (!IS_ERR(pwrseq->ext_clk) && pwrseq->clk_enabled) { in mmc_pwrseq_simple_power_off()
69 clk_disable_unprepare(pwrseq->ext_clk); in mmc_pwrseq_simple_power_off()
70 pwrseq->clk_enabled = false; in mmc_pwrseq_simple_power_off()
76 struct mmc_pwrseq_simple *pwrseq = container_of(host->pwrseq, in mmc_pwrseq_simple_free() local
77 struct mmc_pwrseq_simple, pwrseq); in mmc_pwrseq_simple_free()
80 for (i = 0; i < pwrseq->nr_gpios; i++) in mmc_pwrseq_simple_free()
81 if (!IS_ERR(pwrseq->reset_gpios[i])) in mmc_pwrseq_simple_free()
82 gpiod_put(pwrseq->reset_gpios[i]); in mmc_pwrseq_simple_free()
84 if (!IS_ERR(pwrseq->ext_clk)) in mmc_pwrseq_simple_free()
85 clk_put(pwrseq->ext_clk); in mmc_pwrseq_simple_free()
87 kfree(pwrseq); in mmc_pwrseq_simple_free()
100 struct mmc_pwrseq_simple *pwrseq; in mmc_pwrseq_simple_alloc() local
107 pwrseq = kzalloc(sizeof(struct mmc_pwrseq_simple) + nr_gpios * in mmc_pwrseq_simple_alloc()
109 if (!pwrseq) in mmc_pwrseq_simple_alloc()
112 pwrseq->ext_clk = clk_get(dev, "ext_clock"); in mmc_pwrseq_simple_alloc()
113 if (IS_ERR(pwrseq->ext_clk) && in mmc_pwrseq_simple_alloc()
114 PTR_ERR(pwrseq->ext_clk) != -ENOENT) { in mmc_pwrseq_simple_alloc()
115 ret = PTR_ERR(pwrseq->ext_clk); in mmc_pwrseq_simple_alloc()
120 pwrseq->reset_gpios[i] = gpiod_get_index(dev, "reset", i, in mmc_pwrseq_simple_alloc()
122 if (IS_ERR(pwrseq->reset_gpios[i]) && in mmc_pwrseq_simple_alloc()
123 PTR_ERR(pwrseq->reset_gpios[i]) != -ENOENT && in mmc_pwrseq_simple_alloc()
124 PTR_ERR(pwrseq->reset_gpios[i]) != -ENOSYS) { in mmc_pwrseq_simple_alloc()
125 ret = PTR_ERR(pwrseq->reset_gpios[i]); in mmc_pwrseq_simple_alloc()
128 gpiod_put(pwrseq->reset_gpios[i]); in mmc_pwrseq_simple_alloc()
134 pwrseq->nr_gpios = nr_gpios; in mmc_pwrseq_simple_alloc()
135 pwrseq->pwrseq.ops = &mmc_pwrseq_simple_ops; in mmc_pwrseq_simple_alloc()
137 return &pwrseq->pwrseq; in mmc_pwrseq_simple_alloc()
139 if (!IS_ERR(pwrseq->ext_clk)) in mmc_pwrseq_simple_alloc()
140 clk_put(pwrseq->ext_clk); in mmc_pwrseq_simple_alloc()
142 kfree(pwrseq); in mmc_pwrseq_simple_alloc()