root/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. sun6i_csi_get_bpp

   1 /* SPDX-License-Identifier: GPL-2.0+ */
   2 /*
   3  * Copyright (c) 2011-2018 Magewell Electronics Co., Ltd. (Nanjing)
   4  * All rights reserved.
   5  * Author: Yong Deng <yong.deng@magewell.com>
   6  */
   7 
   8 #ifndef __SUN6I_CSI_H__
   9 #define __SUN6I_CSI_H__
  10 
  11 #include <media/v4l2-ctrls.h>
  12 #include <media/v4l2-device.h>
  13 #include <media/v4l2-fwnode.h>
  14 
  15 #include "sun6i_video.h"
  16 
  17 struct sun6i_csi;
  18 
  19 /**
  20  * struct sun6i_csi_config - configs for sun6i csi
  21  * @pixelformat: v4l2 pixel format (V4L2_PIX_FMT_*)
  22  * @code:       media bus format code (MEDIA_BUS_FMT_*)
  23  * @field:      used interlacing type (enum v4l2_field)
  24  * @width:      frame width
  25  * @height:     frame height
  26  */
  27 struct sun6i_csi_config {
  28         u32             pixelformat;
  29         u32             code;
  30         u32             field;
  31         u32             width;
  32         u32             height;
  33 };
  34 
  35 struct sun6i_csi {
  36         struct device                   *dev;
  37         struct v4l2_ctrl_handler        ctrl_handler;
  38         struct v4l2_device              v4l2_dev;
  39         struct media_device             media_dev;
  40 
  41         struct v4l2_async_notifier      notifier;
  42 
  43         /* video port settings */
  44         struct v4l2_fwnode_endpoint     v4l2_ep;
  45 
  46         struct sun6i_csi_config         config;
  47 
  48         struct sun6i_video              video;
  49 };
  50 
  51 /**
  52  * sun6i_csi_is_format_supported() - check if the format supported by csi
  53  * @csi:        pointer to the csi
  54  * @pixformat:  v4l2 pixel format (V4L2_PIX_FMT_*)
  55  * @mbus_code:  media bus format code (MEDIA_BUS_FMT_*)
  56  */
  57 bool sun6i_csi_is_format_supported(struct sun6i_csi *csi, u32 pixformat,
  58                                    u32 mbus_code);
  59 
  60 /**
  61  * sun6i_csi_set_power() - power on/off the csi
  62  * @csi:        pointer to the csi
  63  * @enable:     on/off
  64  */
  65 int sun6i_csi_set_power(struct sun6i_csi *csi, bool enable);
  66 
  67 /**
  68  * sun6i_csi_update_config() - update the csi register settings
  69  * @csi:        pointer to the csi
  70  * @config:     see struct sun6i_csi_config
  71  */
  72 int sun6i_csi_update_config(struct sun6i_csi *csi,
  73                             struct sun6i_csi_config *config);
  74 
  75 /**
  76  * sun6i_csi_update_buf_addr() - update the csi frame buffer address
  77  * @csi:        pointer to the csi
  78  * @addr:       frame buffer's physical address
  79  */
  80 void sun6i_csi_update_buf_addr(struct sun6i_csi *csi, dma_addr_t addr);
  81 
  82 /**
  83  * sun6i_csi_set_stream() - start/stop csi streaming
  84  * @csi:        pointer to the csi
  85  * @enable:     start/stop
  86  */
  87 void sun6i_csi_set_stream(struct sun6i_csi *csi, bool enable);
  88 
  89 /* get bpp form v4l2 pixformat */
  90 static inline int sun6i_csi_get_bpp(unsigned int pixformat)
  91 {
  92         switch (pixformat) {
  93         case V4L2_PIX_FMT_SBGGR8:
  94         case V4L2_PIX_FMT_SGBRG8:
  95         case V4L2_PIX_FMT_SGRBG8:
  96         case V4L2_PIX_FMT_SRGGB8:
  97         case V4L2_PIX_FMT_JPEG:
  98                 return 8;
  99         case V4L2_PIX_FMT_SBGGR10:
 100         case V4L2_PIX_FMT_SGBRG10:
 101         case V4L2_PIX_FMT_SGRBG10:
 102         case V4L2_PIX_FMT_SRGGB10:
 103                 return 10;
 104         case V4L2_PIX_FMT_SBGGR12:
 105         case V4L2_PIX_FMT_SGBRG12:
 106         case V4L2_PIX_FMT_SGRBG12:
 107         case V4L2_PIX_FMT_SRGGB12:
 108         case V4L2_PIX_FMT_HM12:
 109         case V4L2_PIX_FMT_NV12:
 110         case V4L2_PIX_FMT_NV21:
 111         case V4L2_PIX_FMT_YUV420:
 112         case V4L2_PIX_FMT_YVU420:
 113                 return 12;
 114         case V4L2_PIX_FMT_YUYV:
 115         case V4L2_PIX_FMT_YVYU:
 116         case V4L2_PIX_FMT_UYVY:
 117         case V4L2_PIX_FMT_VYUY:
 118         case V4L2_PIX_FMT_NV16:
 119         case V4L2_PIX_FMT_NV61:
 120         case V4L2_PIX_FMT_YUV422P:
 121         case V4L2_PIX_FMT_RGB565:
 122         case V4L2_PIX_FMT_RGB565X:
 123                 return 16;
 124         case V4L2_PIX_FMT_RGB24:
 125         case V4L2_PIX_FMT_BGR24:
 126                 return 24;
 127         case V4L2_PIX_FMT_RGB32:
 128         case V4L2_PIX_FMT_BGR32:
 129                 return 32;
 130         default:
 131                 WARN(1, "Unsupported pixformat: 0x%x\n", pixformat);
 132                 break;
 133         }
 134 
 135         return 0;
 136 }
 137 
 138 #endif /* __SUN6I_CSI_H__ */

/* [<][>][^][v][top][bottom][index][help] */