brintos

brintos / linux-shallow public Read only

0
0
Text · 3.7 KiB · fc76910 Raw
166 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2/*3 * Helpers for controlling modem lines via GPIO4 *5 * Copyright (C) 2014 Paratronic S.A.6 */7 8#ifndef __SERIAL_MCTRL_GPIO__9#define __SERIAL_MCTRL_GPIO__10 11#include <linux/err.h>12#include <linux/device.h>13#include <linux/gpio/consumer.h>14 15struct uart_port;16 17enum mctrl_gpio_idx {18	UART_GPIO_CTS,19	UART_GPIO_DSR,20	UART_GPIO_DCD,21	UART_GPIO_RNG,22	UART_GPIO_RI = UART_GPIO_RNG,23	UART_GPIO_RTS,24	UART_GPIO_DTR,25	UART_GPIO_MAX,26};27 28/*29 * Opaque descriptor for modem lines controlled by GPIOs30 */31struct mctrl_gpios;32 33#ifdef CONFIG_GPIOLIB34 35/*36 * Set state of the modem control output lines via GPIOs.37 */38void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl);39 40/*41 * Get state of the modem control input lines from GPIOs.42 * The mctrl flags are updated and returned.43 */44unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl);45 46/*47 * Get state of the modem control output lines from GPIOs.48 * The mctrl flags are updated and returned.49 */50unsigned int51mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl);52 53/*54 * Returns the associated struct gpio_desc to the modem line gidx55 */56struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios,57				      enum mctrl_gpio_idx gidx);58 59/*60 * Request and set direction of modem control line GPIOs and set up irq61 * handling.62 * devm_* functions are used, so there's no need to call mctrl_gpio_free().63 * Returns a pointer to the allocated mctrl structure if ok, -ENOMEM on64 * allocation error.65 */66struct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx);67 68/*69 * Request and set direction of modem control line GPIOs.70 * devm_* functions are used, so there's no need to call mctrl_gpio_free().71 * Returns a pointer to the allocated mctrl structure if ok, -ENOMEM on72 * allocation error.73 */74struct mctrl_gpios *mctrl_gpio_init_noauto(struct device *dev,75					   unsigned int idx);76 77/*78 * Free the mctrl_gpios structure.79 * Normally, this function will not be called, as the GPIOs will80 * be disposed of by the resource management code.81 */82void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios);83 84/*85 * Enable gpio interrupts to report status line changes.86 */87void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios);88 89/*90 * Disable gpio interrupts to report status line changes.91 */92void mctrl_gpio_disable_ms(struct mctrl_gpios *gpios);93 94/*95 * Enable gpio wakeup interrupts to enable wake up source.96 */97void mctrl_gpio_enable_irq_wake(struct mctrl_gpios *gpios);98 99/*100 * Disable gpio wakeup interrupts to enable wake up source.101 */102void mctrl_gpio_disable_irq_wake(struct mctrl_gpios *gpios);103 104#else /* GPIOLIB */105 106static inline107void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl)108{109}110 111static inline112unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl)113{114	return *mctrl;115}116 117static inline unsigned int118mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl)119{120	return *mctrl;121}122 123static inline124struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios,125				      enum mctrl_gpio_idx gidx)126{127	return NULL;128}129 130static inline131struct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx)132{133	return NULL;134}135 136static inline137struct mctrl_gpios *mctrl_gpio_init_noauto(struct device *dev, unsigned int idx)138{139	return NULL;140}141 142static inline143void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios)144{145}146 147static inline void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios)148{149}150 151static inline void mctrl_gpio_disable_ms(struct mctrl_gpios *gpios)152{153}154 155static inline void mctrl_gpio_enable_irq_wake(struct mctrl_gpios *gpios)156{157}158 159static inline void mctrl_gpio_disable_irq_wake(struct mctrl_gpios *gpios)160{161}162 163#endif /* GPIOLIB */164 165#endif166