123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2017-2019, 2021, The Linux Foundation. All rights reserved.
- */
- #ifndef _SDE_HW_DSC_H
- #define _SDE_HW_DSC_H
- #include "sde_hw_catalog.h"
- #include "sde_hw_mdss.h"
- #include "sde_hw_util.h"
- struct sde_hw_dsc;
- struct msm_display_dsc_info;
- #define DSC_MODE_SPLIT_PANEL BIT(0)
- #define DSC_MODE_MULTIPLEX BIT(1)
- #define DSC_MODE_VIDEO BIT(2)
- /**
- * struct sde_hw_dsc_ops - interface to the dsc hardware driver functions
- * Assumption is these functions will be called after clocks are enabled
- */
- struct sde_hw_dsc_ops {
- /**
- * dsc_disable - disable dsc
- * @hw_dsc: Pointer to dsc context
- */
- void (*dsc_disable)(struct sde_hw_dsc *hw_dsc);
- /**
- * dsc_config - configures dsc encoder
- * @hw_dsc: Pointer to dsc context
- * @dsc: panel dsc parameters
- * @mode: dsc topology mode to be set
- * @ich_reset_override: option to reset ich
- */
- void (*dsc_config)(struct sde_hw_dsc *hw_dsc,
- struct msm_display_dsc_info *dsc,
- u32 mode, bool ich_reset_override);
- /**
- * dsc_config_thresh - programs panel thresholds
- * @hw_dsc: Pointer to dsc context
- * @dsc: panel dsc parameters
- */
- void (*dsc_config_thresh)(struct sde_hw_dsc *hw_dsc,
- struct msm_display_dsc_info *dsc);
- /**
- * bind_pingpong_blk - enable/disable the connection with pp
- * @hw_dsc: Pointer to dsc context
- * @enable: enable/disable connection
- * @pp: pingpong blk id
- */
- void (*bind_pingpong_blk)(struct sde_hw_dsc *hw_dsc,
- bool enable,
- const enum sde_pingpong pp);
- };
- struct sde_hw_dsc {
- struct sde_hw_blk_reg_map hw;
- /* dsc */
- enum sde_dsc idx;
- const struct sde_dsc_cfg *caps;
- /* ops */
- struct sde_hw_dsc_ops ops;
- };
- /**
- * to_sde_hw_dsc - convert base hw object to sde_hw_dsc container
- * @hw: Pointer to hardware block register map object
- * return: Pointer to hardware block container
- */
- static inline struct sde_hw_dsc *to_sde_hw_dsc(struct sde_hw_blk_reg_map *hw)
- {
- return container_of(hw, struct sde_hw_dsc, hw);
- }
- /**
- * sde_hw_dsc_init - initializes the dsc block for the passed
- * dsc idx.
- * @idx: DSC index for which driver object is required
- * @addr: Mapped register io address of MDP
- * @m: Pointer to mdss catalog data
- * Returns: Error code or allocated sde_hw_dsc context
- */
- struct sde_hw_blk_reg_map *sde_hw_dsc_init(enum sde_dsc idx,
- void __iomem *addr,
- struct sde_mdss_cfg *m);
- /**
- * sde_hw_dsc_destroy - destroys dsc driver context
- * should be called to free the context
- * @hw: Pointer to hardware block register map object
- */
- void sde_hw_dsc_destroy(struct sde_hw_blk_reg_map *hw);
- #endif /*_SDE_HW_DSC_H */
|