/*
|
* (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd
|
*
|
* SPDX-License-Identifier: GPL-2.0+
|
*/
|
|
#ifndef _ROCKCHIP_CONNECTOR_H_
|
#define _ROCKCHIP_CONNECTOR_H_
|
|
#include "rockchip_bridge.h"
|
#include "rockchip_panel.h"
|
|
struct rockchip_connector {
|
struct udevice *dev;
|
struct rockchip_bridge *bridge;
|
struct rockchip_panel *panel;
|
struct rockchip_phy *phy;
|
struct list_head head;
|
int id;
|
int type;
|
|
const struct rockchip_connector_funcs *funcs;
|
void *data;
|
};
|
|
struct rockchip_connector_funcs {
|
/*
|
* pre init connector, prepare some parameter out_if, this will be
|
* used by rockchip_display.c and vop
|
*/
|
int (*pre_init)(struct rockchip_connector *connector, struct display_state *state);
|
|
/*
|
* init connector, prepare resource to ensure
|
* detect and get_timing can works
|
*/
|
int (*init)(struct rockchip_connector *connector, struct display_state *state);
|
|
void (*deinit)(struct rockchip_connector *connector, struct display_state *state);
|
/*
|
* Optional, if connector not support hotplug,
|
* Returns:
|
* 0 means disconnected, else means connected
|
*/
|
int (*detect)(struct rockchip_connector *connector, struct display_state *state);
|
/*
|
* Optional, if implement it, need fill the timing data:
|
* state->conn_state->mode
|
* you can refer to the rockchip_display: display_get_timing(),
|
* Returns:
|
* 0 means success, else means failed
|
*/
|
int (*get_timing)(struct rockchip_connector *connector, struct display_state *state);
|
/*
|
* Optional, if implement it, need fill the edid data:
|
* state->conn_state->edid
|
* Returns:
|
* 0 means success, else means failed
|
*/
|
int (*get_edid)(struct rockchip_connector *connector, struct display_state *state);
|
/*
|
* call before crtc enable.
|
*/
|
int (*prepare)(struct rockchip_connector *connector, struct display_state *state);
|
/*
|
* call after crtc enable
|
*/
|
int (*enable)(struct rockchip_connector *connector, struct display_state *state);
|
int (*disable)(struct rockchip_connector *connector, struct display_state *state);
|
void (*unprepare)(struct rockchip_connector *connector, struct display_state *state);
|
|
int (*check)(struct rockchip_connector *connector, struct display_state *state);
|
int (*mode_valid)(struct rockchip_connector *connector, struct display_state *state);
|
};
|
|
const struct rockchip_connector *
|
rockchip_get_connector(const void *blob, int connector_node);
|
int rockchip_connector_bind(struct rockchip_connector *connector, struct udevice *dev, int id,
|
const struct rockchip_connector_funcs *funcs, void *data, int type);
|
struct rockchip_connector *get_rockchip_connector_by_device(struct udevice *dev);
|
int rockchip_connector_pre_init(struct display_state *state);
|
int rockchip_connector_init(struct display_state *state);
|
int rockchip_connector_deinit(struct display_state *state);
|
bool rockchip_connector_detect(struct display_state *state);
|
int rockchip_connector_get_timing(struct display_state *state);
|
int rockchip_connector_get_edid(struct display_state *state);
|
int rockchip_connector_pre_enable(struct display_state *state);
|
int rockchip_connector_enable(struct display_state *state);
|
int rockchip_connector_disable(struct display_state *state);
|
int rockchip_connector_post_disable(struct display_state *state);
|
|
#ifdef CONFIG_DRM_ROCKCHIP_ANALOGIX_DP
|
struct rockchip_dp_chip_data;
|
extern const struct rockchip_connector_funcs rockchip_analogix_dp_funcs;
|
extern const struct rockchip_dp_chip_data rk3399_analogix_edp_drv_data;
|
extern const struct rockchip_dp_chip_data rk3368_analogix_edp_drv_data;
|
extern const struct rockchip_dp_chip_data rk3288_analogix_dp_drv_data;
|
#endif
|
#endif
|