* [PATCH 04/10] video: da8xx-fb: ensure non-null cfg in pdata
2013-01-07 5:22 [PATCH 00/10] video: da8xx-fb: DT support Afzal Mohammed
@ 2013-01-07 5:22 ` Afzal Mohammed
2013-01-07 5:23 ` [PATCH 05/10] video: da8xx-fb: reorganize panel detection Afzal Mohammed
` (5 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:22 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap, linux-fbdev, linux-kernel,
devicetree-discuss, linux-doc
Ensure that platform data contains pointer for lcd_ctrl_config.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
drivers/video/da8xx-fb.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index e119ec8..32ce385 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -1324,6 +1324,11 @@ static int __devinit fb_probe(struct platform_device *device)
lcd_cfg = (struct lcd_ctrl_config *)fb_pdata->controller_data;
+ if (!lcd_cfg) {
+ ret = -EINVAL;
+ goto err_pm_runtime_disable;
+ }
+
da8xx_fb_info = framebuffer_alloc(sizeof(struct da8xx_fb_par),
&device->dev);
if (!da8xx_fb_info) {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 05/10] video: da8xx-fb: reorganize panel detection
2013-01-07 5:22 [PATCH 00/10] video: da8xx-fb: DT support Afzal Mohammed
2013-01-07 5:22 ` [PATCH 04/10] video: da8xx-fb: ensure non-null cfg in pdata Afzal Mohammed
@ 2013-01-07 5:23 ` Afzal Mohammed
2013-01-07 5:23 ` [PATCH 06/10] video: da8xx-fb: minimal dt support Afzal Mohammed
` (4 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:23 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap, linux-fbdev, linux-kernel,
devicetree-discuss, linux-doc
Move panel detection to a separate function, this helps in readability
as well as makes DT support cleaner.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
drivers/video/da8xx-fb.c | 42 ++++++++++++++++++++++++++----------------
1 file changed, 26 insertions(+), 16 deletions(-)
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index 32ce385..991d9e3 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -1257,6 +1257,27 @@ static struct fb_ops da8xx_fb_ops = {
.fb_blank = cfb_blank,
};
+static struct fb_videomode *da8xx_fb_get_videomode(struct platform_device *dev)
+{
+ struct da8xx_lcdc_platform_data *fb_pdata = dev->dev.platform_data;
+ struct fb_videomode *lcdc_info;
+ int i;
+
+ for (i = 0, lcdc_info = known_lcd_panels;
+ i < ARRAY_SIZE(known_lcd_panels); i++, lcdc_info++) {
+ if (strcmp(fb_pdata->type, lcdc_info->name) = 0)
+ break;
+ }
+
+ if (i = ARRAY_SIZE(known_lcd_panels)) {
+ dev_err(&dev->dev, "no panel found\n");
+ return NULL;
+ }
+ dev_info(&dev->dev, "found %s panel\n", lcdc_info->name);
+
+ return lcdc_info;
+}
+
static int __devinit fb_probe(struct platform_device *device)
{
struct da8xx_lcdc_platform_data *fb_pdata @@ -1266,7 +1287,7 @@ static int __devinit fb_probe(struct platform_device *device)
struct fb_info *da8xx_fb_info;
struct clk *fb_clk = NULL;
struct da8xx_fb_par *par;
- int ret, i;
+ int ret;
unsigned long ulcm;
if (fb_pdata = NULL) {
@@ -1274,6 +1295,10 @@ static int __devinit fb_probe(struct platform_device *device)
return -ENOENT;
}
+ lcdc_info = da8xx_fb_get_videomode(device);
+ if (lcdc_info = NULL)
+ return -ENODEV;
+
lcdc_regs = platform_get_resource(device, IORESOURCE_MEM, 0);
da8xx_fb_reg_base = devm_request_and_ioremap(&device->dev, lcdc_regs);
if (!da8xx_fb_reg_base) {
@@ -1307,21 +1332,6 @@ static int __devinit fb_probe(struct platform_device *device)
break;
}
- for (i = 0, lcdc_info = known_lcd_panels;
- i < ARRAY_SIZE(known_lcd_panels);
- i++, lcdc_info++) {
- if (strcmp(fb_pdata->type, lcdc_info->name) = 0)
- break;
- }
-
- if (i = ARRAY_SIZE(known_lcd_panels)) {
- dev_err(&device->dev, "GLCD: No valid panel found\n");
- ret = -ENODEV;
- goto err_pm_runtime_disable;
- } else
- dev_info(&device->dev, "GLCD: Found %s panel\n",
- fb_pdata->type);
-
lcd_cfg = (struct lcd_ctrl_config *)fb_pdata->controller_data;
if (!lcd_cfg) {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 06/10] video: da8xx-fb: minimal dt support
2013-01-07 5:22 [PATCH 00/10] video: da8xx-fb: DT support Afzal Mohammed
2013-01-07 5:22 ` [PATCH 04/10] video: da8xx-fb: ensure non-null cfg in pdata Afzal Mohammed
2013-01-07 5:23 ` [PATCH 05/10] video: da8xx-fb: reorganize panel detection Afzal Mohammed
@ 2013-01-07 5:23 ` Afzal Mohammed
[not found] ` <cover.1357304090.git.afzal-l0cyMroinI0@public.gmane.org>
` (3 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:23 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap, linux-fbdev, linux-kernel,
devicetree-discuss, linux-doc
Driver is provided a means to have the probe triggered by DT.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
.../devicetree/bindings/video/fb-da8xx.txt | 16 ++++++++++++++++
drivers/video/da8xx-fb.c | 7 +++++++
2 files changed, 23 insertions(+)
create mode 100644 Documentation/devicetree/bindings/video/fb-da8xx.txt
diff --git a/Documentation/devicetree/bindings/video/fb-da8xx.txt b/Documentation/devicetree/bindings/video/fb-da8xx.txt
new file mode 100644
index 0000000..581e014
--- /dev/null
+++ b/Documentation/devicetree/bindings/video/fb-da8xx.txt
@@ -0,0 +1,16 @@
+TI LCD Controller on DA830/DA850/AM335x SoC's
+
+Required properties:
+- compatible:
+ DA830 - "ti,da830-lcdc"
+ AM335x SoC's - "ti,am3352-lcdc", "ti,da830-lcdc"
+- reg: Address range of lcdc register set
+- interrupts: lcdc interrupt
+
+Example:
+
+lcdc@4830e000 {
+ compatible = "ti,am3352-lcdc", "ti,da830-lcdc";
+ reg = <0x4830e000 0x1000>;
+ interrupts = <36>;
+};
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index 991d9e3..d10479f 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -1599,6 +1599,12 @@ static int fb_resume(struct platform_device *dev)
#define fb_resume NULL
#endif
+static const struct of_device_id da8xx_fb_of_match[] = {
+ {.compatible = "ti,da830-lcdc", },
+ {},
+};
+MODULE_DEVICE_TABLE(of, da8xx_fb_of_match);
+
static struct platform_driver da8xx_fb_driver = {
.probe = fb_probe,
.remove = __devexit_p(fb_remove),
@@ -1607,6 +1613,7 @@ static struct platform_driver da8xx_fb_driver = {
.driver = {
.name = DRIVER_NAME,
.owner = THIS_MODULE,
+ .of_match_table = of_match_ptr(da8xx_fb_of_match),
},
};
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
[parent not found: <cover.1357304090.git.afzal-l0cyMroinI0@public.gmane.org>]
* [PATCH 01/10] video: da8xx-fb: fix 24bpp raster configuration
[not found] ` <cover.1357304090.git.afzal-l0cyMroinI0@public.gmane.org>
@ 2013-01-07 5:22 ` Afzal Mohammed
2013-01-07 5:22 ` [PATCH 02/10] video: da8xx-fb: enable sync lost intr for v2 ip Afzal Mohammed
` (2 subsequent siblings)
3 siblings, 0 replies; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:22 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap-u79uwXL29TY76Z2rM5mHXA,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
linux-doc-u79uwXL29TY76Z2rM5mHXA
Cc: Manjunathappa, Prakash
From: "Manjunathappa, Prakash" <prakash.pm@ti.com>
Set only LCD_V2_TFT_24BPP_MODE bit for 24bpp and LCD_V2_TFT_24BPP_UNPACK
bit along with LCD_V2_TFT_24BPP_MODE for 32bpp configuration.
Patch is tested on am335x-evm for 24bpp and da850-evm for 16bpp
configurations.
Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
drivers/video/da8xx-fb.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index 240eac7..cd73b87 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -554,10 +554,10 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,
case 4:
case 16:
break;
- case 24:
- reg |= LCD_V2_TFT_24BPP_MODE;
case 32:
reg |= LCD_V2_TFT_24BPP_UNPACK;
+ case 24:
+ reg |= LCD_V2_TFT_24BPP_MODE;
break;
case 8:
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 02/10] video: da8xx-fb: enable sync lost intr for v2 ip
[not found] ` <cover.1357304090.git.afzal-l0cyMroinI0@public.gmane.org>
2013-01-07 5:22 ` [PATCH 01/10] video: da8xx-fb: fix 24bpp raster configuration Afzal Mohammed
@ 2013-01-07 5:22 ` Afzal Mohammed
2013-01-07 5:22 ` [PATCH 03/10] video: da8xx-fb: use devres Afzal Mohammed
2013-01-07 5:23 ` [PATCH 07/10] video: da8xx-fb: invoke platform callback safely Afzal Mohammed
3 siblings, 0 replies; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:22 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap-u79uwXL29TY76Z2rM5mHXA,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
linux-doc-u79uwXL29TY76Z2rM5mHXA
interrupt handler is checking for sync lost interrupt, but it was not
enabled, enable it.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
drivers/video/da8xx-fb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index cd73b87..4f92028 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -322,7 +322,7 @@ static void lcd_blit(int load_mode, struct da8xx_fb_par *par)
reg_int = lcdc_read(LCD_INT_ENABLE_SET_REG) |
LCD_V2_END_OF_FRAME0_INT_ENA |
LCD_V2_END_OF_FRAME1_INT_ENA |
- LCD_FRAME_DONE;
+ LCD_FRAME_DONE | LCD_SYNC_LOST;
lcdc_write(reg_int, LCD_INT_ENABLE_SET_REG);
}
reg_dma |= LCD_DUAL_FRAME_BUFFER_ENABLE;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 03/10] video: da8xx-fb: use devres
[not found] ` <cover.1357304090.git.afzal-l0cyMroinI0@public.gmane.org>
2013-01-07 5:22 ` [PATCH 01/10] video: da8xx-fb: fix 24bpp raster configuration Afzal Mohammed
2013-01-07 5:22 ` [PATCH 02/10] video: da8xx-fb: enable sync lost intr for v2 ip Afzal Mohammed
@ 2013-01-07 5:22 ` Afzal Mohammed
2013-01-07 5:23 ` [PATCH 07/10] video: da8xx-fb: invoke platform callback safely Afzal Mohammed
3 siblings, 0 replies; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:22 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap-u79uwXL29TY76Z2rM5mHXA,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
linux-doc-u79uwXL29TY76Z2rM5mHXA
Replace existing resource handling in the driver with managed device
resource.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
drivers/video/da8xx-fb.c | 35 ++++++-----------------------------
1 file changed, 6 insertions(+), 29 deletions(-)
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index 4f92028..e119ec8 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -1040,12 +1040,9 @@ static int __devexit fb_remove(struct platform_device *dev)
par->p_palette_base);
dma_free_coherent(NULL, par->vram_size, par->vram_virt,
par->vram_phys);
- free_irq(par->irq, par);
pm_runtime_put_sync(&dev->dev);
pm_runtime_disable(&dev->dev);
framebuffer_release(info);
- iounmap(da8xx_fb_reg_base);
- release_mem_region(lcdc_regs->start, resource_size(lcdc_regs));
}
return 0;
@@ -1269,7 +1266,6 @@ static int __devinit fb_probe(struct platform_device *device)
struct fb_info *da8xx_fb_info;
struct clk *fb_clk = NULL;
struct da8xx_fb_par *par;
- resource_size_t len;
int ret, i;
unsigned long ulcm;
@@ -1279,29 +1275,16 @@ static int __devinit fb_probe(struct platform_device *device)
}
lcdc_regs = platform_get_resource(device, IORESOURCE_MEM, 0);
- if (!lcdc_regs) {
- dev_err(&device->dev,
- "Can not get memory resource for LCD controller\n");
- return -ENOENT;
- }
-
- len = resource_size(lcdc_regs);
-
- lcdc_regs = request_mem_region(lcdc_regs->start, len, lcdc_regs->name);
- if (!lcdc_regs)
- return -EBUSY;
-
- da8xx_fb_reg_base = ioremap(lcdc_regs->start, len);
+ da8xx_fb_reg_base = devm_request_and_ioremap(&device->dev, lcdc_regs);
if (!da8xx_fb_reg_base) {
- ret = -EBUSY;
- goto err_request_mem;
+ dev_err(&device->dev, "memory resource setup failed\n");
+ return -EADDRNOTAVAIL;
}
- fb_clk = clk_get(&device->dev, "fck");
+ fb_clk = devm_clk_get(&device->dev, "fck");
if (IS_ERR(fb_clk)) {
dev_err(&device->dev, "Can not get device clock\n");
- ret = -ENODEV;
- goto err_ioremap;
+ return -ENODEV;
}
pm_runtime_enable(&device->dev);
@@ -1462,7 +1445,7 @@ static int __devinit fb_probe(struct platform_device *device)
lcdc_irq_handler = lcdc_irq_handler_rev02;
}
- ret = request_irq(par->irq, lcdc_irq_handler, 0,
+ ret = devm_request_irq(&device->dev, par->irq, lcdc_irq_handler, 0,
DRIVER_NAME, par);
if (ret)
goto irq_freq;
@@ -1492,12 +1475,6 @@ err_pm_runtime_disable:
pm_runtime_put_sync(&device->dev);
pm_runtime_disable(&device->dev);
-err_ioremap:
- iounmap(da8xx_fb_reg_base);
-
-err_request_mem:
- release_mem_region(lcdc_regs->start, len);
-
return ret;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 07/10] video: da8xx-fb: invoke platform callback safely
[not found] ` <cover.1357304090.git.afzal-l0cyMroinI0@public.gmane.org>
` (2 preceding siblings ...)
2013-01-07 5:22 ` [PATCH 03/10] video: da8xx-fb: use devres Afzal Mohammed
@ 2013-01-07 5:23 ` Afzal Mohammed
3 siblings, 0 replies; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:23 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap-u79uwXL29TY76Z2rM5mHXA,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
linux-doc-u79uwXL29TY76Z2rM5mHXA
Ensure that platform data is present before checking whether platform
callback is present (the one used to control backlight). So far this
was not an issue as driver was purely non-DT triggered, but now DT
support has been added.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
drivers/video/da8xx-fb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index d10479f..68ae925 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -1351,7 +1351,7 @@ static int __devinit fb_probe(struct platform_device *device)
par->dev = &device->dev;
par->lcdc_clk = fb_clk;
par->lcd_fck_rate = clk_get_rate(fb_clk);
- if (fb_pdata->panel_power_ctrl) {
+ if (fb_pdata && fb_pdata->panel_power_ctrl) {
par->panel_power_ctrl = fb_pdata->panel_power_ctrl;
par->panel_power_ctrl(1);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 08/10] video: da8xx-fb: obtain fb_videomode info from dt
2013-01-07 5:22 [PATCH 00/10] video: da8xx-fb: DT support Afzal Mohammed
` (3 preceding siblings ...)
[not found] ` <cover.1357304090.git.afzal-l0cyMroinI0@public.gmane.org>
@ 2013-01-07 5:23 ` Afzal Mohammed
2013-01-07 9:11 ` Steffen Trumtrar
2013-01-07 5:23 ` [PATCH 09/10] video: da8xx-fb: ensure pdata only for non-dt Afzal Mohammed
2013-01-07 5:23 ` [PATCH 10/10] video: da8xx-fb: setup struct lcd_ctrl_config for dt Afzal Mohammed
6 siblings, 1 reply; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:23 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap, linux-fbdev, linux-kernel,
devicetree-discuss, linux-doc
Obtain fb_videomode details for the connected lcd panel using the
display timing details present in DT.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
.../devicetree/bindings/video/fb-da8xx.txt | 20 ++++++++++++++++++++
drivers/video/da8xx-fb.c | 16 ++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/Documentation/devicetree/bindings/video/fb-da8xx.txt b/Documentation/devicetree/bindings/video/fb-da8xx.txt
index 581e014..eeb935b 100644
--- a/Documentation/devicetree/bindings/video/fb-da8xx.txt
+++ b/Documentation/devicetree/bindings/video/fb-da8xx.txt
@@ -6,6 +6,11 @@ Required properties:
AM335x SoC's - "ti,am3352-lcdc", "ti,da830-lcdc"
- reg: Address range of lcdc register set
- interrupts: lcdc interrupt
+- display-timings: list of different videomodes supported by the lcd
+ panel, represented as childs, can have multiple modes supported, if
+ only one, then it is considered native mode, if multiple modes are
+ provided, native mode can be set explicitly, more details available
+ @Documentation/devicetree/bindings/video/display-timing.txt
Example:
@@ -13,4 +18,19 @@ lcdc@4830e000 {
compatible = "ti,am3352-lcdc", "ti,da830-lcdc";
reg = <0x4830e000 0x1000>;
interrupts = <36>;
+ display-timings {
+ 800x480p62 {
+ clock-frequency = <30000000>;
+ hactive = <800>;
+ vactive = <480>;
+ hfront-porch = <39>;
+ hback-porch = <39>;
+ hsync-len = <47>;
+ vback-porch = <29>;
+ vfront-porch = <13>;
+ vsync-len = <2>;
+ hsync-active = <1>;
+ vsync-active = <1>;
+ };
+ };
};
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index 68ae925..94add01 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -1261,8 +1261,24 @@ static struct fb_videomode *da8xx_fb_get_videomode(struct platform_device *dev)
{
struct da8xx_lcdc_platform_data *fb_pdata = dev->dev.platform_data;
struct fb_videomode *lcdc_info;
+ struct device_node *np = dev->dev.of_node;
int i;
+ if (np) {
+ lcdc_info = devm_kzalloc(&dev->dev,
+ sizeof(struct fb_videomode),
+ GFP_KERNEL);
+ if (!lcdc_info) {
+ dev_err(&dev->dev, "memory allocation failed\n");
+ return NULL;
+ }
+ if (of_get_fb_videomode(np, lcdc_info, 0)) {
+ dev_err(&dev->dev, "timings not available in DT\n");
+ return NULL;
+ }
+ return lcdc_info;
+ }
+
for (i = 0, lcdc_info = known_lcd_panels;
i < ARRAY_SIZE(known_lcd_panels); i++, lcdc_info++) {
if (strcmp(fb_pdata->type, lcdc_info->name) = 0)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 08/10] video: da8xx-fb: obtain fb_videomode info from dt
2013-01-07 5:23 ` [PATCH 08/10] video: da8xx-fb: obtain fb_videomode info from dt Afzal Mohammed
@ 2013-01-07 9:11 ` Steffen Trumtrar
[not found] ` <20130107091131.GC23478-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
0 siblings, 1 reply; 14+ messages in thread
From: Steffen Trumtrar @ 2013-01-07 9:11 UTC (permalink / raw)
To: Afzal Mohammed
Cc: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Sekhar Nori, Vaibhav Hiremath,
linux-omap, linux-fbdev, linux-kernel, devicetree-discuss,
linux-doc
Hi!
On Mon, Jan 07, 2013 at 10:41:30AM +0530, Afzal Mohammed wrote:
> Obtain fb_videomode details for the connected lcd panel using the
> display timing details present in DT.
>
> Signed-off-by: Afzal Mohammed <afzal@ti.com>
> ---
> .../devicetree/bindings/video/fb-da8xx.txt | 20 ++++++++++++++++++++
> drivers/video/da8xx-fb.c | 16 ++++++++++++++++
> 2 files changed, 36 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/video/fb-da8xx.txt b/Documentation/devicetree/bindings/video/fb-da8xx.txt
> index 581e014..eeb935b 100644
> --- a/Documentation/devicetree/bindings/video/fb-da8xx.txt
> +++ b/Documentation/devicetree/bindings/video/fb-da8xx.txt
> @@ -6,6 +6,11 @@ Required properties:
> AM335x SoC's - "ti,am3352-lcdc", "ti,da830-lcdc"
> - reg: Address range of lcdc register set
> - interrupts: lcdc interrupt
> +- display-timings: list of different videomodes supported by the lcd
> + panel, represented as childs, can have multiple modes supported, if
> + only one, then it is considered native mode, if multiple modes are
> + provided, native mode can be set explicitly, more details available
> + @Documentation/devicetree/bindings/video/display-timing.txt
>
Keep in mind that the text combined with...
> Example:
>
> @@ -13,4 +18,19 @@ lcdc@4830e000 {
> compatible = "ti,am3352-lcdc", "ti,da830-lcdc";
> reg = <0x4830e000 0x1000>;
> interrupts = <36>;
> + display-timings {
> + 800x480p62 {
> + clock-frequency = <30000000>;
> + hactive = <800>;
> + vactive = <480>;
> + hfront-porch = <39>;
> + hback-porch = <39>;
> + hsync-len = <47>;
> + vback-porch = <29>;
> + vfront-porch = <13>;
> + vsync-len = <2>;
> + hsync-active = <1>;
> + vsync-active = <1>;
> + };
> + };
> };
> diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
> index 68ae925..94add01 100644
> --- a/drivers/video/da8xx-fb.c
> +++ b/drivers/video/da8xx-fb.c
> @@ -1261,8 +1261,24 @@ static struct fb_videomode *da8xx_fb_get_videomode(struct platform_device *dev)
> {
> struct da8xx_lcdc_platform_data *fb_pdata = dev->dev.platform_data;
> struct fb_videomode *lcdc_info;
> + struct device_node *np = dev->dev.of_node;
> int i;
>
> + if (np) {
> + lcdc_info = devm_kzalloc(&dev->dev,
> + sizeof(struct fb_videomode),
> + GFP_KERNEL);
> + if (!lcdc_info) {
> + dev_err(&dev->dev, "memory allocation failed\n");
> + return NULL;
> + }
> + if (of_get_fb_videomode(np, lcdc_info, 0)) {
> + dev_err(&dev->dev, "timings not available in DT\n");
> + return NULL;
> + }
> + return lcdc_info;
> + }
... this is not correct. You are just supporting the first display-timings
subnode (of_get_fb_videomode(..., 0)).
Regards,
Steffen
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 09/10] video: da8xx-fb: ensure pdata only for non-dt
2013-01-07 5:22 [PATCH 00/10] video: da8xx-fb: DT support Afzal Mohammed
` (4 preceding siblings ...)
2013-01-07 5:23 ` [PATCH 08/10] video: da8xx-fb: obtain fb_videomode info from dt Afzal Mohammed
@ 2013-01-07 5:23 ` Afzal Mohammed
2013-01-07 5:23 ` [PATCH 10/10] video: da8xx-fb: setup struct lcd_ctrl_config for dt Afzal Mohammed
6 siblings, 0 replies; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:23 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap, linux-fbdev, linux-kernel,
devicetree-discuss, linux-doc
This driver is DT probe-able, hence ensure presence of platform data
only for non-DT boot.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
drivers/video/da8xx-fb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index 94add01..3e590d4 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -1306,7 +1306,7 @@ static int __devinit fb_probe(struct platform_device *device)
int ret;
unsigned long ulcm;
- if (fb_pdata = NULL) {
+ if (fb_pdata = NULL && !device->dev.of_node) {
dev_err(&device->dev, "Can not get platform data\n");
return -ENOENT;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 10/10] video: da8xx-fb: setup struct lcd_ctrl_config for dt
2013-01-07 5:22 [PATCH 00/10] video: da8xx-fb: DT support Afzal Mohammed
` (5 preceding siblings ...)
2013-01-07 5:23 ` [PATCH 09/10] video: da8xx-fb: ensure pdata only for non-dt Afzal Mohammed
@ 2013-01-07 5:23 ` Afzal Mohammed
6 siblings, 0 replies; 14+ messages in thread
From: Afzal Mohammed @ 2013-01-07 5:23 UTC (permalink / raw)
To: Florian Tobias Schandinat, Tomi Valkeinen, Grant Likely,
Rob Herring, Rob Landley, Steffen Trumtrar, Sekhar Nori,
Vaibhav Hiremath, linux-omap, linux-fbdev, linux-kernel,
devicetree-discuss, linux-doc
strcut lcd_ctrl_config information required for driver is currently
obtained via platform data. To handle DT probing, create
lcd_ctrl_config and populate it with default values, these values are
sufficient for the panels so far used with this controller to work.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
---
drivers/video/da8xx-fb.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index 3e590d4..4a4b4dc 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -1257,6 +1257,35 @@ static struct fb_ops da8xx_fb_ops = {
.fb_blank = cfb_blank,
};
+static struct lcd_ctrl_config *da8xx_fb_create_cfg(struct platform_device *dev)
+{
+ struct lcd_ctrl_config *cfg;
+
+ cfg = devm_kzalloc(&dev->dev, sizeof(struct fb_videomode), GFP_KERNEL);
+ if (!cfg) {
+ dev_err(&dev->dev, "memory allocation failed\n");
+ return NULL;
+ }
+
+ /* default values */
+
+ if (lcd_revision = LCD_VERSION_1)
+ cfg->bpp = 16;
+ else
+ cfg->bpp = 32;
+
+ /*
+ * For panels so far used with this LCDC, below statement is sufficient.
+ * For new panels, if required, struct lcd_ctrl_cfg fields to be updated
+ * with additional/modified values. Those values would have to be then
+ * obtained from dt(requiring new dt bindings).
+ */
+
+ cfg->panel_shade = COLOR_ACTIVE;
+
+ return cfg;
+}
+
static struct fb_videomode *da8xx_fb_get_videomode(struct platform_device *dev)
{
struct da8xx_lcdc_platform_data *fb_pdata = dev->dev.platform_data;
@@ -1348,7 +1377,10 @@ static int __devinit fb_probe(struct platform_device *device)
break;
}
- lcd_cfg = (struct lcd_ctrl_config *)fb_pdata->controller_data;
+ if (device->dev.of_node)
+ lcd_cfg = da8xx_fb_create_cfg(device);
+ else
+ lcd_cfg = (struct lcd_ctrl_config *)fb_pdata->controller_data;
if (!lcd_cfg) {
ret = -EINVAL;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread