Files
android_kernel_samsung_sm86…/msm/sde/sde_hw_dnsc_blur.h
Veera Sundaram Sankaran eb45d6c173 disp: msm: sde: fix dnsc_blur mux setting for cwb
Fix the dnsc_blur block pingpong mux setting for concurrent
writeback case.

Change-Id: I1a79602f05471ce2bc143258ffe87e46772f3d06
Signed-off-by: Veera Sundaram Sankaran <quic_veeras@quicinc.com>
2022-01-24 10:06:06 -08:00

92 lines
2.8 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
*/
#ifndef _SDE_HW_DNSC_BLUR_H
#define _SDE_HW_DNSC_BLUR_H
#include <drm/sde_drm.h>
#include <drm/msm_drm_pp.h>
#include "sde_hw_mdss.h"
struct sde_hw_dnsc_blur;
/**
* sde_hw_dnsc_blur_ops - interface to the DNSC_BLUR HW driver functions
* Caller must call the init function to the dnsc_blur hw context for dnsc_blur
* Assumption is these functions will be called after clocks are enabled
*/
struct sde_hw_dnsc_blur_ops {
/**
* setup_dnsc_blur - downscale blur block setup
* @hw_dnsc_blur: Pointer to dnsc_blur context
* @cfg : Pointer to dnsc_blur configs
* @lut_sel: LUT index for Gausian filter
*/
void (*setup_dnsc_blur)(struct sde_hw_dnsc_blur *hw_dnsc_blur,
struct sde_drm_dnsc_blur_cfg *cfg, u32 lut_sel);
/**
* setup_dither - Dither programming
* @hw_dnsc_blur: Pointer to dnsc_blur context
* @cfg : Pointer to dnsc_blur configs
*/
void (*setup_dither)(struct sde_hw_dnsc_blur *hw_dnsc_blur,
struct sde_drm_dnsc_blur_cfg *cfg);
/**
* bind_pingpong_blk - connection with pingpong block which feeds pixels
* to downscale blur block
* @hw_dnsc_blur: Pointer to dnsc_blur context
* @enable: Boolean to indicate enable/disable of the binding
* @pp: Pingpong block idx for binding
* @cwb: Flag to indicate concurrent writeback
*/
void (*bind_pingpong_blk)(struct sde_hw_dnsc_blur *hw_dnsc_blur,
bool enable, const enum sde_pingpong pp, bool cwb);
};
/**
* struct sde_hw_dnsc_blur - downscale blur description
* @hw: Block hardware details
* @caps: Pointer to block capabilities
* @idx: Downscale Blur index
* @ops: Pointer to operations for this block
*/
struct sde_hw_dnsc_blur {
struct sde_hw_blk_reg_map hw;
const struct sde_dnsc_blur_cfg *caps;
enum sde_dnsc_blur idx;
struct sde_hw_dnsc_blur_ops ops;
};
/**
* to_sde_hw_dnsc_blur - convert base hw object to sde_hw_dnsc_blur to container
* @hw: Pointer to base hardware block register map object
* return: Pointer to hardware block container
*/
static inline struct sde_hw_dnsc_blur *to_sde_hw_dnsc_blur(struct sde_hw_blk_reg_map *hw)
{
return container_of(hw, struct sde_hw_dnsc_blur, hw);
}
/**
* sde_hw_dnsc_blur_init - initializes the dnsc_blur hw driver object
* @idx: dnsc_blur index for which driver object is required
* @addr: mapped register io address of MDP
* @m: pointer to mdss catalog data
*/
struct sde_hw_blk_reg_map *sde_hw_dnsc_blur_init(enum sde_dnsc_blur idx,
void __iomem *addr, struct sde_mdss_cfg *m);
/**
* sde_hw_dnsc_blur_destroy - destroys dnsc_blur driver context
* @hw: Pointer to hardware block register map object
*/
void sde_hw_dnsc_blur_destroy(struct sde_hw_blk_reg_map *hw);
#endif /*_SDE_HW_DNSC_BLUR_H */