89 lines
2.2 KiB
C
89 lines
2.2 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||
|
/*
|
||
|
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
|
||
|
*/
|
||
|
|
||
|
#ifndef _SDE_HW_VDC_H
|
||
|
#define _SDE_HW_VDC_H
|
||
|
|
||
|
#include "sde_hw_catalog.h"
|
||
|
#include "sde_hw_mdss.h"
|
||
|
#include "sde_hw_util.h"
|
||
|
#include "sde_hw_blk.h"
|
||
|
|
||
|
struct sde_hw_vdc;
|
||
|
struct msm_display_vdc_info;
|
||
|
|
||
|
/**
|
||
|
* struct sde_hw_vdc_ops - interface to the vdc hardware driver functions
|
||
|
* Assumption is these functions will be called after clocks are enabled
|
||
|
*/
|
||
|
struct sde_hw_vdc_ops {
|
||
|
/**
|
||
|
* vdc_disable - disable vdc
|
||
|
* @hw_vdc: Pointer to vdc context
|
||
|
*/
|
||
|
void (*vdc_disable)(struct sde_hw_vdc *hw_vdc);
|
||
|
|
||
|
/**
|
||
|
* vdc_config - configures vdc encoder
|
||
|
* @hw_vdc: Pointer to vdc context
|
||
|
* @vdc: panel vdc parameters
|
||
|
*/
|
||
|
void (*vdc_config)(struct sde_hw_vdc *hw_vdc,
|
||
|
struct msm_display_vdc_info *vdc);
|
||
|
|
||
|
/**
|
||
|
* bind_pingpong_blk - enable/disable the connection with pp
|
||
|
* @hw_vdc: Pointer to vdc context
|
||
|
* @enable: enable/disable connection
|
||
|
* @pp: pingpong blk id
|
||
|
*/
|
||
|
void (*bind_pingpong_blk)(struct sde_hw_vdc *hw_vdc,
|
||
|
bool enable,
|
||
|
const enum sde_pingpong pp);
|
||
|
};
|
||
|
|
||
|
struct sde_hw_vdc {
|
||
|
struct sde_hw_blk base;
|
||
|
struct sde_hw_blk_reg_map hw;
|
||
|
|
||
|
/* vdc */
|
||
|
enum sde_vdc idx;
|
||
|
const struct sde_vdc_cfg *caps;
|
||
|
|
||
|
/* ops */
|
||
|
struct sde_hw_vdc_ops ops;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* sde_hw_vdc - convert base object sde_hw_base to container
|
||
|
* @hw: Pointer to base hardware block
|
||
|
* return: Pointer to hardware block container
|
||
|
*/
|
||
|
static inline struct sde_hw_vdc *to_sde_hw_vdc(struct sde_hw_blk *hw)
|
||
|
{
|
||
|
return container_of(hw, struct sde_hw_vdc, base);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* sde_hw_vdc_init - initializes the vdc block for the passed
|
||
|
* vdc idx.
|
||
|
* @idx: VDC 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_vdc context
|
||
|
*/
|
||
|
struct sde_hw_vdc *sde_hw_vdc_init(enum sde_vdc idx,
|
||
|
void __iomem *addr,
|
||
|
struct sde_mdss_cfg *m);
|
||
|
|
||
|
/**
|
||
|
* sde_hw_vdc_destroy - destroys vdc driver context
|
||
|
* should be called to free the context
|
||
|
* @vdc: Pointer to vdc driver context returned by sde_hw_vdc_init
|
||
|
*/
|
||
|
void sde_hw_vdc_destroy(struct sde_hw_vdc *vdc);
|
||
|
|
||
|
#endif /*_SDE_HW_VDC_H */
|