{
struct rockchip_drm_private *priv = dev->dev_private;
- drm_fb_helper_restore_fbdev_mode_unlocked(&priv->fbdev_helper);
+ drm_fb_helper_restore_fbdev_mode_unlocked(priv->fbdev_helper);
}
static const struct drm_ioctl_desc rockchip_ioctls[] = {
struct rockchip_drm_private *priv = drm->dev_private;
console_lock();
- drm_fb_helper_set_suspend(&priv->fbdev_helper, 1);
+ drm_fb_helper_set_suspend(priv->fbdev_helper, 1);
console_unlock();
}
struct rockchip_drm_private *priv = drm->dev_private;
console_lock();
- drm_fb_helper_set_suspend(&priv->fbdev_helper, 0);
+ drm_fb_helper_set_suspend(priv->fbdev_helper, 0);
console_unlock();
}
* @cpu_fence_seqno: fence sequence number
*/
struct rockchip_drm_private {
- struct drm_fb_helper fbdev_helper;
+ struct drm_fb_helper *fbdev_helper;
struct drm_gem_object *fbdev_bo;
const struct rockchip_crtc_funcs *crtc_funcs[ROCKCHIP_MAX_CRTC];
struct drm_atomic_state *state;
#include "rockchip_drm_fb.h"
#define PREFERRED_BPP 32
-#define to_drm_private(x) \
- container_of(x, struct rockchip_drm_private, fbdev_helper)
static int rockchip_fbdev_mmap(struct fb_info *info,
struct vm_area_struct *vma)
{
struct drm_fb_helper *helper = info->par;
- struct rockchip_drm_private *private = to_drm_private(helper);
+ struct rockchip_drm_private *private = helper->dev->dev_private;
return rockchip_gem_mmap_buf(private->fbdev_bo, vma);
}
static int rockchip_drm_fbdev_create(struct drm_fb_helper *helper,
struct drm_fb_helper_surface_size *sizes)
{
- struct rockchip_drm_private *private = to_drm_private(helper);
+ struct rockchip_drm_private *private = helper->dev->dev_private;
struct drm_mode_fb_cmd2 mode_cmd = { 0 };
struct drm_device *dev = helper->dev;
struct rockchip_gem_object *rk_obj;
num_crtc = dev->mode_config.num_crtc;
- helper = &private->fbdev_helper;
+ helper = devm_kzalloc(dev->dev, sizeof(*helper), GFP_KERNEL);
+ if (!helper)
+ return -ENOMEM;
+
+ private->fbdev_helper = helper;
drm_fb_helper_prepare(dev, helper, &rockchip_drm_fb_helper_funcs);
void rockchip_drm_fbdev_fini(struct drm_device *dev)
{
struct rockchip_drm_private *private = dev->dev_private;
- struct drm_fb_helper *helper;
+ struct drm_fb_helper *helper = private->fbdev_helper;
- helper = &private->fbdev_helper;
+ if (!helper)
+ return;
drm_fb_helper_unregister_fbi(helper);
drm_fb_helper_release_fbi(helper);