mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 11:50:43 +09:00
drm: Add HDR panel metadata property
HDR_PANEL_METADATA is used to indicate HDR capacity of sink device. Change-Id: I598a7bb5634f14b57f94135fd3be6b0ad2075116 Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
This commit is contained in:
@@ -2360,6 +2360,8 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
|
|||||||
{
|
{
|
||||||
struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
|
struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
|
||||||
connector);
|
connector);
|
||||||
|
struct hdr_static_metadata *metedata =
|
||||||
|
&connector->hdr_sink_metadata.hdmi_type1;
|
||||||
struct edid *edid;
|
struct edid *edid;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
@@ -2376,6 +2378,7 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
|
|||||||
drm_connector_update_edid_property(connector, edid);
|
drm_connector_update_edid_property(connector, edid);
|
||||||
cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid);
|
cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid);
|
||||||
ret = drm_add_edid_modes(connector, edid);
|
ret = drm_add_edid_modes(connector, edid);
|
||||||
|
drm_mode_connector_update_hdr_property(connector, metedata);
|
||||||
kfree(edid);
|
kfree(edid);
|
||||||
} else {
|
} else {
|
||||||
dev_dbg(hdmi->dev, "failed to get edid\n");
|
dev_dbg(hdmi->dev, "failed to get edid\n");
|
||||||
|
|||||||
@@ -1005,6 +1005,14 @@ int drm_connector_create_standard_properties(struct drm_device *dev)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
dev->mode_config.hdr_output_metadata_property = prop;
|
dev->mode_config.hdr_output_metadata_property = prop;
|
||||||
|
|
||||||
|
prop = drm_property_create(dev,
|
||||||
|
DRM_MODE_PROP_BLOB |
|
||||||
|
DRM_MODE_PROP_IMMUTABLE,
|
||||||
|
"HDR_PANEL_METADATA", 0);
|
||||||
|
if (!prop)
|
||||||
|
return -ENOMEM;
|
||||||
|
dev->mode_config.hdr_panel_metadata_property = prop;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1554,6 +1562,28 @@ int drm_connector_update_edid_property(struct drm_connector *connector,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_connector_update_edid_property);
|
EXPORT_SYMBOL(drm_connector_update_edid_property);
|
||||||
|
|
||||||
|
int
|
||||||
|
drm_mode_connector_update_hdr_property(struct drm_connector *connector,
|
||||||
|
const struct hdr_static_metadata *data)
|
||||||
|
{
|
||||||
|
struct drm_device *dev = connector->dev;
|
||||||
|
size_t size = sizeof(*data);
|
||||||
|
struct drm_property *property =
|
||||||
|
dev->mode_config.hdr_panel_metadata_property;
|
||||||
|
struct drm_property_blob **replace =
|
||||||
|
&connector->state->hdr_panel_blob_ptr;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = drm_property_replace_global_blob(dev,
|
||||||
|
replace,
|
||||||
|
size,
|
||||||
|
data,
|
||||||
|
&connector->base,
|
||||||
|
property);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(drm_mode_connector_update_hdr_property);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* drm_connector_set_link_status_property - Set link status property of a connector
|
* drm_connector_set_link_status_property - Set link status property of a connector
|
||||||
* @connector: drm connector
|
* @connector: drm connector
|
||||||
|
|||||||
@@ -836,6 +836,9 @@ dw_hdmi_rockchip_attach_properties(struct drm_connector *connector,
|
|||||||
prop = connector->dev->mode_config.hdr_output_metadata_property;
|
prop = connector->dev->mode_config.hdr_output_metadata_property;
|
||||||
if (version >= 0x211a)
|
if (version >= 0x211a)
|
||||||
drm_object_attach_property(&connector->base, prop, 0);
|
drm_object_attach_property(&connector->base, prop, 0);
|
||||||
|
|
||||||
|
prop = connector->dev->mode_config.hdr_panel_metadata_property;
|
||||||
|
drm_object_attach_property(&connector->base, prop, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -466,6 +466,8 @@ struct drm_connector_state {
|
|||||||
* DRM blob property for HDR output metadata
|
* DRM blob property for HDR output metadata
|
||||||
*/
|
*/
|
||||||
struct drm_property_blob *hdr_output_metadata;
|
struct drm_property_blob *hdr_output_metadata;
|
||||||
|
|
||||||
|
struct drm_property_blob *hdr_panel_blob_ptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1213,6 +1215,9 @@ int drm_connector_set_path_property(struct drm_connector *connector,
|
|||||||
int drm_connector_set_tile_property(struct drm_connector *connector);
|
int drm_connector_set_tile_property(struct drm_connector *connector);
|
||||||
int drm_connector_update_edid_property(struct drm_connector *connector,
|
int drm_connector_update_edid_property(struct drm_connector *connector,
|
||||||
const struct edid *edid);
|
const struct edid *edid);
|
||||||
|
int
|
||||||
|
drm_mode_connector_update_hdr_property(struct drm_connector *connector,
|
||||||
|
const struct hdr_static_metadata *data);
|
||||||
void drm_connector_set_link_status_property(struct drm_connector *connector,
|
void drm_connector_set_link_status_property(struct drm_connector *connector,
|
||||||
uint64_t link_status);
|
uint64_t link_status);
|
||||||
int drm_connector_init_panel_orientation_property(
|
int drm_connector_init_panel_orientation_property(
|
||||||
|
|||||||
@@ -824,6 +824,8 @@ struct drm_mode_config {
|
|||||||
*/
|
*/
|
||||||
struct drm_property *hdr_output_metadata_property;
|
struct drm_property *hdr_output_metadata_property;
|
||||||
|
|
||||||
|
struct drm_property *hdr_panel_metadata_property;
|
||||||
|
|
||||||
/* dumb ioctl parameters */
|
/* dumb ioctl parameters */
|
||||||
uint32_t preferred_depth, prefer_shadow;
|
uint32_t preferred_depth, prefer_shadow;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user