drm/tegra: Move tegra_drm_mode_funcs to the core
This structure will be extended using non-framebuffer related callbacks in subsequent patches, so it should move to a more central location. Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
parent
86df256f30
commit
f991421490
|
@ -24,6 +24,13 @@ struct tegra_drm_file {
|
||||||
struct list_head contexts;
|
struct list_head contexts;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct drm_mode_config_funcs tegra_drm_mode_funcs = {
|
||||||
|
.fb_create = tegra_fb_create,
|
||||||
|
#ifdef CONFIG_DRM_TEGRA_FBDEV
|
||||||
|
.output_poll_changed = tegra_fb_output_poll_changed,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
static int tegra_drm_load(struct drm_device *drm, unsigned long flags)
|
static int tegra_drm_load(struct drm_device *drm, unsigned long flags)
|
||||||
{
|
{
|
||||||
struct host1x_device *device = to_host1x_device(drm->dev);
|
struct host1x_device *device = to_host1x_device(drm->dev);
|
||||||
|
@ -52,6 +59,14 @@ static int tegra_drm_load(struct drm_device *drm, unsigned long flags)
|
||||||
|
|
||||||
drm_mode_config_init(drm);
|
drm_mode_config_init(drm);
|
||||||
|
|
||||||
|
drm->mode_config.min_width = 0;
|
||||||
|
drm->mode_config.min_height = 0;
|
||||||
|
|
||||||
|
drm->mode_config.max_width = 4096;
|
||||||
|
drm->mode_config.max_height = 4096;
|
||||||
|
|
||||||
|
drm->mode_config.funcs = &tegra_drm_mode_funcs;
|
||||||
|
|
||||||
err = tegra_drm_fb_prepare(drm);
|
err = tegra_drm_fb_prepare(drm);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto config;
|
goto config;
|
||||||
|
|
|
@ -292,12 +292,16 @@ struct tegra_bo *tegra_fb_get_plane(struct drm_framebuffer *framebuffer,
|
||||||
bool tegra_fb_is_bottom_up(struct drm_framebuffer *framebuffer);
|
bool tegra_fb_is_bottom_up(struct drm_framebuffer *framebuffer);
|
||||||
int tegra_fb_get_tiling(struct drm_framebuffer *framebuffer,
|
int tegra_fb_get_tiling(struct drm_framebuffer *framebuffer,
|
||||||
struct tegra_bo_tiling *tiling);
|
struct tegra_bo_tiling *tiling);
|
||||||
|
struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
|
||||||
|
struct drm_file *file,
|
||||||
|
struct drm_mode_fb_cmd2 *cmd);
|
||||||
int tegra_drm_fb_prepare(struct drm_device *drm);
|
int tegra_drm_fb_prepare(struct drm_device *drm);
|
||||||
void tegra_drm_fb_free(struct drm_device *drm);
|
void tegra_drm_fb_free(struct drm_device *drm);
|
||||||
int tegra_drm_fb_init(struct drm_device *drm);
|
int tegra_drm_fb_init(struct drm_device *drm);
|
||||||
void tegra_drm_fb_exit(struct drm_device *drm);
|
void tegra_drm_fb_exit(struct drm_device *drm);
|
||||||
#ifdef CONFIG_DRM_TEGRA_FBDEV
|
#ifdef CONFIG_DRM_TEGRA_FBDEV
|
||||||
void tegra_fbdev_restore_mode(struct tegra_fbdev *fbdev);
|
void tegra_fbdev_restore_mode(struct tegra_fbdev *fbdev);
|
||||||
|
void tegra_fb_output_poll_changed(struct drm_device *drm);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern struct platform_driver tegra_dc_driver;
|
extern struct platform_driver tegra_dc_driver;
|
||||||
|
|
|
@ -129,9 +129,9 @@ static struct tegra_fb *tegra_fb_alloc(struct drm_device *drm,
|
||||||
return fb;
|
return fb;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
|
struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
|
||||||
struct drm_file *file,
|
struct drm_file *file,
|
||||||
struct drm_mode_fb_cmd2 *cmd)
|
struct drm_mode_fb_cmd2 *cmd)
|
||||||
{
|
{
|
||||||
unsigned int hsub, vsub, i;
|
unsigned int hsub, vsub, i;
|
||||||
struct tegra_bo *planes[4];
|
struct tegra_bo *planes[4];
|
||||||
|
@ -377,7 +377,7 @@ void tegra_fbdev_restore_mode(struct tegra_fbdev *fbdev)
|
||||||
drm_fb_helper_restore_fbdev_mode_unlocked(&fbdev->base);
|
drm_fb_helper_restore_fbdev_mode_unlocked(&fbdev->base);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tegra_fb_output_poll_changed(struct drm_device *drm)
|
void tegra_fb_output_poll_changed(struct drm_device *drm)
|
||||||
{
|
{
|
||||||
struct tegra_drm *tegra = drm->dev_private;
|
struct tegra_drm *tegra = drm->dev_private;
|
||||||
|
|
||||||
|
@ -386,28 +386,11 @@ static void tegra_fb_output_poll_changed(struct drm_device *drm)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const struct drm_mode_config_funcs tegra_drm_mode_funcs = {
|
|
||||||
.fb_create = tegra_fb_create,
|
|
||||||
#ifdef CONFIG_DRM_TEGRA_FBDEV
|
|
||||||
.output_poll_changed = tegra_fb_output_poll_changed,
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
int tegra_drm_fb_prepare(struct drm_device *drm)
|
int tegra_drm_fb_prepare(struct drm_device *drm)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_DRM_TEGRA_FBDEV
|
#ifdef CONFIG_DRM_TEGRA_FBDEV
|
||||||
struct tegra_drm *tegra = drm->dev_private;
|
struct tegra_drm *tegra = drm->dev_private;
|
||||||
#endif
|
|
||||||
|
|
||||||
drm->mode_config.min_width = 0;
|
|
||||||
drm->mode_config.min_height = 0;
|
|
||||||
|
|
||||||
drm->mode_config.max_width = 4096;
|
|
||||||
drm->mode_config.max_height = 4096;
|
|
||||||
|
|
||||||
drm->mode_config.funcs = &tegra_drm_mode_funcs;
|
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_TEGRA_FBDEV
|
|
||||||
tegra->fbdev = tegra_fbdev_create(drm);
|
tegra->fbdev = tegra_fbdev_create(drm);
|
||||||
if (IS_ERR(tegra->fbdev))
|
if (IS_ERR(tegra->fbdev))
|
||||||
return PTR_ERR(tegra->fbdev);
|
return PTR_ERR(tegra->fbdev);
|
||||||
|
|
Loading…
Reference in New Issue