* [PATCH V4 0/2] video: drm: Add Device tree support to DRM-FIMD @ 2012-09-05 15:39 Leela Krishna Amudala 2012-09-05 15:39 ` [PATCH V4 1/2] drm/exynos: add platform_device_id table and driver data for drm fimd Leela Krishna Amudala 2012-09-05 15:39 ` [PATCH V4 2/2] video: drm: exynos: Add device tree support Leela Krishna Amudala 0 siblings, 2 replies; 11+ messages in thread From: Leela Krishna Amudala @ 2012-09-05 15:39 UTC (permalink / raw) To: dri-devel, devicetree-discuss Cc: linux-arm-kernel, linux-samsung-soc, inki.dae, kgene.kim, m.szyprowski, laurent.pinchart This patch set adds device tree support for DRM-FIMD for Samsung's Exynos5250. It includes parsing platform data from dts file. Also, adds the driver data for exynos4 and exynos5 devices. This patchset is based and tested on top of v3.6-rc4 Also depends on below patchset http://lists.freedesktop.org/archives/dri-devel/2012-August/026076.html Changes since V3: - Removed the fimd version from driver data and using timing base address instead - Removed the drm_ prefixes to the structures and fucntions Changes since V2: - Added driver data to exynos5-drm-fimd as per Marek Szyprowski suggestion Changes since V1: - Corrected typo errors and changed compatibility string Leela Krishna Amudala (2): drm/exynos: add platform_device_id table and driver data for drm fimd video: drm: exynos: Add device tree support Documentation/devicetree/bindings/fb/drm-fimd.txt | 80 ++++++++++++ drivers/gpu/drm/exynos/exynos_drm_fimd.c | 140 +++++++++++++++++++- 2 files changed, 213 insertions(+), 7 deletions(-) create mode 100644 Documentation/devicetree/bindings/fb/drm-fimd.txt ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V4 1/2] drm/exynos: add platform_device_id table and driver data for drm fimd 2012-09-05 15:39 [PATCH V4 0/2] video: drm: Add Device tree support to DRM-FIMD Leela Krishna Amudala @ 2012-09-05 15:39 ` Leela Krishna Amudala 2012-09-05 15:39 ` [PATCH V4 2/2] video: drm: exynos: Add device tree support Leela Krishna Amudala 1 sibling, 0 replies; 11+ messages in thread From: Leela Krishna Amudala @ 2012-09-05 15:39 UTC (permalink / raw) To: dri-devel, devicetree-discuss Cc: linux-arm-kernel, linux-samsung-soc, inki.dae, kgene.kim, m.szyprowski, laurent.pinchart The name of the exynos drm fimd device is renamed to exynos-drm-fimd and two device ids are created for exynos4-fb and exynos5-fb. Also, added driver data for exynos4 and exynos5 to pick the timing base address at runtime to write data into appropriate register address. Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com> --- drivers/gpu/drm/exynos/exynos_drm_fimd.c | 45 ++++++++++++++++++++++++++--- 1 files changed, 40 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 24c0bd4..3701fbe 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -57,6 +57,18 @@ #define get_fimd_context(dev) platform_get_drvdata(to_platform_device(dev)) +struct fimd_driver_data { + unsigned int timing_base; +}; + +struct fimd_driver_data exynos4_fimd_driver_data = { + .timing_base = 0x0, +}; + +struct fimd_driver_data exynos5_fimd_driver_data = { + .timing_base = 0x20000, +}; + struct fimd_win_data { unsigned int offset_x; unsigned int offset_y; @@ -91,6 +103,13 @@ struct fimd_context { struct exynos_drm_panel_info *panel; }; +static inline struct fimd_driver_data *drm_fimd_get_driver_data( + struct platform_device *pdev) +{ + return (struct fimd_driver_data *) + platform_get_device_id(pdev)->driver_data; +} + static bool fimd_display_is_connected(struct device *dev) { DRM_DEBUG_KMS("%s\n", __FILE__); @@ -194,32 +213,35 @@ static void fimd_commit(struct device *dev) struct fimd_context *ctx = get_fimd_context(dev); struct exynos_drm_panel_info *panel = ctx->panel; struct fb_videomode *timing = &panel->timing; + struct fimd_driver_data *driver_data; + struct platform_device *pdev = to_platform_device(dev); u32 val; + driver_data = drm_fimd_get_driver_data(pdev); if (ctx->suspended) return; DRM_DEBUG_KMS("%s\n", __FILE__); /* setup polarity values from machine code. */ - writel(ctx->vidcon1, ctx->regs + VIDCON1); + writel(ctx->vidcon1, ctx->regs + driver_data->timing_base + VIDCON1); /* setup vertical timing values. */ val = VIDTCON0_VBPD(timing->upper_margin - 1) | VIDTCON0_VFPD(timing->lower_margin - 1) | VIDTCON0_VSPW(timing->vsync_len - 1); - writel(val, ctx->regs + VIDTCON0); + writel(val, ctx->regs + driver_data->timing_base + VIDTCON0); /* setup horizontal timing values. */ val = VIDTCON1_HBPD(timing->left_margin - 1) | VIDTCON1_HFPD(timing->right_margin - 1) | VIDTCON1_HSPW(timing->hsync_len - 1); - writel(val, ctx->regs + VIDTCON1); + writel(val, ctx->regs + driver_data->timing_base + VIDTCON1); /* setup horizontal and vertical display size. */ val = VIDTCON2_LINEVAL(timing->yres - 1) | VIDTCON2_HOZVAL(timing->xres - 1); - writel(val, ctx->regs + VIDTCON2); + writel(val, ctx->regs + driver_data->timing_base + VIDTCON2); /* setup clock source, clock divider, enable dma. */ val = ctx->vidcon0; @@ -982,6 +1004,18 @@ static int fimd_runtime_resume(struct device *dev) } #endif +static struct platform_device_id fimd_driver_ids[] = { + { + .name = "exynos4-fb", + .driver_data = (unsigned long)&exynos4_fimd_driver_data, + }, { + .name = "exynos5-fb", + .driver_data = (unsigned long)&exynos5_fimd_driver_data, + }, + {}, +}; +MODULE_DEVICE_TABLE(platform, fimd_driver_ids); + static const struct dev_pm_ops fimd_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(fimd_suspend, fimd_resume) SET_RUNTIME_PM_OPS(fimd_runtime_suspend, fimd_runtime_resume, NULL) @@ -990,8 +1024,9 @@ static const struct dev_pm_ops fimd_pm_ops = { struct platform_driver fimd_driver = { .probe = fimd_probe, .remove = __devexit_p(fimd_remove), + .id_table = fimd_driver_ids, .driver = { - .name = "exynos4-fb", + .name = "exynos-drm-fimd", .owner = THIS_MODULE, .pm = &fimd_pm_ops, }, -- 1.7.0.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH V4 2/2] video: drm: exynos: Add device tree support 2012-09-05 15:39 [PATCH V4 0/2] video: drm: Add Device tree support to DRM-FIMD Leela Krishna Amudala 2012-09-05 15:39 ` [PATCH V4 1/2] drm/exynos: add platform_device_id table and driver data for drm fimd Leela Krishna Amudala @ 2012-09-05 15:39 ` Leela Krishna Amudala 2012-09-05 12:28 ` Kyungmin Park 2012-09-20 6:29 ` Inki Dae 1 sibling, 2 replies; 11+ messages in thread From: Leela Krishna Amudala @ 2012-09-05 15:39 UTC (permalink / raw) To: dri-devel, devicetree-discuss Cc: linux-arm-kernel, linux-samsung-soc, inki.dae, kgene.kim, m.szyprowski, laurent.pinchart Add device tree based discovery support for DRM-FIMD driver. Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com> --- Documentation/devicetree/bindings/fb/drm-fimd.txt | 80 +++++++++++++++++ drivers/gpu/drm/exynos/exynos_drm_fimd.c | 95 ++++++++++++++++++++- 2 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/fb/drm-fimd.txt diff --git a/Documentation/devicetree/bindings/fb/drm-fimd.txt b/Documentation/devicetree/bindings/fb/drm-fimd.txt new file mode 100644 index 0000000..4ff1829 --- /dev/null +++ b/Documentation/devicetree/bindings/fb/drm-fimd.txt @@ -0,0 +1,80 @@ +* Samsung Display Controller using DRM frame work + +The display controller is used to transfer image data from memory to an +external LCD driver interface. It supports various color formats such as +rgb and yuv. + +Required properties: + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fb" for + fimd using DRM frame work. + - reg: physical base address of the controller and length of memory + mapped region. + - interrupts: Three interrupts should be specified. The interrupts should be + specified in the following order. + - VSYNC interrupt + - FIFO level interrupt + - FIMD System Interrupt + + - samsung,fimd-display: This property should specify the phandle of the + display device node which holds the video interface timing with the + below mentioned properties. + + - lcd-htiming: Specifies the horizontal timing for the overlay. The + horizontal timing includes four parameters in the following order. + + - horizontal back porch (in number of lcd clocks) + - horizontal front porch (in number of lcd clocks) + - hsync pulse width (in number of lcd clocks) + - Display panels X resolution. + + - lcd-vtiming: Specifies the vertical timing for the overlay. The + vertical timing includes four parameters in the following order. + + - vertical back porch (in number of lcd lines) + - vertical front porch (in number of lcd lines) + - vsync pulse width (in number of lcd clocks) + - Display panels Y resolution. + + + - samsung,default-window: Specifies the default window number of the fimd controller. + + - samsung,fimd-win-bpp: Specifies the bits per pixel. + +Optional properties: + - samsung,fimd-vidout-rgb: Video output format is RGB. + - samsung,fimd-inv-vclk: invert video clock polarity. + - samsung,fimd-frame-rate: Number of video frames per second. + +Example: + + The following is an example for the fimd controller is split into + two portions. The SoC specific portion can be specified in the SoC + specific dts file. The board specific portion can be specified in the + board specific dts file. + + - SoC Specific portion + + fimd { + compatible = "samsung,exynos5-fimd"; + interrupt-parent = <&combiner>; + reg = <0x14400000 0x40000>; + interrupts = <18 5>, <18 4>, <18 6>; + }; + + - Board Specific portion + + lcd_fimd0: lcd_panel0 { + lcd-htiming = <4 4 4 480>; + lcd-vtiming = <4 4 4 320>; + supports-mipi-panel; + }; + + fimd { + samsung,fimd-display = <&lcd_fimd0>; + samsung,fimd-vidout-rgb; + samsung,fimd-inv-vclk; + samsung,fimd-frame-rate = <60>; + samsung,default-window = <0>; + samsung,fimd-win-bpp = <32>; + }; + diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 3701fbe..a4fa8e9 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -18,6 +18,7 @@ #include <linux/platform_device.h> #include <linux/clk.h> #include <linux/pm_runtime.h> +#include <linux/of.h> #include <video/samsung_fimd.h> #include <drm/exynos_drm.h> @@ -103,9 +104,18 @@ struct fimd_context { struct exynos_drm_panel_info *panel; }; +static const struct of_device_id fimd_dt_match[]; + static inline struct fimd_driver_data *drm_fimd_get_driver_data( struct platform_device *pdev) { +#ifdef CONFIG_OF + if (pdev->dev.of_node) { + const struct of_device_id *match; + match = of_match_ptr(fimd_dt_match); + return (struct fimd_driver_data *)match->data; + } +#endif return (struct fimd_driver_data *) platform_get_device_id(pdev)->driver_data; } @@ -809,12 +819,77 @@ static int fimd_power_on(struct fimd_context *ctx, bool enable) return 0; } +#ifdef CONFIG_OF +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) +{ + struct device_node *np = dev->of_node; + struct device_node *disp_np; + struct exynos_drm_fimd_pdata *pd; + u32 data[4]; + + pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); + if (!pd) { + dev_err(dev, "memory allocation for pdata failed\n"); + return ERR_PTR(-ENOMEM); + } + + if (of_get_property(np, "samsung,fimd-vidout-rgb", NULL)) + pd->vidcon0 |= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB; + if (of_get_property(np, "samsung,fimd-inv-hsync", NULL)) + pd->vidcon1 |= VIDCON1_INV_HSYNC; + if (of_get_property(np, "samsung,fimd-inv-vsync", NULL)) + pd->vidcon1 |= VIDCON1_INV_VSYNC; + if (of_get_property(np, "samsung,fimd-inv-vclk", NULL)) + pd->vidcon1 |= VIDCON1_INV_VCLK; + if (of_get_property(np, "samsung,fimd-inv-vden", NULL)) + pd->vidcon1 |= VIDCON1_INV_VDEN; + + disp_np = of_parse_phandle(np, "samsung,fimd-display", 0); + if (!disp_np) { + dev_err(dev, "unable to find display panel info\n"); + return ERR_PTR(-EINVAL); + } + + if (of_property_read_u32_array(disp_np, "lcd-htiming", data, 4)) { + dev_err(dev, "invalid horizontal timing\n"); + return ERR_PTR(-EINVAL); + } + pd->panel.timing.left_margin = data[0]; + pd->panel.timing.right_margin = data[1]; + pd->panel.timing.hsync_len = data[2]; + pd->panel.timing.xres = data[3]; + + if (of_property_read_u32_array(disp_np, "lcd-vtiming", data, 4)) { + dev_err(dev, "invalid vertical timing\n"); + return ERR_PTR(-EINVAL); + } + pd->panel.timing.upper_margin = data[0]; + pd->panel.timing.lower_margin = data[1]; + pd->panel.timing.vsync_len = data[2]; + pd->panel.timing.yres = data[3]; + + of_property_read_u32(np, "samsung,fimd-frame-rate", + &pd->panel.timing.refresh); + + of_property_read_u32(np, "samsung,default-window", &pd->default_win); + + of_property_read_u32(np, "samsung,fimd-win-bpp", &pd->bpp); + + return pd; +} +#else +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) +{ + return NULL; +} +#endif /* CONFIG_OF */ + static int __devinit fimd_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct fimd_context *ctx; struct exynos_drm_subdrv *subdrv; - struct exynos_drm_fimd_pdata *pdata; + struct exynos_drm_fimd_pdata *pdata = pdev->dev.platform_data; struct exynos_drm_panel_info *panel; struct resource *res; int win; @@ -822,7 +897,11 @@ static int __devinit fimd_probe(struct platform_device *pdev) DRM_DEBUG_KMS("%s\n", __FILE__); - pdata = pdev->dev.platform_data; + if (pdev->dev.of_node) { + pdata = drm_fimd_dt_parse_pdata(&pdev->dev); + if (IS_ERR(pdata)) + return PTR_ERR(pdata); + } if (!pdata) { dev_err(dev, "no platform data specified\n"); return -EINVAL; @@ -1016,6 +1095,17 @@ static struct platform_device_id fimd_driver_ids[] = { }; MODULE_DEVICE_TABLE(platform, fimd_driver_ids); +#ifdef CONFIG_OF +static const struct of_device_id fimd_dt_match[] = { + { .compatible = "samsung,exynos5-fimd", + .data = &exynos5_fimd_driver_data }, + { .compatible = "samsung,exynos4-fb", + .data = &exynos4_fimd_driver_data }, + {}, +}; +MODULE_DEVICE_TABLE(of, fimd_dt_match); +#endif + static const struct dev_pm_ops fimd_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(fimd_suspend, fimd_resume) SET_RUNTIME_PM_OPS(fimd_runtime_suspend, fimd_runtime_resume, NULL) @@ -1029,5 +1119,6 @@ struct platform_driver fimd_driver = { .name = "exynos-drm-fimd", .owner = THIS_MODULE, .pm = &fimd_pm_ops, + .of_match_table = of_match_ptr(fimd_dt_match), }, }; -- 1.7.0.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH V4 2/2] video: drm: exynos: Add device tree support 2012-09-05 15:39 ` [PATCH V4 2/2] video: drm: exynos: Add device tree support Leela Krishna Amudala @ 2012-09-05 12:28 ` Kyungmin Park 2012-09-06 7:21 ` InKi Dae 2012-09-20 6:29 ` Inki Dae 1 sibling, 1 reply; 11+ messages in thread From: Kyungmin Park @ 2012-09-05 12:28 UTC (permalink / raw) To: Leela Krishna Amudala Cc: dri-devel, devicetree-discuss, linux-arm-kernel, linux-samsung-soc, inki.dae, kgene.kim, m.szyprowski, laurent.pinchart Hi, On Thu, Sep 6, 2012 at 12:39 AM, Leela Krishna Amudala <l.krishna@samsung.com> wrote: > Add device tree based discovery support for DRM-FIMD driver. > > Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com> > --- > Documentation/devicetree/bindings/fb/drm-fimd.txt | 80 +++++++++++++++++ > drivers/gpu/drm/exynos/exynos_drm_fimd.c | 95 ++++++++++++++++++++- > 2 files changed, 173 insertions(+), 2 deletions(-) > create mode 100644 Documentation/devicetree/bindings/fb/drm-fimd.txt > > diff --git a/Documentation/devicetree/bindings/fb/drm-fimd.txt b/Documentation/devicetree/bindings/fb/drm-fimd.txt > new file mode 100644 > index 0000000..4ff1829 > --- /dev/null > +++ b/Documentation/devicetree/bindings/fb/drm-fimd.txt > @@ -0,0 +1,80 @@ > +* Samsung Display Controller using DRM frame work > + > +The display controller is used to transfer image data from memory to an > +external LCD driver interface. It supports various color formats such as > +rgb and yuv. > + > +Required properties: > + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fb" for Doesn't better to use single word? fimd or fb?. I think 'fb' is used for framebuffer historically. but now it's used both fb and drm, so fimd is neutral and architecture specific. To do this, Modify arch-exynos first and update it at each drivers it properly. Thank you, Kyungmin Park > + fimd using DRM frame work. > + - reg: physical base address of the controller and length of memory > + mapped region. > + - interrupts: Three interrupts should be specified. The interrupts should be > + specified in the following order. > + - VSYNC interrupt > + - FIFO level interrupt > + - FIMD System Interrupt > + > + - samsung,fimd-display: This property should specify the phandle of the > + display device node which holds the video interface timing with the > + below mentioned properties. > + > + - lcd-htiming: Specifies the horizontal timing for the overlay. The > + horizontal timing includes four parameters in the following order. > + > + - horizontal back porch (in number of lcd clocks) > + - horizontal front porch (in number of lcd clocks) > + - hsync pulse width (in number of lcd clocks) > + - Display panels X resolution. > + > + - lcd-vtiming: Specifies the vertical timing for the overlay. The > + vertical timing includes four parameters in the following order. > + > + - vertical back porch (in number of lcd lines) > + - vertical front porch (in number of lcd lines) > + - vsync pulse width (in number of lcd clocks) > + - Display panels Y resolution. > + > + > + - samsung,default-window: Specifies the default window number of the fimd controller. > + > + - samsung,fimd-win-bpp: Specifies the bits per pixel. > + > +Optional properties: > + - samsung,fimd-vidout-rgb: Video output format is RGB. > + - samsung,fimd-inv-vclk: invert video clock polarity. > + - samsung,fimd-frame-rate: Number of video frames per second. > + > +Example: > + > + The following is an example for the fimd controller is split into > + two portions. The SoC specific portion can be specified in the SoC > + specific dts file. The board specific portion can be specified in the > + board specific dts file. > + > + - SoC Specific portion > + > + fimd { > + compatible = "samsung,exynos5-fimd"; > + interrupt-parent = <&combiner>; > + reg = <0x14400000 0x40000>; > + interrupts = <18 5>, <18 4>, <18 6>; > + }; > + > + - Board Specific portion > + > + lcd_fimd0: lcd_panel0 { > + lcd-htiming = <4 4 4 480>; > + lcd-vtiming = <4 4 4 320>; > + supports-mipi-panel; > + }; > + > + fimd { > + samsung,fimd-display = <&lcd_fimd0>; > + samsung,fimd-vidout-rgb; > + samsung,fimd-inv-vclk; > + samsung,fimd-frame-rate = <60>; > + samsung,default-window = <0>; > + samsung,fimd-win-bpp = <32>; > + }; > + > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > index 3701fbe..a4fa8e9 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > @@ -18,6 +18,7 @@ > #include <linux/platform_device.h> > #include <linux/clk.h> > #include <linux/pm_runtime.h> > +#include <linux/of.h> > > #include <video/samsung_fimd.h> > #include <drm/exynos_drm.h> > @@ -103,9 +104,18 @@ struct fimd_context { > struct exynos_drm_panel_info *panel; > }; > > +static const struct of_device_id fimd_dt_match[]; > + > static inline struct fimd_driver_data *drm_fimd_get_driver_data( > struct platform_device *pdev) > { > +#ifdef CONFIG_OF > + if (pdev->dev.of_node) { > + const struct of_device_id *match; > + match = of_match_ptr(fimd_dt_match); > + return (struct fimd_driver_data *)match->data; > + } > +#endif > return (struct fimd_driver_data *) > platform_get_device_id(pdev)->driver_data; > } > @@ -809,12 +819,77 @@ static int fimd_power_on(struct fimd_context *ctx, bool enable) > return 0; > } > > +#ifdef CONFIG_OF > +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) > +{ > + struct device_node *np = dev->of_node; > + struct device_node *disp_np; > + struct exynos_drm_fimd_pdata *pd; > + u32 data[4]; > + > + pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); > + if (!pd) { > + dev_err(dev, "memory allocation for pdata failed\n"); > + return ERR_PTR(-ENOMEM); > + } > + > + if (of_get_property(np, "samsung,fimd-vidout-rgb", NULL)) > + pd->vidcon0 |= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB; > + if (of_get_property(np, "samsung,fimd-inv-hsync", NULL)) > + pd->vidcon1 |= VIDCON1_INV_HSYNC; > + if (of_get_property(np, "samsung,fimd-inv-vsync", NULL)) > + pd->vidcon1 |= VIDCON1_INV_VSYNC; > + if (of_get_property(np, "samsung,fimd-inv-vclk", NULL)) > + pd->vidcon1 |= VIDCON1_INV_VCLK; > + if (of_get_property(np, "samsung,fimd-inv-vden", NULL)) > + pd->vidcon1 |= VIDCON1_INV_VDEN; > + > + disp_np = of_parse_phandle(np, "samsung,fimd-display", 0); > + if (!disp_np) { > + dev_err(dev, "unable to find display panel info\n"); > + return ERR_PTR(-EINVAL); > + } > + > + if (of_property_read_u32_array(disp_np, "lcd-htiming", data, 4)) { > + dev_err(dev, "invalid horizontal timing\n"); > + return ERR_PTR(-EINVAL); > + } > + pd->panel.timing.left_margin = data[0]; > + pd->panel.timing.right_margin = data[1]; > + pd->panel.timing.hsync_len = data[2]; > + pd->panel.timing.xres = data[3]; > + > + if (of_property_read_u32_array(disp_np, "lcd-vtiming", data, 4)) { > + dev_err(dev, "invalid vertical timing\n"); > + return ERR_PTR(-EINVAL); > + } > + pd->panel.timing.upper_margin = data[0]; > + pd->panel.timing.lower_margin = data[1]; > + pd->panel.timing.vsync_len = data[2]; > + pd->panel.timing.yres = data[3]; > + > + of_property_read_u32(np, "samsung,fimd-frame-rate", > + &pd->panel.timing.refresh); > + > + of_property_read_u32(np, "samsung,default-window", &pd->default_win); > + > + of_property_read_u32(np, "samsung,fimd-win-bpp", &pd->bpp); > + > + return pd; > +} > +#else > +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) > +{ > + return NULL; > +} > +#endif /* CONFIG_OF */ > + > static int __devinit fimd_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > struct fimd_context *ctx; > struct exynos_drm_subdrv *subdrv; > - struct exynos_drm_fimd_pdata *pdata; > + struct exynos_drm_fimd_pdata *pdata = pdev->dev.platform_data; > struct exynos_drm_panel_info *panel; > struct resource *res; > int win; > @@ -822,7 +897,11 @@ static int __devinit fimd_probe(struct platform_device *pdev) > > DRM_DEBUG_KMS("%s\n", __FILE__); > > - pdata = pdev->dev.platform_data; > + if (pdev->dev.of_node) { > + pdata = drm_fimd_dt_parse_pdata(&pdev->dev); > + if (IS_ERR(pdata)) > + return PTR_ERR(pdata); > + } > if (!pdata) { > dev_err(dev, "no platform data specified\n"); > return -EINVAL; > @@ -1016,6 +1095,17 @@ static struct platform_device_id fimd_driver_ids[] = { > }; > MODULE_DEVICE_TABLE(platform, fimd_driver_ids); > > +#ifdef CONFIG_OF > +static const struct of_device_id fimd_dt_match[] = { > + { .compatible = "samsung,exynos5-fimd", > + .data = &exynos5_fimd_driver_data }, > + { .compatible = "samsung,exynos4-fb", > + .data = &exynos4_fimd_driver_data }, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, fimd_dt_match); > +#endif > + > static const struct dev_pm_ops fimd_pm_ops = { > SET_SYSTEM_SLEEP_PM_OPS(fimd_suspend, fimd_resume) > SET_RUNTIME_PM_OPS(fimd_runtime_suspend, fimd_runtime_resume, NULL) > @@ -1029,5 +1119,6 @@ struct platform_driver fimd_driver = { > .name = "exynos-drm-fimd", > .owner = THIS_MODULE, > .pm = &fimd_pm_ops, > + .of_match_table = of_match_ptr(fimd_dt_match), > }, > }; > -- > 1.7.0.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH V4 2/2] video: drm: exynos: Add device tree support 2012-09-05 12:28 ` Kyungmin Park @ 2012-09-06 7:21 ` InKi Dae 2012-09-06 11:05 ` Sylwester Nawrocki 0 siblings, 1 reply; 11+ messages in thread From: InKi Dae @ 2012-09-06 7:21 UTC (permalink / raw) To: Kyungmin Park Cc: Leela Krishna Amudala, kgene.kim, devicetree-discuss, dri-devel, linux-samsung-soc, laurent.pinchart, linux-arm-kernel, m.szyprowski Hi, 2012/9/5 Kyungmin Park <kmpark@infradead.org>: > Hi, > > On Thu, Sep 6, 2012 at 12:39 AM, Leela Krishna Amudala > <l.krishna@samsung.com> wrote: >> Add device tree based discovery support for DRM-FIMD driver. >> >> Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com> >> --- >> Documentation/devicetree/bindings/fb/drm-fimd.txt | 80 +++++++++++++++++ >> drivers/gpu/drm/exynos/exynos_drm_fimd.c | 95 ++++++++++++++++++++- >> 2 files changed, 173 insertions(+), 2 deletions(-) >> create mode 100644 Documentation/devicetree/bindings/fb/drm-fimd.txt >> >> diff --git a/Documentation/devicetree/bindings/fb/drm-fimd.txt b/Documentation/devicetree/bindings/fb/drm-fimd.txt >> new file mode 100644 >> index 0000000..4ff1829 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/fb/drm-fimd.txt >> @@ -0,0 +1,80 @@ >> +* Samsung Display Controller using DRM frame work >> + >> +The display controller is used to transfer image data from memory to an >> +external LCD driver interface. It supports various color formats such as >> +rgb and yuv. >> + >> +Required properties: >> + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fb" for > Doesn't better to use single word? fimd or fb?. I think 'fb' is used > for framebuffer historically. > but now it's used both fb and drm, so fimd is neutral and architecture > specific. > > To do this, Modify arch-exynos first and update it at each drivers it properly. > > Thank you, > Kyungmin Park > I agree with Kyungmin but I'd like to use as is. the reason we used 'exynos4-fb' as device name, is for that it uses fimd driver's platform device commonly and gets fimd clock. so I think that dts file should be defined with hardware specific name but not driver name such as 'exynos4-fb'. but with this, we can't get fimd clock with device's name because 'exynos4-fb' is used as device name of fimd clock. so to use 'exynos4-fimd', we should modify the device name of fimd clock from 'exynos4-fb' to 'exynos4-fimd' and also ids definitions of s3c-fb and drm fimd driver. so my conclusion is that it merges this patch set as is and then let's modify related things later. any opinions, welcome~ anytime. Thanks. Inki Dae ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH V4 2/2] video: drm: exynos: Add device tree support 2012-09-06 7:21 ` InKi Dae @ 2012-09-06 11:05 ` Sylwester Nawrocki 2012-09-07 3:46 ` Leela Krishna Amudala 0 siblings, 1 reply; 11+ messages in thread From: Sylwester Nawrocki @ 2012-09-06 11:05 UTC (permalink / raw) To: InKi Dae Cc: Kyungmin Park, Leela Krishna Amudala, kgene.kim, devicetree-discuss, dri-devel, linux-samsung-soc, laurent.pinchart, linux-arm-kernel, m.szyprowski Hi, On 09/06/2012 09:21 AM, InKi Dae wrote: >>> +Required properties: >>> + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fb" for >> Doesn't better to use single word? fimd or fb?. I think 'fb' is used >> for framebuffer historically. >> but now it's used both fb and drm, so fimd is neutral and architecture >> specific. >> >> To do this, Modify arch-exynos first and update it at each drivers it properly. >> >> Thank you, >> Kyungmin Park >> > > I agree with Kyungmin but I'd like to use as is. the reason we used > 'exynos4-fb' as device name, is for that it uses fimd driver's > platform device commonly and gets fimd clock. so I think that dts file > should be defined with hardware specific name but not driver name such > as 'exynos4-fb'. but with this, we can't get fimd clock with device's > name because 'exynos4-fb' is used as device name of fimd clock. so to > use 'exynos4-fimd', we should modify the device name of fimd clock > from 'exynos4-fb' to 'exynos4-fimd' and also ids definitions of > s3c-fb and drm fimd driver. so my conclusion is that it merges this I think it's good moment to put those things in order, i.e. use uniform 'compatible' names: "samsung,exynos4-fimd", "samsung,exynos5-fimd". Platform device names are separate issue, but could perhaps be unified at this time as well. > patch set as is and then let's modify related things later. > any opinions, welcome~ anytime. > > Thanks. > Inki Dae -- Regards, Sylwester ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH V4 2/2] video: drm: exynos: Add device tree support 2012-09-06 11:05 ` Sylwester Nawrocki @ 2012-09-07 3:46 ` Leela Krishna Amudala 2012-09-07 6:07 ` Inki Dae 0 siblings, 1 reply; 11+ messages in thread From: Leela Krishna Amudala @ 2012-09-07 3:46 UTC (permalink / raw) To: Sylwester Nawrocki Cc: InKi Dae, Kyungmin Park, kgene.kim, devicetree-discuss, dri-devel, linux-samsung-soc, laurent.pinchart, linux-arm-kernel, m.szyprowski Hi, On Thu, Sep 6, 2012 at 4:35 PM, Sylwester Nawrocki <s.nawrocki@samsung.com> wrote: > Hi, > > On 09/06/2012 09:21 AM, InKi Dae wrote: >>>> +Required properties: >>>> + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fb" for >>> Doesn't better to use single word? fimd or fb?. I think 'fb' is used >>> for framebuffer historically. >>> but now it's used both fb and drm, so fimd is neutral and architecture >>> specific. >>> >>> To do this, Modify arch-exynos first and update it at each drivers it properly. >>> >>> Thank you, >>> Kyungmin Park >>> >> >> I agree with Kyungmin but I'd like to use as is. the reason we used >> 'exynos4-fb' as device name, is for that it uses fimd driver's >> platform device commonly and gets fimd clock. so I think that dts file >> should be defined with hardware specific name but not driver name such >> as 'exynos4-fb'. but with this, we can't get fimd clock with device's >> name because 'exynos4-fb' is used as device name of fimd clock. so to >> use 'exynos4-fimd', we should modify the device name of fimd clock >> from 'exynos4-fb' to 'exynos4-fimd' and also ids definitions of >> s3c-fb and drm fimd driver. so my conclusion is that it merges this > > I think it's good moment to put those things in order, i.e. use uniform > 'compatible' names: "samsung,exynos4-fimd", "samsung,exynos5-fimd". > Platform device names are separate issue, but could perhaps be unified > at this time as well. Yes, Platform device name is independent of compatible string. Will change the compatible string to "samsung,exynos4-fimd" and will keep the device name as exynos4-fb for now. Will change the platform device names to exynosX-fimd later. > >> patch set as is and then let's modify related things later. >> any opinions, welcome~ anytime. >> >> Thanks. >> Inki Dae > > -- > > Regards, > Sylwester > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH V4 2/2] video: drm: exynos: Add device tree support 2012-09-07 3:46 ` Leela Krishna Amudala @ 2012-09-07 6:07 ` Inki Dae 2012-09-07 7:09 ` Inki Dae 0 siblings, 1 reply; 11+ messages in thread From: Inki Dae @ 2012-09-07 6:07 UTC (permalink / raw) To: Leela Krishna Amudala Cc: Sylwester Nawrocki, linux-samsung-soc, devicetree-discuss, dri-devel, kgene.kim, laurent.pinchart, linux-arm-kernel, m.szyprowski Hi 2012/9/7 Leela Krishna Amudala <l.krishna@samsung.com>: > Hi, > > On Thu, Sep 6, 2012 at 4:35 PM, Sylwester Nawrocki > <s.nawrocki@samsung.com> wrote: >> Hi, >> >> On 09/06/2012 09:21 AM, InKi Dae wrote: >>>>> +Required properties: >>>>> + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fb" for >>>> Doesn't better to use single word? fimd or fb?. I think 'fb' is used >>>> for framebuffer historically. >>>> but now it's used both fb and drm, so fimd is neutral and architecture >>>> specific. >>>> >>>> To do this, Modify arch-exynos first and update it at each drivers it properly. >>>> >>>> Thank you, >>>> Kyungmin Park >>>> >>> >>> I agree with Kyungmin but I'd like to use as is. the reason we used >>> 'exynos4-fb' as device name, is for that it uses fimd driver's >>> platform device commonly and gets fimd clock. so I think that dts file >>> should be defined with hardware specific name but not driver name such >>> as 'exynos4-fb'. but with this, we can't get fimd clock with device's >>> name because 'exynos4-fb' is used as device name of fimd clock. so to >>> use 'exynos4-fimd', we should modify the device name of fimd clock >>> from 'exynos4-fb' to 'exynos4-fimd' and also ids definitions of >>> s3c-fb and drm fimd driver. so my conclusion is that it merges this >> >> I think it's good moment to put those things in order, i.e. use uniform >> 'compatible' names: "samsung,exynos4-fimd", "samsung,exynos5-fimd". >> Platform device names are separate issue, but could perhaps be unified >> at this time as well. > > Yes, Platform device name is independent of compatible string. > Will change the compatible string to "samsung,exynos4-fimd" and will keep the > device name as exynos4-fb for now. Will change the platform device > names to exynosX-fimd > later. > I'm not sure that clk_get is worked well with this change. I think, when driver called clk_get(), first of all, it tries to get a clk from the registered list of clock providers in the dts file and next in legacy way. but now legacy way(needing clock name and device' name) would be failed if the dts file has no the list because platform device's name differs from device name of clock. so I think we should change device name of clock and also ids of related drivers for compatibility with non-dt. for this, we need some patch sets, changing arch/arm/mach-exynos/common.c and changing arch/arm/mach-exynos/clock-exynos4/5.c and changing s3c-fb.c and last this patch. if there are no other opinions, I'd like to merge this patch set(v5) and next we can update others(maybe common.c, clock-exynos4/5.c and s3c-fb.c) later. Thanks. Inki Dae >> >>> patch set as is and then let's modify related things later. >>> any opinions, welcome~ anytime. >>> >>> Thanks. >>> Inki Dae >> >> -- >> >> Regards, >> Sylwester >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH V4 2/2] video: drm: exynos: Add device tree support 2012-09-07 6:07 ` Inki Dae @ 2012-09-07 7:09 ` Inki Dae 0 siblings, 0 replies; 11+ messages in thread From: Inki Dae @ 2012-09-07 7:09 UTC (permalink / raw) To: Leela Krishna Amudala Cc: Sylwester Nawrocki, linux-samsung-soc, devicetree-discuss, dri-devel, kgene.kim, laurent.pinchart, linux-arm-kernel, m.szyprowski 2012/9/7 Inki Dae <inki.dae@samsung.com>: > Hi > > 2012/9/7 Leela Krishna Amudala <l.krishna@samsung.com>: >> Hi, >> >> On Thu, Sep 6, 2012 at 4:35 PM, Sylwester Nawrocki >> <s.nawrocki@samsung.com> wrote: >>> Hi, >>> >>> On 09/06/2012 09:21 AM, InKi Dae wrote: >>>>>> +Required properties: >>>>>> + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fb" for >>>>> Doesn't better to use single word? fimd or fb?. I think 'fb' is used >>>>> for framebuffer historically. >>>>> but now it's used both fb and drm, so fimd is neutral and architecture >>>>> specific. >>>>> >>>>> To do this, Modify arch-exynos first and update it at each drivers it properly. >>>>> >>>>> Thank you, >>>>> Kyungmin Park >>>>> >>>> >>>> I agree with Kyungmin but I'd like to use as is. the reason we used >>>> 'exynos4-fb' as device name, is for that it uses fimd driver's >>>> platform device commonly and gets fimd clock. so I think that dts file >>>> should be defined with hardware specific name but not driver name such >>>> as 'exynos4-fb'. but with this, we can't get fimd clock with device's >>>> name because 'exynos4-fb' is used as device name of fimd clock. so to >>>> use 'exynos4-fimd', we should modify the device name of fimd clock >>>> from 'exynos4-fb' to 'exynos4-fimd' and also ids definitions of >>>> s3c-fb and drm fimd driver. so my conclusion is that it merges this >>> >>> I think it's good moment to put those things in order, i.e. use uniform >>> 'compatible' names: "samsung,exynos4-fimd", "samsung,exynos5-fimd". >>> Platform device names are separate issue, but could perhaps be unified >>> at this time as well. >> >> Yes, Platform device name is independent of compatible string. >> Will change the compatible string to "samsung,exynos4-fimd" and will keep the >> device name as exynos4-fb for now. Will change the platform device >> names to exynosX-fimd >> later. >> > > I'm not sure that clk_get is worked well with this change. I think, > when driver called clk_get(), first of all, it tries to get a clk from > the registered list of clock providers in the dts file and next in > legacy way. but now legacy way(needing clock name and device' name) > would be failed if the dts file has no the list because platform > device's name differs from device name of clock. so I think we should > change device name of clock and also ids of related drivers for > compatibility with non-dt. for this, we need some patch sets, changing > arch/arm/mach-exynos/common.c and changing > arch/arm/mach-exynos/clock-exynos4/5.c and changing s3c-fb.c and last > this patch. if there are no other opinions, I'd like to merge this > patch set(v5) and next we can update others(maybe common.c, > clock-exynos4/5.c and s3c-fb.c) later. > there is my missing point. with dt, platform device's name is set by OF_DEV_AUXDATA's name so it doesn't need to modify things related to exynos4 anymore. we just need to update things related to exynos5. Thanks. Inki Dae > Thanks. > Inki Dae > >>> >>>> patch set as is and then let's modify related things later. >>>> any opinions, welcome~ anytime. >>>> >>>> Thanks. >>>> Inki Dae >>> >>> -- >>> >>> Regards, >>> Sylwester >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in >>> the body of a message to majordomo@vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >> _______________________________________________ >> dri-devel mailing list >> dri-devel@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH V4 2/2] video: drm: exynos: Add device tree support 2012-09-05 15:39 ` [PATCH V4 2/2] video: drm: exynos: Add device tree support Leela Krishna Amudala 2012-09-05 12:28 ` Kyungmin Park @ 2012-09-20 6:29 ` Inki Dae 2012-09-20 9:31 ` Leela Krishna Amudala 1 sibling, 1 reply; 11+ messages in thread From: Inki Dae @ 2012-09-20 6:29 UTC (permalink / raw) To: Leela Krishna Amudala Cc: dri-devel, devicetree-discuss, kgene.kim, linux-samsung-soc, laurent.pinchart, linux-arm-kernel, m.szyprowski Hi, I had merged this patch set but I realizes this patch has no descriptions enough so please add the descriptions what is this patch. 2012/9/6 Leela Krishna Amudala <l.krishna@samsung.com>: > Add device tree based discovery support for DRM-FIMD driver. > > Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com> > --- > Documentation/devicetree/bindings/fb/drm-fimd.txt | 80 +++++++++++++++++ and, how about making drm folder instead of fb? so like below; Documentation/devicetree/bindings/drm/exynos/fimd.txt Thanks, Inki Dae > drivers/gpu/drm/exynos/exynos_drm_fimd.c | 95 ++++++++++++++++++++- > 2 files changed, 173 insertions(+), 2 deletions(-) > create mode 100644 Documentation/devicetree/bindings/fb/drm-fimd.txt > > diff --git a/Documentation/devicetree/bindings/fb/drm-fimd.txt b/Documentation/devicetree/bindings/fb/drm-fimd.txt > new file mode 100644 > index 0000000..4ff1829 > --- /dev/null > +++ b/Documentation/devicetree/bindings/fb/drm-fimd.txt > @@ -0,0 +1,80 @@ > +* Samsung Display Controller using DRM frame work > + > +The display controller is used to transfer image data from memory to an > +external LCD driver interface. It supports various color formats such as > +rgb and yuv. > + > +Required properties: > + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fb" for > + fimd using DRM frame work. > + - reg: physical base address of the controller and length of memory > + mapped region. > + - interrupts: Three interrupts should be specified. The interrupts should be > + specified in the following order. > + - VSYNC interrupt > + - FIFO level interrupt > + - FIMD System Interrupt > + > + - samsung,fimd-display: This property should specify the phandle of the > + display device node which holds the video interface timing with the > + below mentioned properties. > + > + - lcd-htiming: Specifies the horizontal timing for the overlay. The > + horizontal timing includes four parameters in the following order. > + > + - horizontal back porch (in number of lcd clocks) > + - horizontal front porch (in number of lcd clocks) > + - hsync pulse width (in number of lcd clocks) > + - Display panels X resolution. > + > + - lcd-vtiming: Specifies the vertical timing for the overlay. The > + vertical timing includes four parameters in the following order. > + > + - vertical back porch (in number of lcd lines) > + - vertical front porch (in number of lcd lines) > + - vsync pulse width (in number of lcd clocks) > + - Display panels Y resolution. > + > + > + - samsung,default-window: Specifies the default window number of the fimd controller. > + > + - samsung,fimd-win-bpp: Specifies the bits per pixel. > + > +Optional properties: > + - samsung,fimd-vidout-rgb: Video output format is RGB. > + - samsung,fimd-inv-vclk: invert video clock polarity. > + - samsung,fimd-frame-rate: Number of video frames per second. > + > +Example: > + > + The following is an example for the fimd controller is split into > + two portions. The SoC specific portion can be specified in the SoC > + specific dts file. The board specific portion can be specified in the > + board specific dts file. > + > + - SoC Specific portion > + > + fimd { > + compatible = "samsung,exynos5-fimd"; > + interrupt-parent = <&combiner>; > + reg = <0x14400000 0x40000>; > + interrupts = <18 5>, <18 4>, <18 6>; > + }; > + > + - Board Specific portion > + > + lcd_fimd0: lcd_panel0 { > + lcd-htiming = <4 4 4 480>; > + lcd-vtiming = <4 4 4 320>; > + supports-mipi-panel; > + }; > + > + fimd { > + samsung,fimd-display = <&lcd_fimd0>; > + samsung,fimd-vidout-rgb; > + samsung,fimd-inv-vclk; > + samsung,fimd-frame-rate = <60>; > + samsung,default-window = <0>; > + samsung,fimd-win-bpp = <32>; > + }; > + > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > index 3701fbe..a4fa8e9 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > @@ -18,6 +18,7 @@ > #include <linux/platform_device.h> > #include <linux/clk.h> > #include <linux/pm_runtime.h> > +#include <linux/of.h> > > #include <video/samsung_fimd.h> > #include <drm/exynos_drm.h> > @@ -103,9 +104,18 @@ struct fimd_context { > struct exynos_drm_panel_info *panel; > }; > > +static const struct of_device_id fimd_dt_match[]; > + > static inline struct fimd_driver_data *drm_fimd_get_driver_data( > struct platform_device *pdev) > { > +#ifdef CONFIG_OF > + if (pdev->dev.of_node) { > + const struct of_device_id *match; > + match = of_match_ptr(fimd_dt_match); > + return (struct fimd_driver_data *)match->data; > + } > +#endif > return (struct fimd_driver_data *) > platform_get_device_id(pdev)->driver_data; > } > @@ -809,12 +819,77 @@ static int fimd_power_on(struct fimd_context *ctx, bool enable) > return 0; > } > > +#ifdef CONFIG_OF > +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) > +{ > + struct device_node *np = dev->of_node; > + struct device_node *disp_np; > + struct exynos_drm_fimd_pdata *pd; > + u32 data[4]; > + > + pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); > + if (!pd) { > + dev_err(dev, "memory allocation for pdata failed\n"); > + return ERR_PTR(-ENOMEM); > + } > + > + if (of_get_property(np, "samsung,fimd-vidout-rgb", NULL)) > + pd->vidcon0 |= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB; > + if (of_get_property(np, "samsung,fimd-inv-hsync", NULL)) > + pd->vidcon1 |= VIDCON1_INV_HSYNC; > + if (of_get_property(np, "samsung,fimd-inv-vsync", NULL)) > + pd->vidcon1 |= VIDCON1_INV_VSYNC; > + if (of_get_property(np, "samsung,fimd-inv-vclk", NULL)) > + pd->vidcon1 |= VIDCON1_INV_VCLK; > + if (of_get_property(np, "samsung,fimd-inv-vden", NULL)) > + pd->vidcon1 |= VIDCON1_INV_VDEN; > + > + disp_np = of_parse_phandle(np, "samsung,fimd-display", 0); > + if (!disp_np) { > + dev_err(dev, "unable to find display panel info\n"); > + return ERR_PTR(-EINVAL); > + } > + > + if (of_property_read_u32_array(disp_np, "lcd-htiming", data, 4)) { > + dev_err(dev, "invalid horizontal timing\n"); > + return ERR_PTR(-EINVAL); > + } > + pd->panel.timing.left_margin = data[0]; > + pd->panel.timing.right_margin = data[1]; > + pd->panel.timing.hsync_len = data[2]; > + pd->panel.timing.xres = data[3]; > + > + if (of_property_read_u32_array(disp_np, "lcd-vtiming", data, 4)) { > + dev_err(dev, "invalid vertical timing\n"); > + return ERR_PTR(-EINVAL); > + } > + pd->panel.timing.upper_margin = data[0]; > + pd->panel.timing.lower_margin = data[1]; > + pd->panel.timing.vsync_len = data[2]; > + pd->panel.timing.yres = data[3]; > + > + of_property_read_u32(np, "samsung,fimd-frame-rate", > + &pd->panel.timing.refresh); > + > + of_property_read_u32(np, "samsung,default-window", &pd->default_win); > + > + of_property_read_u32(np, "samsung,fimd-win-bpp", &pd->bpp); > + > + return pd; > +} > +#else > +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) > +{ > + return NULL; > +} > +#endif /* CONFIG_OF */ > + > static int __devinit fimd_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > struct fimd_context *ctx; > struct exynos_drm_subdrv *subdrv; > - struct exynos_drm_fimd_pdata *pdata; > + struct exynos_drm_fimd_pdata *pdata = pdev->dev.platform_data; > struct exynos_drm_panel_info *panel; > struct resource *res; > int win; > @@ -822,7 +897,11 @@ static int __devinit fimd_probe(struct platform_device *pdev) > > DRM_DEBUG_KMS("%s\n", __FILE__); > > - pdata = pdev->dev.platform_data; > + if (pdev->dev.of_node) { > + pdata = drm_fimd_dt_parse_pdata(&pdev->dev); > + if (IS_ERR(pdata)) > + return PTR_ERR(pdata); > + } > if (!pdata) { > dev_err(dev, "no platform data specified\n"); > return -EINVAL; > @@ -1016,6 +1095,17 @@ static struct platform_device_id fimd_driver_ids[] = { > }; > MODULE_DEVICE_TABLE(platform, fimd_driver_ids); > > +#ifdef CONFIG_OF > +static const struct of_device_id fimd_dt_match[] = { > + { .compatible = "samsung,exynos5-fimd", > + .data = &exynos5_fimd_driver_data }, > + { .compatible = "samsung,exynos4-fb", > + .data = &exynos4_fimd_driver_data }, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, fimd_dt_match); > +#endif > + > static const struct dev_pm_ops fimd_pm_ops = { > SET_SYSTEM_SLEEP_PM_OPS(fimd_suspend, fimd_resume) > SET_RUNTIME_PM_OPS(fimd_runtime_suspend, fimd_runtime_resume, NULL) > @@ -1029,5 +1119,6 @@ struct platform_driver fimd_driver = { > .name = "exynos-drm-fimd", > .owner = THIS_MODULE, > .pm = &fimd_pm_ops, > + .of_match_table = of_match_ptr(fimd_dt_match), > }, > }; > -- > 1.7.0.4 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH V4 2/2] video: drm: exynos: Add device tree support 2012-09-20 6:29 ` Inki Dae @ 2012-09-20 9:31 ` Leela Krishna Amudala 0 siblings, 0 replies; 11+ messages in thread From: Leela Krishna Amudala @ 2012-09-20 9:31 UTC (permalink / raw) To: Inki Dae Cc: dri-devel, devicetree-discuss, kgene.kim, linux-samsung-soc, laurent.pinchart, linux-arm-kernel, m.szyprowski Hello Inki Dae, On Thu, Sep 20, 2012 at 11:59 AM, Inki Dae <inki.dae@samsung.com> wrote: > Hi, > > I had merged this patch set but I realizes this patch has no > descriptions enough so please add the descriptions what is this patch. > Will give more description and post the next version. > > 2012/9/6 Leela Krishna Amudala <l.krishna@samsung.com>: >> Add device tree based discovery support for DRM-FIMD driver. >> >> Signed-off-by: Leela Krishna Amudala <l.krishna@samsung.com> >> --- >> Documentation/devicetree/bindings/fb/drm-fimd.txt | 80 +++++++++++++++++ > > and, how about making drm folder instead of fb? so like below; > Documentation/devicetree/bindings/drm/exynos/fimd.txt > Okay, will move it to the drm folder. Best Wishes, Leela Krishna Amudala. > Thanks, > Inki Dae > >> drivers/gpu/drm/exynos/exynos_drm_fimd.c | 95 ++++++++++++++++++++- >> 2 files changed, 173 insertions(+), 2 deletions(-) >> create mode 100644 Documentation/devicetree/bindings/fb/drm-fimd.txt >> >> diff --git a/Documentation/devicetree/bindings/fb/drm-fimd.txt b/Documentation/devicetree/bindings/fb/drm-fimd.txt >> new file mode 100644 >> index 0000000..4ff1829 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/fb/drm-fimd.txt >> @@ -0,0 +1,80 @@ >> +* Samsung Display Controller using DRM frame work >> + >> +The display controller is used to transfer image data from memory to an >> +external LCD driver interface. It supports various color formats such as >> +rgb and yuv. >> + >> +Required properties: >> + - compatible: Should be "samsung,exynos5-fimd" or "samsung,exynos4-fb" for >> + fimd using DRM frame work. >> + - reg: physical base address of the controller and length of memory >> + mapped region. >> + - interrupts: Three interrupts should be specified. The interrupts should be >> + specified in the following order. >> + - VSYNC interrupt >> + - FIFO level interrupt >> + - FIMD System Interrupt >> + >> + - samsung,fimd-display: This property should specify the phandle of the >> + display device node which holds the video interface timing with the >> + below mentioned properties. >> + >> + - lcd-htiming: Specifies the horizontal timing for the overlay. The >> + horizontal timing includes four parameters in the following order. >> + >> + - horizontal back porch (in number of lcd clocks) >> + - horizontal front porch (in number of lcd clocks) >> + - hsync pulse width (in number of lcd clocks) >> + - Display panels X resolution. >> + >> + - lcd-vtiming: Specifies the vertical timing for the overlay. The >> + vertical timing includes four parameters in the following order. >> + >> + - vertical back porch (in number of lcd lines) >> + - vertical front porch (in number of lcd lines) >> + - vsync pulse width (in number of lcd clocks) >> + - Display panels Y resolution. >> + >> + >> + - samsung,default-window: Specifies the default window number of the fimd controller. >> + >> + - samsung,fimd-win-bpp: Specifies the bits per pixel. >> + >> +Optional properties: >> + - samsung,fimd-vidout-rgb: Video output format is RGB. >> + - samsung,fimd-inv-vclk: invert video clock polarity. >> + - samsung,fimd-frame-rate: Number of video frames per second. >> + >> +Example: >> + >> + The following is an example for the fimd controller is split into >> + two portions. The SoC specific portion can be specified in the SoC >> + specific dts file. The board specific portion can be specified in the >> + board specific dts file. >> + >> + - SoC Specific portion >> + >> + fimd { >> + compatible = "samsung,exynos5-fimd"; >> + interrupt-parent = <&combiner>; >> + reg = <0x14400000 0x40000>; >> + interrupts = <18 5>, <18 4>, <18 6>; >> + }; >> + >> + - Board Specific portion >> + >> + lcd_fimd0: lcd_panel0 { >> + lcd-htiming = <4 4 4 480>; >> + lcd-vtiming = <4 4 4 320>; >> + supports-mipi-panel; >> + }; >> + >> + fimd { >> + samsung,fimd-display = <&lcd_fimd0>; >> + samsung,fimd-vidout-rgb; >> + samsung,fimd-inv-vclk; >> + samsung,fimd-frame-rate = <60>; >> + samsung,default-window = <0>; >> + samsung,fimd-win-bpp = <32>; >> + }; >> + >> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c >> index 3701fbe..a4fa8e9 100644 >> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c >> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c >> @@ -18,6 +18,7 @@ >> #include <linux/platform_device.h> >> #include <linux/clk.h> >> #include <linux/pm_runtime.h> >> +#include <linux/of.h> >> >> #include <video/samsung_fimd.h> >> #include <drm/exynos_drm.h> >> @@ -103,9 +104,18 @@ struct fimd_context { >> struct exynos_drm_panel_info *panel; >> }; >> >> +static const struct of_device_id fimd_dt_match[]; >> + >> static inline struct fimd_driver_data *drm_fimd_get_driver_data( >> struct platform_device *pdev) >> { >> +#ifdef CONFIG_OF >> + if (pdev->dev.of_node) { >> + const struct of_device_id *match; >> + match = of_match_ptr(fimd_dt_match); >> + return (struct fimd_driver_data *)match->data; >> + } >> +#endif >> return (struct fimd_driver_data *) >> platform_get_device_id(pdev)->driver_data; >> } >> @@ -809,12 +819,77 @@ static int fimd_power_on(struct fimd_context *ctx, bool enable) >> return 0; >> } >> >> +#ifdef CONFIG_OF >> +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) >> +{ >> + struct device_node *np = dev->of_node; >> + struct device_node *disp_np; >> + struct exynos_drm_fimd_pdata *pd; >> + u32 data[4]; >> + >> + pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); >> + if (!pd) { >> + dev_err(dev, "memory allocation for pdata failed\n"); >> + return ERR_PTR(-ENOMEM); >> + } >> + >> + if (of_get_property(np, "samsung,fimd-vidout-rgb", NULL)) >> + pd->vidcon0 |= VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB; >> + if (of_get_property(np, "samsung,fimd-inv-hsync", NULL)) >> + pd->vidcon1 |= VIDCON1_INV_HSYNC; >> + if (of_get_property(np, "samsung,fimd-inv-vsync", NULL)) >> + pd->vidcon1 |= VIDCON1_INV_VSYNC; >> + if (of_get_property(np, "samsung,fimd-inv-vclk", NULL)) >> + pd->vidcon1 |= VIDCON1_INV_VCLK; >> + if (of_get_property(np, "samsung,fimd-inv-vden", NULL)) >> + pd->vidcon1 |= VIDCON1_INV_VDEN; >> + >> + disp_np = of_parse_phandle(np, "samsung,fimd-display", 0); >> + if (!disp_np) { >> + dev_err(dev, "unable to find display panel info\n"); >> + return ERR_PTR(-EINVAL); >> + } >> + >> + if (of_property_read_u32_array(disp_np, "lcd-htiming", data, 4)) { >> + dev_err(dev, "invalid horizontal timing\n"); >> + return ERR_PTR(-EINVAL); >> + } >> + pd->panel.timing.left_margin = data[0]; >> + pd->panel.timing.right_margin = data[1]; >> + pd->panel.timing.hsync_len = data[2]; >> + pd->panel.timing.xres = data[3]; >> + >> + if (of_property_read_u32_array(disp_np, "lcd-vtiming", data, 4)) { >> + dev_err(dev, "invalid vertical timing\n"); >> + return ERR_PTR(-EINVAL); >> + } >> + pd->panel.timing.upper_margin = data[0]; >> + pd->panel.timing.lower_margin = data[1]; >> + pd->panel.timing.vsync_len = data[2]; >> + pd->panel.timing.yres = data[3]; >> + >> + of_property_read_u32(np, "samsung,fimd-frame-rate", >> + &pd->panel.timing.refresh); >> + >> + of_property_read_u32(np, "samsung,default-window", &pd->default_win); >> + >> + of_property_read_u32(np, "samsung,fimd-win-bpp", &pd->bpp); >> + >> + return pd; >> +} >> +#else >> +static struct exynos_drm_fimd_pdata *drm_fimd_dt_parse_pdata(struct device *dev) >> +{ >> + return NULL; >> +} >> +#endif /* CONFIG_OF */ >> + >> static int __devinit fimd_probe(struct platform_device *pdev) >> { >> struct device *dev = &pdev->dev; >> struct fimd_context *ctx; >> struct exynos_drm_subdrv *subdrv; >> - struct exynos_drm_fimd_pdata *pdata; >> + struct exynos_drm_fimd_pdata *pdata = pdev->dev.platform_data; >> struct exynos_drm_panel_info *panel; >> struct resource *res; >> int win; >> @@ -822,7 +897,11 @@ static int __devinit fimd_probe(struct platform_device *pdev) >> >> DRM_DEBUG_KMS("%s\n", __FILE__); >> >> - pdata = pdev->dev.platform_data; >> + if (pdev->dev.of_node) { >> + pdata = drm_fimd_dt_parse_pdata(&pdev->dev); >> + if (IS_ERR(pdata)) >> + return PTR_ERR(pdata); >> + } >> if (!pdata) { >> dev_err(dev, "no platform data specified\n"); >> return -EINVAL; >> @@ -1016,6 +1095,17 @@ static struct platform_device_id fimd_driver_ids[] = { >> }; >> MODULE_DEVICE_TABLE(platform, fimd_driver_ids); >> >> +#ifdef CONFIG_OF >> +static const struct of_device_id fimd_dt_match[] = { >> + { .compatible = "samsung,exynos5-fimd", >> + .data = &exynos5_fimd_driver_data }, >> + { .compatible = "samsung,exynos4-fb", >> + .data = &exynos4_fimd_driver_data }, >> + {}, >> +}; >> +MODULE_DEVICE_TABLE(of, fimd_dt_match); >> +#endif >> + >> static const struct dev_pm_ops fimd_pm_ops = { >> SET_SYSTEM_SLEEP_PM_OPS(fimd_suspend, fimd_resume) >> SET_RUNTIME_PM_OPS(fimd_runtime_suspend, fimd_runtime_resume, NULL) >> @@ -1029,5 +1119,6 @@ struct platform_driver fimd_driver = { >> .name = "exynos-drm-fimd", >> .owner = THIS_MODULE, >> .pm = &fimd_pm_ops, >> + .of_match_table = of_match_ptr(fimd_dt_match), >> }, >> }; >> -- >> 1.7.0.4 >> >> >> _______________________________________________ >> linux-arm-kernel mailing list >> linux-arm-kernel@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2012-09-20 9:31 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-09-05 15:39 [PATCH V4 0/2] video: drm: Add Device tree support to DRM-FIMD Leela Krishna Amudala 2012-09-05 15:39 ` [PATCH V4 1/2] drm/exynos: add platform_device_id table and driver data for drm fimd Leela Krishna Amudala 2012-09-05 15:39 ` [PATCH V4 2/2] video: drm: exynos: Add device tree support Leela Krishna Amudala 2012-09-05 12:28 ` Kyungmin Park 2012-09-06 7:21 ` InKi Dae 2012-09-06 11:05 ` Sylwester Nawrocki 2012-09-07 3:46 ` Leela Krishna Amudala 2012-09-07 6:07 ` Inki Dae 2012-09-07 7:09 ` Inki Dae 2012-09-20 6:29 ` Inki Dae 2012-09-20 9:31 ` Leela Krishna Amudala
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).