| .. | .. |
|---|
| 4 | 4 | * Author: Benjamin Gaignard <benjamin.gaignard@st.com> for STMicroelectronics. |
|---|
| 5 | 5 | */ |
|---|
| 6 | 6 | |
|---|
| 7 | | -#include <drm/drmP.h> |
|---|
| 8 | | - |
|---|
| 9 | 7 | #include <linux/component.h> |
|---|
| 10 | | -#include <linux/debugfs.h> |
|---|
| 8 | +#include <linux/dma-mapping.h> |
|---|
| 11 | 9 | #include <linux/kernel.h> |
|---|
| 12 | 10 | #include <linux/module.h> |
|---|
| 13 | 11 | #include <linux/of_platform.h> |
|---|
| 14 | 12 | |
|---|
| 15 | 13 | #include <drm/drm_atomic.h> |
|---|
| 16 | 14 | #include <drm/drm_atomic_helper.h> |
|---|
| 17 | | -#include <drm/drm_crtc_helper.h> |
|---|
| 15 | +#include <drm/drm_debugfs.h> |
|---|
| 16 | +#include <drm/drm_drv.h> |
|---|
| 17 | +#include <drm/drm_fb_cma_helper.h> |
|---|
| 18 | +#include <drm/drm_fb_helper.h> |
|---|
| 18 | 19 | #include <drm/drm_gem_cma_helper.h> |
|---|
| 19 | 20 | #include <drm/drm_gem_framebuffer_helper.h> |
|---|
| 20 | | -#include <drm/drm_fb_helper.h> |
|---|
| 21 | | -#include <drm/drm_fb_cma_helper.h> |
|---|
| 22 | 21 | #include <drm/drm_of.h> |
|---|
| 22 | +#include <drm/drm_probe_helper.h> |
|---|
| 23 | 23 | |
|---|
| 24 | | -#include "sti_crtc.h" |
|---|
| 25 | 24 | #include "sti_drv.h" |
|---|
| 26 | 25 | #include "sti_plane.h" |
|---|
| 27 | 26 | |
|---|
| .. | .. |
|---|
| 93 | 92 | {"fps_get", sti_drm_fps_dbg_show, 0}, |
|---|
| 94 | 93 | }; |
|---|
| 95 | 94 | |
|---|
| 96 | | -static int sti_drm_dbg_init(struct drm_minor *minor) |
|---|
| 95 | +static void sti_drm_dbg_init(struct drm_minor *minor) |
|---|
| 97 | 96 | { |
|---|
| 98 | | - struct dentry *dentry; |
|---|
| 99 | | - int ret; |
|---|
| 97 | + drm_debugfs_create_files(sti_drm_dbg_list, |
|---|
| 98 | + ARRAY_SIZE(sti_drm_dbg_list), |
|---|
| 99 | + minor->debugfs_root, minor); |
|---|
| 100 | 100 | |
|---|
| 101 | | - ret = drm_debugfs_create_files(sti_drm_dbg_list, |
|---|
| 102 | | - ARRAY_SIZE(sti_drm_dbg_list), |
|---|
| 103 | | - minor->debugfs_root, minor); |
|---|
| 104 | | - if (ret) |
|---|
| 105 | | - goto err; |
|---|
| 106 | | - |
|---|
| 107 | | - dentry = debugfs_create_file("fps_show", S_IRUGO | S_IWUSR, |
|---|
| 108 | | - minor->debugfs_root, minor->dev, |
|---|
| 109 | | - &sti_drm_fps_fops); |
|---|
| 110 | | - if (!dentry) { |
|---|
| 111 | | - ret = -ENOMEM; |
|---|
| 112 | | - goto err; |
|---|
| 113 | | - } |
|---|
| 101 | + debugfs_create_file("fps_show", S_IRUGO | S_IWUSR, minor->debugfs_root, |
|---|
| 102 | + minor->dev, &sti_drm_fps_fops); |
|---|
| 114 | 103 | |
|---|
| 115 | 104 | DRM_INFO("%s: debugfs installed\n", DRIVER_NAME); |
|---|
| 116 | | - return 0; |
|---|
| 117 | | -err: |
|---|
| 118 | | - DRM_ERROR("%s: cannot install debugfs\n", DRIVER_NAME); |
|---|
| 119 | | - return ret; |
|---|
| 120 | 105 | } |
|---|
| 121 | 106 | |
|---|
| 122 | 107 | static const struct drm_mode_config_funcs sti_mode_config_funcs = { |
|---|
| 123 | 108 | .fb_create = drm_gem_fb_create, |
|---|
| 124 | | - .output_poll_changed = drm_fb_helper_output_poll_changed, |
|---|
| 125 | 109 | .atomic_check = drm_atomic_helper_check, |
|---|
| 126 | 110 | .atomic_commit = drm_atomic_helper_commit, |
|---|
| 127 | 111 | }; |
|---|
| .. | .. |
|---|
| 147 | 131 | DEFINE_DRM_GEM_CMA_FOPS(sti_driver_fops); |
|---|
| 148 | 132 | |
|---|
| 149 | 133 | static struct drm_driver sti_driver = { |
|---|
| 150 | | - .driver_features = DRIVER_MODESET | |
|---|
| 151 | | - DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC, |
|---|
| 152 | | - .gem_free_object_unlocked = drm_gem_cma_free_object, |
|---|
| 153 | | - .gem_vm_ops = &drm_gem_cma_vm_ops, |
|---|
| 154 | | - .dumb_create = drm_gem_cma_dumb_create, |
|---|
| 134 | + .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC, |
|---|
| 155 | 135 | .fops = &sti_driver_fops, |
|---|
| 156 | | - |
|---|
| 157 | | - .enable_vblank = sti_crtc_enable_vblank, |
|---|
| 158 | | - .disable_vblank = sti_crtc_disable_vblank, |
|---|
| 159 | | - |
|---|
| 160 | | - .prime_handle_to_fd = drm_gem_prime_handle_to_fd, |
|---|
| 161 | | - .prime_fd_to_handle = drm_gem_prime_fd_to_handle, |
|---|
| 162 | | - .gem_prime_export = drm_gem_prime_export, |
|---|
| 163 | | - .gem_prime_import = drm_gem_prime_import, |
|---|
| 164 | | - .gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table, |
|---|
| 165 | | - .gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table, |
|---|
| 166 | | - .gem_prime_vmap = drm_gem_cma_prime_vmap, |
|---|
| 167 | | - .gem_prime_vunmap = drm_gem_cma_prime_vunmap, |
|---|
| 168 | | - .gem_prime_mmap = drm_gem_cma_prime_mmap, |
|---|
| 136 | + DRM_GEM_CMA_DRIVER_OPS, |
|---|
| 169 | 137 | |
|---|
| 170 | 138 | .debugfs_init = sti_drm_dbg_init, |
|---|
| 171 | 139 | |
|---|
| .. | .. |
|---|
| 206 | 174 | { |
|---|
| 207 | 175 | struct sti_private *private = ddev->dev_private; |
|---|
| 208 | 176 | |
|---|
| 209 | | - drm_fb_cma_fbdev_fini(ddev); |
|---|
| 210 | 177 | drm_kms_helper_poll_fini(ddev); |
|---|
| 178 | + drm_atomic_helper_shutdown(ddev); |
|---|
| 179 | + drm_mode_config_cleanup(ddev); |
|---|
| 211 | 180 | component_unbind_all(ddev->dev, ddev); |
|---|
| 212 | 181 | kfree(private); |
|---|
| 213 | 182 | ddev->dev_private = NULL; |
|---|
| .. | .. |
|---|
| 232 | 201 | |
|---|
| 233 | 202 | ret = drm_dev_register(ddev, 0); |
|---|
| 234 | 203 | if (ret) |
|---|
| 235 | | - goto err_register; |
|---|
| 204 | + goto err_cleanup; |
|---|
| 236 | 205 | |
|---|
| 237 | 206 | drm_mode_config_reset(ddev); |
|---|
| 238 | 207 | |
|---|
| 239 | | - if (ddev->mode_config.num_connector) { |
|---|
| 240 | | - ret = drm_fb_cma_fbdev_init(ddev, 32, 0); |
|---|
| 241 | | - if (ret) |
|---|
| 242 | | - DRM_DEBUG_DRIVER("Warning: fails to create fbdev\n"); |
|---|
| 243 | | - } |
|---|
| 208 | + drm_fbdev_generic_setup(ddev, 32); |
|---|
| 244 | 209 | |
|---|
| 245 | 210 | return 0; |
|---|
| 246 | 211 | |
|---|
| 247 | | -err_register: |
|---|
| 248 | | - drm_mode_config_cleanup(ddev); |
|---|
| 249 | 212 | err_cleanup: |
|---|
| 250 | 213 | sti_cleanup(ddev); |
|---|
| 251 | 214 | err_drm_dev_put: |
|---|