Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c87404d authored by electimon's avatar electimon Committed by Rohit Sekhar
Browse files

drm: mediatek: Add hbm node

Change-Id: Ie306a3a61544f4d81cd2ec715dba5465a18924e0
parent fed0c7fa
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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 {
+54 −0
Original line number Diff line number Diff line
@@ -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,
@@ -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);