Skip to content

Commit

Permalink
fbdev/simplefb: Support memory-region property
Browse files Browse the repository at this point in the history
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 <hdegoede@redhat.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231101172017.3872242-2-thierry.reding@gmail.com
  • Loading branch information
thierryreding authored and jwrdegoede committed Nov 2, 2023
1 parent 3c6c7ca commit 8ddfc01
Showing 1 changed file with 30 additions and 5 deletions.
35 changes: 30 additions & 5 deletions drivers/video/fbdev/simplefb.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include <linux/platform_device.h>
#include <linux/clk.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_clk.h>
#include <linux/of_platform.h>
#include <linux/parser.h>
Expand Down Expand Up @@ -121,12 +122,13 @@ struct simplefb_params {
u32 height;
u32 stride;
struct simplefb_format *format;
struct resource memory;
};

static int simplefb_parse_dt(struct platform_device *pdev,
struct simplefb_params *params)
{
struct device_node *np = pdev->dev.of_node;
struct device_node *np = pdev->dev.of_node, *mem;
int ret;
const char *format;
int i;
Expand Down Expand Up @@ -166,6 +168,23 @@ static int simplefb_parse_dt(struct platform_device *pdev,
return -EINVAL;
}

mem = of_parse_phandle(np, "memory-region", 0);
if (mem) {
ret = of_address_to_resource(mem, 0, &params->memory);
if (ret < 0) {
dev_err(&pdev->dev, "failed to parse memory-region\n");
of_node_put(mem);
return ret;
}

if (of_property_present(np, "reg"))
dev_warn(&pdev->dev, "preferring \"memory-region\" over \"reg\" property\n");

of_node_put(mem);
} else {
memset(&params->memory, 0, sizeof(params->memory));
}

return 0;
}

Expand Down Expand Up @@ -193,6 +212,8 @@ static int simplefb_parse_pd(struct platform_device *pdev,
return -EINVAL;
}

memset(&params->memory, 0, sizeof(params->memory));

return 0;
}

Expand Down Expand Up @@ -431,10 +452,14 @@ static int simplefb_probe(struct platform_device *pdev)
if (ret)
return ret;

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(&pdev->dev, "No memory resource\n");
return -EINVAL;
if (params.memory.start == 0 && params.memory.end == 0) {
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(&pdev->dev, "No memory resource\n");
return -EINVAL;
}
} else {
res = &params.memory;
}

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

0 comments on commit 8ddfc01

Please sign in to comment.