#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/media-bus-format.h>
#include <linux/module.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regulator/consumer.h>
#include <video/display_timing.h>
#include <video/of_display_timing.h>
#include <video/videomode.h>
#include <drm/drm_crtc.h>
#include <drm/drm_device.h>
#include <drm/drm_edid.h>
#include <drm/drm_mipi_dsi.h>
#include <drm/drm_panel.h>
#include <drm/drm_of.h>
struct panel_desc { … };
struct panel_simple { … };
static inline struct panel_simple *to_panel_simple(struct drm_panel *panel)
{ … }
static unsigned int panel_simple_get_timings_modes(struct panel_simple *panel,
struct drm_connector *connector)
{ … }
static unsigned int panel_simple_get_display_modes(struct panel_simple *panel,
struct drm_connector *connector)
{ … }
static int panel_simple_get_non_edid_modes(struct panel_simple *panel,
struct drm_connector *connector)
{ … }
static void panel_simple_wait(ktime_t start_ktime, unsigned int min_ms)
{ … }
static int panel_simple_disable(struct drm_panel *panel)
{ … }
static int panel_simple_suspend(struct device *dev)
{ … }
static int panel_simple_unprepare(struct drm_panel *panel)
{ … }
static int panel_simple_resume(struct device *dev)
{ … }
static int panel_simple_prepare(struct drm_panel *panel)
{ … }
static int panel_simple_enable(struct drm_panel *panel)
{ … }
static int panel_simple_get_modes(struct drm_panel *panel,
struct drm_connector *connector)
{ … }
static int panel_simple_get_timings(struct drm_panel *panel,
unsigned int num_timings,
struct display_timing *timings)
{ … }
static enum drm_panel_orientation panel_simple_get_orientation(struct drm_panel *panel)
{ … }
static const struct drm_panel_funcs panel_simple_funcs = …;
static struct panel_desc panel_dpi;
static int panel_dpi_probe(struct device *dev,
struct panel_simple *panel)
{ … }
#define PANEL_SIMPLE_BOUNDS_CHECK(to_check, bounds, field) …
static void panel_simple_parse_panel_timing_node(struct device *dev,
struct panel_simple *panel,
const struct display_timing *ot)
{ … }
static int panel_simple_override_nondefault_lvds_datamapping(struct device *dev,
struct panel_simple *panel)
{ … }
static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
{ … }
static void panel_simple_shutdown(struct device *dev)
{ … }
static void panel_simple_remove(struct device *dev)
{ … }
static const struct drm_display_mode ampire_am_1280800n3tzqw_t00h_mode = …;
static const struct panel_desc ampire_am_1280800n3tzqw_t00h = …;
static const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode = …;
static const struct panel_desc ampire_am_480272h3tmqw_t01h = …;
static const struct drm_display_mode ampire_am800480r3tmqwa1h_mode = …;
static const struct display_timing ampire_am_800480l1tmqw_t00h_timing = …;
static const struct panel_desc ampire_am_800480l1tmqw_t00h = …;
static const struct panel_desc ampire_am800480r3tmqwa1h = …;
static const struct display_timing ampire_am800600p5tmqw_tb8h_timing = …;
static const struct panel_desc ampire_am800600p5tmqwtb8h = …;
static const struct display_timing santek_st0700i5y_rbslw_f_timing = …;
static const struct panel_desc armadeus_st0700_adapt = …;
static const struct drm_display_mode auo_b101aw03_mode = …;
static const struct panel_desc auo_b101aw03 = …;
static const struct drm_display_mode auo_b101xtn01_mode = …;
static const struct panel_desc auo_b101xtn01 = …;
static const struct drm_display_mode auo_b116xw03_mode = …;
static const struct panel_desc auo_b116xw03 = …;
static const struct display_timing auo_g070vvn01_timings = …;
static const struct panel_desc auo_g070vvn01 = …;
static const struct drm_display_mode auo_g101evn010_mode = …;
static const struct panel_desc auo_g101evn010 = …;
static const struct drm_display_mode auo_g104sn02_mode = …;
static const struct panel_desc auo_g104sn02 = …;
static const struct drm_display_mode auo_g104stn01_mode = …;
static const struct panel_desc auo_g104stn01 = …;
static const struct display_timing auo_g121ean01_timing = …;
static const struct panel_desc auo_g121ean01 = …;
static const struct display_timing auo_g133han01_timings = …;
static const struct panel_desc auo_g133han01 = …;
static const struct display_timing auo_g156han04_timings = …;
static const struct panel_desc auo_g156han04 = …;
static const struct drm_display_mode auo_g156xtn01_mode = …;
static const struct panel_desc auo_g156xtn01 = …;
static const struct display_timing auo_g185han01_timings = …;
static const struct panel_desc auo_g185han01 = …;
static const struct display_timing auo_g190ean01_timings = …;
static const struct panel_desc auo_g190ean01 = …;
static const struct display_timing auo_p320hvn03_timings = …;
static const struct panel_desc auo_p320hvn03 = …;
static const struct drm_display_mode auo_t215hvn01_mode = …;
static const struct panel_desc auo_t215hvn01 = …;
static const struct drm_display_mode avic_tm070ddh03_mode = …;
static const struct panel_desc avic_tm070ddh03 = …;
static const struct drm_display_mode bananapi_s070wv20_ct16_mode = …;
static const struct panel_desc bananapi_s070wv20_ct16 = …;
static const struct drm_display_mode boe_bp101wx1_100_mode = …;
static const struct panel_desc boe_bp082wx1_100 = …;
static const struct panel_desc boe_bp101wx1_100 = …;
static const struct display_timing boe_ev121wxm_n10_1850_timing = …;
static const struct panel_desc boe_ev121wxm_n10_1850 = …;
static const struct drm_display_mode boe_hv070wsa_mode = …;
static const struct panel_desc boe_hv070wsa = …;
static const struct display_timing cct_cmt430b19n00_timing = …;
static const struct panel_desc cct_cmt430b19n00 = …;
static const struct drm_display_mode cdtech_s043wq26h_ct7_mode = …;
static const struct panel_desc cdtech_s043wq26h_ct7 = …;
static const struct drm_display_mode cdtech_s070pws19hp_fc21_mode = …;
static const struct panel_desc cdtech_s070pws19hp_fc21 = …;
static const struct drm_display_mode cdtech_s070swv29hg_dc44_mode = …;
static const struct panel_desc cdtech_s070swv29hg_dc44 = …;
static const struct drm_display_mode cdtech_s070wv95_ct16_mode = …;
static const struct panel_desc cdtech_s070wv95_ct16 = …;
static const struct display_timing chefree_ch101olhlwh_002_timing = …;
static const struct panel_desc chefree_ch101olhlwh_002 = …;
static const struct drm_display_mode chunghwa_claa070wp03xg_mode = …;
static const struct panel_desc chunghwa_claa070wp03xg = …;
static const struct drm_display_mode chunghwa_claa101wa01a_mode = …;
static const struct panel_desc chunghwa_claa101wa01a = …;
static const struct drm_display_mode chunghwa_claa101wb01_mode = …;
static const struct panel_desc chunghwa_claa101wb01 = …;
static const struct display_timing dataimage_fg040346dsswbg04_timing = …;
static const struct panel_desc dataimage_fg040346dsswbg04 = …;
static const struct display_timing dataimage_fg1001l0dsswmg01_timing = …;
static const struct panel_desc dataimage_fg1001l0dsswmg01 = …;
static const struct drm_display_mode dataimage_scf0700c48ggu18_mode = …;
static const struct panel_desc dataimage_scf0700c48ggu18 = …;
static const struct display_timing dlc_dlc0700yzg_1_timing = …;
static const struct panel_desc dlc_dlc0700yzg_1 = …;
static const struct display_timing dlc_dlc1010gig_timing = …;
static const struct panel_desc dlc_dlc1010gig = …;
static const struct drm_display_mode edt_et035012dm6_mode = …;
static const struct panel_desc edt_et035012dm6 = …;
static const struct drm_display_mode edt_etm0350g0dh6_mode = …;
static const struct panel_desc edt_etm0350g0dh6 = …;
static const struct drm_display_mode edt_etm043080dh6gp_mode = …;
static const struct panel_desc edt_etm043080dh6gp = …;
static const struct drm_display_mode edt_etm0430g0dh6_mode = …;
static const struct panel_desc edt_etm0430g0dh6 = …;
static const struct drm_display_mode edt_et057090dhu_mode = …;
static const struct panel_desc edt_et057090dhu = …;
static const struct drm_display_mode edt_etm0700g0dh6_mode = …;
static const struct panel_desc edt_etm0700g0dh6 = …;
static const struct panel_desc edt_etm0700g0bdh6 = …;
static const struct display_timing edt_etml0700y5dha_timing = …;
static const struct panel_desc edt_etml0700y5dha = …;
static const struct display_timing edt_etml1010g3dra_timing = …;
static const struct panel_desc edt_etml1010g3dra = …;
static const struct drm_display_mode edt_etmv570g2dhu_mode = …;
static const struct panel_desc edt_etmv570g2dhu = …;
static const struct display_timing eink_vb3300_kca_timing = …;
static const struct panel_desc eink_vb3300_kca = …;
static const struct display_timing evervision_vgg644804_timing = …;
static const struct panel_desc evervision_vgg644804 = …;
static const struct display_timing evervision_vgg804821_timing = …;
static const struct panel_desc evervision_vgg804821 = …;
static const struct drm_display_mode foxlink_fl500wvr00_a0t_mode = …;
static const struct panel_desc foxlink_fl500wvr00_a0t = …;
static const struct drm_display_mode frida_frd350h54004_modes[] = …;
static const struct panel_desc frida_frd350h54004 = …;
static const struct drm_display_mode friendlyarm_hd702e_mode = …;
static const struct panel_desc friendlyarm_hd702e = …;
static const struct drm_display_mode giantplus_gpg482739qs5_mode = …;
static const struct panel_desc giantplus_gpg482739qs5 = …;
static const struct display_timing giantplus_gpm940b0_timing = …;
static const struct panel_desc giantplus_gpm940b0 = …;
static const struct display_timing hannstar_hsd070pww1_timing = …;
static const struct panel_desc hannstar_hsd070pww1 = …;
static const struct display_timing hannstar_hsd100pxn1_timing = …;
static const struct panel_desc hannstar_hsd100pxn1 = …;
static const struct display_timing hannstar_hsd101pww2_timing = …;
static const struct panel_desc hannstar_hsd101pww2 = …;
static const struct drm_display_mode hitachi_tx23d38vm0caa_mode = …;
static const struct panel_desc hitachi_tx23d38vm0caa = …;
static const struct drm_display_mode innolux_at043tn24_mode = …;
static const struct panel_desc innolux_at043tn24 = …;
static const struct drm_display_mode innolux_at070tn92_mode = …;
static const struct panel_desc innolux_at070tn92 = …;
static const struct display_timing innolux_g070ace_l01_timing = …;
static const struct panel_desc innolux_g070ace_l01 = …;
static const struct display_timing innolux_g070y2_l01_timing = …;
static const struct panel_desc innolux_g070y2_l01 = …;
static const struct drm_display_mode innolux_g070y2_t02_mode = …;
static const struct panel_desc innolux_g070y2_t02 = …;
static const struct display_timing innolux_g101ice_l01_timing = …;
static const struct panel_desc innolux_g101ice_l01 = …;
static const struct display_timing innolux_g121i1_l01_timing = …;
static const struct panel_desc innolux_g121i1_l01 = …;
static const struct display_timing innolux_g121x1_l03_timings = …;
static const struct panel_desc innolux_g121x1_l03 = …;
static const struct panel_desc innolux_g121xce_l01 = …;
static const struct display_timing innolux_g156hce_l01_timings = …;
static const struct panel_desc innolux_g156hce_l01 = …;
static const struct drm_display_mode innolux_n156bge_l21_mode = …;
static const struct panel_desc innolux_n156bge_l21 = …;
static const struct drm_display_mode innolux_zj070na_01p_mode = …;
static const struct panel_desc innolux_zj070na_01p = …;
static const struct display_timing koe_tx14d24vm1bpa_timing = …;
static const struct panel_desc koe_tx14d24vm1bpa = …;
static const struct display_timing koe_tx26d202vm0bwa_timing = …;
static const struct panel_desc koe_tx26d202vm0bwa = …;
static const struct display_timing koe_tx31d200vm0baa_timing = …;
static const struct panel_desc koe_tx31d200vm0baa = …;
static const struct display_timing kyo_tcg121xglp_timing = …;
static const struct panel_desc kyo_tcg121xglp = …;
static const struct drm_display_mode lemaker_bl035_rgb_002_mode = …;
static const struct panel_desc lemaker_bl035_rgb_002 = …;
static const struct display_timing lg_lb070wv8_timing = …;
static const struct panel_desc lg_lb070wv8 = …;
static const struct drm_display_mode lincolntech_lcd185_101ct_mode = …;
static const struct panel_desc lincolntech_lcd185_101ct = …;
static const struct display_timing logictechno_lt161010_2nh_timing = …;
static const struct panel_desc logictechno_lt161010_2nh = …;
static const struct display_timing logictechno_lt170410_2whc_timing = …;
static const struct panel_desc logictechno_lt170410_2whc = …;
static const struct drm_display_mode logictechno_lttd800480070_l2rt_mode = …;
static const struct panel_desc logictechno_lttd800480070_l2rt = …;
static const struct drm_display_mode logictechno_lttd800480070_l6wh_rt_mode = …;
static const struct panel_desc logictechno_lttd800480070_l6wh_rt = …;
static const struct drm_display_mode logicpd_type_28_mode = …;
static const struct panel_desc logicpd_type_28 = …;
static const struct drm_display_mode microtips_mf_101hiebcaf0_c_mode = …;
static const struct panel_desc microtips_mf_101hiebcaf0_c = …;
static const struct drm_display_mode microtips_mf_103hieb0ga0_mode = …;
static const struct panel_desc microtips_mf_103hieb0ga0 = …;
static const struct drm_display_mode mitsubishi_aa070mc01_mode = …;
static const struct panel_desc mitsubishi_aa070mc01 = …;
static const struct drm_display_mode mitsubishi_aa084xe01_mode = …;
static const struct panel_desc mitsubishi_aa084xe01 = …;
static const struct display_timing multi_inno_mi0700s4t_6_timing = …;
static const struct panel_desc multi_inno_mi0700s4t_6 = …;
static const struct display_timing multi_inno_mi0800ft_9_timing = …;
static const struct panel_desc multi_inno_mi0800ft_9 = …;
static const struct display_timing multi_inno_mi1010ait_1cp_timing = …;
static const struct panel_desc multi_inno_mi1010ait_1cp = …;
static const struct display_timing nec_nl12880bc20_05_timing = …;
static const struct panel_desc nec_nl12880bc20_05 = …;
static const struct drm_display_mode nec_nl4827hc19_05b_mode = …;
static const struct panel_desc nec_nl4827hc19_05b = …;
static const struct drm_display_mode netron_dy_e231732_mode = …;
static const struct panel_desc netron_dy_e231732 = …;
static const struct drm_display_mode newhaven_nhd_43_480272ef_atxl_mode = …;
static const struct panel_desc newhaven_nhd_43_480272ef_atxl = …;
static const struct display_timing nlt_nl192108ac18_02d_timing = …;
static const struct panel_desc nlt_nl192108ac18_02d = …;
static const struct drm_display_mode nvd_9128_mode = …;
static const struct panel_desc nvd_9128 = …;
static const struct display_timing okaya_rs800480t_7x0gp_timing = …;
static const struct panel_desc okaya_rs800480t_7x0gp = …;
static const struct drm_display_mode olimex_lcd_olinuxino_43ts_mode = …;
static const struct panel_desc olimex_lcd_olinuxino_43ts = …;
static const struct drm_display_mode ontat_yx700wv03_mode = …;
static const struct panel_desc ontat_yx700wv03 = …;
static const struct drm_display_mode ortustech_com37h3m_mode = …;
static const struct panel_desc ortustech_com37h3m = …;
static const struct drm_display_mode ortustech_com43h4m85ulc_mode = …;
static const struct panel_desc ortustech_com43h4m85ulc = …;
static const struct drm_display_mode osddisplays_osd070t1718_19ts_mode = …;
static const struct panel_desc osddisplays_osd070t1718_19ts = …;
static const struct drm_display_mode pda_91_00156_a0_mode = …;
static const struct panel_desc pda_91_00156_a0 = …;
static const struct drm_display_mode powertip_ph128800t006_zhc01_mode = …;
static const struct panel_desc powertip_ph128800t006_zhc01 = …;
static const struct drm_display_mode powertip_ph800480t013_idf02_mode = …;
static const struct panel_desc powertip_ph800480t013_idf02 = …;
static const struct drm_display_mode primeview_pm070wl4_mode = …;
static const struct panel_desc primeview_pm070wl4 = …;
static const struct drm_display_mode qd43003c0_40_mode = …;
static const struct panel_desc qd43003c0_40 = …;
static const struct drm_display_mode qishenglong_gopher2b_lcd_modes[] = …;
static const struct panel_desc qishenglong_gopher2b_lcd = …;
static const struct display_timing rocktech_rk043fn48h_timing = …;
static const struct panel_desc rocktech_rk043fn48h = …;
static const struct display_timing rocktech_rk070er9427_timing = …;
static const struct panel_desc rocktech_rk070er9427 = …;
static const struct drm_display_mode rocktech_rk101ii01d_ct_mode = …;
static const struct panel_desc rocktech_rk101ii01d_ct = …;
static const struct display_timing samsung_ltl101al01_timing = …;
static const struct panel_desc samsung_ltl101al01 = …;
static const struct drm_display_mode samsung_ltn101nt05_mode = …;
static const struct panel_desc samsung_ltn101nt05 = …;
static const struct display_timing satoz_sat050at40h12r2_timing = …;
static const struct panel_desc satoz_sat050at40h12r2 = …;
static const struct drm_display_mode sharp_lq070y3dg3b_mode = …;
static const struct panel_desc sharp_lq070y3dg3b = …;
static const struct drm_display_mode sharp_lq035q7db03_mode = …;
static const struct panel_desc sharp_lq035q7db03 = …;
static const struct display_timing sharp_lq101k1ly04_timing = …;
static const struct panel_desc sharp_lq101k1ly04 = …;
static const struct drm_display_mode sharp_ls020b1dd01d_modes[] = …;
static const struct panel_desc sharp_ls020b1dd01d = …;
static const struct drm_display_mode shelly_sca07010_bfn_lnn_mode = …;
static const struct panel_desc shelly_sca07010_bfn_lnn = …;
static const struct drm_display_mode starry_kr070pe2t_mode = …;
static const struct panel_desc starry_kr070pe2t = …;
static const struct display_timing startek_kd070wvfpa_mode = …;
static const struct panel_desc startek_kd070wvfpa = …;
static const struct display_timing tsd_tst043015cmhx_timing = …;
static const struct panel_desc tsd_tst043015cmhx = …;
static const struct drm_display_mode tfc_s9700rtwv43tr_01b_mode = …;
static const struct panel_desc tfc_s9700rtwv43tr_01b = …;
static const struct display_timing tianma_tm070jdhg30_timing = …;
static const struct panel_desc tianma_tm070jdhg30 = …;
static const struct panel_desc tianma_tm070jvhg33 = …;
static const struct display_timing tianma_tm070rvhg71_timing = …;
static const struct panel_desc tianma_tm070rvhg71 = …;
static const struct drm_display_mode ti_nspire_cx_lcd_mode[] = …;
static const struct panel_desc ti_nspire_cx_lcd_panel = …;
static const struct drm_display_mode ti_nspire_classic_lcd_mode[] = …;
static const struct panel_desc ti_nspire_classic_lcd_panel = …;
static const struct drm_display_mode toshiba_lt089ac29000_mode = …;
static const struct panel_desc toshiba_lt089ac29000 = …;
static const struct drm_display_mode tpk_f07a_0102_mode = …;
static const struct panel_desc tpk_f07a_0102 = …;
static const struct drm_display_mode tpk_f10a_0102_mode = …;
static const struct panel_desc tpk_f10a_0102 = …;
static const struct display_timing urt_umsh_8596md_timing = …;
static const struct panel_desc urt_umsh_8596md_lvds = …;
static const struct panel_desc urt_umsh_8596md_parallel = …;
static const struct drm_display_mode vivax_tpc9150_panel_mode = …;
static const struct panel_desc vivax_tpc9150_panel = …;
static const struct drm_display_mode vl050_8048nt_c01_mode = …;
static const struct panel_desc vl050_8048nt_c01 = …;
static const struct drm_display_mode winstar_wf35ltiacd_mode = …;
static const struct panel_desc winstar_wf35ltiacd = …;
static const struct drm_display_mode yes_optoelectronics_ytc700tlag_05_201c_mode = …;
static const struct panel_desc yes_optoelectronics_ytc700tlag_05_201c = …;
static const struct drm_display_mode arm_rtsm_mode[] = …;
static const struct panel_desc arm_rtsm = …;
static const struct of_device_id platform_of_match[] = …;
MODULE_DEVICE_TABLE(of, platform_of_match);
static int panel_simple_platform_probe(struct platform_device *pdev)
{ … }
static void panel_simple_platform_remove(struct platform_device *pdev)
{ … }
static void panel_simple_platform_shutdown(struct platform_device *pdev)
{ … }
static const struct dev_pm_ops panel_simple_pm_ops = …;
static struct platform_driver panel_simple_platform_driver = …;
struct panel_desc_dsi { … };
static const struct drm_display_mode auo_b080uan01_mode = …;
static const struct panel_desc_dsi auo_b080uan01 = …;
static const struct drm_display_mode boe_tv080wum_nl0_mode = …;
static const struct panel_desc_dsi boe_tv080wum_nl0 = …;
static const struct drm_display_mode lg_ld070wx3_sl01_mode = …;
static const struct panel_desc_dsi lg_ld070wx3_sl01 = …;
static const struct drm_display_mode lg_lh500wx1_sd03_mode = …;
static const struct panel_desc_dsi lg_lh500wx1_sd03 = …;
static const struct drm_display_mode panasonic_vvx10f004b00_mode = …;
static const struct panel_desc_dsi panasonic_vvx10f004b00 = …;
static const struct drm_display_mode lg_acx467akm_7_mode = …;
static const struct panel_desc_dsi lg_acx467akm_7 = …;
static const struct drm_display_mode osd101t2045_53ts_mode = …;
static const struct panel_desc_dsi osd101t2045_53ts = …;
static const struct of_device_id dsi_of_match[] = …;
MODULE_DEVICE_TABLE(of, dsi_of_match);
static int panel_simple_dsi_probe(struct mipi_dsi_device *dsi)
{ … }
static void panel_simple_dsi_remove(struct mipi_dsi_device *dsi)
{ … }
static void panel_simple_dsi_shutdown(struct mipi_dsi_device *dsi)
{ … }
static struct mipi_dsi_driver panel_simple_dsi_driver = …;
static int __init panel_simple_init(void)
{ … }
module_init(…) …;
static void __exit panel_simple_exit(void)
{ … }
module_exit(panel_simple_exit);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;