Linux Audio

Check our new training course

Loading...
v6.8
  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
 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 GPIOs
 30 */
 31struct mctrl_gpios;
 32
 33#ifdef CONFIG_GPIOLIB
 34
 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 int
 51mctrl_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 */
 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 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 */
 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 on
 72 * 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 will
 80 * 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 inline
107void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl)
108{
109}
110
111static inline
112unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl)
113{
114	return *mctrl;
115}
116
117static inline unsigned int
118mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl)
119{
120	return *mctrl;
121}
122
123static inline
124struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios,
125				      enum mctrl_gpio_idx gidx)
126{
127	return NULL;
128}
129
130static inline
131struct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx)
132{
133	return NULL;
134}
135
136static inline
137struct mctrl_gpios *mctrl_gpio_init_noauto(struct device *dev, unsigned int idx)
138{
139	return NULL;
140}
141
142static inline
143void 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#endif
v6.9.4
  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
 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 GPIOs
 30 */
 31struct mctrl_gpios;
 32
 33#ifdef CONFIG_GPIOLIB
 34
 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 int
 51mctrl_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 */
 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 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 */
 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 on
 72 * 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 will
 80 * 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 inline
107void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl)
108{
109}
110
111static inline
112unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl)
113{
114	return *mctrl;
115}
116
117static inline unsigned int
118mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl)
119{
120	return *mctrl;
121}
122
123static inline
124struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios,
125				      enum mctrl_gpio_idx gidx)
126{
127	return NULL;
128}
129
130static inline
131struct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx)
132{
133	return NULL;
134}
135
136static inline
137struct mctrl_gpios *mctrl_gpio_init_noauto(struct device *dev, unsigned int idx)
138{
139	return NULL;
140}
141
142static inline
143void 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#endif