Lines Matching refs:gpios

46  * mctrl_gpio_set - set gpios according to mctrl state
47 * @gpios: gpios to set
50 * Set the gpios according to the mctrl state.
52 void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl)
59 if (gpios == NULL)
63 if (gpios->gpio[i] && mctrl_gpio_flags_is_dir_out(i)) {
64 desc_array[count] = gpios->gpio[i];
75 * @gpios: gpios to look into
79 struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios,
82 if (gpios == NULL)
85 return gpios->gpio[gidx];
90 * mctrl_gpio_get - update mctrl with the gpios values.
91 * @gpios: gpios to get the info from
95 * Update mctrl with the gpios values.
97 unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl)
101 if (gpios == NULL)
105 if (gpios->gpio[i] && !mctrl_gpio_flags_is_dir_out(i)) {
106 if (gpiod_get_value(gpios->gpio[i]))
118 mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl)
122 if (gpios == NULL)
126 if (gpios->gpio[i] && mctrl_gpio_flags_is_dir_out(i)) {
127 if (gpiod_get_value(gpios->gpio[i]))
140 struct mctrl_gpios *gpios;
143 gpios = devm_kzalloc(dev, sizeof(*gpios), GFP_KERNEL);
144 if (!gpios)
152 gpio_str = kasprintf(GFP_KERNEL, "%s-gpios",
162 gpios->gpio[i] =
168 if (IS_ERR(gpios->gpio[i]))
169 return ERR_CAST(gpios->gpio[i]);
172 return gpios;
179 struct mctrl_gpios *gpios = context;
180 struct uart_port *port = gpios->port;
181 u32 mctrl = gpios->mctrl_prev;
185 mctrl_gpio_get(gpios, &mctrl);
189 mctrl_diff = mctrl ^ gpios->mctrl_prev;
190 gpios->mctrl_prev = mctrl;
214 * mctrl_gpio_init - initialize uart gpios
215 * @port: port to initialize gpios for
218 * This will get the {cts,rts,...}-gpios from device tree if they are present
226 struct mctrl_gpios *gpios;
229 gpios = mctrl_gpio_init_noauto(port->dev, idx);
230 if (IS_ERR(gpios))
231 return gpios;
233 gpios->port = port;
238 if (!gpios->gpio[i] || mctrl_gpio_flags_is_dir_out(i))
241 ret = gpiod_to_irq(gpios->gpio[i]);
248 gpios->irq[i] = ret;
251 irq_set_status_flags(gpios->irq[i], IRQ_NOAUTOEN);
253 ret = devm_request_irq(port->dev, gpios->irq[i],
256 gpios);
266 return gpios;
271 * mctrl_gpio_free - explicitly free uart gpios
273 * @gpios: gpios structure to be freed
275 * This will free the requested gpios in mctrl_gpio_init(). As `devm_*`
278 void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios)
282 if (gpios == NULL)
286 if (gpios->irq[i])
287 devm_free_irq(gpios->port->dev, gpios->irq[i], gpios);
289 if (gpios->gpio[i])
290 devm_gpiod_put(dev, gpios->gpio[i]);
292 devm_kfree(dev, gpios);
298 * @gpios: gpios to enable
300 void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios)
304 if (gpios == NULL)
308 if (gpios->mctrl_on)
311 gpios->mctrl_on = true;
314 mctrl_gpio_get(gpios, &gpios->mctrl_prev);
317 if (!gpios->irq[i])
320 enable_irq(gpios->irq[i]);
327 * @gpios: gpios to disable
329 void mctrl_gpio_disable_ms(struct mctrl_gpios *gpios)
333 if (gpios == NULL)
336 if (!gpios->mctrl_on)
339 gpios->mctrl_on = false;
342 if (!gpios->irq[i])
345 disable_irq(gpios->irq[i]);
350 void mctrl_gpio_enable_irq_wake(struct mctrl_gpios *gpios)
354 if (!gpios)
357 if (!gpios->mctrl_on)
361 if (!gpios->irq[i])
364 enable_irq_wake(gpios->irq[i]);
369 void mctrl_gpio_disable_irq_wake(struct mctrl_gpios *gpios)
373 if (!gpios)
376 if (!gpios->mctrl_on)
380 if (!gpios->irq[i])
383 disable_irq_wake(gpios->irq[i]);