drm/rockchip: dsi2: add support split area prop

Change-Id: Ia96f8f40d2703865808b5cdc4e84b30a81d7c974
Signed-off-by: Guochun Huang <hero.huang@rock-chips.com>
This commit is contained in:
Guochun Huang
2023-07-05 12:48:38 +00:00
committed by Tao Huang
parent cf4fecc4dc
commit 4f58666813

View File

@@ -279,6 +279,7 @@ struct dw_mipi_dsi2 {
/* split with other display interface */
bool dual_connector_split;
bool left_display;
u32 split_area;
};
static inline struct dw_mipi_dsi2 *host_to_dsi2(struct mipi_dsi_host *host)
@@ -1108,6 +1109,32 @@ static void dw_mipi_dsi2_drm_connector_destroy(struct drm_connector *connector)
drm_connector_cleanup(connector);
}
static int
dw_mipi_dsi2_atomic_connector_get_property(struct drm_connector *connector,
const struct drm_connector_state *state,
struct drm_property *property,
uint64_t *val)
{
struct rockchip_drm_private *private = connector->dev->dev_private;
struct dw_mipi_dsi2 *dsi2 = con_to_dsi2(connector);
if (property == private->split_area_prop) {
switch (dsi2->split_area) {
case 1:
*val = ROCKCHIP_DRM_SPLIT_LEFT_SIDE;
break;
case 2:
*val = ROCKCHIP_DRM_SPLIT_RIGHT_SIDE;
break;
default:
*val = ROCKCHIP_DRM_SPLIT_UNSET;
break;
}
}
return 0;
}
static const struct drm_connector_funcs dw_mipi_dsi2_atomic_connector_funcs = {
.fill_modes = drm_helper_probe_single_connector_modes,
.detect = dw_mipi_dsi2_connector_detect,
@@ -1115,6 +1142,7 @@ static const struct drm_connector_funcs dw_mipi_dsi2_atomic_connector_funcs = {
.reset = drm_atomic_helper_connector_reset,
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
.atomic_get_property = dw_mipi_dsi2_atomic_connector_get_property,
};
static int dw_mipi_dsi2_dual_channel_probe(struct dw_mipi_dsi2 *dsi2)
@@ -1261,8 +1289,16 @@ connector_cleanup:
static int dw_mipi_dsi2_register_sub_dev(struct dw_mipi_dsi2 *dsi2,
struct drm_connector *connector)
{
struct rockchip_drm_private *private;
struct device *dev = dsi2->dev;
private = connector->dev->dev_private;
if (dsi2->split_area)
drm_object_attach_property(&connector->base,
private->split_area_prop,
dsi2->split_area);
dsi2->sub_dev.connector = connector;
dsi2->sub_dev.of_node = dev->of_node;
dsi2->sub_dev.loader_protect = dw_mipi_dsi2_encoder_loader_protect;
@@ -1594,6 +1630,9 @@ static int dw_mipi_dsi2_probe(struct platform_device *pdev)
dsi2->left_display = true;
}
if (device_property_read_u32(dev, "split-area", &dsi2->split_area))
dsi2->split_area = 0;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
regs = devm_ioremap_resource(dev, res);
if (IS_ERR(regs))