linux/drivers/gpu/drm/panel/panel-simple.c

/*
 * Copyright (C) 2013, NVIDIA Corporation.  All rights reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sub license,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the
 * next paragraph) shall be included in all copies or substantial portions
 * of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

#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 - Describes a simple panel.
 */
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 =;

/* S070PWS19HP-FC21 2017/04/22 */
static const struct drm_display_mode cdtech_s070pws19hp_fc21_mode =;

static const struct panel_desc cdtech_s070pws19hp_fc21 =;

/* S070SWV29HG-DC44 2017/09/21 */
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 =;

/*
 * 800x480 CVT. The panel appears to be quite accepting, at least as far as
 * pixel clocks, but this is the timing that was being used in the Adafruit
 * installation instructions.
 */
static const struct drm_display_mode ontat_yx700wv03_mode =;

/*
 * Specification at:
 * https://www.adafruit.com/images/product-files/2406/c3163.pdf
 */
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();