Skip to content

Commit 8ddfc01

Browse files
thierryredingjwrdegoede
authored andcommitted
fbdev/simplefb: Support memory-region property
The simple-framebuffer bindings specify that the "memory-region" property can be used as an alternative to the "reg" property to define the framebuffer memory used by the display hardware. Implement support for this in the simplefb driver. Reviewed-by: Hans de Goede <[email protected]> Signed-off-by: Thierry Reding <[email protected]> Signed-off-by: Hans de Goede <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 3c6c7ca commit 8ddfc01

File tree

1 file changed

+30
-5
lines changed

1 file changed

+30
-5
lines changed

drivers/video/fbdev/simplefb.c

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <linux/platform_device.h>
2222
#include <linux/clk.h>
2323
#include <linux/of.h>
24+
#include <linux/of_address.h>
2425
#include <linux/of_clk.h>
2526
#include <linux/of_platform.h>
2627
#include <linux/parser.h>
@@ -121,12 +122,13 @@ struct simplefb_params {
121122
u32 height;
122123
u32 stride;
123124
struct simplefb_format *format;
125+
struct resource memory;
124126
};
125127

126128
static int simplefb_parse_dt(struct platform_device *pdev,
127129
struct simplefb_params *params)
128130
{
129-
struct device_node *np = pdev->dev.of_node;
131+
struct device_node *np = pdev->dev.of_node, *mem;
130132
int ret;
131133
const char *format;
132134
int i;
@@ -166,6 +168,23 @@ static int simplefb_parse_dt(struct platform_device *pdev,
166168
return -EINVAL;
167169
}
168170

171+
mem = of_parse_phandle(np, "memory-region", 0);
172+
if (mem) {
173+
ret = of_address_to_resource(mem, 0, &params->memory);
174+
if (ret < 0) {
175+
dev_err(&pdev->dev, "failed to parse memory-region\n");
176+
of_node_put(mem);
177+
return ret;
178+
}
179+
180+
if (of_property_present(np, "reg"))
181+
dev_warn(&pdev->dev, "preferring \"memory-region\" over \"reg\" property\n");
182+
183+
of_node_put(mem);
184+
} else {
185+
memset(&params->memory, 0, sizeof(params->memory));
186+
}
187+
169188
return 0;
170189
}
171190

@@ -193,6 +212,8 @@ static int simplefb_parse_pd(struct platform_device *pdev,
193212
return -EINVAL;
194213
}
195214

215+
memset(&params->memory, 0, sizeof(params->memory));
216+
196217
return 0;
197218
}
198219

@@ -431,10 +452,14 @@ static int simplefb_probe(struct platform_device *pdev)
431452
if (ret)
432453
return ret;
433454

434-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
435-
if (!res) {
436-
dev_err(&pdev->dev, "No memory resource\n");
437-
return -EINVAL;
455+
if (params.memory.start == 0 && params.memory.end == 0) {
456+
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
457+
if (!res) {
458+
dev_err(&pdev->dev, "No memory resource\n");
459+
return -EINVAL;
460+
}
461+
} else {
462+
res = &params.memory;
438463
}
439464

440465
mem = request_mem_region(res->start, resource_size(res), "simplefb");

0 commit comments

Comments
 (0)