From: Tomi Valkeinen <tomi.valkeinen@ti.com>
To: Steffen Trumtrar <s.trumtrar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Cc: linux-fbdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
David Airlie <airlied-cv59FeDIM0c@public.gmane.org>,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
Florian Tobias Schandinat
<FlorianSchandinat-Mmb7MZpHnFY@public.gmane.org>,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
Laurent Pinchart
<laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>,
kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
Guennady Liakhovetski
<g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>,
linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v12 1/6] video: add display_timing and videomode
Date: Wed, 21 Nov 2012 11:37:08 +0000 [thread overview]
Message-ID: <50ACBCE4.60701@ti.com> (raw)
In-Reply-To: <1353426896-6045-2-git-send-email-s.trumtrar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 6621 bytes --]
Hi,
On 2012-11-20 17:54, Steffen Trumtrar wrote:
> Add display_timing structure and the according helper functions. This allows
> the description of a display via its supported timing parameters.
>
> Every timing parameter can be specified as a single value or a range
> <min typ max>.
>
> Also, add helper functions to convert from display timings to a generic videomode
> structure. This videomode can then be converted to the corresponding subsystem
> mode representation (e.g. fb_videomode).
Sorry for reviewing this so late.
One thing I'd like to see is some explanation of the structs involved.
For example, in this patch you present structs videomode, display_timing
and display_timings without giving any hint what they represent.
I'm not asking for you to write a long documentation, but perhaps the
header files could include a few lines of comments above the structs,
explaining the idea.
> +void display_timings_release(struct display_timings *disp)
> +{
> + if (disp->timings) {
> + unsigned int i;
> +
> + for (i = 0; i < disp->num_timings; i++)
> + kfree(disp->timings[i]);
> + kfree(disp->timings);
> + }
> + kfree(disp);
> +}
> +EXPORT_SYMBOL_GPL(display_timings_release);
Perhaps this will become clearer after reading the following patches,
but it feels a bit odd to add a release function, without anything in
this patch that would actually allocate the timings.
> diff --git a/drivers/video/videomode.c b/drivers/video/videomode.c
> new file mode 100644
> index 0000000..e24f879
> --- /dev/null
> +++ b/drivers/video/videomode.c
> @@ -0,0 +1,46 @@
> +/*
> + * generic display timing functions
> + *
> + * Copyright (c) 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>, Pengutronix
> + *
> + * This file is released under the GPLv2
> + */
> +
> +#include <linux/export.h>
> +#include <linux/errno.h>
> +#include <linux/display_timing.h>
> +#include <linux/kernel.h>
> +#include <linux/videomode.h>
> +
> +int videomode_from_timing(const struct display_timings *disp,
> + struct videomode *vm, unsigned int index)
> +{
> + struct display_timing *dt;
> +
> + dt = display_timings_get(disp, index);
> + if (!dt)
> + return -EINVAL;
> +
> + vm->pixelclock = display_timing_get_value(&dt->pixelclock, 0);
> + vm->hactive = display_timing_get_value(&dt->hactive, 0);
> + vm->hfront_porch = display_timing_get_value(&dt->hfront_porch, 0);
> + vm->hback_porch = display_timing_get_value(&dt->hback_porch, 0);
> + vm->hsync_len = display_timing_get_value(&dt->hsync_len, 0);
> +
> + vm->vactive = display_timing_get_value(&dt->vactive, 0);
> + vm->vfront_porch = display_timing_get_value(&dt->vfront_porch, 0);
> + vm->vback_porch = display_timing_get_value(&dt->vback_porch, 0);
> + vm->vsync_len = display_timing_get_value(&dt->vsync_len, 0);
Shouldn't all these calls get the typical value, with index 1?
> +
> + vm->vah = dt->vsync_pol_active;
> + vm->hah = dt->hsync_pol_active;
> + vm->de = dt->de_pol_active;
> + vm->pixelclk_pol = dt->pixelclk_pol;
> +
> + vm->interlaced = dt->interlaced;
> + vm->doublescan = dt->doublescan;
> +
> + return 0;
> +}
> +
> +EXPORT_SYMBOL_GPL(videomode_from_timing);
> diff --git a/include/linux/display_timing.h b/include/linux/display_timing.h
> new file mode 100644
> index 0000000..d5bf03f
> --- /dev/null
> +++ b/include/linux/display_timing.h
> @@ -0,0 +1,70 @@
> +/*
> + * Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
> + *
> + * description of display timings
> + *
> + * This file is released under the GPLv2
> + */
> +
> +#ifndef __LINUX_DISPLAY_TIMINGS_H
> +#define __LINUX_DISPLAY_TIMINGS_H
> +
> +#include <linux/types.h>
What is this needed for? u32? I don't see it defined in types.h
> +
> +struct timing_entry {
> + u32 min;
> + u32 typ;
> + u32 max;
> +};
> +
> +struct display_timing {
> + struct timing_entry pixelclock;
> +
> + struct timing_entry hactive;
> + struct timing_entry hfront_porch;
> + struct timing_entry hback_porch;
> + struct timing_entry hsync_len;
> +
> + struct timing_entry vactive;
> + struct timing_entry vfront_porch;
> + struct timing_entry vback_porch;
> + struct timing_entry vsync_len;
> +
> + unsigned int vsync_pol_active;
> + unsigned int hsync_pol_active;
> + unsigned int de_pol_active;
> + unsigned int pixelclk_pol;
> + bool interlaced;
> + bool doublescan;
> +};
> +
> +struct display_timings {
> + unsigned int num_timings;
> + unsigned int native_mode;
> +
> + struct display_timing **timings;
> +};
> +
> +/*
> + * placeholder function until ranges are really needed
> + * the index parameter should then be used to select one of [min typ max]
> + */
> +static inline u32 display_timing_get_value(const struct timing_entry *te,
> + unsigned int index)
> +{
> + return te->typ;
> +}
Why did you opt for a placeholder here? It feels trivial to me to have
support to get the min/typ/max value properly.
> +static inline struct display_timing *display_timings_get(const struct
> + display_timings *disp,
> + unsigned int index)
> +{
> + if (disp->num_timings > index)
> + return disp->timings[index];
> + else
> + return NULL;
> +}
> +
> +void display_timings_release(struct display_timings *disp);
> +
> +#endif
> diff --git a/include/linux/videomode.h b/include/linux/videomode.h
> new file mode 100644
> index 0000000..5d3e796
> --- /dev/null
> +++ b/include/linux/videomode.h
> @@ -0,0 +1,40 @@
> +/*
> + * Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
> + *
> + * generic videomode description
> + *
> + * This file is released under the GPLv2
> + */
> +
> +#ifndef __LINUX_VIDEOMODE_H
> +#define __LINUX_VIDEOMODE_H
> +
> +#include <linux/display_timing.h>
This is not needed, just add:
struct display_timings;
> +struct videomode {
> + u32 pixelclock;
> + u32 refreshrate;
> +
> + u32 hactive;
> + u32 hfront_porch;
> + u32 hback_porch;
> + u32 hsync_len;
> +
> + u32 vactive;
> + u32 vfront_porch;
> + u32 vback_porch;
> + u32 vsync_len;
> +
> + u32 hah;
> + u32 vah;
> + u32 de;
> + u32 pixelclk_pol;
> +
> + bool interlaced;
> + bool doublescan;
> +};
> +
> +int videomode_from_timing(const struct display_timings *disp,
> + struct videomode *vm, unsigned int index);
> +
Are this and the few other functions above meant to be used from
drivers? If so, some explanation of the parameters here would be nice.
If they are just framework internal, they don't probably need that.
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 897 bytes --]
next prev parent reply other threads:[~2012-11-21 11:37 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-20 15:54 [PATCH v12 0/6] of: add display helper Steffen Trumtrar
2012-11-20 15:54 ` [PATCH v12 1/6] video: add display_timing and videomode Steffen Trumtrar
[not found] ` <1353426896-6045-2-git-send-email-s.trumtrar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-11-21 11:37 ` Tomi Valkeinen [this message]
2012-11-21 16:11 ` Steffen Trumtrar
[not found] ` <20121121161103.GA12657-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-11-21 16:42 ` Tomi Valkeinen
2012-11-20 15:54 ` [PATCH v12 2/6] video: add of helper for videomode Steffen Trumtrar
[not found] ` <1353426896-6045-3-git-send-email-s.trumtrar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-11-21 10:12 ` Manjunathappa, Prakash
2012-11-21 11:48 ` Steffen Trumtrar
2012-11-21 11:52 ` Thierry Reding
2012-11-21 15:03 ` Rob Herring
[not found] ` <50ACED4A.5040806-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-11-21 15:13 ` Thierry Reding
2012-11-22 9:10 ` Steffen Trumtrar
2012-11-21 12:22 ` Tomi Valkeinen
[not found] ` <1353426896-6045-1-git-send-email-s.trumtrar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-11-20 15:54 ` [PATCH v12 3/6] fbmon: add videomode helpers Steffen Trumtrar
2012-11-21 10:09 ` Manjunathappa, Prakash
2012-11-21 11:21 ` Leela Krishna Amudala
2012-11-21 11:58 ` Steffen Trumtrar
2012-11-21 12:27 ` Tomi Valkeinen
[not found] ` <1353426896-6045-4-git-send-email-s.trumtrar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-11-21 22:02 ` Laurent Pinchart
2012-11-22 6:20 ` Sascha Hauer
[not found] ` <20121122062000.GW10369-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-11-22 8:50 ` Laurent Pinchart
2012-11-22 8:53 ` Sascha Hauer
[not found] ` <20121122085342.GB10369-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-11-22 9:07 ` Laurent Pinchart
2012-11-22 11:23 ` Steffen Trumtrar
2012-11-20 15:54 ` [PATCH v12 6/6] drm_modes: add of_videomode helpers Steffen Trumtrar
[not found] ` <1353426896-6045-7-git-send-email-s.trumtrar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-11-21 12:52 ` Tomi Valkeinen
2012-11-20 15:54 ` [PATCH v12 4/6] fbmon: " Steffen Trumtrar
[not found] ` <1353426896-6045-5-git-send-email-s.trumtrar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2012-11-21 12:49 ` Tomi Valkeinen
2012-11-21 13:08 ` Laurent Pinchart
2012-11-21 16:24 ` Steffen Trumtrar
2012-11-21 16:47 ` Tomi Valkeinen
2012-11-20 15:54 ` [PATCH v12 5/6] drm_modes: add videomode helpers Steffen Trumtrar
2012-11-21 12:50 ` Tomi Valkeinen
2012-11-20 16:13 ` [PATCH v12 0/6] of: add display helper Laurent Pinchart
2012-11-20 18:11 ` Robert Schwebel
2012-11-20 19:35 ` Thierry Reding
2012-11-21 8:28 ` Steffen Trumtrar
2012-11-21 13:18 ` Laurent Pinchart
2012-11-21 7:41 ` Steffen Trumtrar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50ACBCE4.60701@ti.com \
--to=tomi.valkeinen@ti.com \
--cc=FlorianSchandinat-Mmb7MZpHnFY@public.gmane.org \
--cc=airlied-cv59FeDIM0c@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=g.liakhovetski-Mmb7MZpHnFY@public.gmane.org \
--cc=kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
--cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
--cc=linux-fbdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=s.trumtrar-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).