1b5626f6fSThomas Zimmermann /* SPDX-License-Identifier: GPL-2.0-only */ 2b5626f6fSThomas Zimmermann 3b5626f6fSThomas Zimmermann #ifndef DRM_SYSFB_HELPER_H 4b5626f6fSThomas Zimmermann #define DRM_SYSFB_HELPER_H 5b5626f6fSThomas Zimmermann 6b5626f6fSThomas Zimmermann #include <linux/container_of.h> 7b5626f6fSThomas Zimmermann #include <linux/iosys-map.h> 8b5626f6fSThomas Zimmermann 9b5626f6fSThomas Zimmermann #include <drm/drm_device.h> 10b5626f6fSThomas Zimmermann #include <drm/drm_modes.h> 11b5626f6fSThomas Zimmermann 12b5626f6fSThomas Zimmermann struct drm_format_info; 13b5626f6fSThomas Zimmermann 14333376e9SThomas Zimmermann struct drm_display_mode drm_sysfb_mode(unsigned int width, 15333376e9SThomas Zimmermann unsigned int height, 16333376e9SThomas Zimmermann unsigned int width_mm, 17333376e9SThomas Zimmermann unsigned int height_mm); 18333376e9SThomas Zimmermann 19b5626f6fSThomas Zimmermann /* 20b5626f6fSThomas Zimmermann * Device 21b5626f6fSThomas Zimmermann */ 22b5626f6fSThomas Zimmermann 23b5626f6fSThomas Zimmermann struct drm_sysfb_device { 24b5626f6fSThomas Zimmermann struct drm_device dev; 25b5626f6fSThomas Zimmermann 26b5626f6fSThomas Zimmermann /* hardware settings */ 27b5626f6fSThomas Zimmermann struct drm_display_mode fb_mode; 28b5626f6fSThomas Zimmermann const struct drm_format_info *fb_format; 29b5626f6fSThomas Zimmermann unsigned int fb_pitch; 30b5626f6fSThomas Zimmermann 31b5626f6fSThomas Zimmermann /* hardware-framebuffer kernel address */ 32b5626f6fSThomas Zimmermann struct iosys_map fb_addr; 33b5626f6fSThomas Zimmermann }; 34b5626f6fSThomas Zimmermann 35b5626f6fSThomas Zimmermann static inline struct drm_sysfb_device *to_drm_sysfb_device(struct drm_device *dev) 36b5626f6fSThomas Zimmermann { 37b5626f6fSThomas Zimmermann return container_of(dev, struct drm_sysfb_device, dev); 38b5626f6fSThomas Zimmermann } 39b5626f6fSThomas Zimmermann 40559d105fSThomas Zimmermann /* 41*01e48e52SThomas Zimmermann * Connector 42*01e48e52SThomas Zimmermann */ 43*01e48e52SThomas Zimmermann 44*01e48e52SThomas Zimmermann int drm_sysfb_connector_helper_get_modes(struct drm_connector *connector); 45*01e48e52SThomas Zimmermann 46*01e48e52SThomas Zimmermann #define DRM_SYSFB_CONNECTOR_HELPER_FUNCS \ 47*01e48e52SThomas Zimmermann .get_modes = drm_sysfb_connector_helper_get_modes 48*01e48e52SThomas Zimmermann 49*01e48e52SThomas Zimmermann #define DRM_SYSFB_CONNECTOR_FUNCS \ 50*01e48e52SThomas Zimmermann .reset = drm_atomic_helper_connector_reset, \ 51*01e48e52SThomas Zimmermann .fill_modes = drm_helper_probe_single_connector_modes, \ 52*01e48e52SThomas Zimmermann .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, \ 53*01e48e52SThomas Zimmermann .atomic_destroy_state = drm_atomic_helper_connector_destroy_state 54*01e48e52SThomas Zimmermann 55*01e48e52SThomas Zimmermann /* 56559d105fSThomas Zimmermann * Mode config 57559d105fSThomas Zimmermann */ 58559d105fSThomas Zimmermann 59559d105fSThomas Zimmermann #define DRM_SYSFB_MODE_CONFIG_FUNCS \ 60559d105fSThomas Zimmermann .fb_create = drm_gem_fb_create_with_dirty, \ 61559d105fSThomas Zimmermann .atomic_check = drm_atomic_helper_check, \ 62559d105fSThomas Zimmermann .atomic_commit = drm_atomic_helper_commit 63559d105fSThomas Zimmermann 64b5626f6fSThomas Zimmermann #endif 65