Skip to content

Commit

Permalink
videomode: implement public of_get_display_timing()
Browse files Browse the repository at this point in the history
The current of_get_display_timings() reads multiple display timings,
allocating memory for the entries. However, most of the time when
parsing display timings from DT data is needed, there's only one display
timing as it's not common for a LCD panel to support multiple videomodes.

This patch creates a new function:

int of_get_display_timing(struct device_node *np, const char *name,
               struct display_timing *dt);

which can be used to parse a single display timing entry from the given
node name.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Steffen Trumtrar <s.trumtrar@pengutronix.de>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
  • Loading branch information
Tomi Valkeinen committed May 28, 2013
1 parent fcf7e6e commit ffa3fd2
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
33 changes: 30 additions & 3 deletions drivers/video/of_display_timing.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,10 @@ static int parse_timing_property(struct device_node *np, const char *name,
}

/**
* of_get_display_timing - parse display_timing entry from device_node
* of_parse_display_timing - parse display_timing entry from device_node
* @np: device_node with the properties
**/
static int of_get_display_timing(struct device_node *np,
static int of_parse_display_timing(struct device_node *np,
struct display_timing *dt)
{
u32 val = 0;
Expand Down Expand Up @@ -102,6 +102,33 @@ static int of_get_display_timing(struct device_node *np,
return 0;
}

/**
* of_get_display_timing - parse a display_timing entry
* @np: device_node with the timing subnode
* @name: name of the timing node
* @dt: display_timing struct to fill
**/
int of_get_display_timing(struct device_node *np, const char *name,
struct display_timing *dt)
{
struct device_node *timing_np;

if (!np) {
pr_err("%s: no devicenode given\n", of_node_full_name(np));
return -EINVAL;
}

timing_np = of_find_node_by_name(np, name);
if (!timing_np) {
pr_err("%s: could not find node '%s'\n",
of_node_full_name(np), name);
return -ENOENT;
}

return of_parse_display_timing(timing_np, dt);
}
EXPORT_SYMBOL_GPL(of_get_display_timing);

/**
* of_get_display_timings - parse all display_timing entries from a device_node
* @np: device_node with the subnodes
Expand Down Expand Up @@ -177,7 +204,7 @@ struct display_timings *of_get_display_timings(struct device_node *np)
goto timingfail;
}

r = of_get_display_timing(entry, dt);
r = of_parse_display_timing(entry, dt);
if (r) {
/*
* to not encourage wrong devicetrees, fail in case of
Expand Down
2 changes: 2 additions & 0 deletions include/video/of_display_timing.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ struct display_timings;

#define OF_USE_NATIVE_MODE -1

int of_get_display_timing(struct device_node *np, const char *name,
struct display_timing *dt);
struct display_timings *of_get_display_timings(struct device_node *np);
int of_display_timings_exist(struct device_node *np);

Expand Down

0 comments on commit ffa3fd2

Please sign in to comment.