Commit 03e1b3df authored by Thomas Zimmermann's avatar Thomas Zimmermann Committed by Maarten Lankhorst
Browse files

drm/i915/display: Remove preferred_bpp from struct intel_fbdev



The value preferred_bpp in struct intel_fbdev duplicates preferred_bpp
in struct drm_fb_helper. Remove the former.

Instead let intel_fbdev_init_bios() read the framebuffer from the
hardware. Then derive preferred_bpp from its format and initialize
struct drm_fb_helper with the value. The default is 32 (i.e., XRGB8888).

Also removes one of those deprecated references to the cpp field of
struct drm_format_info.

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241212170913.185939-8-tzimmermann@suse.de


Signed-off-by: default avatarMaarten Lankhorst <dev@lankhorst.se>
parent a1c008b9
Loading
Loading
Loading
Loading
+23 −6
Original line number Diff line number Diff line
@@ -60,7 +60,6 @@ struct intel_fbdev {
	struct intel_framebuffer *fb;
	struct i915_vma *vma;
	unsigned long vma_flags;
	int preferred_bpp;
};

static struct intel_fbdev *to_intel_fbdev(struct drm_fb_helper *fb_helper)
@@ -430,7 +429,6 @@ static bool intel_fbdev_init_bios(struct drm_device *dev,
		goto out;
	}

	ifbdev->preferred_bpp = fb->base.format->cpp[0] * 8;
	ifbdev->fb = fb;

	drm_framebuffer_get(&ifbdev->fb->base);
@@ -461,6 +459,23 @@ static bool intel_fbdev_init_bios(struct drm_device *dev,
	return false;
}

static unsigned int intel_fbdev_color_mode(const struct drm_format_info *info)
{
	unsigned int bpp;

	if (!info->depth || info->num_planes != 1 || info->has_alpha || info->is_yuv)
		return 0;

	bpp = drm_format_info_bpp(info, 0);

	switch (bpp) {
	case 16:
		return info->depth; // 15 or 16
	default:
		return bpp;
	}
}

static void intel_fbdev_suspend_worker(struct work_struct *work)
{
	intel_fbdev_set_suspend(&container_of(work,
@@ -625,6 +640,7 @@ void intel_fbdev_setup(struct drm_i915_private *i915)
{
	struct drm_device *dev = &i915->drm;
	struct intel_fbdev *ifbdev;
	unsigned int preferred_bpp = 0;
	int ret;

	if (!HAS_DISPLAY(i915))
@@ -633,14 +649,15 @@ void intel_fbdev_setup(struct drm_i915_private *i915)
	ifbdev = kzalloc(sizeof(*ifbdev), GFP_KERNEL);
	if (!ifbdev)
		return;
	drm_fb_helper_prepare(dev, &ifbdev->helper, 32, &intel_fb_helper_funcs);

	i915->display.fbdev.fbdev = ifbdev;
	INIT_WORK(&i915->display.fbdev.suspend_work, intel_fbdev_suspend_worker);
	if (intel_fbdev_init_bios(dev, ifbdev))
		ifbdev->helper.preferred_bpp = ifbdev->preferred_bpp;
	else
		ifbdev->preferred_bpp = ifbdev->helper.preferred_bpp;
		preferred_bpp = intel_fbdev_color_mode(ifbdev->fb->base.format);
	if (!preferred_bpp)
		preferred_bpp = 32;

	drm_fb_helper_prepare(dev, &ifbdev->helper, preferred_bpp, &intel_fb_helper_funcs);

	ret = drm_client_init(dev, &ifbdev->helper.client, "intel-fbdev",
			      &intel_fbdev_client_funcs);