LCOV - code coverage report
Current view: top level - tty/serial - serial_mctrl_gpio.h (source / functions) Coverage Total Hit
Test: TTY Combined Coverage Lines: 0.0 % 12 0
Test Date: 2025-08-26 15:45:50 Functions: 0.0 % 6 0

            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 explicitly 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 explicitly 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              :  * Enable gpio interrupts to report status line changes.
      79              :  */
      80              : void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios);
      81              : 
      82              : /*
      83              :  * Disable gpio interrupts to report status line changes, and block until
      84              :  * any corresponding IRQ is processed
      85              :  */
      86              : void mctrl_gpio_disable_ms_sync(struct mctrl_gpios *gpios);
      87              : 
      88              : /*
      89              :  * Disable gpio interrupts to report status line changes, and return
      90              :  * immediately
      91              :  */
      92              : void mctrl_gpio_disable_ms_no_sync(struct mctrl_gpios *gpios);
      93              : 
      94              : /*
      95              :  * Enable gpio wakeup interrupts to enable wake up source.
      96              :  */
      97              : void mctrl_gpio_enable_irq_wake(struct mctrl_gpios *gpios);
      98              : 
      99              : /*
     100              :  * Disable gpio wakeup interrupts to enable wake up source.
     101              :  */
     102              : void mctrl_gpio_disable_irq_wake(struct mctrl_gpios *gpios);
     103              : 
     104              : #else /* GPIOLIB */
     105              : 
     106              : static inline
     107            0 : void mctrl_gpio_set(struct mctrl_gpios *gpios, unsigned int mctrl)
     108              : {
     109            0 : }
     110              : 
     111              : static inline
     112            0 : unsigned int mctrl_gpio_get(struct mctrl_gpios *gpios, unsigned int *mctrl)
     113              : {
     114            0 :         return *mctrl;
     115              : }
     116              : 
     117              : static inline unsigned int
     118            0 : mctrl_gpio_get_outputs(struct mctrl_gpios *gpios, unsigned int *mctrl)
     119              : {
     120            0 :         return *mctrl;
     121              : }
     122              : 
     123              : static inline
     124              : struct gpio_desc *mctrl_gpio_to_gpiod(struct mctrl_gpios *gpios,
     125              :                                       enum mctrl_gpio_idx gidx)
     126              : {
     127              :         return NULL;
     128              : }
     129              : 
     130              : static inline
     131            0 : struct mctrl_gpios *mctrl_gpio_init(struct uart_port *port, unsigned int idx)
     132              : {
     133            0 :         return NULL;
     134              : }
     135              : 
     136              : static inline
     137              : struct mctrl_gpios *mctrl_gpio_init_noauto(struct device *dev, unsigned int idx)
     138              : {
     139              :         return NULL;
     140              : }
     141              : 
     142            0 : static inline void mctrl_gpio_enable_ms(struct mctrl_gpios *gpios)
     143              : {
     144            0 : }
     145              : 
     146              : static inline void mctrl_gpio_disable_ms_sync(struct mctrl_gpios *gpios)
     147              : {
     148              : }
     149              : 
     150            0 : static inline void mctrl_gpio_disable_ms_no_sync(struct mctrl_gpios *gpios)
     151              : {
     152            0 : }
     153              : 
     154              : static inline void mctrl_gpio_enable_irq_wake(struct mctrl_gpios *gpios)
     155              : {
     156              : }
     157              : 
     158              : static inline void mctrl_gpio_disable_irq_wake(struct mctrl_gpios *gpios)
     159              : {
     160              : }
     161              : 
     162              : #endif /* GPIOLIB */
     163              : 
     164              : #endif
        

Generated by: LCOV version 2.0-1