Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0+ 2 : : /* 3 : : * Helpers for controlling modem lines via GPIO 4 : : * 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 : : 15 : : struct uart_port; 16 : : 17 : : enum 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 GPIOs 30 : : */ 31 : : struct mctrl_gpios; 32 : : 33 : : #ifdef CONFIG_GPIOLIB 34 : : 35 : : /* 36 : : * Set state of the modem control output lines via GPIOs. 37 : : */ 38 : : void 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 : : */ 44 : : unsigned 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 : : */ 50 : : unsigned int 51 : : mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl); 52 : : 53 : : /* 54 : : * Returns the associated struct gpio_desc to the modem line gidx 55 : : */ 56 : : struct 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 irq 61 : : * 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 on 64 : : * allocation error. 65 : : */ 66 : : struct 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 on 72 : : * allocation error. 73 : : */ 74 : : struct 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 will 80 : : * be disposed of by the resource management code. 81 : : */ 82 : : void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios); 83 : : 84 : : /* 85 : : * Enable gpio interrupts to report status line changes. 86 : : */ 87 : : void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios); 88 : : 89 : : /* 90 : : * Disable gpio interrupts to report status line changes. 91 : : */ 92 : : void mctrl_gpio_disable_ms(struct mctrl_gpios *gpios); 93 : : 94 : : #else /* GPIOLIB */ 95 : : 96 : : static inline 97 : : void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl) 98 : : { 99 : : } 100 : : 101 : : static inline 102 : : unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl) 103 : : { 104 : : return *mctrl; 105 : : } 106 : : 107 : : static inline unsigned int 108 : 0 : mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl) 109 : : { 110 : 0 : return *mctrl; 111 : : } 112 : : 113 : : static inline 114 : : struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios, 115 : : enum mctrl_gpio_idx gidx) 116 : : { 117 : : return NULL; 118 : : } 119 : : 120 : : static inline 121 : 0 : struct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx) 122 : : { 123 : 0 : return NULL; 124 : : } 125 : : 126 : : static inline 127 : : struct mctrl_gpios *mctrl_gpio_init_noauto(struct device *dev, unsigned int idx) 128 : : { 129 : : return NULL; 130 : : } 131 : : 132 : : static inline 133 : : void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios) 134 : : { 135 : : } 136 : : 137 : 0 : static inline void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios) 138 : : { 139 [ # # ]: 0 : } 140 : : 141 : 0 : static inline void mctrl_gpio_disable_ms(struct mctrl_gpios *gpios) 142 : : { 143 : 0 : } 144 : : 145 : : #endif /* GPIOLIB */ 146 : : 147 : : #endif