aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/tegra/drm.h6
-rw-r--r--drivers/gpu/drm/tegra/fb.c34
2 files changed, 15 insertions, 25 deletions
diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
index 7f9810f026e8..f47a60592334 100644
--- a/drivers/gpu/drm/tegra/drm.h
+++ b/drivers/gpu/drm/tegra/drm.h
@@ -29,14 +29,10 @@
29 29
30struct reset_control; 30struct reset_control;
31 31
32struct tegra_fb {
33 struct drm_framebuffer base;
34};
35
36#ifdef CONFIG_DRM_FBDEV_EMULATION 32#ifdef CONFIG_DRM_FBDEV_EMULATION
37struct tegra_fbdev { 33struct tegra_fbdev {
38 struct drm_fb_helper base; 34 struct drm_fb_helper base;
39 struct tegra_fb *fb; 35 struct drm_framebuffer *fb;
40}; 36};
41#endif 37#endif
42 38
diff --git a/drivers/gpu/drm/tegra/fb.c b/drivers/gpu/drm/tegra/fb.c
index 5bc8f968284c..57da9683a713 100644
--- a/drivers/gpu/drm/tegra/fb.c
+++ b/drivers/gpu/drm/tegra/fb.c
@@ -16,11 +16,6 @@
16#include "gem.h" 16#include "gem.h"
17#include <drm/drm_gem_framebuffer_helper.h> 17#include <drm/drm_gem_framebuffer_helper.h>
18 18
19static inline struct tegra_fb *to_tegra_fb(struct drm_framebuffer *fb)
20{
21 return container_of(fb, struct tegra_fb, base);
22}
23
24#ifdef CONFIG_DRM_FBDEV_EMULATION 19#ifdef CONFIG_DRM_FBDEV_EMULATION
25static inline struct tegra_fbdev *to_tegra_fbdev(struct drm_fb_helper *helper) 20static inline struct tegra_fbdev *to_tegra_fbdev(struct drm_fb_helper *helper)
26{ 21{
@@ -99,7 +94,6 @@ int tegra_fb_get_tiling(struct drm_framebuffer *framebuffer,
99 94
100static void tegra_fb_destroy(struct drm_framebuffer *framebuffer) 95static void tegra_fb_destroy(struct drm_framebuffer *framebuffer)
101{ 96{
102 struct tegra_fb *fb = to_tegra_fb(framebuffer);
103 unsigned int i; 97 unsigned int i;
104 98
105 for (i = 0; i < framebuffer->format->num_planes; i++) { 99 for (i = 0; i < framebuffer->format->num_planes; i++) {
@@ -114,7 +108,7 @@ static void tegra_fb_destroy(struct drm_framebuffer *framebuffer)
114 } 108 }
115 109
116 drm_framebuffer_cleanup(framebuffer); 110 drm_framebuffer_cleanup(framebuffer);
117 kfree(fb); 111 kfree(framebuffer);
118} 112}
119 113
120static const struct drm_framebuffer_funcs tegra_fb_funcs = { 114static const struct drm_framebuffer_funcs tegra_fb_funcs = {
@@ -122,12 +116,12 @@ static const struct drm_framebuffer_funcs tegra_fb_funcs = {
122 .create_handle = drm_gem_fb_create_handle, 116 .create_handle = drm_gem_fb_create_handle,
123}; 117};
124 118
125static struct tegra_fb *tegra_fb_alloc(struct drm_device *drm, 119static struct drm_framebuffer *tegra_fb_alloc(struct drm_device *drm,
126 const struct drm_mode_fb_cmd2 *mode_cmd, 120 const struct drm_mode_fb_cmd2 *mode_cmd,
127 struct tegra_bo **planes, 121 struct tegra_bo **planes,
128 unsigned int num_planes) 122 unsigned int num_planes)
129{ 123{
130 struct tegra_fb *fb; 124 struct drm_framebuffer *fb;
131 unsigned int i; 125 unsigned int i;
132 int err; 126 int err;
133 127
@@ -135,12 +129,12 @@ static struct tegra_fb *tegra_fb_alloc(struct drm_device *drm,
135 if (!fb) 129 if (!fb)
136 return ERR_PTR(-ENOMEM); 130 return ERR_PTR(-ENOMEM);
137 131
138 drm_helper_mode_fill_fb_struct(drm, &fb->base, mode_cmd); 132 drm_helper_mode_fill_fb_struct(drm, fb, mode_cmd);
139 133
140 for (i = 0; i < fb->base.format->num_planes; i++) 134 for (i = 0; i < fb->format->num_planes; i++)
141 fb->base.obj[i] = &planes[i]->gem; 135 fb->obj[i] = &planes[i]->gem;
142 136
143 err = drm_framebuffer_init(drm, &fb->base, &tegra_fb_funcs); 137 err = drm_framebuffer_init(drm, fb, &tegra_fb_funcs);
144 if (err < 0) { 138 if (err < 0) {
145 dev_err(drm->dev, "failed to initialize framebuffer: %d\n", 139 dev_err(drm->dev, "failed to initialize framebuffer: %d\n",
146 err); 140 err);
@@ -158,7 +152,7 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
158 unsigned int hsub, vsub, i; 152 unsigned int hsub, vsub, i;
159 struct tegra_bo *planes[4]; 153 struct tegra_bo *planes[4];
160 struct drm_gem_object *gem; 154 struct drm_gem_object *gem;
161 struct tegra_fb *fb; 155 struct drm_framebuffer *fb;
162 int err; 156 int err;
163 157
164 hsub = drm_format_horz_chroma_subsampling(cmd->pixel_format); 158 hsub = drm_format_horz_chroma_subsampling(cmd->pixel_format);
@@ -194,7 +188,7 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
194 goto unreference; 188 goto unreference;
195 } 189 }
196 190
197 return &fb->base; 191 return fb;
198 192
199unreference: 193unreference:
200 while (i--) 194 while (i--)
@@ -275,7 +269,7 @@ static int tegra_fbdev_probe(struct drm_fb_helper *helper,
275 return PTR_ERR(fbdev->fb); 269 return PTR_ERR(fbdev->fb);
276 } 270 }
277 271
278 fb = &fbdev->fb->base; 272 fb = fbdev->fb;
279 helper->fb = fb; 273 helper->fb = fb;
280 helper->fbdev = info; 274 helper->fbdev = info;
281 275
@@ -376,7 +370,7 @@ static void tegra_fbdev_exit(struct tegra_fbdev *fbdev)
376 drm_fb_helper_unregister_fbi(&fbdev->base); 370 drm_fb_helper_unregister_fbi(&fbdev->base);
377 371
378 if (fbdev->fb) 372 if (fbdev->fb)
379 drm_framebuffer_remove(&fbdev->fb->base); 373 drm_framebuffer_remove(fbdev->fb);
380 374
381 drm_fb_helper_fini(&fbdev->base); 375 drm_fb_helper_fini(&fbdev->base);
382 tegra_fbdev_free(fbdev); 376 tegra_fbdev_free(fbdev);