2023-08-30 17:31:07 +02:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _DPU_HW_DSPP_H
|
|
|
|
#define _DPU_HW_DSPP_H
|
|
|
|
|
|
|
|
struct dpu_hw_dspp;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct dpu_hw_pcc_coeff - PCC coefficient structure for each color
|
|
|
|
* component.
|
|
|
|
* @r: red coefficient.
|
|
|
|
* @g: green coefficient.
|
|
|
|
* @b: blue coefficient.
|
|
|
|
*/
|
|
|
|
|
|
|
|
struct dpu_hw_pcc_coeff {
|
|
|
|
__u32 r;
|
|
|
|
__u32 g;
|
|
|
|
__u32 b;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct dpu_hw_pcc - pcc feature structure
|
|
|
|
* @r: red coefficients.
|
|
|
|
* @g: green coefficients.
|
|
|
|
* @b: blue coefficients.
|
|
|
|
*/
|
|
|
|
struct dpu_hw_pcc_cfg {
|
|
|
|
struct dpu_hw_pcc_coeff r;
|
|
|
|
struct dpu_hw_pcc_coeff g;
|
|
|
|
struct dpu_hw_pcc_coeff b;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct dpu_hw_dspp_ops - interface to the dspp hardware driver functions
|
|
|
|
* Caller must call the init function to get the dspp context for each dspp
|
|
|
|
* Assumption is these functions will be called after clocks are enabled
|
|
|
|
*/
|
|
|
|
struct dpu_hw_dspp_ops {
|
|
|
|
/**
|
|
|
|
* setup_pcc - setup dspp pcc
|
|
|
|
* @ctx: Pointer to dspp context
|
|
|
|
* @cfg: Pointer to configuration
|
|
|
|
*/
|
|
|
|
void (*setup_pcc)(struct dpu_hw_dspp *ctx, struct dpu_hw_pcc_cfg *cfg);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct dpu_hw_dspp - dspp description
|
|
|
|
* @base: Hardware block base structure
|
|
|
|
* @hw: Block hardware details
|
|
|
|
* @idx: DSPP index
|
|
|
|
* @cap: Pointer to layer_cfg
|
|
|
|
* @ops: Pointer to operations possible for this DSPP
|
|
|
|
*/
|
|
|
|
struct dpu_hw_dspp {
|
|
|
|
struct dpu_hw_blk base;
|
|
|
|
struct dpu_hw_blk_reg_map hw;
|
|
|
|
|
|
|
|
/* dspp */
|
|
|
|
int idx;
|
|
|
|
const struct dpu_dspp_cfg *cap;
|
|
|
|
|
|
|
|
/* Ops */
|
|
|
|
struct dpu_hw_dspp_ops ops;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* dpu_hw_dspp - convert base object dpu_hw_base to container
|
|
|
|
* @hw: Pointer to base hardware block
|
|
|
|
* return: Pointer to hardware block container
|
|
|
|
*/
|
|
|
|
static inline struct dpu_hw_dspp *to_dpu_hw_dspp(struct dpu_hw_blk *hw)
|
|
|
|
{
|
|
|
|
return container_of(hw, struct dpu_hw_dspp, base);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2023-10-24 12:59:35 +02:00
|
|
|
* dpu_hw_dspp_init() - Initializes the DSPP hw driver object.
|
|
|
|
* should be called once before accessing every DSPP.
|
|
|
|
* @cfg: DSPP catalog entry for which driver object is required
|
2023-08-30 17:31:07 +02:00
|
|
|
* @addr: Mapped register io address of MDP
|
2023-10-24 12:59:35 +02:00
|
|
|
* Return: pointer to structure or ERR_PTR
|
2023-08-30 17:31:07 +02:00
|
|
|
*/
|
2023-10-24 12:59:35 +02:00
|
|
|
struct dpu_hw_dspp *dpu_hw_dspp_init(const struct dpu_dspp_cfg *cfg,
|
|
|
|
void __iomem *addr);
|
2023-08-30 17:31:07 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* dpu_hw_dspp_destroy(): Destroys DSPP driver context
|
|
|
|
* @dspp: Pointer to DSPP driver context
|
|
|
|
*/
|
|
|
|
void dpu_hw_dspp_destroy(struct dpu_hw_dspp *dspp);
|
|
|
|
|
|
|
|
#endif /*_DPU_HW_DSPP_H */
|
|
|
|
|