/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2023, The Linux Foundation. All rights reserved.
*/
#ifndef _DPU_HW_CDM_H #define _DPU_HW_CDM_H
#include"dpu_hw_mdss.h" #include"dpu_hw_top.h"
struct dpu_hw_cdm;
/** * struct dpu_hw_cdm_cfg : current configuration of CDM block * * @output_width: output ROI width of CDM block * @output_height: output ROI height of CDM block * @output_bit_depth: output bit-depth of CDM block * @h_cdwn_type: downsample type used for horizontal pixels * @v_cdwn_type: downsample type used for vertical pixels * @output_fmt: handle to msm_format of CDM block * @csc_cfg: handle to CSC matrix programmed for CDM block * @output_type: interface to which CDM is paired (HDMI/WB) * @pp_id: ping-pong block to which CDM is bound to
*/ struct dpu_hw_cdm_cfg {
u32 output_width;
u32 output_height;
u32 output_bit_depth;
u32 h_cdwn_type;
u32 v_cdwn_type; conststruct msm_format *output_fmt; conststruct dpu_csc_cfg *csc_cfg;
u32 output_type; int pp_id;
};
/* * These values are used indicate which type of downsample is used * in the horizontal/vertical direction for the CDM block.
*/ enum dpu_hw_cdwn_type {
CDM_CDWN_DISABLE,
CDM_CDWN_PIXEL_DROP,
CDM_CDWN_AVG,
CDM_CDWN_COSITE,
CDM_CDWN_OFFSITE,
};
/* * CDM block can be paired with WB or HDMI block. These values match * the input with which the CDM block is paired.
*/ enum dpu_hw_cdwn_output_type {
CDM_CDWN_OUTPUT_HDMI,
CDM_CDWN_OUTPUT_WB,
};
/* * CDM block can give an 8-bit or 10-bit output. These values * are used to indicate the output bit depth of CDM block
*/ enum dpu_hw_cdwn_output_bit_depth {
CDM_CDWN_OUTPUT_8BIT,
CDM_CDWN_OUTPUT_10BIT,
};
/* * CDM block can downsample using different methods. These values * are used to indicate the downsample method which can be used * either in the horizontal or vertical direction.
*/ enum dpu_hw_cdwn_op_mode_method_h_v {
CDM_CDWN2_METHOD_PIXEL_DROP,
CDM_CDWN2_METHOD_AVG,
CDM_CDWN2_METHOD_COSITE,
CDM_CDWN2_METHOD_OFFSITE
};
/** * struct dpu_hw_cdm_ops : Interface to the chroma down Hw driver functions * Assumption is these functions will be called after * clocks are enabled * @enable: Enables the output to interface and programs the * output packer * @bind_pingpong_blk: enable/disable the connection with pingpong which * will feed pixels to this cdm
*/ struct dpu_hw_cdm_ops { /** * Enable the CDM module * @cdm Pointer to chroma down context
*/ int (*enable)(struct dpu_hw_cdm *cdm, struct dpu_hw_cdm_cfg *cfg);
/** * Enable/disable the connection with pingpong * @cdm Pointer to chroma down context * @pp pingpong block id.
*/ void (*bind_pingpong_blk)(struct dpu_hw_cdm *cdm, constenum dpu_pingpong pp);
};
/** * struct dpu_hw_cdm - cdm description * @base: Hardware block base structure * @hw: Block hardware details * @idx: CDM index * @caps: Pointer to cdm_cfg * @ops: handle to operations possible for this CDM
*/ struct dpu_hw_cdm { struct dpu_hw_blk base; struct dpu_hw_blk_reg_map hw;
/* chroma down */ conststruct dpu_cdm_cfg *caps; enum dpu_cdm idx;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.