2018-07-26 02:37:49 +00:00
|
|
|
// SPDX-License-Identifier: GPL-2.0+
|
2012-04-26 13:53:59 +02:00
|
|
|
/*
|
|
|
|
* shmob_drm_kms.c -- SH Mobile DRM Mode Setting
|
|
|
|
*
|
2014-02-06 18:13:52 +01:00
|
|
|
* Copyright (C) 2012 Renesas Electronics Corporation
|
2012-04-26 13:53:59 +02:00
|
|
|
*
|
|
|
|
* Laurent Pinchart (laurent.pinchart@ideasonboard.com)
|
|
|
|
*/
|
|
|
|
|
2023-09-15 10:53:51 +02:00
|
|
|
#include <drm/drm_atomic_helper.h>
|
2012-04-26 13:53:59 +02:00
|
|
|
#include <drm/drm_crtc.h>
|
|
|
|
#include <drm/drm_crtc_helper.h>
|
2022-06-14 12:54:49 +03:00
|
|
|
#include <drm/drm_fourcc.h>
|
2022-08-02 02:04:03 +02:00
|
|
|
#include <drm/drm_gem_dma_helper.h>
|
2017-09-24 14:26:22 +02:00
|
|
|
#include <drm/drm_gem_framebuffer_helper.h>
|
2019-01-17 22:03:34 +01:00
|
|
|
#include <drm/drm_probe_helper.h>
|
2012-04-26 13:53:59 +02:00
|
|
|
|
|
|
|
#include "shmob_drm_crtc.h"
|
|
|
|
#include "shmob_drm_drv.h"
|
|
|
|
#include "shmob_drm_kms.h"
|
2023-09-15 10:53:51 +02:00
|
|
|
#include "shmob_drm_plane.h"
|
2012-04-26 13:53:59 +02:00
|
|
|
#include "shmob_drm_regs.h"
|
|
|
|
|
|
|
|
/* -----------------------------------------------------------------------------
|
|
|
|
* Format helpers
|
|
|
|
*/
|
|
|
|
|
|
|
|
static const struct shmob_drm_format_info shmob_drm_format_infos[] = {
|
|
|
|
{
|
|
|
|
.fourcc = DRM_FORMAT_RGB565,
|
|
|
|
.bpp = 16,
|
|
|
|
.lddfr = LDDFR_PKF_RGB16,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS | LDDDSR_WS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_1 | LDBBSIFR_SWPL | LDBBSIFR_SWPW |
|
|
|
|
LDBBSIFR_RY | LDBBSIFR_RPKF_RGB16,
|
2012-04-26 13:53:59 +02:00
|
|
|
}, {
|
|
|
|
.fourcc = DRM_FORMAT_RGB888,
|
|
|
|
.bpp = 24,
|
|
|
|
.lddfr = LDDFR_PKF_RGB24,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS | LDDDSR_WS | LDDDSR_BS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_1 | LDBBSIFR_SWPL | LDBBSIFR_SWPW |
|
|
|
|
LDBBSIFR_SWPB | LDBBSIFR_RY | LDBBSIFR_RPKF_RGB24,
|
2012-04-26 13:53:59 +02:00
|
|
|
}, {
|
|
|
|
.fourcc = DRM_FORMAT_ARGB8888,
|
|
|
|
.bpp = 32,
|
|
|
|
.lddfr = LDDFR_PKF_ARGB32,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_PK | LDBBSIFR_SWPL | LDBBSIFR_RY |
|
|
|
|
LDBBSIFR_RPKF_ARGB32,
|
2023-05-23 17:31:34 +02:00
|
|
|
}, {
|
|
|
|
.fourcc = DRM_FORMAT_XRGB8888,
|
|
|
|
.bpp = 32,
|
|
|
|
.lddfr = LDDFR_PKF_ARGB32,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_1 | LDBBSIFR_SWPL | LDBBSIFR_RY |
|
|
|
|
LDBBSIFR_RPKF_ARGB32,
|
2012-04-26 13:53:59 +02:00
|
|
|
}, {
|
|
|
|
.fourcc = DRM_FORMAT_NV12,
|
|
|
|
.bpp = 12,
|
|
|
|
.lddfr = LDDFR_CC | LDDFR_YF_420,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS | LDDDSR_WS | LDDDSR_BS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_1 | LDBBSIFR_SWPL | LDBBSIFR_SWPW |
|
|
|
|
LDBBSIFR_SWPB | LDBBSIFR_CHRR_420,
|
2012-04-26 13:53:59 +02:00
|
|
|
}, {
|
|
|
|
.fourcc = DRM_FORMAT_NV21,
|
|
|
|
.bpp = 12,
|
|
|
|
.lddfr = LDDFR_CC | LDDFR_YF_420,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS | LDDDSR_WS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_1 | LDBBSIFR_SWPL | LDBBSIFR_SWPW |
|
|
|
|
LDBBSIFR_CHRR_420,
|
2012-04-26 13:53:59 +02:00
|
|
|
}, {
|
|
|
|
.fourcc = DRM_FORMAT_NV16,
|
|
|
|
.bpp = 16,
|
|
|
|
.lddfr = LDDFR_CC | LDDFR_YF_422,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS | LDDDSR_WS | LDDDSR_BS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_1 | LDBBSIFR_SWPL | LDBBSIFR_SWPW |
|
|
|
|
LDBBSIFR_SWPB | LDBBSIFR_CHRR_422,
|
2012-04-26 13:53:59 +02:00
|
|
|
}, {
|
|
|
|
.fourcc = DRM_FORMAT_NV61,
|
|
|
|
.bpp = 16,
|
|
|
|
.lddfr = LDDFR_CC | LDDFR_YF_422,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS | LDDDSR_WS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_1 | LDBBSIFR_SWPL | LDBBSIFR_SWPW |
|
|
|
|
LDBBSIFR_CHRR_422,
|
2012-04-26 13:53:59 +02:00
|
|
|
}, {
|
|
|
|
.fourcc = DRM_FORMAT_NV24,
|
|
|
|
.bpp = 24,
|
|
|
|
.lddfr = LDDFR_CC | LDDFR_YF_444,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS | LDDDSR_WS | LDDDSR_BS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_1 | LDBBSIFR_SWPL | LDBBSIFR_SWPW |
|
|
|
|
LDBBSIFR_SWPB | LDBBSIFR_CHRR_444,
|
2012-04-26 13:53:59 +02:00
|
|
|
}, {
|
|
|
|
.fourcc = DRM_FORMAT_NV42,
|
|
|
|
.bpp = 24,
|
|
|
|
.lddfr = LDDFR_CC | LDDFR_YF_444,
|
2023-09-15 10:53:26 +02:00
|
|
|
.ldddsr = LDDDSR_LS | LDDDSR_WS,
|
|
|
|
.ldbbsifr = LDBBSIFR_AL_1 | LDBBSIFR_SWPL | LDBBSIFR_SWPW |
|
|
|
|
LDBBSIFR_CHRR_444,
|
2012-04-26 13:53:59 +02:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct shmob_drm_format_info *shmob_drm_format_info(u32 fourcc)
|
|
|
|
{
|
|
|
|
unsigned int i;
|
|
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(shmob_drm_format_infos); ++i) {
|
|
|
|
if (shmob_drm_format_infos[i].fourcc == fourcc)
|
|
|
|
return &shmob_drm_format_infos[i];
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* -----------------------------------------------------------------------------
|
|
|
|
* Frame buffer
|
|
|
|
*/
|
|
|
|
|
|
|
|
static struct drm_framebuffer *
|
|
|
|
shmob_drm_fb_create(struct drm_device *dev, struct drm_file *file_priv,
|
drm: Pass the format info to .fb_create()
Pass along the format information from the top to .fb_create()
so that we can avoid redundant (and somewhat expensive) lookups
in the drivers.
Done with cocci (with some manual fixups):
@@
identifier func =~ ".*create.*";
identifier dev, file, mode_cmd;
@@
struct drm_framebuffer *func(
struct drm_device *dev,
struct drm_file *file,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd)
{
...
(
- const struct drm_format_info *info = drm_get_format_info(...);
|
- const struct drm_format_info *info;
...
- info = drm_get_format_info(...);
)
<...
- if (!info)
- return ...;
...>
}
@@
identifier func =~ ".*create.*";
identifier dev, file, mode_cmd;
@@
struct drm_framebuffer *func(
struct drm_device *dev,
struct drm_file *file,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd)
{
...
}
@find@
identifier fb_create_func =~ ".*create.*";
identifier dev, file, mode_cmd;
@@
struct drm_framebuffer *fb_create_func(
struct drm_device *dev,
struct drm_file *file,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd);
@@
identifier find.fb_create_func;
expression dev, file, mode_cmd;
@@
fb_create_func(dev, file
+ ,info
,mode_cmd)
@@
expression dev, file, mode_cmd;
@@
drm_gem_fb_create(dev, file
+ ,info
,mode_cmd)
@@
expression dev, file, mode_cmd;
@@
drm_gem_fb_create_with_dirty(dev, file
+ ,info
,mode_cmd)
@@
expression dev, file_priv, mode_cmd;
identifier info, fb;
@@
info = drm_get_format_info(...);
...
fb = dev->mode_config.funcs->fb_create(dev, file_priv
+ ,info
,mode_cmd);
@@
identifier dev, file_priv, mode_cmd;
@@
struct drm_mode_config_funcs {
...
struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
struct drm_file *file_priv,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd);
...
};
v2: Fix kernel docs (Laurent)
Fix commit msg (Geert)
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Dmitry Baryshkov <lumag@kernel.org>
Cc: Sean Paul <sean@poorly.run>
Cc: Marijn Suijten <marijn.suijten@somainline.org>
Cc: Marek Vasut <marex@denx.de>
Cc: Stefan Agner <stefan@agner.ch>
Cc: Lyude Paul <lyude@redhat.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Biju Das <biju.das.jz@bp.renesas.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Andy Yan <andy.yan@rock-chips.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>
Cc: "Maíra Canal" <mcanal@igalia.com>
Cc: Raspberry Pi Kernel Maintenance <kernel-list@raspberrypi.com>
Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Cc: Gurchetan Singh <gurchetansingh@chromium.org>
Cc: Chia-I Wu <olvaffe@gmail.com>
Cc: Zack Rusin <zack.rusin@broadcom.com>
Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Cc: amd-gfx@lists.freedesktop.org
Cc: linux-arm-msm@vger.kernel.org
Cc: freedreno@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: virtualization@lists.linux.dev
Cc: spice-devel@lists.freedesktop.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-tegra@vger.kernel.org
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Acked-by: Liviu Dudau <liviu.dudau@arm.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250701090722.13645-5-ville.syrjala@linux.intel.com
2025-07-01 12:07:07 +03:00
|
|
|
const struct drm_format_info *info,
|
2015-11-11 19:11:29 +02:00
|
|
|
const struct drm_mode_fb_cmd2 *mode_cmd)
|
2012-04-26 13:53:59 +02:00
|
|
|
{
|
|
|
|
const struct shmob_drm_format_info *format;
|
|
|
|
|
|
|
|
format = shmob_drm_format_info(mode_cmd->pixel_format);
|
|
|
|
if (format == NULL) {
|
2023-05-23 17:31:33 +02:00
|
|
|
dev_dbg(dev->dev, "unsupported pixel format %p4cc\n",
|
|
|
|
&mode_cmd->pixel_format);
|
2012-04-26 13:53:59 +02:00
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (mode_cmd->pitches[0] & 7 || mode_cmd->pitches[0] >= 65536) {
|
2012-12-11 14:53:42 +01:00
|
|
|
dev_dbg(dev->dev, "invalid pitch value %u\n",
|
2012-04-26 13:53:59 +02:00
|
|
|
mode_cmd->pitches[0]);
|
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
|
}
|
|
|
|
|
2023-09-15 10:53:26 +02:00
|
|
|
if (shmob_drm_format_is_yuv(format)) {
|
2012-04-26 13:53:59 +02:00
|
|
|
unsigned int chroma_cpp = format->bpp == 24 ? 2 : 1;
|
|
|
|
|
|
|
|
if (mode_cmd->pitches[1] != mode_cmd->pitches[0] * chroma_cpp) {
|
|
|
|
dev_dbg(dev->dev,
|
|
|
|
"luma and chroma pitches do not match\n");
|
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
drm: Pass the format info to .fb_create()
Pass along the format information from the top to .fb_create()
so that we can avoid redundant (and somewhat expensive) lookups
in the drivers.
Done with cocci (with some manual fixups):
@@
identifier func =~ ".*create.*";
identifier dev, file, mode_cmd;
@@
struct drm_framebuffer *func(
struct drm_device *dev,
struct drm_file *file,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd)
{
...
(
- const struct drm_format_info *info = drm_get_format_info(...);
|
- const struct drm_format_info *info;
...
- info = drm_get_format_info(...);
)
<...
- if (!info)
- return ...;
...>
}
@@
identifier func =~ ".*create.*";
identifier dev, file, mode_cmd;
@@
struct drm_framebuffer *func(
struct drm_device *dev,
struct drm_file *file,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd)
{
...
}
@find@
identifier fb_create_func =~ ".*create.*";
identifier dev, file, mode_cmd;
@@
struct drm_framebuffer *fb_create_func(
struct drm_device *dev,
struct drm_file *file,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd);
@@
identifier find.fb_create_func;
expression dev, file, mode_cmd;
@@
fb_create_func(dev, file
+ ,info
,mode_cmd)
@@
expression dev, file, mode_cmd;
@@
drm_gem_fb_create(dev, file
+ ,info
,mode_cmd)
@@
expression dev, file, mode_cmd;
@@
drm_gem_fb_create_with_dirty(dev, file
+ ,info
,mode_cmd)
@@
expression dev, file_priv, mode_cmd;
identifier info, fb;
@@
info = drm_get_format_info(...);
...
fb = dev->mode_config.funcs->fb_create(dev, file_priv
+ ,info
,mode_cmd);
@@
identifier dev, file_priv, mode_cmd;
@@
struct drm_mode_config_funcs {
...
struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
struct drm_file *file_priv,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd);
...
};
v2: Fix kernel docs (Laurent)
Fix commit msg (Geert)
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Dmitry Baryshkov <lumag@kernel.org>
Cc: Sean Paul <sean@poorly.run>
Cc: Marijn Suijten <marijn.suijten@somainline.org>
Cc: Marek Vasut <marex@denx.de>
Cc: Stefan Agner <stefan@agner.ch>
Cc: Lyude Paul <lyude@redhat.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Biju Das <biju.das.jz@bp.renesas.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Andy Yan <andy.yan@rock-chips.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>
Cc: "Maíra Canal" <mcanal@igalia.com>
Cc: Raspberry Pi Kernel Maintenance <kernel-list@raspberrypi.com>
Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Cc: Gurchetan Singh <gurchetansingh@chromium.org>
Cc: Chia-I Wu <olvaffe@gmail.com>
Cc: Zack Rusin <zack.rusin@broadcom.com>
Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Cc: amd-gfx@lists.freedesktop.org
Cc: linux-arm-msm@vger.kernel.org
Cc: freedreno@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: virtualization@lists.linux.dev
Cc: spice-devel@lists.freedesktop.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-tegra@vger.kernel.org
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Acked-by: Liviu Dudau <liviu.dudau@arm.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250701090722.13645-5-ville.syrjala@linux.intel.com
2025-07-01 12:07:07 +03:00
|
|
|
return drm_gem_fb_create(dev, file_priv, info, mode_cmd);
|
2012-04-26 13:53:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static const struct drm_mode_config_funcs shmob_drm_mode_config_funcs = {
|
|
|
|
.fb_create = shmob_drm_fb_create,
|
2023-09-15 10:53:51 +02:00
|
|
|
.atomic_check = drm_atomic_helper_check,
|
|
|
|
.atomic_commit = drm_atomic_helper_commit,
|
2012-04-26 13:53:59 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
int shmob_drm_modeset_init(struct shmob_drm_device *sdev)
|
|
|
|
{
|
2023-09-15 10:53:51 +02:00
|
|
|
struct drm_device *dev = &sdev->ddev;
|
2020-03-23 15:49:38 +01:00
|
|
|
int ret;
|
|
|
|
|
2023-09-15 10:53:51 +02:00
|
|
|
ret = drmm_mode_config_init(dev);
|
2020-03-23 15:49:38 +01:00
|
|
|
if (ret)
|
|
|
|
return ret;
|
2012-04-26 13:53:59 +02:00
|
|
|
|
2023-09-15 10:53:31 +02:00
|
|
|
ret = shmob_drm_crtc_create(sdev);
|
|
|
|
if (ret < 0)
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
ret = shmob_drm_encoder_create(sdev);
|
|
|
|
if (ret < 0)
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
ret = shmob_drm_connector_create(sdev, &sdev->encoder);
|
|
|
|
if (ret < 0)
|
|
|
|
return ret;
|
2012-04-26 13:53:59 +02:00
|
|
|
|
2023-09-15 10:53:51 +02:00
|
|
|
drm_mode_config_reset(dev);
|
|
|
|
|
|
|
|
drm_kms_helper_poll_init(dev);
|
2012-04-26 13:53:59 +02:00
|
|
|
|
2023-09-15 10:53:35 +02:00
|
|
|
sdev->ddev.mode_config.min_width = 0;
|
|
|
|
sdev->ddev.mode_config.min_height = 0;
|
|
|
|
sdev->ddev.mode_config.max_width = 4095;
|
|
|
|
sdev->ddev.mode_config.max_height = 4095;
|
|
|
|
sdev->ddev.mode_config.funcs = &shmob_drm_mode_config_funcs;
|
2012-04-26 13:53:59 +02:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|