diff mbox

[3/6] drm/panel: simple: Add A10 EVB 5 inch panel support

Message ID 20160831081817.5191-4-maxime.ripard@free-electrons.com
State New
Headers show

Commit Message

Maxime Ripard Aug. 31, 2016, 8:18 a.m. UTC
The A10-EVB from Allwinner comes with an unidentified panel, with the only
mark on the PCB being A10-SUB-EVB-5LCD.

Add timings to simple panel to handle it.

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
 drivers/gpu/drm/panel/panel-simple.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

Comments

Chen-Yu Tsai Sept. 5, 2016, 2 p.m. UTC | #1
On Wed, Aug 31, 2016 at 4:18 PM, Maxime Ripard
<maxime.ripard@free-electrons.com> wrote:
> The A10-EVB from Allwinner comes with an unidentified panel, with the only
> mark on the PCB being A10-SUB-EVB-5LCD.
>
> Add timings to simple panel to handle it.
>
> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
> ---
>  drivers/gpu/drm/panel/panel-simple.c | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
>
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index 85143d1b9b31..be371b053aab 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -386,6 +386,29 @@ static void panel_simple_shutdown(struct device *dev)
>         panel_simple_disable(&panel->base);
>  }
>
> +static const struct drm_display_mode allwinner_a10_sub_evb_5lcd_mode = {
> +       .clock = 33000,
> +       .hdisplay = 800,
> +       .hsync_start = 800 + 209,
> +       .hsync_end = 800 + 209 + 1,
> +       .htotal = 800 + 209 + 1 + 45,
> +       .vdisplay = 480,
> +       .vsync_start = 480 + 22,
> +       .vsync_end = 480 + 22 + 1,
> +       .vtotal = 480 + 22 + 1 + 22,
> +       .vrefresh = 60,

I assume the numbers came from the fex file? Allwinner LCD timing numbers
aren't very precise. This seems to yield a refresh rate of 58.x Hz.
The dot clock can go below MHz resolution, so it should be possible
to set it to a more proper clock rate here.

ChenYu

> +};
> +
> +static const struct panel_desc allwinner_a10_sub_evb_5lcd = {
> +       .modes = &allwinner_a10_sub_evb_5lcd_mode,
> +       .num_modes = 1,
> +       .size = {
> +               .width = 110,
> +               .height = 67,
> +       },
> +       .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
> +};
> +
>  static const struct drm_display_mode ampire_am800480r3tmqwa1h_mode = {
>         .clock = 33333,
>         .hdisplay = 800,
> @@ -1515,6 +1538,9 @@ static const struct panel_desc urt_umsh_8596md_parallel = {
>
>  static const struct of_device_id platform_of_match[] = {
>         {
> +               .compatible = "allwinner,sun4i-a10-sub-evb-5-lcd",
> +               .data = &allwinner_a10_sub_evb_5lcd,
> +       }, {
>                 .compatible = "ampire,am800480r3tmqwa1h",
>                 .data = &ampire_am800480r3tmqwa1h,
>         }, {
> --
> 2.9.2
>
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Maxime Ripard Sept. 9, 2016, 2:34 p.m. UTC | #2
Hi,

On Mon, Sep 05, 2016 at 10:00:01PM +0800, Chen-Yu Tsai wrote:
> On Wed, Aug 31, 2016 at 4:18 PM, Maxime Ripard
> <maxime.ripard@free-electrons.com> wrote:
> > The A10-EVB from Allwinner comes with an unidentified panel, with the only
> > mark on the PCB being A10-SUB-EVB-5LCD.
> >
> > Add timings to simple panel to handle it.
> >
> > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
> > ---
> >  drivers/gpu/drm/panel/panel-simple.c | 26 ++++++++++++++++++++++++++
> >  1 file changed, 26 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> > index 85143d1b9b31..be371b053aab 100644
> > --- a/drivers/gpu/drm/panel/panel-simple.c
> > +++ b/drivers/gpu/drm/panel/panel-simple.c
> > @@ -386,6 +386,29 @@ static void panel_simple_shutdown(struct device *dev)
> >         panel_simple_disable(&panel->base);
> >  }
> >
> > +static const struct drm_display_mode allwinner_a10_sub_evb_5lcd_mode = {
> > +       .clock = 33000,
> > +       .hdisplay = 800,
> > +       .hsync_start = 800 + 209,
> > +       .hsync_end = 800 + 209 + 1,
> > +       .htotal = 800 + 209 + 1 + 45,
> > +       .vdisplay = 480,
> > +       .vsync_start = 480 + 22,
> > +       .vsync_end = 480 + 22 + 1,
> > +       .vtotal = 480 + 22 + 1 + 22,
> > +       .vrefresh = 60,
> 
> I assume the numbers came from the fex file? Allwinner LCD timing numbers
> aren't very precise. This seems to yield a refresh rate of 58.x Hz.
> The dot clock can go below MHz resolution, so it should be possible
> to set it to a more proper clock rate here.

Indeed.

Upon closer inspection, it seems (from the ribbon) that the display is
an hannstar, but there's no screen reference anywhere.

By looking into it using the available references, the date of
production found on that panel, and so on, it seems like it is an
HSD050IDW1-A, whose timings do not seem to far off. But it's pure
speculation at this point.

Maxime
diff mbox

Patch

diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 85143d1b9b31..be371b053aab 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -386,6 +386,29 @@  static void panel_simple_shutdown(struct device *dev)
 	panel_simple_disable(&panel->base);
 }
 
+static const struct drm_display_mode allwinner_a10_sub_evb_5lcd_mode = {
+	.clock = 33000,
+	.hdisplay = 800,
+	.hsync_start = 800 + 209,
+	.hsync_end = 800 + 209 + 1,
+	.htotal = 800 + 209 + 1 + 45,
+	.vdisplay = 480,
+	.vsync_start = 480 + 22,
+	.vsync_end = 480 + 22 + 1,
+	.vtotal = 480 + 22 + 1 + 22,
+	.vrefresh = 60,
+};
+
+static const struct panel_desc allwinner_a10_sub_evb_5lcd = {
+	.modes = &allwinner_a10_sub_evb_5lcd_mode,
+	.num_modes = 1,
+	.size = {
+		.width = 110,
+		.height = 67,
+	},
+	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
+};
+
 static const struct drm_display_mode ampire_am800480r3tmqwa1h_mode = {
 	.clock = 33333,
 	.hdisplay = 800,
@@ -1515,6 +1538,9 @@  static const struct panel_desc urt_umsh_8596md_parallel = {
 
 static const struct of_device_id platform_of_match[] = {
 	{
+		.compatible = "allwinner,sun4i-a10-sub-evb-5-lcd",
+		.data = &allwinner_a10_sub_evb_5lcd,
+	}, {
 		.compatible = "ampire,am800480r3tmqwa1h",
 		.data = &ampire_am800480r3tmqwa1h,
 	}, {