1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * shmob_drm.h -- SH Mobile DRM driver 4 * 5 * Copyright (C) 2012 Renesas Corporation 6 * 7 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 8 */ 9 10 #ifndef __SHMOB_DRM_H__ 11 #define __SHMOB_DRM_H__ 12 13 #include <linux/kernel.h> 14 15 #include <drm/drm_mode.h> 16 17 enum shmob_drm_clk_source { 18 SHMOB_DRM_CLK_BUS, 19 SHMOB_DRM_CLK_PERIPHERAL, 20 SHMOB_DRM_CLK_EXTERNAL, 21 }; 22 23 enum shmob_drm_interface { 24 SHMOB_DRM_IFACE_RGB8, /* 24bpp, 8:8:8 */ 25 SHMOB_DRM_IFACE_RGB9, /* 18bpp, 9:9 */ 26 SHMOB_DRM_IFACE_RGB12A, /* 24bpp, 12:12 */ 27 SHMOB_DRM_IFACE_RGB12B, /* 12bpp */ 28 SHMOB_DRM_IFACE_RGB16, /* 16bpp */ 29 SHMOB_DRM_IFACE_RGB18, /* 18bpp */ 30 SHMOB_DRM_IFACE_RGB24, /* 24bpp */ 31 SHMOB_DRM_IFACE_YUV422, /* 16bpp */ 32 SHMOB_DRM_IFACE_SYS8A, /* 24bpp, 8:8:8 */ 33 SHMOB_DRM_IFACE_SYS8B, /* 18bpp, 8:8:2 */ 34 SHMOB_DRM_IFACE_SYS8C, /* 18bpp, 2:8:8 */ 35 SHMOB_DRM_IFACE_SYS8D, /* 16bpp, 8:8 */ 36 SHMOB_DRM_IFACE_SYS9, /* 18bpp, 9:9 */ 37 SHMOB_DRM_IFACE_SYS12, /* 24bpp, 12:12 */ 38 SHMOB_DRM_IFACE_SYS16A, /* 16bpp */ 39 SHMOB_DRM_IFACE_SYS16B, /* 18bpp, 16:2 */ 40 SHMOB_DRM_IFACE_SYS16C, /* 18bpp, 2:16 */ 41 SHMOB_DRM_IFACE_SYS18, /* 18bpp */ 42 SHMOB_DRM_IFACE_SYS24, /* 24bpp */ 43 }; 44 45 struct shmob_drm_backlight_data { 46 const char *name; 47 int max_brightness; 48 int (*get_brightness)(void); 49 int (*set_brightness)(int brightness); 50 }; 51 52 struct shmob_drm_panel_data { 53 unsigned int width_mm; /* Panel width in mm */ 54 unsigned int height_mm; /* Panel height in mm */ 55 struct drm_mode_modeinfo mode; 56 }; 57 58 struct shmob_drm_sys_interface_data { 59 unsigned int read_latch:6; 60 unsigned int read_setup:8; 61 unsigned int read_cycle:8; 62 unsigned int read_strobe:8; 63 unsigned int write_setup:8; 64 unsigned int write_cycle:8; 65 unsigned int write_strobe:8; 66 unsigned int cs_setup:3; 67 unsigned int vsync_active_high:1; 68 unsigned int vsync_dir_input:1; 69 }; 70 71 #define SHMOB_DRM_IFACE_FL_DWPOL (1 << 0) /* Rising edge dot clock data latch */ 72 #define SHMOB_DRM_IFACE_FL_DIPOL (1 << 1) /* Active low display enable */ 73 #define SHMOB_DRM_IFACE_FL_DAPOL (1 << 2) /* Active low display data */ 74 #define SHMOB_DRM_IFACE_FL_HSCNT (1 << 3) /* Disable HSYNC during VBLANK */ 75 #define SHMOB_DRM_IFACE_FL_DWCNT (1 << 4) /* Disable dotclock during blanking */ 76 77 struct shmob_drm_interface_data { 78 enum shmob_drm_interface interface; 79 struct shmob_drm_sys_interface_data sys; 80 unsigned int clk_div; 81 unsigned int flags; 82 }; 83 84 struct shmob_drm_platform_data { 85 enum shmob_drm_clk_source clk_source; 86 struct shmob_drm_interface_data iface; 87 struct shmob_drm_panel_data panel; 88 struct shmob_drm_backlight_data backlight; 89 }; 90 91 #endif /* __SHMOB_DRM_H__ */ 92