diff options
Diffstat (limited to 'drivers/gpu/drm/panel/panel-simple.c')
| -rw-r--r-- | drivers/gpu/drm/panel/panel-simple.c | 123 | 
1 files changed, 103 insertions, 20 deletions
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 20e3df1c59d4..dcb6d0b6ced0 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -151,7 +151,7 @@ struct panel_simple {  	struct gpio_desc *enable_gpio; -	struct edid *edid; +	const struct drm_edid *drm_edid;  	struct drm_display_mode override_mode; @@ -309,8 +309,8 @@ static int panel_simple_suspend(struct device *dev)  	regulator_disable(p->supply);  	p->unprepared_time = ktime_get_boottime(); -	kfree(p->edid); -	p->edid = NULL; +	drm_edid_free(p->drm_edid); +	p->drm_edid = NULL;  	return 0;  } @@ -399,11 +399,12 @@ static int panel_simple_get_modes(struct drm_panel *panel,  	if (p->ddc) {  		pm_runtime_get_sync(panel->dev); -		if (!p->edid) -			p->edid = drm_get_edid(connector, p->ddc); +		if (!p->drm_edid) +			p->drm_edid = drm_edid_read_ddc(connector, p->ddc); -		if (p->edid) -			num += drm_add_edid_modes(connector, p->edid); +		drm_edid_connector_update(connector, p->drm_edid); + +		num += drm_edid_connector_add_modes(connector);  		pm_runtime_mark_last_busy(panel->dev);  		pm_runtime_put_autosuspend(panel->dev); @@ -1457,6 +1458,32 @@ static const struct panel_desc boe_hv070wsa = {  	.connector_type = DRM_MODE_CONNECTOR_LVDS,  }; +static const struct display_timing cct_cmt430b19n00_timing = { +	.pixelclock = { 8000000, 9000000, 12000000 }, +	.hactive = { 480, 480, 480 }, +	.hfront_porch = { 2, 8, 75 }, +	.hback_porch = { 3, 43, 43 }, +	.hsync_len = { 2, 4, 75 }, +	.vactive = { 272, 272, 272 }, +	.vfront_porch = { 2, 8, 37 }, +	.vback_porch = { 2, 12, 12 }, +	.vsync_len = { 2, 4, 37 }, +	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW +}; + +static const struct panel_desc cct_cmt430b19n00 = { +	.timings = &cct_cmt430b19n00_timing, +	.num_timings = 1, +	.bpc = 8, +	.size = { +		.width = 95, +		.height = 53, +	}, +	.bus_format = MEDIA_BUS_FMT_RGB888_1X24, +	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE, +	.connector_type = DRM_MODE_CONNECTOR_DPI, +}; +  static const struct drm_display_mode cdtech_s043wq26h_ct7_mode = {  	.clock = 9000,  	.hdisplay = 480, @@ -2565,22 +2592,22 @@ static const struct panel_desc innolux_g121i1_l01 = {  	.connector_type = DRM_MODE_CONNECTOR_LVDS,  }; -static const struct drm_display_mode innolux_g121x1_l03_mode = { -	.clock = 65000, -	.hdisplay = 1024, -	.hsync_start = 1024 + 0, -	.hsync_end = 1024 + 1, -	.htotal = 1024 + 0 + 1 + 320, -	.vdisplay = 768, -	.vsync_start = 768 + 38, -	.vsync_end = 768 + 38 + 1, -	.vtotal = 768 + 38 + 1 + 0, -	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, +static const struct display_timing innolux_g121x1_l03_timings = { +	.pixelclock = { 57500000, 64900000, 74400000 }, +	.hactive = { 1024, 1024, 1024 }, +	.hfront_porch = { 90, 140, 190 }, +	.hback_porch = { 90, 140, 190 }, +	.hsync_len = { 36, 40, 60 }, +	.vactive = { 768, 768, 768 }, +	.vfront_porch = { 2, 15, 30 }, +	.vback_porch = { 2, 15, 30 }, +	.vsync_len = { 2, 8, 20 }, +	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW,  };  static const struct panel_desc innolux_g121x1_l03 = { -	.modes = &innolux_g121x1_l03_mode, -	.num_modes = 1, +	.timings = &innolux_g121x1_l03_timings, +	.num_timings = 1,  	.bpc = 6,  	.size = {  		.width = 246, @@ -2591,6 +2618,27 @@ static const struct panel_desc innolux_g121x1_l03 = {  		.unprepare = 200,  		.disable = 400,  	}, +	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, +	.bus_flags = DRM_BUS_FLAG_DE_HIGH, +	.connector_type = DRM_MODE_CONNECTOR_LVDS, +}; + +static const struct panel_desc innolux_g121xce_l01 = { +	.timings = &innolux_g121x1_l03_timings, +	.num_timings = 1, +	.bpc = 8, +	.size = { +		.width = 246, +		.height = 185, +	}, +	.delay = { +		.enable = 200, +		.unprepare = 200, +		.disable = 400, +	}, +	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, +	.bus_flags = DRM_BUS_FLAG_DE_HIGH, +	.connector_type = DRM_MODE_CONNECTOR_LVDS,  };  static const struct display_timing innolux_g156hce_l01_timings = { @@ -3465,6 +3513,32 @@ static const struct panel_desc pda_91_00156_a0  = {  	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,  }; +static const struct drm_display_mode powertip_ph128800t006_zhc01_mode = { +	.clock = 66500, +	.hdisplay = 1280, +	.hsync_start = 1280 + 12, +	.hsync_end = 1280 + 12 + 20, +	.htotal = 1280 + 12 + 20 + 56, +	.vdisplay = 800, +	.vsync_start = 800 + 1, +	.vsync_end = 800 + 1 + 3, +	.vtotal = 800 + 1 + 3 + 20, +	.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC, +}; + +static const struct panel_desc powertip_ph128800t006_zhc01 = { +	.modes = &powertip_ph128800t006_zhc01_mode, +	.num_modes = 1, +	.bpc = 8, +	.size = { +		.width = 216, +		.height = 135, +	}, +	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, +	.bus_flags = DRM_BUS_FLAG_DE_HIGH, +	.connector_type = DRM_MODE_CONNECTOR_LVDS, +}; +  static const struct drm_display_mode powertip_ph800480t013_idf02_mode = {  	.clock = 24750,  	.hdisplay = 800, @@ -4403,6 +4477,9 @@ static const struct of_device_id platform_of_match[] = {  		.compatible = "boe,hv070wsa-100",  		.data = &boe_hv070wsa  	}, { +		.compatible = "cct,cmt430b19n00", +		.data = &cct_cmt430b19n00, +	}, {  		.compatible = "cdtech,s043wq26h-ct7",  		.data = &cdtech_s043wq26h_ct7,  	}, { @@ -4538,6 +4615,9 @@ static const struct of_device_id platform_of_match[] = {  		.compatible = "innolux,g121x1-l03",  		.data = &innolux_g121x1_l03,  	}, { +		.compatible = "innolux,g121xce-l01", +		.data = &innolux_g121xce_l01, +	}, {  		.compatible = "innolux,g156hce-l01",  		.data = &innolux_g156hce_l01,  	}, { @@ -4640,6 +4720,9 @@ static const struct of_device_id platform_of_match[] = {  		.compatible = "pda,91-00156-a0",  		.data = &pda_91_00156_a0,  	}, { +		.compatible = "powertip,ph128800t006-zhc01", +		.data = &powertip_ph128800t006_zhc01, +	}, {  		.compatible = "powertip,ph800480t013-idf02",  		.data = &powertip_ph800480t013_idf02,  	}, {  |