2020-03-02 02:15:21 +05:30
/* SPDX-License-Identifier: GPL-2.0+ */
2014-05-13 20:20:43 +02:00
/*
* Helpers for controlling modem lines via GPIO
*
* Copyright ( C ) 2014 Paratronic S . A .
*/
# ifndef __SERIAL_MCTRL_GPIO__
# define __SERIAL_MCTRL_GPIO__
# include <linux/err.h>
# include <linux/device.h>
# include <linux/gpio/consumer.h>
2015-09-30 10:19:41 +02:00
struct uart_port ;
2014-05-13 20:20:43 +02:00
enum mctrl_gpio_idx {
UART_GPIO_CTS ,
UART_GPIO_DSR ,
UART_GPIO_DCD ,
UART_GPIO_RNG ,
UART_GPIO_RI = UART_GPIO_RNG ,
UART_GPIO_RTS ,
UART_GPIO_DTR ,
UART_GPIO_MAX ,
} ;
/*
* Opaque descriptor for modem lines controlled by GPIOs
*/
struct mctrl_gpios ;
# ifdef CONFIG_GPIOLIB
/*
* Set state of the modem control output lines via GPIOs .
*/
void mctrl_gpio_set ( struct mctrl_gpios * gpios , unsigned int mctrl ) ;
/*
2016-05-31 10:59:16 +02:00
* Get state of the modem control input lines from GPIOs .
2014-05-13 20:20:43 +02:00
* The mctrl flags are updated and returned .
*/
unsigned int mctrl_gpio_get ( struct mctrl_gpios * gpios , unsigned int * mctrl ) ;
2016-05-31 10:59:16 +02:00
/*
* Get state of the modem control output lines from GPIOs .
* The mctrl flags are updated and returned .
*/
unsigned int
mctrl_gpio_get_outputs ( struct mctrl_gpios * gpios , unsigned int * mctrl ) ;
2014-05-13 20:20:43 +02:00
/*
* Returns the associated struct gpio_desc to the modem line gidx
*/
struct gpio_desc * mctrl_gpio_to_gpiod ( struct mctrl_gpios * gpios ,
enum mctrl_gpio_idx gidx ) ;
2015-09-30 10:19:41 +02:00
/*
2016-04-14 12:01:32 +02:00
* Request and set direction of modem control line GPIOs and set up irq
2015-09-30 10:19:41 +02:00
* handling .
* devm_ * functions are used , so there ' s no need to call mctrl_gpio_free ( ) .
* Returns a pointer to the allocated mctrl structure if ok , - ENOMEM on
* allocation error .
*/
struct mctrl_gpios * mctrl_gpio_init ( struct uart_port * port , unsigned int idx ) ;
2014-05-13 20:20:43 +02:00
/*
2016-04-14 12:01:32 +02:00
* Request and set direction of modem control line GPIOs .
2014-05-13 20:20:43 +02:00
* devm_ * functions are used , so there ' s no need to call mctrl_gpio_free ( ) .
* Returns a pointer to the allocated mctrl structure if ok , - ENOMEM on
* allocation error .
*/
2015-09-30 10:19:40 +02:00
struct mctrl_gpios * mctrl_gpio_init_noauto ( struct device * dev ,
unsigned int idx ) ;
2014-05-13 20:20:43 +02:00
/*
* Free the mctrl_gpios structure .
* Normally , this function will not be called , as the GPIOs will
* be disposed of by the resource management code .
*/
void mctrl_gpio_free ( struct device * dev , struct mctrl_gpios * gpios ) ;
2015-09-30 10:19:41 +02:00
/*
* Enable gpio interrupts to report status line changes .
*/
void mctrl_gpio_enable_ms ( struct mctrl_gpios * gpios ) ;
/*
* Disable gpio interrupts to report status line changes .
*/
void mctrl_gpio_disable_ms ( struct mctrl_gpios * gpios ) ;
2014-05-13 20:20:43 +02:00
# else /* GPIOLIB */
static inline
void mctrl_gpio_set ( struct mctrl_gpios * gpios , unsigned int mctrl )
{
}
static inline
unsigned int mctrl_gpio_get ( struct mctrl_gpios * gpios , unsigned int * mctrl )
{
return * mctrl ;
}
2016-05-31 10:59:16 +02:00
static inline unsigned int
mctrl_gpio_get_outputs ( struct mctrl_gpios * gpios , unsigned int * mctrl )
{
return * mctrl ;
}
2014-05-13 20:20:43 +02:00
static inline
struct gpio_desc * mctrl_gpio_to_gpiod ( struct mctrl_gpios * gpios ,
enum mctrl_gpio_idx gidx )
{
2019-08-02 10:04:09 +00:00
return NULL ;
2014-05-13 20:20:43 +02:00
}
2015-09-30 10:19:41 +02:00
static inline
struct mctrl_gpios * mctrl_gpio_init ( struct uart_port * port , unsigned int idx )
{
2019-08-02 10:04:09 +00:00
return NULL ;
2015-09-30 10:19:41 +02:00
}
2014-05-13 20:20:43 +02:00
static inline
2015-09-30 10:19:40 +02:00
struct mctrl_gpios * mctrl_gpio_init_noauto ( struct device * dev , unsigned int idx )
2014-05-13 20:20:43 +02:00
{
2019-08-02 10:04:09 +00:00
return NULL ;
2014-05-13 20:20:43 +02:00
}
static inline
void mctrl_gpio_free ( struct device * dev , struct mctrl_gpios * gpios )
{
}
2015-10-12 17:04:14 +02:00
static inline void mctrl_gpio_enable_ms ( struct mctrl_gpios * gpios )
2015-09-30 10:19:41 +02:00
{
}
2015-10-12 17:04:14 +02:00
static inline void mctrl_gpio_disable_ms ( struct mctrl_gpios * gpios )
2015-09-30 10:19:41 +02:00
{
}
2014-05-13 20:20:43 +02:00
# endif /* GPIOLIB */
# endif