xref: /linux/drivers/gpu/drm/sysfb/drm_sysfb_helper.h (revision 01e48e52268fc7f0812654f10beefb63f79a4223)
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