Add 'qcom/opensource/display-drivers/' from commit '5ff96e683134b356ebe6c37069b4197034502ef9'
git-subtree-dir: qcom/opensource/display-drivers git-subtree-mainline:2d61911ef6
git-subtree-split:5ff96e6831
Change-Id: repo: https://git.codelinaro.org/clo/la/platform/vendor/opensource/display-drivers tag: DISPLAY.LA.4.0.r2-07600-lanai.0
This commit is contained in:
6
qcom/opensource/display-drivers/include/linux/Kbuild
Normal file
6
qcom/opensource/display-drivers/include/linux/Kbuild
Normal file
@@ -0,0 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note
|
||||
|
||||
header-y += msm_hdcp.h
|
||||
header-y += sde_io_util.h
|
||||
header-y += sde_rsc.h
|
||||
|
33
qcom/opensource/display-drivers/include/linux/msm_hdcp.h
Normal file
33
qcom/opensource/display-drivers/include/linux/msm_hdcp.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __MSM_HDCP_H
|
||||
#define __MSM_HDCP_H
|
||||
#include <linux/types.h>
|
||||
#include "hdcp/msm_hdmi_hdcp_mgr.h"
|
||||
|
||||
#if IS_ENABLED(CONFIG_HDCP_QSEECOM)
|
||||
void msm_hdcp_notify_topology(struct device *dev);
|
||||
void msm_hdcp_cache_repeater_topology(struct device *dev,
|
||||
struct HDCP_V2V1_MSG_TOPOLOGY *tp);
|
||||
void msm_hdcp_register_cb(struct device *dev, void *ctx,
|
||||
void (*cb)(void *ctx, u8 data));
|
||||
#else
|
||||
static inline void msm_hdcp_notify_topology(struct device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void msm_hdcp_cache_repeater_topology(struct device *dev,
|
||||
struct HDCP_V2V1_MSG_TOPOLOGY *tp)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void msm_hdcp_register_cb(struct device *dev, void *ctx,
|
||||
void (*cb)(void *ctx, u8 data))
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_HDCP_QSEECOM*/
|
||||
|
||||
#endif /* __MSM_HDCP_H */
|
136
qcom/opensource/display-drivers/include/linux/sde_io_util.h
Normal file
136
qcom/opensource/display-drivers/include/linux/sde_io_util.h
Normal file
@@ -0,0 +1,136 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2012, 2017-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __SDE_IO_UTIL_H__
|
||||
#define __SDE_IO_UTIL_H__
|
||||
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/soc/qcom/msm_mmrm.h>
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DEV_DBG(fmt, args...) pr_err(fmt, ##args)
|
||||
#else
|
||||
#define DEV_DBG(fmt, args...) pr_debug(fmt, ##args)
|
||||
#endif
|
||||
#define DEV_INFO(fmt, args...) pr_info(fmt, ##args)
|
||||
#define DEV_WARN(fmt, args...) pr_warn(fmt, ##args)
|
||||
#define DEV_ERR(fmt, args...) pr_err(fmt, ##args)
|
||||
|
||||
struct dss_io_data {
|
||||
u32 len;
|
||||
void __iomem *base;
|
||||
};
|
||||
|
||||
void dss_reg_w(struct dss_io_data *io, u32 offset, u32 value, u32 debug);
|
||||
u32 dss_reg_r(struct dss_io_data *io, u32 offset, u32 debug);
|
||||
void dss_reg_dump(void __iomem *base, u32 len, const char *prefix, u32 debug);
|
||||
|
||||
#define DSS_REG_W_ND(io, offset, val) dss_reg_w(io, offset, val, false)
|
||||
#define DSS_REG_W(io, offset, val) dss_reg_w(io, offset, val, true)
|
||||
#define DSS_REG_R_ND(io, offset) dss_reg_r(io, offset, false)
|
||||
#define DSS_REG_R(io, offset) dss_reg_r(io, offset, true)
|
||||
|
||||
enum dss_vreg_type {
|
||||
DSS_REG_LDO,
|
||||
DSS_REG_VS,
|
||||
};
|
||||
|
||||
struct dss_vreg {
|
||||
struct regulator *vreg; /* vreg handle */
|
||||
char vreg_name[32];
|
||||
int min_voltage;
|
||||
int max_voltage;
|
||||
int enable_load;
|
||||
int disable_load;
|
||||
int pre_on_sleep;
|
||||
int post_on_sleep;
|
||||
int pre_off_sleep;
|
||||
int post_off_sleep;
|
||||
};
|
||||
|
||||
struct dss_gpio {
|
||||
unsigned int gpio;
|
||||
unsigned int value;
|
||||
char gpio_name[32];
|
||||
};
|
||||
|
||||
enum dss_clk_type {
|
||||
DSS_CLK_AHB, /* no set rate. rate controlled through rpm */
|
||||
DSS_CLK_PCLK,
|
||||
DSS_CLK_MMRM, /* set rate called through mmrm driver */
|
||||
DSS_CLK_OTHER,
|
||||
};
|
||||
|
||||
struct dss_clk_mmrm_cb {
|
||||
void *phandle;
|
||||
struct dss_clk *clk;
|
||||
};
|
||||
|
||||
struct dss_clk_mmrm {
|
||||
unsigned int clk_id;
|
||||
unsigned int flags;
|
||||
struct mmrm_client *mmrm_client;
|
||||
struct dss_clk_mmrm_cb *mmrm_cb_data;
|
||||
unsigned long mmrm_requested_clk;
|
||||
wait_queue_head_t mmrm_cb_wq;
|
||||
};
|
||||
|
||||
struct dss_clk {
|
||||
struct clk *clk; /* clk handle */
|
||||
char clk_name[32];
|
||||
enum dss_clk_type type;
|
||||
unsigned long rate;
|
||||
unsigned long max_rate;
|
||||
struct dss_clk_mmrm mmrm;
|
||||
};
|
||||
|
||||
struct dss_module_power {
|
||||
unsigned int num_vreg;
|
||||
struct dss_vreg *vreg_config;
|
||||
unsigned int num_gpio;
|
||||
struct dss_gpio *gpio_config;
|
||||
unsigned int num_clk;
|
||||
struct dss_clk *clk_config;
|
||||
};
|
||||
|
||||
int msm_dss_ioremap_byname(struct platform_device *pdev,
|
||||
struct dss_io_data *io_data, const char *name);
|
||||
void msm_dss_iounmap(struct dss_io_data *io_data);
|
||||
int msm_dss_get_io_mem(struct platform_device *pdev,
|
||||
struct list_head *mem_list);
|
||||
void msm_dss_clean_io_mem(struct list_head *mem_list);
|
||||
int msm_dss_get_pmic_io_mem(struct platform_device *pdev,
|
||||
struct list_head *mem_list);
|
||||
int msm_dss_get_gpio_io_mem(const int gpio_pin, struct list_head *mem_list);
|
||||
int msm_dss_get_io_irq(struct platform_device *pdev,
|
||||
struct list_head *irq_list, u32 label);
|
||||
void msm_dss_clean_io_irq(struct list_head *irq_list);
|
||||
int msm_dss_enable_gpio(struct dss_gpio *in_gpio, int num_gpio, int enable);
|
||||
int msm_dss_gpio_enable(struct dss_gpio *in_gpio, int num_gpio, int enable);
|
||||
|
||||
int msm_dss_get_vreg(struct device *dev, struct dss_vreg *in_vreg,
|
||||
int num_vreg, int enable);
|
||||
int msm_dss_enable_vreg(struct dss_vreg *in_vreg, int num_vreg, int enable);
|
||||
|
||||
int msm_dss_get_clk(struct device *dev, struct dss_clk *clk_arry, int num_clk);
|
||||
int msm_dss_mmrm_register(struct device *dev, struct dss_module_power *mp,
|
||||
int (*cb_fnc)(struct mmrm_client_notifier_data *data), void *phandle,
|
||||
bool *mmrm_enable);
|
||||
void msm_dss_mmrm_deregister(struct device *dev, struct dss_module_power *mp);
|
||||
void msm_dss_put_clk(struct dss_clk *clk_arry, int num_clk);
|
||||
int msm_dss_clk_set_rate(struct dss_clk *clk_arry, int num_clk);
|
||||
int msm_dss_single_clk_set_rate(struct dss_clk *clk);
|
||||
int msm_dss_enable_clk(struct dss_clk *clk_arry, int num_clk, int enable);
|
||||
|
||||
int sde_i2c_byte_read(struct i2c_client *client, uint8_t slave_addr,
|
||||
uint8_t reg_offset, uint8_t *read_buf);
|
||||
int sde_i2c_byte_write(struct i2c_client *client, uint8_t slave_addr,
|
||||
uint8_t reg_offset, uint8_t *value);
|
||||
|
||||
#endif /* __SDE_IO_UTIL_H__ */
|
360
qcom/opensource/display-drivers/include/linux/sde_rsc.h
Normal file
360
qcom/opensource/display-drivers/include/linux/sde_rsc.h
Normal file
@@ -0,0 +1,360 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _SDE_RSC_H_
|
||||
#define _SDE_RSC_H_
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
||||
/* primary display rsc index */
|
||||
#define SDE_RSC_INDEX 0
|
||||
|
||||
#define MAX_RSC_CLIENT_NAME_LEN 128
|
||||
#define NUM_RSC_PROFILING_COUNTERS 3
|
||||
|
||||
/* DRM Object IDs are numbered excluding 0, use 0 to indicate invalid CRTC */
|
||||
#define SDE_RSC_INVALID_CRTC_ID 0
|
||||
|
||||
/**
|
||||
* event will be triggered before sde core power collapse,
|
||||
* mdss gdsc is still on
|
||||
*/
|
||||
#define SDE_RSC_EVENT_PRE_CORE_PC 0x1
|
||||
/**
|
||||
* event will be triggered after sde core collapse complete,
|
||||
* mdss gdsc is off now
|
||||
*/
|
||||
#define SDE_RSC_EVENT_POST_CORE_PC 0x2
|
||||
/**
|
||||
* event will be triggered before restoring the sde core from power collapse,
|
||||
* mdss gdsc is still off
|
||||
*/
|
||||
#define SDE_RSC_EVENT_PRE_CORE_RESTORE 0x4
|
||||
/**
|
||||
* event will be triggered after restoring the sde core from power collapse,
|
||||
* mdss gdsc is on now
|
||||
*/
|
||||
#define SDE_RSC_EVENT_POST_CORE_RESTORE 0x8
|
||||
/**
|
||||
* event attached with solver state enabled
|
||||
* all clients in clk_state or cmd_state
|
||||
*/
|
||||
#define SDE_RSC_EVENT_SOLVER_ENABLED 0x10
|
||||
/**
|
||||
* event attached with solver state disabled
|
||||
* one of the client requested for vid state
|
||||
*/
|
||||
#define SDE_RSC_EVENT_SOLVER_DISABLED 0x20
|
||||
|
||||
/**
|
||||
* sde_rsc_client_type: sde rsc client type information
|
||||
* SDE_RSC_PRIMARY_DISP_CLIENT: A primary display client which can request
|
||||
* vid or cmd state switch.
|
||||
* SDE_RSC_EXTERNAL_DISPLAY_CLIENT:An external display client which can
|
||||
* request only clk state switch.
|
||||
* SDE_RSC_CLK_CLIENT: A clk client request for only rsc clocks
|
||||
* enabled and mode_2 exit state.
|
||||
*/
|
||||
enum sde_rsc_client_type {
|
||||
SDE_RSC_PRIMARY_DISP_CLIENT,
|
||||
SDE_RSC_EXTERNAL_DISP_CLIENT,
|
||||
SDE_RSC_CLK_CLIENT,
|
||||
SDE_RSC_INVALID_CLIENT,
|
||||
};
|
||||
|
||||
/**
|
||||
* sde_rsc_state: sde rsc state information
|
||||
* SDE_RSC_IDLE_STATE: A client requests for idle state when there is no
|
||||
* pixel or cmd transfer expected. An idle vote from
|
||||
* all clients lead to power collapse state.
|
||||
* SDE_RSC_CLK_STATE: A client requests for clk state when it wants to
|
||||
* only avoid mode-2 entry/exit. For ex: V4L2 driver,
|
||||
* sde power handle, etc.
|
||||
* SDE_RSC_CMD_STATE: A client requests for cmd state when it wants to
|
||||
* enable the solver mode.
|
||||
* SDE_RSC_VID_STATE: A client requests for vid state it wants to avoid
|
||||
* solver enable because client is fetching data from
|
||||
* continuously.
|
||||
*/
|
||||
enum sde_rsc_state {
|
||||
SDE_RSC_IDLE_STATE,
|
||||
SDE_RSC_CLK_STATE,
|
||||
SDE_RSC_CMD_STATE,
|
||||
SDE_RSC_VID_STATE,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sde_rsc_client: stores the rsc client for sde driver
|
||||
* @name: name of the client
|
||||
* @current_state: current client state
|
||||
* @crtc_id: crtc_id associated with this rsc client.
|
||||
* @rsc_index: rsc index of a client - only index "0" valid.
|
||||
* @id: Index of client. It will be assigned during client_create call
|
||||
* @client_type: check sde_rsc_client_type information
|
||||
* @list: list to attach client master list
|
||||
*/
|
||||
struct sde_rsc_client {
|
||||
char name[MAX_RSC_CLIENT_NAME_LEN];
|
||||
short current_state;
|
||||
int crtc_id;
|
||||
u32 rsc_index;
|
||||
u32 id;
|
||||
enum sde_rsc_client_type client_type;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sde_rsc_event: local event registration entry structure
|
||||
* @cb_func: Pointer to desired callback function
|
||||
* @usr: User pointer to pass to callback on event trigger
|
||||
* @rsc_index: rsc index of a client - only index "0" valid.
|
||||
* @event_type: refer comments in event_register
|
||||
* @list: list to attach event master list
|
||||
*/
|
||||
struct sde_rsc_event {
|
||||
void (*cb_func)(uint32_t event_type, void *usr);
|
||||
void *usr;
|
||||
u32 rsc_index;
|
||||
uint32_t event_type;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sde_rsc_cmd_config: provides panel configuration to rsc
|
||||
* when client is command mode. It is not required to set it during
|
||||
* video mode.
|
||||
*
|
||||
* @fps: panel te interval
|
||||
* @vtotal: current vertical total (height + vbp + vfp)
|
||||
* @jitter_numer: panel jitter numerator value. This config causes rsc/solver
|
||||
* early before te. Default is 0.8% jitter.
|
||||
* @jitter_denom: panel jitter denominator.
|
||||
* @prefill_lines: max prefill lines based on panel
|
||||
*/
|
||||
struct sde_rsc_cmd_config {
|
||||
u32 fps;
|
||||
u32 vtotal;
|
||||
u32 jitter_numer;
|
||||
u32 jitter_denom;
|
||||
u32 prefill_lines;
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_DRM_SDE_RSC)
|
||||
/**
|
||||
* sde_rsc_client_create() - create the client for sde rsc.
|
||||
* Different displays like DSI, HDMI, DP, WB, etc should call this
|
||||
* api to register their vote for rpmh. They still need to vote for
|
||||
* power handle to get the clocks.
|
||||
|
||||
* @rsc_index: A client will be created on this RSC. As of now only
|
||||
* SDE_RSC_INDEX is valid rsc index.
|
||||
* @name: Caller needs to provide some valid string to identify
|
||||
* the client. "primary", "dp", "hdmi" are suggested name.
|
||||
* @client_type: check client_type enum for information
|
||||
* @vsync_source: This parameter is only valid for primary display. It provides
|
||||
* vsync source information
|
||||
*
|
||||
* Return: client node pointer.
|
||||
*/
|
||||
struct sde_rsc_client *sde_rsc_client_create(u32 rsc_index, char *name,
|
||||
enum sde_rsc_client_type client_type, u32 vsync_source);
|
||||
|
||||
/**
|
||||
* sde_rsc_client_destroy() - Destroy the sde rsc client.
|
||||
*
|
||||
* @client: Client pointer provided by sde_rsc_client_create().
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void sde_rsc_client_destroy(struct sde_rsc_client *client);
|
||||
|
||||
/**
|
||||
* sde_rsc_client_state_update() - rsc client state update
|
||||
* Video mode, cmd mode and clk state are supported as modes. A client need to
|
||||
* set this property during panel time. A switching client can set the
|
||||
* property to change the state
|
||||
*
|
||||
* @client: Client pointer provided by sde_rsc_client_create().
|
||||
* @state: Client state - video/cmd
|
||||
* @config: fps, vtotal, porches, etc configuration for command mode
|
||||
* panel
|
||||
* @crtc_id: current client's crtc id
|
||||
* @wait_vblank_crtc_id: Output parameter. If set to non-zero, rsc hw
|
||||
* state update requires a wait for one vblank on
|
||||
* the primary crtc. In that case, this output
|
||||
* param will be set to the crtc on which to wait.
|
||||
* If SDE_RSC_INVALID_CRTC_ID, no wait necessary
|
||||
*
|
||||
* Return: error code.
|
||||
*/
|
||||
int sde_rsc_client_state_update(struct sde_rsc_client *client,
|
||||
enum sde_rsc_state state,
|
||||
struct sde_rsc_cmd_config *config, int crtc_id,
|
||||
int *wait_vblank_crtc_id);
|
||||
|
||||
/**
|
||||
* sde_rsc_client_get_vsync_refcount() - returns the status of the vsync
|
||||
* refcount, to signal if the client needs to reset the refcounting logic
|
||||
* @client: Client pointer provided by sde_rsc_client_create().
|
||||
*
|
||||
* Return: true if the state update has completed.
|
||||
*/
|
||||
int sde_rsc_client_get_vsync_refcount(
|
||||
struct sde_rsc_client *caller_client);
|
||||
|
||||
/**
|
||||
* sde_rsc_client_reset_vsync_refcount() - reduces the refcounting
|
||||
* logic that waits for the vsync.
|
||||
* @client: Client pointer provided by sde_rsc_client_create().
|
||||
*
|
||||
* Return: true if the state update has completed.
|
||||
*/
|
||||
int sde_rsc_client_reset_vsync_refcount(
|
||||
struct sde_rsc_client *caller_client);
|
||||
|
||||
/**
|
||||
* sde_rsc_client_is_state_update_complete() - check if state update is complete
|
||||
* RSC state transition is not complete until HW receives VBLANK signal. This
|
||||
* function checks RSC HW to determine whether that signal has been received.
|
||||
* @client: Client pointer provided by sde_rsc_client_create().
|
||||
*
|
||||
* Return: true if the state update has completed.
|
||||
*/
|
||||
bool sde_rsc_client_is_state_update_complete(
|
||||
struct sde_rsc_client *caller_client);
|
||||
|
||||
/**
|
||||
* sde_rsc_client_vote() - stores ab/ib vote for rsc client
|
||||
*
|
||||
* @client: Client pointer provided by sde_rsc_client_create().
|
||||
* @bus_id: data bus identifier
|
||||
* @ab: aggregated bandwidth vote from client.
|
||||
* @ib: instant bandwidth vote from client.
|
||||
*
|
||||
* Return: error code.
|
||||
*/
|
||||
int sde_rsc_client_vote(struct sde_rsc_client *caller_client,
|
||||
u32 bus_id, u64 ab_vote, u64 ib_vote);
|
||||
|
||||
/**
|
||||
* sde_rsc_register_event - register a callback function for an event
|
||||
* @rsc_index: A client will be created on this RSC. As of now only
|
||||
* SDE_RSC_INDEX is valid rsc index.
|
||||
* @event_type: event type to register; client sets 0x3 if it wants
|
||||
* to register for CORE_PC and CORE_RESTORE - both events.
|
||||
* @cb_func: Pointer to desired callback function
|
||||
* @usr: User pointer to pass to callback on event trigger
|
||||
* Returns: sde_rsc_event pointer on success
|
||||
*/
|
||||
struct sde_rsc_event *sde_rsc_register_event(int rsc_index, uint32_t event_type,
|
||||
void (*cb_func)(uint32_t event_type, void *usr), void *usr);
|
||||
|
||||
/**
|
||||
* sde_rsc_unregister_event - unregister callback for an event
|
||||
* @sde_rsc_event: event returned by sde_rsc_register_event
|
||||
*/
|
||||
void sde_rsc_unregister_event(struct sde_rsc_event *event);
|
||||
|
||||
/**
|
||||
* is_sde_rsc_available - check if display rsc available.
|
||||
* @rsc_index: A client will be created on this RSC. As of now only
|
||||
* SDE_RSC_INDEX is valid rsc index.
|
||||
* Returns: true if rsc is available; false in all other cases
|
||||
*/
|
||||
bool is_sde_rsc_available(int rsc_index);
|
||||
|
||||
/**
|
||||
* get_sde_rsc_current_state - gets the current state of sde rsc.
|
||||
* @rsc_index: A client will be created on this RSC. As of now only
|
||||
* SDE_RSC_INDEX is valid rsc index.
|
||||
* Returns: current state if rsc available; SDE_RSC_IDLE_STATE for
|
||||
* all other cases
|
||||
*/
|
||||
enum sde_rsc_state get_sde_rsc_current_state(int rsc_index);
|
||||
|
||||
/**
|
||||
* sde_rsc_client_trigger_vote() - triggers ab/ib vote for rsc client
|
||||
*
|
||||
* @client: Client pointer provided by sde_rsc_client_create().
|
||||
* @delta_vote: if bw vote is increased or decreased
|
||||
*
|
||||
* Return: error code.
|
||||
*/
|
||||
int sde_rsc_client_trigger_vote(struct sde_rsc_client *caller_client,
|
||||
bool delta_vote);
|
||||
|
||||
#else
|
||||
|
||||
static inline struct sde_rsc_client *sde_rsc_client_create(u32 rsc_index,
|
||||
char *name, enum sde_rsc_client_type client_type, u32 vsync_source)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void sde_rsc_client_destroy(struct sde_rsc_client *client)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int sde_rsc_client_state_update(struct sde_rsc_client *client,
|
||||
enum sde_rsc_state state,
|
||||
struct sde_rsc_cmd_config *config, int crtc_id,
|
||||
int *wait_vblank_crtc_id)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int sde_rsc_client_get_vsync_refcount(
|
||||
struct sde_rsc_client *caller_client)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int sde_rsc_client_reset_vsync_refcount(
|
||||
struct sde_rsc_client *caller_client)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline bool sde_rsc_client_is_state_update_complete(
|
||||
struct sde_rsc_client *caller_client)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int sde_rsc_client_vote(struct sde_rsc_client *caller_client,
|
||||
u32 bus_id, u64 ab_vote, u64 ib_vote)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline struct sde_rsc_event *sde_rsc_register_event(int rsc_index,
|
||||
uint32_t event_type,
|
||||
void (*cb_func)(uint32_t event_type, void *usr), void *usr)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void sde_rsc_unregister_event(struct sde_rsc_event *event)
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool is_sde_rsc_available(int rsc_index)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline enum sde_rsc_state get_sde_rsc_current_state(int rsc_index)
|
||||
{
|
||||
return SDE_RSC_IDLE_STATE;
|
||||
}
|
||||
|
||||
static inline int sde_rsc_client_trigger_vote(
|
||||
struct sde_rsc_client *caller_client, bool delta_vote)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_DRM_SDE_RSC */
|
||||
|
||||
#endif /* _SDE_RSC_H_ */
|
97
qcom/opensource/display-drivers/include/linux/sde_vm_event.h
Normal file
97
qcom/opensource/display-drivers/include/linux/sde_vm_event.h
Normal file
@@ -0,0 +1,97 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __SDE_VM_EVENT_H__
|
||||
#define __SDE_VM_EVENT_H__
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <drm/drm_device.h>
|
||||
|
||||
/**
|
||||
* struct - msm_io_irq_entry - define irq item
|
||||
* @label: gh_irq_label for the irq
|
||||
* @irq_num: linux mapped irq num
|
||||
* @list: list head pointer
|
||||
*/
|
||||
struct msm_io_irq_entry {
|
||||
u32 label;
|
||||
u32 irq_num;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct - msm_io_mem_entry - define io memory item
|
||||
* @base: reg base
|
||||
* @size: size of the reg range
|
||||
* @list: list head pointer
|
||||
*/
|
||||
struct msm_io_mem_entry {
|
||||
phys_addr_t base;
|
||||
phys_addr_t size;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct - msm_io_res - represents the hw resources for vm sharing
|
||||
* @irq: list of IRQ's of all the dislay sub-devices
|
||||
* @mem: list of IO memory ranges of all the display sub-devices
|
||||
*/
|
||||
struct msm_io_res {
|
||||
struct list_head irq;
|
||||
struct list_head mem;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct msm_vm_ops - hooks for communication with vm clients
|
||||
* @vm_pre_hw_release: invoked before releasing the HW
|
||||
* @vm_post_hw_acquire: invoked before pushing the first commit
|
||||
* @vm_check: invoked to check the readiness of the vm_clients
|
||||
* before releasing the HW
|
||||
* @vm_get_io_resources: invoked to collect HW resources
|
||||
*/
|
||||
struct msm_vm_ops {
|
||||
int (*vm_pre_hw_release)(void *priv_data);
|
||||
int (*vm_post_hw_acquire)(void *priv_data);
|
||||
int (*vm_check)(void *priv_data);
|
||||
int (*vm_get_io_resources)(struct msm_io_res *io_res, void *priv_data);
|
||||
};
|
||||
|
||||
/**
|
||||
* msm_vm_client_entry - defines the vm client info
|
||||
* @ops: client vm_ops
|
||||
* @dev: clients device id. Used in unregister
|
||||
* @data: client custom data
|
||||
* @list: linked list entry
|
||||
*/
|
||||
struct msm_vm_client_entry {
|
||||
struct msm_vm_ops ops;
|
||||
struct device *dev;
|
||||
void *data;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
/**
|
||||
* msm_register_vm_event - api for display dependent drivers(clients) to
|
||||
* register for vm events
|
||||
* @dev: msm device
|
||||
* @client_dev: client device
|
||||
* @ops: vm event hooks
|
||||
* @priv_data: client custom data
|
||||
*/
|
||||
int msm_register_vm_event(struct device *dev, struct device *client_dev,
|
||||
struct msm_vm_ops *ops, void *priv_data);
|
||||
|
||||
/**
|
||||
* msm_unregister_vm_event - api for display dependent drivers(clients) to
|
||||
* unregister from vm events
|
||||
* @dev: msm device
|
||||
* @client_dev: client device
|
||||
*/
|
||||
void msm_unregister_vm_event(struct device *dev, struct device *client_dev);
|
||||
|
||||
#endif //__SDE_VM_EVENT_H__
|
Reference in New Issue
Block a user