LCOV - code coverage report
Current view: top level - zephyr/drivers - mipi_dsi.h Hit Total Coverage
Test: new.info Lines: 43 47 91.5 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /*
       2             :  * Copyright (c) 2020 Teslabs Engineering S.L.
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : /**
       8             :  * @file
       9             :  * @brief Public APIs for MIPI-DSI drivers
      10             :  */
      11             : 
      12             : #ifndef ZEPHYR_INCLUDE_DRIVERS_MIPI_DSI_H_
      13             : #define ZEPHYR_INCLUDE_DRIVERS_MIPI_DSI_H_
      14             : 
      15             : /**
      16             :  * @brief MIPI-DSI driver APIs
      17             :  * @defgroup mipi_dsi_interface MIPI-DSI driver APIs
      18             :  * @since 3.1
      19             :  * @version 0.1.0
      20             :  * @ingroup io_interfaces
      21             :  * @{
      22             :  */
      23             : #include <errno.h>
      24             : #include <sys/types.h>
      25             : #include <zephyr/device.h>
      26             : #include <zephyr/display/mipi_display.h>
      27             : #include <zephyr/dt-bindings/mipi_dsi/mipi_dsi.h>
      28             : 
      29             : #ifdef __cplusplus
      30             : extern "C" {
      31             : #endif
      32             : 
      33             : /** MIPI-DSI display timings. */
      34           1 : struct mipi_dsi_timings {
      35             :         /** Horizontal active video. */
      36           1 :         uint32_t hactive;
      37             :         /** Horizontal front porch. */
      38           1 :         uint32_t hfp;
      39             :         /** Horizontal back porch. */
      40           1 :         uint32_t hbp;
      41             :         /** Horizontal sync length. */
      42           1 :         uint32_t hsync;
      43             :         /** Vertical active video. */
      44           1 :         uint32_t vactive;
      45             :         /** Vertical front porch. */
      46           1 :         uint32_t vfp;
      47             :         /** Vertical back porch. */
      48           1 :         uint32_t vbp;
      49             :         /** Vertical sync length. */
      50           1 :         uint32_t vsync;
      51             : };
      52             : 
      53             : /**
      54             :  * @name MIPI-DSI Device mode flags.
      55             :  * @{
      56             :  */
      57             : 
      58             : /** Video mode */
      59           1 : #define MIPI_DSI_MODE_VIDEO             BIT(0)
      60             : /** Video burst mode */
      61           1 : #define MIPI_DSI_MODE_VIDEO_BURST       BIT(1)
      62             : /** Video pulse mode */
      63           1 : #define MIPI_DSI_MODE_VIDEO_SYNC_PULSE  BIT(2)
      64             : /** Enable auto vertical count mode */
      65           1 : #define MIPI_DSI_MODE_VIDEO_AUTO_VERT   BIT(3)
      66             : /** Enable hsync-end packets in vsync-pulse and v-porch area */
      67           1 : #define MIPI_DSI_MODE_VIDEO_HSE         BIT(4)
      68             : /** Disable hfront-porch area */
      69           1 : #define MIPI_DSI_MODE_VIDEO_HFP         BIT(5)
      70             : /** Disable hback-porch area */
      71           1 : #define MIPI_DSI_MODE_VIDEO_HBP         BIT(6)
      72             : /** Disable hsync-active area */
      73           1 : #define MIPI_DSI_MODE_VIDEO_HSA         BIT(7)
      74             : /** Flush display FIFO on vsync pulse */
      75           1 : #define MIPI_DSI_MODE_VSYNC_FLUSH       BIT(8)
      76             : /** Disable EoT packets in HS mode */
      77           1 : #define MIPI_DSI_MODE_EOT_PACKET        BIT(9)
      78             : /** Device supports non-continuous clock behavior (DSI spec 5.6.1) */
      79           1 : #define MIPI_DSI_CLOCK_NON_CONTINUOUS   BIT(10)
      80             : /** Transmit data in low power */
      81           1 : #define MIPI_DSI_MODE_LPM               BIT(11)
      82             : 
      83             : /** @} */
      84             : 
      85             : /** MIPI-DSI device. */
      86           1 : struct mipi_dsi_device {
      87             :         /** Number of data lanes. */
      88           1 :         uint8_t data_lanes;
      89             :         /** Display timings. */
      90           1 :         struct mipi_dsi_timings timings;
      91             :         /** Pixel format. */
      92           1 :         uint32_t pixfmt;
      93             :         /** Mode flags. */
      94           1 :         uint32_t mode_flags;
      95             : };
      96             : 
      97             : /*
      98             :  * Per message flag to indicate the message must be sent
      99             :  * using Low Power Mode instead of controller default.
     100             :  */
     101           0 : #define MIPI_DSI_MSG_USE_LPM BIT(0x0)
     102             : 
     103             : /** MIPI-DSI read/write message. */
     104           1 : struct mipi_dsi_msg {
     105             :         /** Payload data type. */
     106           1 :         uint8_t type;
     107             :         /** Flags controlling message transmission. */
     108           1 :         uint16_t flags;
     109             :         /** Command (only for DCS) */
     110           1 :         uint8_t cmd;
     111             :         /** Transmission buffer length. */
     112           1 :         size_t tx_len;
     113             :         /** Transmission buffer. */
     114           1 :         const void *tx_buf;
     115             :         /** Reception buffer length. */
     116           1 :         size_t rx_len;
     117             :         /** Reception buffer. */
     118           1 :         void *rx_buf;
     119             : };
     120             : 
     121             : /** MIPI-DSI host driver API. */
     122           1 : __subsystem struct mipi_dsi_driver_api {
     123           0 :         int (*attach)(const struct device *dev, uint8_t channel,
     124             :                       const struct mipi_dsi_device *mdev);
     125           0 :         ssize_t (*transfer)(const struct device *dev, uint8_t channel,
     126             :                             struct mipi_dsi_msg *msg);
     127           0 :         int (*detach)(const struct device *dev, uint8_t channel,
     128             :                       const struct mipi_dsi_device *mdev);
     129             : };
     130             : 
     131             : /**
     132             :  * @brief Attach a new device to the MIPI-DSI bus.
     133             :  *
     134             :  * @param dev MIPI-DSI host device.
     135             :  * @param channel Device channel (VID).
     136             :  * @param mdev MIPI-DSI device description.
     137             :  *
     138             :  * @return 0 on success, negative on error
     139             :  */
     140           1 : static inline int mipi_dsi_attach(const struct device *dev,
     141             :                                   uint8_t channel,
     142             :                                   const struct mipi_dsi_device *mdev)
     143             : {
     144             :         const struct mipi_dsi_driver_api *api = (const struct mipi_dsi_driver_api *)dev->api;
     145             : 
     146             :         return api->attach(dev, channel, mdev);
     147             : }
     148             : 
     149             : /**
     150             :  * @brief Transfer data to/from a device attached to the MIPI-DSI bus.
     151             :  *
     152             :  * @param dev MIPI-DSI device.
     153             :  * @param channel Device channel (VID).
     154             :  * @param msg Message.
     155             :  *
     156             :  * @return Size of the transferred data on success, negative on error.
     157             :  */
     158           1 : static inline ssize_t mipi_dsi_transfer(const struct device *dev,
     159             :                                         uint8_t channel,
     160             :                                         struct mipi_dsi_msg *msg)
     161             : {
     162             :         const struct mipi_dsi_driver_api *api = (const struct mipi_dsi_driver_api *)dev->api;
     163             : 
     164             :         return api->transfer(dev, channel, msg);
     165             : }
     166             : 
     167             : /**
     168             :  * @brief MIPI-DSI generic read.
     169             :  *
     170             :  * @param dev MIPI-DSI host device.
     171             :  * @param channel Device channel (VID).
     172             :  * @param params Buffer containing request parameters.
     173             :  * @param nparams Number of parameters.
     174             :  * @param buf Buffer where read data will be stored.
     175             :  * @param len Length of the reception buffer.
     176             :  *
     177             :  * @return Size of the read data on success, negative on error.
     178             :  */
     179           1 : ssize_t mipi_dsi_generic_read(const struct device *dev, uint8_t channel,
     180             :                               const void *params, size_t nparams,
     181             :                               void *buf, size_t len);
     182             : 
     183             : /**
     184             :  * @brief MIPI-DSI generic write.
     185             :  *
     186             :  * @param dev MIPI-DSI host device.
     187             :  * @param channel Device channel (VID).
     188             :  * @param buf Transmission buffer.
     189             :  * @param len Length of the transmission buffer
     190             :  *
     191             :  * @return Size of the written data on success, negative on error.
     192             :  */
     193           1 : ssize_t mipi_dsi_generic_write(const struct device *dev, uint8_t channel,
     194             :                                const void *buf, size_t len);
     195             : 
     196             : /**
     197             :  * @brief MIPI-DSI DCS read.
     198             :  *
     199             :  * @param dev MIPI-DSI host device.
     200             :  * @param channel Device channel (VID).
     201             :  * @param cmd DCS command.
     202             :  * @param buf Buffer where read data will be stored.
     203             :  * @param len Length of the reception buffer.
     204             :  *
     205             :  * @return Size of the read data on success, negative on error.
     206             :  */
     207           1 : ssize_t mipi_dsi_dcs_read(const struct device *dev, uint8_t channel,
     208             :                           uint8_t cmd, void *buf, size_t len);
     209             : 
     210             : /**
     211             :  * @brief MIPI-DSI DCS write.
     212             :  *
     213             :  * @param dev MIPI-DSI host device.
     214             :  * @param channel Device channel (VID).
     215             :  * @param cmd DCS command.
     216             :  * @param buf Transmission buffer.
     217             :  * @param len Length of the transmission buffer
     218             :  *
     219             :  * @return Size of the written data on success, negative on error.
     220             :  */
     221           1 : ssize_t mipi_dsi_dcs_write(const struct device *dev, uint8_t channel,
     222             :                            uint8_t cmd, const void *buf, size_t len);
     223             : 
     224             : 
     225             : /**
     226             :  * @brief Detach a device from the MIPI-DSI bus
     227             :  *
     228             :  * @param dev MIPI-DSI host device.
     229             :  * @param channel Device channel (VID).
     230             :  * @param mdev MIPI-DSI device description.
     231             :  *
     232             :  * @return 0 on success, negative on error
     233             :  */
     234           1 : static inline int mipi_dsi_detach(const struct device *dev,
     235             :                                   uint8_t channel,
     236             :                                   const struct mipi_dsi_device *mdev)
     237             : {
     238             :         const struct mipi_dsi_driver_api *api = (const struct mipi_dsi_driver_api *)dev->api;
     239             : 
     240             :         if (api->detach == NULL) {
     241             :                 return -ENOSYS;
     242             :         }
     243             : 
     244             :         return api->detach(dev, channel, mdev);
     245             : }
     246             : 
     247             : #ifdef __cplusplus
     248             : }
     249             : #endif
     250             : 
     251             : /**
     252             :  * @}
     253             :  */
     254             : 
     255             : #endif /* ZEPHYR_INCLUDE_DRIVERS_MIPI_DSI_H_ */

Generated by: LCOV version 1.14