Loading drivers/gpu/drm/mediatek/mediatek_v2/mtk_drm_crtc.c +2 −2 Original line number Diff line number Diff line Loading @@ -16143,10 +16143,10 @@ static void mtk_drm_crtc_atomic_flush(struct drm_crtc *crtc, if (pending_planes) mtk_crtc->pending_planes = true; if (mtk_drm_helper_get_opt(priv->helper_opt, MTK_DRM_OPT_HBM)) { if (mtk_drm_helper_get_opt(priv->helper_opt, MTK_DRM_OPT_HBM) || mtk_crtc->hbm_requested) { bool hbm_en = false; hbm_en = (bool)mtk_crtc_state->prop_val[CRTC_PROP_HBM_ENABLE]; hbm_en = (bool)mtk_crtc_state->prop_val[CRTC_PROP_HBM_ENABLE] || mtk_crtc->hbm_requested; mtk_drm_crtc_set_panel_hbm(crtc, hbm_en); mtk_drm_crtc_hbm_wait(crtc, hbm_en); Loading drivers/gpu/drm/mediatek/mediatek_v2/mtk_drm_crtc.h +2 −0 Original line number Diff line number Diff line Loading @@ -1148,6 +1148,8 @@ struct mtk_drm_crtc { unsigned int usage_ovl_weight[OVL_LAYER_NR]; bool is_plane0_updated; bool hbm_requested; }; enum BL_GAMMA_GAIN { Loading drivers/gpu/drm/mediatek/mediatek_v2/mtk_dsi.c +54 −0 Original line number Diff line number Diff line Loading @@ -11617,6 +11617,55 @@ static int mtk_dsi_set_partial_update(struct mtk_ddp_comp *comp, return 0; } static ssize_t hbm_show(struct device *dev, struct device_attribute *attr, char *buf) { struct mtk_dsi *dsi = dev_get_drvdata(dev); struct mtk_panel_ext *ext = dsi->ext; bool hbm = false; if (ext && ext->funcs && ext->funcs->hbm_get_state) ext->funcs->hbm_get_state(dsi->panel, &hbm); else DDPPR_ERR("%s: hbm_get_state is NULL\n", __func__); return scnprintf(buf, PAGE_SIZE, "%d\n", hbm); } static ssize_t hbm_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mtk_dsi *dsi = dev_get_drvdata(dev); struct drm_crtc *crtc = dsi->encoder.crtc; struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); bool hbm_en = false; int ret = 0; ret = kstrtobool(buf, &hbm_en); if (ret) return ret; mtk_crtc->hbm_requested = hbm_en; ret = mtk_drm_crtc_set_panel_hbm(crtc, hbm_en); if (ret) return ret; return count; } static DEVICE_ATTR_RW(hbm); // Initialization static struct attribute *mtk_dsi_attrs[] = { &dev_attr_hbm.attr, NULL, }; static const struct attribute_group mtk_dsi_attr_group = { .attrs = mtk_dsi_attrs, }; static int mtk_dsi_sysfs_init(struct mtk_dsi *dsi) { int ret = 0; ret = sysfs_create_group(&dsi->dev->kobj, &mtk_dsi_attr_group); if (ret) { DDPPR_ERR("%s: failed to create sysfs group\n", __func__); return ret; } return 0; } static const struct mtk_ddp_comp_funcs mtk_dsi_funcs = { .config = mtk_dsi_ddp_config, .first_cfg = mtk_dsi_first_cfg, Loading Loading @@ -12253,6 +12302,11 @@ static int mtk_dsi_probe(struct platform_device *pdev) platform_set_drvdata(pdev, dsi); ret = mtk_dsi_sysfs_init(dsi); if (ret) { dev_err(dev, "Failed to initialize sysfs: %d\n", ret); } ret = component_add(&pdev->dev, &mtk_dsi_component_ops); if (ret != 0) { dev_err(dev, "Failed to add component: %d\n", ret); Loading Loading
drivers/gpu/drm/mediatek/mediatek_v2/mtk_drm_crtc.c +2 −2 Original line number Diff line number Diff line Loading @@ -16143,10 +16143,10 @@ static void mtk_drm_crtc_atomic_flush(struct drm_crtc *crtc, if (pending_planes) mtk_crtc->pending_planes = true; if (mtk_drm_helper_get_opt(priv->helper_opt, MTK_DRM_OPT_HBM)) { if (mtk_drm_helper_get_opt(priv->helper_opt, MTK_DRM_OPT_HBM) || mtk_crtc->hbm_requested) { bool hbm_en = false; hbm_en = (bool)mtk_crtc_state->prop_val[CRTC_PROP_HBM_ENABLE]; hbm_en = (bool)mtk_crtc_state->prop_val[CRTC_PROP_HBM_ENABLE] || mtk_crtc->hbm_requested; mtk_drm_crtc_set_panel_hbm(crtc, hbm_en); mtk_drm_crtc_hbm_wait(crtc, hbm_en); Loading
drivers/gpu/drm/mediatek/mediatek_v2/mtk_drm_crtc.h +2 −0 Original line number Diff line number Diff line Loading @@ -1148,6 +1148,8 @@ struct mtk_drm_crtc { unsigned int usage_ovl_weight[OVL_LAYER_NR]; bool is_plane0_updated; bool hbm_requested; }; enum BL_GAMMA_GAIN { Loading
drivers/gpu/drm/mediatek/mediatek_v2/mtk_dsi.c +54 −0 Original line number Diff line number Diff line Loading @@ -11617,6 +11617,55 @@ static int mtk_dsi_set_partial_update(struct mtk_ddp_comp *comp, return 0; } static ssize_t hbm_show(struct device *dev, struct device_attribute *attr, char *buf) { struct mtk_dsi *dsi = dev_get_drvdata(dev); struct mtk_panel_ext *ext = dsi->ext; bool hbm = false; if (ext && ext->funcs && ext->funcs->hbm_get_state) ext->funcs->hbm_get_state(dsi->panel, &hbm); else DDPPR_ERR("%s: hbm_get_state is NULL\n", __func__); return scnprintf(buf, PAGE_SIZE, "%d\n", hbm); } static ssize_t hbm_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mtk_dsi *dsi = dev_get_drvdata(dev); struct drm_crtc *crtc = dsi->encoder.crtc; struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); bool hbm_en = false; int ret = 0; ret = kstrtobool(buf, &hbm_en); if (ret) return ret; mtk_crtc->hbm_requested = hbm_en; ret = mtk_drm_crtc_set_panel_hbm(crtc, hbm_en); if (ret) return ret; return count; } static DEVICE_ATTR_RW(hbm); // Initialization static struct attribute *mtk_dsi_attrs[] = { &dev_attr_hbm.attr, NULL, }; static const struct attribute_group mtk_dsi_attr_group = { .attrs = mtk_dsi_attrs, }; static int mtk_dsi_sysfs_init(struct mtk_dsi *dsi) { int ret = 0; ret = sysfs_create_group(&dsi->dev->kobj, &mtk_dsi_attr_group); if (ret) { DDPPR_ERR("%s: failed to create sysfs group\n", __func__); return ret; } return 0; } static const struct mtk_ddp_comp_funcs mtk_dsi_funcs = { .config = mtk_dsi_ddp_config, .first_cfg = mtk_dsi_first_cfg, Loading Loading @@ -12253,6 +12302,11 @@ static int mtk_dsi_probe(struct platform_device *pdev) platform_set_drvdata(pdev, dsi); ret = mtk_dsi_sysfs_init(dsi); if (ret) { dev_err(dev, "Failed to initialize sysfs: %d\n", ret); } ret = component_add(&pdev->dev, &mtk_dsi_component_ops); if (ret != 0) { dev_err(dev, "Failed to add component: %d\n", ret); Loading