root/drivers/media/platform/mtk-mdp/mtk_mdp_regs.c

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

DEFINITIONS

This source file includes following definitions.
  1. mtk_mdp_map_color_format
  2. mtk_mdp_hw_set_input_addr
  3. mtk_mdp_hw_set_output_addr
  4. mtk_mdp_hw_set_in_size
  5. mtk_mdp_hw_set_in_image_format
  6. mtk_mdp_hw_set_out_size
  7. mtk_mdp_hw_set_out_image_format
  8. mtk_mdp_hw_set_rotation
  9. mtk_mdp_hw_set_global_alpha

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Copyright (c) 2015-2016 MediaTek Inc.
   4  * Author: Houlong Wei <houlong.wei@mediatek.com>
   5  *         Ming Hsiu Tsai <minghsiu.tsai@mediatek.com>
   6  */
   7 
   8 #include <linux/platform_device.h>
   9 
  10 #include "mtk_mdp_core.h"
  11 #include "mtk_mdp_regs.h"
  12 
  13 
  14 #define MDP_COLORFMT_PACK(VIDEO, PLANE, COPLANE, HF, VF, BITS, GROUP, SWAP, ID)\
  15         (((VIDEO) << 27) | ((PLANE) << 24) | ((COPLANE) << 22) |\
  16         ((HF) << 20) | ((VF) << 18) | ((BITS) << 8) | ((GROUP) << 6) |\
  17         ((SWAP) << 5) | ((ID) << 0))
  18 
  19 enum MDP_COLOR_ENUM {
  20         MDP_COLOR_UNKNOWN = 0,
  21         MDP_COLOR_NV12 = MDP_COLORFMT_PACK(0, 2, 1, 1, 1, 8, 1, 0, 12),
  22         MDP_COLOR_I420 = MDP_COLORFMT_PACK(0, 3, 0, 1, 1, 8, 1, 0, 8),
  23         MDP_COLOR_YV12 = MDP_COLORFMT_PACK(0, 3, 0, 1, 1, 8, 1, 1, 8),
  24         /* Mediatek proprietary format */
  25         MDP_COLOR_420_MT21 = MDP_COLORFMT_PACK(5, 2, 1, 1, 1, 256, 1, 0, 12),
  26 };
  27 
  28 static int32_t mtk_mdp_map_color_format(int v4l2_format)
  29 {
  30         switch (v4l2_format) {
  31         case V4L2_PIX_FMT_NV12M:
  32         case V4L2_PIX_FMT_NV12:
  33                 return MDP_COLOR_NV12;
  34         case V4L2_PIX_FMT_MT21C:
  35                 return MDP_COLOR_420_MT21;
  36         case V4L2_PIX_FMT_YUV420M:
  37         case V4L2_PIX_FMT_YUV420:
  38                 return MDP_COLOR_I420;
  39         case V4L2_PIX_FMT_YVU420:
  40                 return MDP_COLOR_YV12;
  41         }
  42 
  43         mtk_mdp_err("Unknown format 0x%x", v4l2_format);
  44 
  45         return MDP_COLOR_UNKNOWN;
  46 }
  47 
  48 void mtk_mdp_hw_set_input_addr(struct mtk_mdp_ctx *ctx,
  49                                struct mtk_mdp_addr *addr)
  50 {
  51         struct mdp_buffer *src_buf = &ctx->vpu.vsi->src_buffer;
  52         int i;
  53 
  54         for (i = 0; i < ARRAY_SIZE(addr->addr); i++)
  55                 src_buf->addr_mva[i] = (uint64_t)addr->addr[i];
  56 }
  57 
  58 void mtk_mdp_hw_set_output_addr(struct mtk_mdp_ctx *ctx,
  59                                 struct mtk_mdp_addr *addr)
  60 {
  61         struct mdp_buffer *dst_buf = &ctx->vpu.vsi->dst_buffer;
  62         int i;
  63 
  64         for (i = 0; i < ARRAY_SIZE(addr->addr); i++)
  65                 dst_buf->addr_mva[i] = (uint64_t)addr->addr[i];
  66 }
  67 
  68 void mtk_mdp_hw_set_in_size(struct mtk_mdp_ctx *ctx)
  69 {
  70         struct mtk_mdp_frame *frame = &ctx->s_frame;
  71         struct mdp_config *config = &ctx->vpu.vsi->src_config;
  72 
  73         /* Set input pixel offset */
  74         config->crop_x = frame->crop.left;
  75         config->crop_y = frame->crop.top;
  76 
  77         /* Set input cropped size */
  78         config->crop_w = frame->crop.width;
  79         config->crop_h = frame->crop.height;
  80 
  81         /* Set input original size */
  82         config->x = 0;
  83         config->y = 0;
  84         config->w = frame->width;
  85         config->h = frame->height;
  86 }
  87 
  88 void mtk_mdp_hw_set_in_image_format(struct mtk_mdp_ctx *ctx)
  89 {
  90         unsigned int i;
  91         struct mtk_mdp_frame *frame = &ctx->s_frame;
  92         struct mdp_config *config = &ctx->vpu.vsi->src_config;
  93         struct mdp_buffer *src_buf = &ctx->vpu.vsi->src_buffer;
  94 
  95         src_buf->plane_num = frame->fmt->num_comp;
  96         config->format = mtk_mdp_map_color_format(frame->fmt->pixelformat);
  97         config->w_stride = 0; /* MDP will calculate it by color format. */
  98         config->h_stride = 0; /* MDP will calculate it by color format. */
  99 
 100         for (i = 0; i < src_buf->plane_num; i++)
 101                 src_buf->plane_size[i] = frame->payload[i];
 102 }
 103 
 104 void mtk_mdp_hw_set_out_size(struct mtk_mdp_ctx *ctx)
 105 {
 106         struct mtk_mdp_frame *frame = &ctx->d_frame;
 107         struct mdp_config *config = &ctx->vpu.vsi->dst_config;
 108 
 109         config->crop_x = frame->crop.left;
 110         config->crop_y = frame->crop.top;
 111         config->crop_w = frame->crop.width;
 112         config->crop_h = frame->crop.height;
 113         config->x = 0;
 114         config->y = 0;
 115         config->w = frame->width;
 116         config->h = frame->height;
 117 }
 118 
 119 void mtk_mdp_hw_set_out_image_format(struct mtk_mdp_ctx *ctx)
 120 {
 121         unsigned int i;
 122         struct mtk_mdp_frame *frame = &ctx->d_frame;
 123         struct mdp_config *config = &ctx->vpu.vsi->dst_config;
 124         struct mdp_buffer *dst_buf = &ctx->vpu.vsi->dst_buffer;
 125 
 126         dst_buf->plane_num = frame->fmt->num_comp;
 127         config->format = mtk_mdp_map_color_format(frame->fmt->pixelformat);
 128         config->w_stride = 0; /* MDP will calculate it by color format. */
 129         config->h_stride = 0; /* MDP will calculate it by color format. */
 130         for (i = 0; i < dst_buf->plane_num; i++)
 131                 dst_buf->plane_size[i] = frame->payload[i];
 132 }
 133 
 134 void mtk_mdp_hw_set_rotation(struct mtk_mdp_ctx *ctx)
 135 {
 136         struct mdp_config_misc *misc = &ctx->vpu.vsi->misc;
 137 
 138         misc->orientation = ctx->ctrls.rotate->val;
 139         misc->hflip = ctx->ctrls.hflip->val;
 140         misc->vflip = ctx->ctrls.vflip->val;
 141 }
 142 
 143 void mtk_mdp_hw_set_global_alpha(struct mtk_mdp_ctx *ctx)
 144 {
 145         struct mdp_config_misc *misc = &ctx->vpu.vsi->misc;
 146 
 147         misc->alpha = ctx->ctrls.global_alpha->val;
 148 }

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