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

Commit 2057d116 authored by Xu Yang's avatar Xu Yang Committed by Abhijith Desai
Browse files

msm: mdss: Add support to update backlight when display commit



1. Add support to update backlight when display commit. Backlight
level is sent from userspace. And sync to set PP config, kickoff,
and set backlight in the same vsync period.

2. Add support to get current backlight level through sysfs node.

Change-Id: Icf264299ecf8edd3831938745a471c2655c23542
Signed-off-by: default avatarXu Yang <yangxu@codeaurora.org>
Signed-off-by: default avatarAbhijith Desai <desaia@codeaurora.org>
parent b1af7958
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ static void __copy_atomic_commit_struct(struct mdp_layer_commit *commit,
		commit32->commit_v1.input_layer_cnt;
	commit->commit_v1.left_roi = commit32->commit_v1.left_roi;
	commit->commit_v1.right_roi = commit32->commit_v1.right_roi;
	commit->commit_v1.bl_level = commit32->commit_v1.bl_level;
	memcpy(&commit->commit_v1.reserved, &commit32->commit_v1.reserved,
		count);
}
+1 −0
Original line number Diff line number Diff line
@@ -539,6 +539,7 @@ struct mdp_layer_commit_v1_32 {
	compat_caddr_t		dest_scaler;
	uint32_t                dest_scaler_cnt;
	compat_caddr_t		frc_info;
	uint32_t		bl_level; /* BL level to be updated in commit */
	uint32_t		reserved[MDP_LAYER_COMMIT_V1_PAD];
};

+22 −0
Original line number Diff line number Diff line
@@ -308,10 +308,23 @@ static void mdss_fb_set_bl_brightness(struct led_classdev *led_cdev,
	}
}

static enum led_brightness mdss_fb_get_bl_brightness(
	struct led_classdev *led_cdev)
{
	struct msm_fb_data_type *mfd = dev_get_drvdata(led_cdev->dev->parent);
	u64 value;

	MDSS_BL_TO_BRIGHT(value, mfd->bl_level, mfd->panel_info->bl_max,
			  mfd->panel_info->brightness_max);

	return value;
}

static struct led_classdev backlight_led = {
	.name           = "lcd-backlight",
	.brightness     = MDSS_MAX_BL_BRIGHTNESS / 2,
	.brightness_set = mdss_fb_set_bl_brightness,
	.brightness_get = mdss_fb_get_bl_brightness,
	.max_brightness = MDSS_MAX_BL_BRIGHTNESS,
};

@@ -3475,6 +3488,15 @@ int mdss_fb_atomic_commit(struct fb_info *info,
	mfd->msm_fb_backup.atomic_commit = true;
	mfd->msm_fb_backup.disp_commit.l_roi =  commit_v1->left_roi;
	mfd->msm_fb_backup.disp_commit.r_roi =  commit_v1->right_roi;
	mfd->msm_fb_backup.disp_commit.flags =  commit_v1->flags;
	if (commit_v1->flags & MDP_COMMIT_UPDATE_BRIGHTNESS) {
		MDSS_BRIGHT_TO_BL(mfd->bl_extn_level, commit_v1->bl_level,
			mfd->panel_info->bl_max,
			mfd->panel_info->brightness_max);
		if (!mfd->bl_extn_level && commit_v1->bl_level)
			mfd->bl_extn_level = 1;
	} else
		mfd->bl_extn_level = -1;

	mutex_lock(&mfd->mdp_sync_pt_data.sync_mutex);
	atomic_inc(&mfd->mdp_sync_pt_data.commit_cnt);
+5 −0
Original line number Diff line number Diff line
@@ -245,6 +245,10 @@ struct msm_mdp_interface {
				out = (2 * (v) * (bl_max) + max_bright);\
				do_div(out, 2 * max_bright);\
				} while (0)
#define MDSS_BL_TO_BRIGHT(out, v, bl_max, max_bright) do {\
				out = ((v) * (max_bright));\
				do_div(out, bl_max);\
				} while (0)

struct mdss_fb_file_info {
	struct file *file;
@@ -309,6 +313,7 @@ struct msm_fb_data_type {
	u32 calib_mode_bl;
	u32 ad_bl_level;
	u64 bl_level;
	u64 bl_extn_level;
	u32 bl_scale;
	u32 bl_min_lvl;
	u32 unset_bl_level;
+3 −0
Original line number Diff line number Diff line
@@ -350,6 +350,9 @@ struct mdss_mdp_ctl_intfs_ops {

	/* to update lineptr, [1..yres] - enable, 0 - disable */
	int (*update_lineptr)(struct mdss_mdp_ctl *ctl, bool enable);

	/* to wait for vsync */
	int (*wait_for_vsync_fnc)(struct mdss_mdp_ctl *ctl);
};

/* FRC info used for Deterministic Frame Rate Control */
Loading