Lines Matching refs:gpios
45 void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl)
52 if (gpios == NULL)
56 if (gpios->gpio[i] && mctrl_gpio_flags_is_dir_out(i)) {
57 desc_array[count] = gpios->gpio[i];
66 struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios,
69 if (gpios == NULL)
72 return gpios->gpio[gidx];
76 unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl)
80 if (gpios == NULL)
84 if (gpios->gpio[i] && !mctrl_gpio_flags_is_dir_out(i)) {
85 if (gpiod_get_value(gpios->gpio[i]))
97 mctrl_gpio_get_outputs(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]))
119 struct mctrl_gpios *gpios;
122 gpios = devm_kzalloc(dev, sizeof(*gpios), GFP_KERNEL);
123 if (!gpios)
131 gpio_str = kasprintf(GFP_KERNEL, "%s-gpios",
141 gpios->gpio[i] =
147 if (IS_ERR(gpios->gpio[i]))
148 return ERR_CAST(gpios->gpio[i]);
151 return gpios;
158 struct mctrl_gpios *gpios = context;
159 struct uart_port *port = gpios->port;
160 u32 mctrl = gpios->mctrl_prev;
164 mctrl_gpio_get(gpios, &mctrl);
168 mctrl_diff = mctrl ^ gpios->mctrl_prev;
169 gpios->mctrl_prev = mctrl;
194 struct mctrl_gpios *gpios;
197 gpios = mctrl_gpio_init_noauto(port->dev, idx);
198 if (IS_ERR(gpios))
199 return gpios;
201 gpios->port = port;
206 if (!gpios->gpio[i] || mctrl_gpio_flags_is_dir_out(i))
209 ret = gpiod_to_irq(gpios->gpio[i]);
216 gpios->irq[i] = ret;
219 irq_set_status_flags(gpios->irq[i], IRQ_NOAUTOEN);
221 ret = devm_request_irq(port->dev, gpios->irq[i],
224 gpios);
234 return gpios;
238 void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios)
242 if (gpios == NULL)
246 if (gpios->irq[i])
247 devm_free_irq(gpios->port->dev, gpios->irq[i], gpios);
249 if (gpios->gpio[i])
250 devm_gpiod_put(dev, gpios->gpio[i]);
252 devm_kfree(dev, gpios);
256 void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios)
260 if (gpios == NULL)
264 if (gpios->mctrl_on)
267 gpios->mctrl_on = true;
270 mctrl_gpio_get(gpios, &gpios->mctrl_prev);
273 if (!gpios->irq[i])
276 enable_irq(gpios->irq[i]);
281 void mctrl_gpio_disable_ms(struct mctrl_gpios *gpios)
285 if (gpios == NULL)
288 if (!gpios->mctrl_on)
291 gpios->mctrl_on = false;
294 if (!gpios->irq[i])
297 disable_irq(gpios->irq[i]);