Linux Audio

Check our new training course

Loading...
v5.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#else /* GPIOLIB */
 95
 96static inline
 97void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl)
 98{
 99}
100
101static inline
102unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl)
103{
104	return *mctrl;
105}
106
107static inline unsigned int
108mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl)
109{
110	return *mctrl;
111}
112
113static inline
114struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios,
115				      enum mctrl_gpio_idx gidx)
116{
117	return NULL;
118}
119
120static inline
121struct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx)
122{
123	return NULL;
124}
125
126static inline
127struct mctrl_gpios *mctrl_gpio_init_noauto(struct device *dev, unsigned int idx)
128{
129	return NULL;
130}
131
132static inline
133void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios)
134{
135}
136
137static inline void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios)
138{
139}
140
141static inline void mctrl_gpio_disable_ms(struct mctrl_gpios *gpios)
142{
143}
144
145#endif /* GPIOLIB */
146
147#endif
v4.10.11
 
  1/*
  2 * Helpers for controlling modem lines via GPIO
  3 *
  4 * Copyright (C) 2014 Paratronic S.A.
  5 *
  6 * This program is free software; you can redistribute it and/or modify
  7 * it under the terms of the GNU General Public License as published by
  8 * the Free Software Foundation; either version 2 of the License, or
  9 * (at your option) any later version.
 10 *
 11 * This program is distributed in the hope that it will be useful,
 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14 * GNU General Public License for more details.
 15 *
 16 */
 17
 18#ifndef __SERIAL_MCTRL_GPIO__
 19#define __SERIAL_MCTRL_GPIO__
 20
 21#include <linux/err.h>
 22#include <linux/device.h>
 23#include <linux/gpio/consumer.h>
 24
 25struct uart_port;
 26
 27enum mctrl_gpio_idx {
 28	UART_GPIO_CTS,
 29	UART_GPIO_DSR,
 30	UART_GPIO_DCD,
 31	UART_GPIO_RNG,
 32	UART_GPIO_RI = UART_GPIO_RNG,
 33	UART_GPIO_RTS,
 34	UART_GPIO_DTR,
 35	UART_GPIO_MAX,
 36};
 37
 38/*
 39 * Opaque descriptor for modem lines controlled by GPIOs
 40 */
 41struct mctrl_gpios;
 42
 43#ifdef CONFIG_GPIOLIB
 44
 45/*
 46 * Set state of the modem control output lines via GPIOs.
 47 */
 48void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl);
 49
 50/*
 51 * Get state of the modem control input lines from GPIOs.
 52 * The mctrl flags are updated and returned.
 53 */
 54unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl);
 55
 56/*
 57 * Get state of the modem control output lines from GPIOs.
 58 * The mctrl flags are updated and returned.
 59 */
 60unsigned int
 61mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl);
 62
 63/*
 64 * Returns the associated struct gpio_desc to the modem line gidx
 65 */
 66struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios,
 67				      enum mctrl_gpio_idx gidx);
 68
 69/*
 70 * Request and set direction of modem control line GPIOs and set up irq
 71 * handling.
 72 * devm_* functions are used, so there's no need to call mctrl_gpio_free().
 73 * Returns a pointer to the allocated mctrl structure if ok, -ENOMEM on
 74 * allocation error.
 75 */
 76struct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx);
 77
 78/*
 79 * Request and set direction of modem control line GPIOs.
 80 * devm_* functions are used, so there's no need to call mctrl_gpio_free().
 81 * Returns a pointer to the allocated mctrl structure if ok, -ENOMEM on
 82 * allocation error.
 83 */
 84struct mctrl_gpios *mctrl_gpio_init_noauto(struct device *dev,
 85					   unsigned int idx);
 86
 87/*
 88 * Free the mctrl_gpios structure.
 89 * Normally, this function will not be called, as the GPIOs will
 90 * be disposed of by the resource management code.
 91 */
 92void mctrl_gpio_free(struct device *dev, struct mctrl_gpios *gpios);
 93
 94/*
 95 * Enable gpio interrupts to report status line changes.
 96 */
 97void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios);
 98
 99/*
100 * Disable gpio interrupts to report status line changes.
101 */
102void mctrl_gpio_disable_ms(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 ERR_PTR(-ENOSYS);
128}
129
130static inline
131struct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx)
132{
133	return ERR_PTR(-ENOSYS);
134}
135
136static inline
137struct mctrl_gpios *mctrl_gpio_init_noauto(struct device *dev, unsigned int idx)
138{
139	return ERR_PTR(-ENOSYS);
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
155#endif /* GPIOLIB */
156
157#endif