[PATCH v7 05/15] drm/exynos: add Exynos5433 decon driver
On 2015ë 06ì 22ì¼ 20:41, Varka Bhadram wrote: > Hi, > > On 06/22/2015 04:46 PM, Inki Dae wrote: > >> From: Joonyoung Shim >> >> DECON(Display and Enhancement Controller) is new IP replacing FIMD in >> Exynos5433. This patch adds Exynos5433 decon driver. >> >> Changelog v7: >> - Rebased on top of exynos-drm-next. >> - Added runtime pm support. >> >> Signed-off-by: Joonyoung Shim >> Signed-off-by: Hyungwon Hwang >> Signed-off-by: Inki Dae >> --- >> > > (...) > >> +static int exynos5433_decon_probe(struct platform_device *pdev) >> +{ >> +struct device *dev = >dev; >> +struct decon_context *ctx; >> +struct resource *res; >> +int ret; >> +int i; >> + >> +ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); >> +if (!ctx) >> +return -ENOMEM; >> + >> +ctx->default_win = 0; >> +ctx->suspended = true; >> +ctx->dev = dev; >> +if (of_get_child_by_name(dev->of_node, "i80-if-timings")) >> +ctx->i80_if = true; >> + >> +for (i = 0; i < ARRAY_SIZE(decon_clks_name); i++) { >> +struct clk *clk; >> + >> +clk = devm_clk_get(ctx->dev, decon_clks_name[i]); >> +if (IS_ERR(clk)) >> +return PTR_ERR(clk); >> + >> +ctx->clks[i] = clk; >> +} >> + >> +res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >> +if (!res) { >> +dev_err(dev, "cannot find IO resource\n"); >> +return -ENXIO; >> +} >> + > > You people promised me to remove this check :-) Right but isn't it better to check an error explicitly? Anyway trivial one. > > http://lists.freedesktop.org/archives/dri-devel/2015-April/081077.html > >> +ctx->addr = devm_ioremap_resource(dev, res); >> +if (IS_ERR(ctx->addr)) { >> +dev_err(dev, "ioremap failed\n"); >> +return PTR_ERR(ctx->addr); >> +} >> + >> +res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, >> +ctx->i80_if ? "lcd_sys" : "vsync"); >> +if (!res) { >> +dev_err(dev, "cannot find IRQ resource\n"); >> +return -ENXIO; >> +} >> + >> +ret = devm_request_irq(dev, res->start, ctx->i80_if ? >> +decon_lcd_sys_irq_handler : decon_vsync_irq_handler, 0, >> +"drm_decon", ctx); >> +if (ret < 0) { >> +dev_err(dev, "lcd_sys irq request failed\n"); >> +return ret; >> +} >> + >> +platform_set_drvdata(pdev, ctx); > > You are setting the driver data as ctx.. > > But no where you are using it...? > > Am i missing anything ? See decon_bind and decon_unbind functions. :) Thanks, Inki Dae >
[PATCH v7 05/15] drm/exynos: add Exynos5433 decon driver
From: Joonyoung ShimDECON(Display and Enhancement Controller) is new IP replacing FIMD in Exynos5433. This patch adds Exynos5433 decon driver. Changelog v7: - Rebased on top of exynos-drm-next. - Added runtime pm support. Signed-off-by: Joonyoung Shim Signed-off-by: Hyungwon Hwang Signed-off-by: Inki Dae --- .../devicetree/bindings/video/exynos5433-decon.txt | 65 ++ drivers/gpu/drm/exynos/Kconfig |6 + drivers/gpu/drm/exynos/Makefile|1 + drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 660 drivers/gpu/drm/exynos/exynos_drm_drv.h|1 + include/video/exynos5433_decon.h | 165 + 6 files changed, 898 insertions(+) create mode 100644 Documentation/devicetree/bindings/video/exynos5433-decon.txt create mode 100644 drivers/gpu/drm/exynos/exynos5433_drm_decon.c create mode 100644 include/video/exynos5433_decon.h diff --git a/Documentation/devicetree/bindings/video/exynos5433-decon.txt b/Documentation/devicetree/bindings/video/exynos5433-decon.txt new file mode 100644 index 000..377afbf --- /dev/null +++ b/Documentation/devicetree/bindings/video/exynos5433-decon.txt @@ -0,0 +1,65 @@ +Device-Tree bindings for Samsung Exynos SoC display controller (DECON) + +DECON (Display and Enhancement Controller) is the Display Controller for the +Exynos series of SoCs which transfers the image data from a video memory +buffer to an external LCD interface. + +Required properties: +- compatible: value should be "samsung,exynos5433-decon"; +- reg: physical base address and length of the DECON registers set. +- interrupts: should contain a list of all DECON IP block interrupts in the + order: VSYNC, LCD_SYSTEM. The interrupt specifier format + depends on the interrupt controller used. +- interrupt-names: should contain the interrupt names: "vsync", "lcd_sys" + in the same order as they were listed in the interrupts + property. +- clocks: must include clock specifiers corresponding to entries in the + clock-names property. +- clock-names: list of clock names sorted in the same order as the clocks + property. Must contain "aclk_decon", "aclk_smmu_decon0x", + "aclk_xiu_decon0x", "pclk_smmu_decon0x", clk_decon_vclk", + "sclk_decon_eclk" +- ports: contains a port which is connected to mic node. address-cells and +size-cells must 1 and 0, respectively. +- port: contains an endpoint node which is connected to the endpoint in the mic + node. The reg value muset be 0. +- i80-if-timings: specify whether the panel which is connected to decon uses + i80 lcd interface or mipi video interface. This node contains + no timing information as that of fimd does. Because there is + no register in decon to specify i80 interface timing value, + it is not needed, but make it remain to use same kind of node + in fimd and exynos7 decon. + +Example: +SoC specific DT entry: +decon: decon at 1380 { + compatible = "samsung,exynos5433-decon"; + reg = <0x1380 0x2104>; + clocks = <_disp CLK_ACLK_DECON>, <_disp CLK_ACLK_SMMU_DECON0X>, + <_disp CLK_ACLK_XIU_DECON0X>, + <_disp CLK_PCLK_SMMU_DECON0X>, + <_disp CLK_SCLK_DECON_VCLK>, + <_disp CLK_SCLK_DECON_ECLK>; + clock-names = "aclk_decon", "aclk_smmu_decon0x", "aclk_xiu_decon0x", + "pclk_smmu_decon0x", "sclk_decon_vclk", "sclk_decon_eclk"; + interrupt-names = "vsync", "lcd_sys"; + interrupts = <0 202 0>, <0 203 0>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port at 0 { + reg = <0>; + decon_to_mic: endpoint { + remote-endpoint = <_to_decon>; + }; + }; + }; +}; + +Board specific DT entry: + { + i80-if-timings { + }; +}; diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig index ddb7c8a..51a4eb5 100644 --- a/drivers/gpu/drm/exynos/Kconfig +++ b/drivers/gpu/drm/exynos/Kconfig @@ -24,6 +24,12 @@ config DRM_EXYNOS_FIMD help Choose this option if you want to use Exynos FIMD for DRM. +config DRM_EXYNOS5433_DECON + bool "Exynos5433 DRM DECON" + depends on DRM_EXYNOS + help + Choose this option if you want to use Exynos5433 DECON for DRM. + config DRM_EXYNOS7_DECON bool "Exynos7 DRM DECON" depends on DRM_EXYNOS && !FB_S3C diff --git a/drivers/gpu/drm/exynos/Makefile b/drivers/gpu/drm/exynos/Makefile index cc90679..fbd084d 100644 --- a/drivers/gpu/drm/exynos/Makefile +++ b/drivers/gpu/drm/exynos/Makefile @@ -10,6 +10,7 @@ exynosdrm-y := exynos_drm_drv.o exynos_drm_encoder.o \
[PATCH v7 05/15] drm/exynos: add Exynos5433 decon driver
On 06/22/2015 05:27 PM, Inki Dae wrote: > On 2015ë 06ì 22ì¼ 20:41, Varka Bhadram wrote: > (..) > +platform_set_drvdata(pdev, ctx); >> You are setting the driver data as ctx.. >> >> But no where you are using it...? >> >> Am i missing anything ? > See decon_bind and decon_unbind functions. :) Cleared. Thanks -- Best regards, Varka Bhadram.
[PATCH v7 05/15] drm/exynos: add Exynos5433 decon driver
Hi, On 06/22/2015 04:46 PM, Inki Dae wrote: > From: Joonyoung Shim > > DECON(Display and Enhancement Controller) is new IP replacing FIMD in > Exynos5433. This patch adds Exynos5433 decon driver. > > Changelog v7: > - Rebased on top of exynos-drm-next. > - Added runtime pm support. > > Signed-off-by: Joonyoung Shim > Signed-off-by: Hyungwon Hwang > Signed-off-by: Inki Dae > --- > (...) > +static int exynos5433_decon_probe(struct platform_device *pdev) > +{ > + struct device *dev = >dev; > + struct decon_context *ctx; > + struct resource *res; > + int ret; > + int i; > + > + ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); > + if (!ctx) > + return -ENOMEM; > + > + ctx->default_win = 0; > + ctx->suspended = true; > + ctx->dev = dev; > + if (of_get_child_by_name(dev->of_node, "i80-if-timings")) > + ctx->i80_if = true; > + > + for (i = 0; i < ARRAY_SIZE(decon_clks_name); i++) { > + struct clk *clk; > + > + clk = devm_clk_get(ctx->dev, decon_clks_name[i]); > + if (IS_ERR(clk)) > + return PTR_ERR(clk); > + > + ctx->clks[i] = clk; > + } > + > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > + if (!res) { > + dev_err(dev, "cannot find IO resource\n"); > + return -ENXIO; > + } > + You people promised me to remove this check :-) http://lists.freedesktop.org/archives/dri-devel/2015-April/081077.html > + ctx->addr = devm_ioremap_resource(dev, res); > + if (IS_ERR(ctx->addr)) { > + dev_err(dev, "ioremap failed\n"); > + return PTR_ERR(ctx->addr); > + } > + > + res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, > + ctx->i80_if ? "lcd_sys" : "vsync"); > + if (!res) { > + dev_err(dev, "cannot find IRQ resource\n"); > + return -ENXIO; > + } > + > + ret = devm_request_irq(dev, res->start, ctx->i80_if ? > + decon_lcd_sys_irq_handler : decon_vsync_irq_handler, 0, > + "drm_decon", ctx); > + if (ret < 0) { > + dev_err(dev, "lcd_sys irq request failed\n"); > + return ret; > + } > + > + platform_set_drvdata(pdev, ctx); You are setting the driver data as ctx.. But no where you are using it...? Am i missing anything ? -- Best regards, Varka Bhadram.