Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'drm/next/du' of git://linuxtv.org/pinchartl/fbdev into drm-next

Commit "drm/rcar-du: Use struct videomode in platform data" touches board code
in arch/arm/mach-shmobile. There is, to the best of my knowledge, no risk of
conflict for v3.18. Simon, are you fine with getting those changes merged
through Dave's tree (and could you confirm that no conflict should occur) ?

Simon acked the merge:
Acked-by: Simon Horman <horms+renesas@verge.net.au>

* 'drm/next/du' of git://linuxtv.org/pinchartl/fbdev:
drm/rcar-du: Add OF support
drm/rcar-du: Use struct videomode in platform data
video: Add DT bindings for the R-Car Display Unit
video: Add THC63LVDM83D DT bindings documentation
video: Add ADV7123 DT bindings documentation
video: Add DT binding documentation for VGA connector
devicetree: Add vendor prefix "thine" to vendor-prefixes.txt
devicetree: Add vendor prefix "mitsubishi" to vendor-prefixes.txt
drm/shmob: Update copyright notice
drm/rcar-du: Update copyright notice

+644 -197
+2
Documentation/devicetree/bindings/vendor-prefixes.txt
··· 83 83 mediatek MediaTek Inc. 84 84 micrel Micrel Inc. 85 85 microchip Microchip Technology Inc. 86 + mitsubishi Mitsubishi Electric Corporation 86 87 mosaixtech Mosaix Technologies, Inc. 87 88 moxa Moxa 88 89 mpl MPL AG ··· 134 133 ste ST-Ericsson 135 134 stericsson ST-Ericsson 136 135 synology Synology, Inc. 136 + thine THine Electronics, Inc. 137 137 ti Texas Instruments 138 138 tlm Trusted Logic Mobility 139 139 toradex Toradex AG
+50
Documentation/devicetree/bindings/video/adi,adv7123.txt
··· 1 + Analog Device ADV7123 Video DAC 2 + ------------------------------- 3 + 4 + The ADV7123 is a digital-to-analog converter that outputs VGA signals from a 5 + parallel video input. 6 + 7 + Required properties: 8 + 9 + - compatible: Should be "adi,adv7123" 10 + 11 + Optional properties: 12 + 13 + - psave-gpios: Power save control GPIO 14 + 15 + Required nodes: 16 + 17 + The ADV7123 has two video ports. Their connections are modeled using the OF 18 + graph bindings specified in Documentation/devicetree/bindings/graph.txt. 19 + 20 + - Video port 0 for DPI input 21 + - Video port 1 for VGA output 22 + 23 + 24 + Example 25 + ------- 26 + 27 + adv7123: encoder@0 { 28 + compatible = "adi,adv7123"; 29 + 30 + ports { 31 + #address-cells = <1>; 32 + #size-cells = <0>; 33 + 34 + port@0 { 35 + reg = <0>; 36 + 37 + adv7123_in: endpoint@0 { 38 + remote-endpoint = <&dpi_out>; 39 + }; 40 + }; 41 + 42 + port@1 { 43 + reg = <1>; 44 + 45 + adv7123_out: endpoint@0 { 46 + remote-endpoint = <&vga_connector_in>; 47 + }; 48 + }; 49 + }; 50 + };
+84
Documentation/devicetree/bindings/video/renesas,du.txt
··· 1 + * Renesas R-Car Display Unit (DU) 2 + 3 + Required Properties: 4 + 5 + - compatible: must be one of the following. 6 + - "renesas,du-r8a7779" for R8A7779 (R-Car H1) compatible DU 7 + - "renesas,du-r8a7790" for R8A7790 (R-Car H2) compatible DU 8 + - "renesas,du-r8a7791" for R8A7791 (R-Car M2) compatible DU 9 + 10 + - reg: A list of base address and length of each memory resource, one for 11 + each entry in the reg-names property. 12 + - reg-names: Name of the memory resources. The DU requires one memory 13 + resource for the DU core (named "du") and one memory resource for each 14 + LVDS encoder (named "lvds.x" with "x" being the LVDS controller numerical 15 + index). 16 + 17 + - interrupt-parent: phandle of the parent interrupt controller. 18 + - interrupts: Interrupt specifiers for the DU interrupts. 19 + 20 + - clocks: A list of phandles + clock-specifier pairs, one for each entry in 21 + the clock-names property. 22 + - clock-names: Name of the clocks. This property is model-dependent. 23 + - R8A7779 uses a single functional clock. The clock doesn't need to be 24 + named. 25 + - R8A7790 and R8A7791 use one functional clock per channel and one clock 26 + per LVDS encoder. The functional clocks must be named "du.x" with "x" 27 + being the channel numerical index. The LVDS clocks must be named 28 + "lvds.x" with "x" being the LVDS encoder numerical index. 29 + 30 + Required nodes: 31 + 32 + The connections to the DU output video ports are modeled using the OF graph 33 + bindings specified in Documentation/devicetree/bindings/graph.txt. 34 + 35 + The following table lists for each supported model the port number 36 + corresponding to each DU output. 37 + 38 + Port 0 Port1 Port2 39 + ----------------------------------------------------------------------------- 40 + R8A7779 (H1) DPAD 0 DPAD 1 - 41 + R8A7790 (H2) DPAD LVDS 0 LVDS 1 42 + R8A7791 (M2) DPAD LVDS 0 - 43 + 44 + 45 + Example: R8A7790 (R-Car H2) DU 46 + 47 + du: du@feb00000 { 48 + compatible = "renesas,du-r8a7790"; 49 + reg = <0 0xfeb00000 0 0x70000>, 50 + <0 0xfeb90000 0 0x1c>, 51 + <0 0xfeb94000 0 0x1c>; 52 + reg-names = "du", "lvds.0", "lvds.1"; 53 + interrupt-parent = <&gic>; 54 + interrupts = <0 256 IRQ_TYPE_LEVEL_HIGH>, 55 + <0 268 IRQ_TYPE_LEVEL_HIGH>, 56 + <0 269 IRQ_TYPE_LEVEL_HIGH>; 57 + clocks = <&mstp7_clks R8A7790_CLK_DU0>, 58 + <&mstp7_clks R8A7790_CLK_DU1>, 59 + <&mstp7_clks R8A7790_CLK_DU2>, 60 + <&mstp7_clks R8A7790_CLK_LVDS0>, 61 + <&mstp7_clks R8A7790_CLK_LVDS1>; 62 + clock-names = "du.0", "du.1", "du.2", "lvds.0", "lvds.1"; 63 + 64 + ports { 65 + #address-cells = <1>; 66 + #size-cells = <0>; 67 + 68 + port@0 { 69 + reg = <0>; 70 + du_out_rgb: endpoint { 71 + }; 72 + }; 73 + port@1 { 74 + reg = <1>; 75 + du_out_lvds0: endpoint { 76 + }; 77 + }; 78 + port@2 { 79 + reg = <2>; 80 + du_out_lvds1: endpoint { 81 + }; 82 + }; 83 + }; 84 + };
+50
Documentation/devicetree/bindings/video/thine,thc63lvdm83d
··· 1 + THine Electronics THC63LVDM83D LVDS serializer 2 + ---------------------------------------------- 3 + 4 + The THC63LVDM83D is an LVDS serializer designed to support pixel data 5 + transmission between a host and a flat panel. 6 + 7 + Required properties: 8 + 9 + - compatible: Should be "thine,thc63lvdm83d" 10 + 11 + Optional properties: 12 + 13 + - pwdn-gpios: Power down control GPIO 14 + 15 + Required nodes: 16 + 17 + The THC63LVDM83D has two video ports. Their connections are modeled using the 18 + OFgraph bindings specified in Documentation/devicetree/bindings/graph.txt. 19 + 20 + - Video port 0 for CMOS/TTL input 21 + - Video port 1 for LVDS output 22 + 23 + 24 + Example 25 + ------- 26 + 27 + lvds_enc: encoder@0 { 28 + compatible = "thine,thc63lvdm83d"; 29 + 30 + ports { 31 + #address-cells = <1>; 32 + #size-cells = <0>; 33 + 34 + port@0 { 35 + reg = <0>; 36 + 37 + lvds_enc_in: endpoint@0 { 38 + remote-endpoint = <&rgb_out>; 39 + }; 40 + }; 41 + 42 + port@1 { 43 + reg = <1>; 44 + 45 + lvds_enc_out: endpoint@0 { 46 + remote-endpoint = <&panel_in>; 47 + }; 48 + }; 49 + }; 50 + };
+36
Documentation/devicetree/bindings/video/vga-connector.txt
··· 1 + VGA Connector 2 + ============= 3 + 4 + Required properties: 5 + 6 + - compatible: "vga-connector" 7 + 8 + Optional properties: 9 + 10 + - label: a symbolic name for the connector corresponding to a hardware label 11 + - ddc-i2c-bus: phandle to the I2C bus that is connected to VGA DDC 12 + 13 + Required nodes: 14 + 15 + The VGA connector internal connections are modeled using the OF graph bindings 16 + specified in Documentation/devicetree/bindings/graph.txt. 17 + 18 + The VGA connector has a single port that must be connected to a video source 19 + port. 20 + 21 + 22 + Example 23 + ------- 24 + 25 + vga0: connector@0 { 26 + compatible = "vga-connector"; 27 + label = "vga"; 28 + 29 + ddc-i2c-bus = <&i2c3>; 30 + 31 + port { 32 + vga_connector_in: endpoint { 33 + remote-endpoint = <&adv7123_out>; 34 + }; 35 + }; 36 + };
+9 -10
arch/arm/mach-shmobile/board-koelsch-reference.c
··· 41 41 .width_mm = 210, 42 42 .height_mm = 158, 43 43 .mode = { 44 - .clock = 65000, 45 - .hdisplay = 1024, 46 - .hsync_start = 1048, 47 - .hsync_end = 1184, 48 - .htotal = 1344, 49 - .vdisplay = 768, 50 - .vsync_start = 771, 51 - .vsync_end = 777, 52 - .vtotal = 806, 53 - .flags = 0, 44 + .pixelclock = 65000000, 45 + .hactive = 1024, 46 + .hfront_porch = 20, 47 + .hback_porch = 160, 48 + .hsync_len = 136, 49 + .vactive = 768, 50 + .vfront_porch = 3, 51 + .vback_porch = 29, 52 + .vsync_len = 6, 54 53 }, 55 54 }, 56 55 },
+9 -10
arch/arm/mach-shmobile/board-koelsch.c
··· 63 63 .width_mm = 210, 64 64 .height_mm = 158, 65 65 .mode = { 66 - .clock = 65000, 67 - .hdisplay = 1024, 68 - .hsync_start = 1048, 69 - .hsync_end = 1184, 70 - .htotal = 1344, 71 - .vdisplay = 768, 72 - .vsync_start = 771, 73 - .vsync_end = 777, 74 - .vtotal = 806, 75 - .flags = 0, 66 + .pixelclock = 65000000, 67 + .hactive = 1024, 68 + .hfront_porch = 20, 69 + .hback_porch = 160, 70 + .hsync_len = 136, 71 + .vactive = 768, 72 + .vfront_porch = 3, 73 + .vback_porch = 29, 74 + .vsync_len = 6, 76 75 }, 77 76 }, 78 77 },
+9 -10
arch/arm/mach-shmobile/board-lager-reference.c
··· 43 43 .width_mm = 210, 44 44 .height_mm = 158, 45 45 .mode = { 46 - .clock = 65000, 47 - .hdisplay = 1024, 48 - .hsync_start = 1048, 49 - .hsync_end = 1184, 50 - .htotal = 1344, 51 - .vdisplay = 768, 52 - .vsync_start = 771, 53 - .vsync_end = 777, 54 - .vtotal = 806, 55 - .flags = 0, 46 + .pixelclock = 65000000, 47 + .hactive = 1024, 48 + .hfront_porch = 20, 49 + .hback_porch = 160, 50 + .hsync_len = 136, 51 + .vactive = 768, 52 + .vfront_porch = 3, 53 + .vback_porch = 29, 54 + .vsync_len = 6, 56 55 }, 57 56 }, 58 57 },
+9 -10
arch/arm/mach-shmobile/board-lager.c
··· 99 99 .width_mm = 210, 100 100 .height_mm = 158, 101 101 .mode = { 102 - .clock = 65000, 103 - .hdisplay = 1024, 104 - .hsync_start = 1048, 105 - .hsync_end = 1184, 106 - .htotal = 1344, 107 - .vdisplay = 768, 108 - .vsync_start = 771, 109 - .vsync_end = 777, 110 - .vtotal = 806, 111 - .flags = 0, 102 + .pixelclock = 65000000, 103 + .hactive = 1024, 104 + .hfront_porch = 20, 105 + .hback_porch = 160, 106 + .hsync_len = 136, 107 + .vactive = 768, 108 + .vfront_porch = 3, 109 + .vback_porch = 29, 110 + .vsync_len = 6, 112 111 }, 113 112 }, 114 113 },
+9 -10
arch/arm/mach-shmobile/board-marzen.c
··· 192 192 .width_mm = 210, 193 193 .height_mm = 158, 194 194 .mode = { 195 - .clock = 65000, 196 - .hdisplay = 1024, 197 - .hsync_start = 1048, 198 - .hsync_end = 1184, 199 - .htotal = 1344, 200 - .vdisplay = 768, 201 - .vsync_start = 771, 202 - .vsync_end = 777, 203 - .vtotal = 806, 204 - .flags = 0, 195 + .pixelclock = 65000000, 196 + .hactive = 1024, 197 + .hfront_porch = 20, 198 + .hback_porch = 160, 199 + .hsync_len = 136, 200 + .vactive = 768, 201 + .vfront_porch = 3, 202 + .vback_porch = 29, 203 + .vsync_len = 6, 205 204 }, 206 205 }, 207 206 },
+1
drivers/gpu/drm/rcar-du/Kconfig
··· 6 6 select DRM_KMS_CMA_HELPER 7 7 select DRM_GEM_CMA_HELPER 8 8 select DRM_KMS_FB_HELPER 9 + select VIDEOMODE_HELPERS 9 10 help 10 11 Choose this option if you have an R-Car chipset. 11 12 If M is selected the module will be called rcar-du-drm.
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_crtc.c
··· 1 1 /* 2 2 * rcar_du_crtc.c -- R-Car Display Unit CRTCs 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_crtc.h
··· 1 1 /* 2 2 * rcar_du_crtc.h -- R-Car Display Unit CRTCs 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+98 -74
drivers/gpu/drm/rcar-du/rcar_du_drv.c
··· 1 1 /* 2 2 * rcar_du_drv.c -- R-Car Display Unit DRM driver 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 * ··· 15 15 #include <linux/io.h> 16 16 #include <linux/mm.h> 17 17 #include <linux/module.h> 18 + #include <linux/of_device.h> 18 19 #include <linux/platform_device.h> 19 20 #include <linux/pm.h> 20 21 #include <linux/slab.h> ··· 29 28 #include "rcar_du_drv.h" 30 29 #include "rcar_du_kms.h" 31 30 #include "rcar_du_regs.h" 31 + 32 + /* ----------------------------------------------------------------------------- 33 + * Device Information 34 + */ 35 + 36 + static const struct rcar_du_device_info rcar_du_r8a7779_info = { 37 + .features = 0, 38 + .num_crtcs = 2, 39 + .routes = { 40 + /* R8A7779 has two RGB outputs and one (currently unsupported) 41 + * TCON output. 42 + */ 43 + [RCAR_DU_OUTPUT_DPAD0] = { 44 + .possible_crtcs = BIT(0), 45 + .encoder_type = DRM_MODE_ENCODER_NONE, 46 + .port = 0, 47 + }, 48 + [RCAR_DU_OUTPUT_DPAD1] = { 49 + .possible_crtcs = BIT(1) | BIT(0), 50 + .encoder_type = DRM_MODE_ENCODER_NONE, 51 + .port = 1, 52 + }, 53 + }, 54 + .num_lvds = 0, 55 + }; 56 + 57 + static const struct rcar_du_device_info rcar_du_r8a7790_info = { 58 + .features = RCAR_DU_FEATURE_CRTC_IRQ_CLOCK | RCAR_DU_FEATURE_DEFR8, 59 + .quirks = RCAR_DU_QUIRK_ALIGN_128B | RCAR_DU_QUIRK_LVDS_LANES, 60 + .num_crtcs = 3, 61 + .routes = { 62 + /* R8A7790 has one RGB output, two LVDS outputs and one 63 + * (currently unsupported) TCON output. 64 + */ 65 + [RCAR_DU_OUTPUT_DPAD0] = { 66 + .possible_crtcs = BIT(2) | BIT(1) | BIT(0), 67 + .encoder_type = DRM_MODE_ENCODER_NONE, 68 + .port = 0, 69 + }, 70 + [RCAR_DU_OUTPUT_LVDS0] = { 71 + .possible_crtcs = BIT(0), 72 + .encoder_type = DRM_MODE_ENCODER_LVDS, 73 + .port = 1, 74 + }, 75 + [RCAR_DU_OUTPUT_LVDS1] = { 76 + .possible_crtcs = BIT(2) | BIT(1), 77 + .encoder_type = DRM_MODE_ENCODER_LVDS, 78 + .port = 2, 79 + }, 80 + }, 81 + .num_lvds = 2, 82 + }; 83 + 84 + static const struct rcar_du_device_info rcar_du_r8a7791_info = { 85 + .features = RCAR_DU_FEATURE_CRTC_IRQ_CLOCK | RCAR_DU_FEATURE_DEFR8, 86 + .num_crtcs = 2, 87 + .routes = { 88 + /* R8A7791 has one RGB output, one LVDS output and one 89 + * (currently unsupported) TCON output. 90 + */ 91 + [RCAR_DU_OUTPUT_DPAD0] = { 92 + .possible_crtcs = BIT(1), 93 + .encoder_type = DRM_MODE_ENCODER_NONE, 94 + .port = 0, 95 + }, 96 + [RCAR_DU_OUTPUT_LVDS0] = { 97 + .possible_crtcs = BIT(0), 98 + .encoder_type = DRM_MODE_ENCODER_LVDS, 99 + .port = 1, 100 + }, 101 + }, 102 + .num_lvds = 1, 103 + }; 104 + 105 + static const struct platform_device_id rcar_du_id_table[] = { 106 + { "rcar-du-r8a7779", (kernel_ulong_t)&rcar_du_r8a7779_info }, 107 + { "rcar-du-r8a7790", (kernel_ulong_t)&rcar_du_r8a7790_info }, 108 + { "rcar-du-r8a7791", (kernel_ulong_t)&rcar_du_r8a7791_info }, 109 + { } 110 + }; 111 + 112 + MODULE_DEVICE_TABLE(platform, rcar_du_id_table); 113 + 114 + static const struct of_device_id rcar_du_of_table[] = { 115 + { .compatible = "renesas,du-r8a7779", .data = &rcar_du_r8a7779_info }, 116 + { .compatible = "renesas,du-r8a7790", .data = &rcar_du_r8a7790_info }, 117 + { .compatible = "renesas,du-r8a7791", .data = &rcar_du_r8a7791_info }, 118 + { } 119 + }; 120 + 121 + MODULE_DEVICE_TABLE(of, rcar_du_of_table); 32 122 33 123 /* ----------------------------------------------------------------------------- 34 124 * DRM operations ··· 145 53 static int rcar_du_load(struct drm_device *dev, unsigned long flags) 146 54 { 147 55 struct platform_device *pdev = dev->platformdev; 56 + struct device_node *np = pdev->dev.of_node; 148 57 struct rcar_du_platform_data *pdata = pdev->dev.platform_data; 149 58 struct rcar_du_device *rcdu; 150 59 struct resource *mem; 151 60 int ret; 152 61 153 - if (pdata == NULL) { 62 + if (pdata == NULL && np == NULL) { 154 63 dev_err(dev->dev, "no platform data\n"); 155 64 return -ENODEV; 156 65 } ··· 164 71 165 72 rcdu->dev = &pdev->dev; 166 73 rcdu->pdata = pdata; 167 - rcdu->info = (struct rcar_du_device_info *)pdev->id_entry->driver_data; 74 + rcdu->info = np ? of_match_device(rcar_du_of_table, rcdu->dev)->data 75 + : (void *)platform_get_device_id(pdev)->driver_data; 168 76 rcdu->ddev = dev; 169 77 dev->dev_private = rcdu; 170 78 ··· 326 232 return 0; 327 233 } 328 234 329 - static const struct rcar_du_device_info rcar_du_r8a7779_info = { 330 - .features = 0, 331 - .num_crtcs = 2, 332 - .routes = { 333 - /* R8A7779 has two RGB outputs and one (currently unsupported) 334 - * TCON output. 335 - */ 336 - [RCAR_DU_OUTPUT_DPAD0] = { 337 - .possible_crtcs = BIT(0), 338 - .encoder_type = DRM_MODE_ENCODER_NONE, 339 - }, 340 - [RCAR_DU_OUTPUT_DPAD1] = { 341 - .possible_crtcs = BIT(1) | BIT(0), 342 - .encoder_type = DRM_MODE_ENCODER_NONE, 343 - }, 344 - }, 345 - .num_lvds = 0, 346 - }; 347 - 348 - static const struct rcar_du_device_info rcar_du_r8a7790_info = { 349 - .features = RCAR_DU_FEATURE_CRTC_IRQ_CLOCK | RCAR_DU_FEATURE_DEFR8, 350 - .quirks = RCAR_DU_QUIRK_ALIGN_128B | RCAR_DU_QUIRK_LVDS_LANES, 351 - .num_crtcs = 3, 352 - .routes = { 353 - /* R8A7790 has one RGB output, two LVDS outputs and one 354 - * (currently unsupported) TCON output. 355 - */ 356 - [RCAR_DU_OUTPUT_DPAD0] = { 357 - .possible_crtcs = BIT(2) | BIT(1) | BIT(0), 358 - .encoder_type = DRM_MODE_ENCODER_NONE, 359 - }, 360 - [RCAR_DU_OUTPUT_LVDS0] = { 361 - .possible_crtcs = BIT(0), 362 - .encoder_type = DRM_MODE_ENCODER_LVDS, 363 - }, 364 - [RCAR_DU_OUTPUT_LVDS1] = { 365 - .possible_crtcs = BIT(2) | BIT(1), 366 - .encoder_type = DRM_MODE_ENCODER_LVDS, 367 - }, 368 - }, 369 - .num_lvds = 2, 370 - }; 371 - 372 - static const struct rcar_du_device_info rcar_du_r8a7791_info = { 373 - .features = RCAR_DU_FEATURE_CRTC_IRQ_CLOCK | RCAR_DU_FEATURE_DEFR8, 374 - .num_crtcs = 2, 375 - .routes = { 376 - /* R8A7791 has one RGB output, one LVDS output and one 377 - * (currently unsupported) TCON output. 378 - */ 379 - [RCAR_DU_OUTPUT_DPAD0] = { 380 - .possible_crtcs = BIT(1), 381 - .encoder_type = DRM_MODE_ENCODER_NONE, 382 - }, 383 - [RCAR_DU_OUTPUT_LVDS0] = { 384 - .possible_crtcs = BIT(0), 385 - .encoder_type = DRM_MODE_ENCODER_LVDS, 386 - }, 387 - }, 388 - .num_lvds = 1, 389 - }; 390 - 391 - static const struct platform_device_id rcar_du_id_table[] = { 392 - { "rcar-du-r8a7779", (kernel_ulong_t)&rcar_du_r8a7779_info }, 393 - { "rcar-du-r8a7790", (kernel_ulong_t)&rcar_du_r8a7790_info }, 394 - { "rcar-du-r8a7791", (kernel_ulong_t)&rcar_du_r8a7791_info }, 395 - { } 396 - }; 397 - 398 - MODULE_DEVICE_TABLE(platform, rcar_du_id_table); 399 - 400 235 static struct platform_driver rcar_du_platform_driver = { 401 236 .probe = rcar_du_probe, 402 237 .remove = rcar_du_remove, ··· 333 310 .owner = THIS_MODULE, 334 311 .name = "rcar-du", 335 312 .pm = &rcar_du_pm_ops, 313 + .of_match_table = rcar_du_of_table, 336 314 }, 337 315 .id_table = rcar_du_id_table, 338 316 };
+3 -1
drivers/gpu/drm/rcar-du/rcar_du_drv.h
··· 1 1 /* 2 2 * rcar_du_drv.h -- R-Car Display Unit DRM driver 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 * ··· 37 37 * struct rcar_du_output_routing - Output routing specification 38 38 * @possible_crtcs: bitmask of possible CRTCs for the output 39 39 * @encoder_type: DRM type of the internal encoder associated with the output 40 + * @port: device tree port number corresponding to this output route 40 41 * 41 42 * The DU has 5 possible outputs (DPAD0/1, LVDS0/1, TCON). Output routing data 42 43 * specify the valid SoC outputs, which CRTCs can drive the output, and the type ··· 46 45 struct rcar_du_output_routing { 47 46 unsigned int possible_crtcs; 48 47 unsigned int encoder_type; 48 + unsigned int port; 49 49 }; 50 50 51 51 /*
+8 -5
drivers/gpu/drm/rcar-du/rcar_du_encoder.c
··· 1 1 /* 2 2 * rcar_du_encoder.c -- R-Car Display Unit Encoder 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 * ··· 142 142 int rcar_du_encoder_init(struct rcar_du_device *rcdu, 143 143 enum rcar_du_encoder_type type, 144 144 enum rcar_du_output output, 145 - const struct rcar_du_encoder_data *data) 145 + const struct rcar_du_encoder_data *data, 146 + struct device_node *np) 146 147 { 147 148 struct rcar_du_encoder *renc; 148 149 unsigned int encoder_type; ··· 190 189 drm_encoder_helper_add(&renc->encoder, &encoder_helper_funcs); 191 190 192 191 switch (encoder_type) { 193 - case DRM_MODE_ENCODER_LVDS: 194 - return rcar_du_lvds_connector_init(rcdu, renc, 195 - &data->connector.lvds.panel); 192 + case DRM_MODE_ENCODER_LVDS: { 193 + const struct rcar_du_panel_data *pdata = 194 + data ? &data->connector.lvds.panel : NULL; 195 + return rcar_du_lvds_connector_init(rcdu, renc, pdata, np); 196 + } 196 197 197 198 case DRM_MODE_ENCODER_DAC: 198 199 return rcar_du_vga_connector_init(rcdu, renc);
+3 -2
drivers/gpu/drm/rcar-du/rcar_du_encoder.h
··· 1 1 /* 2 2 * rcar_du_encoder.h -- R-Car Display Unit Encoder 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 * ··· 44 44 int rcar_du_encoder_init(struct rcar_du_device *rcdu, 45 45 enum rcar_du_encoder_type type, 46 46 enum rcar_du_output output, 47 - const struct rcar_du_encoder_data *data); 47 + const struct rcar_du_encoder_data *data, 48 + struct device_node *np); 48 49 49 50 #endif /* __RCAR_DU_ENCODER_H__ */
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_group.c
··· 1 1 /* 2 2 * rcar_du_group.c -- R-Car Display Unit Channels Pair 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_group.h
··· 1 1 /* 2 2 * rcar_du_group.c -- R-Car Display Unit Planes and CRTCs Group 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+211 -22
drivers/gpu/drm/rcar-du/rcar_du_kms.c
··· 1 1 /* 2 2 * rcar_du_kms.c -- R-Car Display Unit Mode Setting 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 * ··· 16 16 #include <drm/drm_crtc_helper.h> 17 17 #include <drm/drm_fb_cma_helper.h> 18 18 #include <drm/drm_gem_cma_helper.h> 19 + 20 + #include <linux/of_graph.h> 19 21 20 22 #include "rcar_du_crtc.h" 21 23 #include "rcar_du_drv.h" ··· 190 188 .output_poll_changed = rcar_du_output_poll_changed, 191 189 }; 192 190 191 + static int rcar_du_encoders_init_pdata(struct rcar_du_device *rcdu) 192 + { 193 + unsigned int num_encoders = 0; 194 + unsigned int i; 195 + int ret; 196 + 197 + for (i = 0; i < rcdu->pdata->num_encoders; ++i) { 198 + const struct rcar_du_encoder_data *pdata = 199 + &rcdu->pdata->encoders[i]; 200 + const struct rcar_du_output_routing *route = 201 + &rcdu->info->routes[pdata->output]; 202 + 203 + if (pdata->type == RCAR_DU_ENCODER_UNUSED) 204 + continue; 205 + 206 + if (pdata->output >= RCAR_DU_OUTPUT_MAX || 207 + route->possible_crtcs == 0) { 208 + dev_warn(rcdu->dev, 209 + "encoder %u references unexisting output %u, skipping\n", 210 + i, pdata->output); 211 + continue; 212 + } 213 + 214 + ret = rcar_du_encoder_init(rcdu, pdata->type, pdata->output, 215 + pdata, NULL); 216 + if (ret < 0) 217 + return ret; 218 + 219 + num_encoders++; 220 + } 221 + 222 + return num_encoders; 223 + } 224 + 225 + static int rcar_du_encoders_init_dt_one(struct rcar_du_device *rcdu, 226 + enum rcar_du_output output, 227 + struct of_endpoint *ep) 228 + { 229 + static const struct { 230 + const char *compatible; 231 + enum rcar_du_encoder_type type; 232 + } encoders[] = { 233 + { "adi,adv7123", RCAR_DU_ENCODER_VGA }, 234 + { "thine,thc63lvdm83d", RCAR_DU_ENCODER_LVDS }, 235 + }; 236 + 237 + enum rcar_du_encoder_type enc_type = RCAR_DU_ENCODER_NONE; 238 + struct device_node *connector = NULL; 239 + struct device_node *encoder = NULL; 240 + struct device_node *prev = NULL; 241 + struct device_node *entity_ep_node; 242 + struct device_node *entity; 243 + int ret; 244 + 245 + /* 246 + * Locate the connected entity and infer its type from the number of 247 + * endpoints. 248 + */ 249 + entity = of_graph_get_remote_port_parent(ep->local_node); 250 + if (!entity) { 251 + dev_dbg(rcdu->dev, "unconnected endpoint %s, skipping\n", 252 + ep->local_node->full_name); 253 + return 0; 254 + } 255 + 256 + entity_ep_node = of_parse_phandle(ep->local_node, "remote-endpoint", 0); 257 + 258 + while (1) { 259 + struct device_node *ep_node; 260 + 261 + ep_node = of_graph_get_next_endpoint(entity, prev); 262 + of_node_put(prev); 263 + prev = ep_node; 264 + 265 + if (!ep_node) 266 + break; 267 + 268 + if (ep_node == entity_ep_node) 269 + continue; 270 + 271 + /* 272 + * We've found one endpoint other than the input, this must 273 + * be an encoder. Locate the connector. 274 + */ 275 + encoder = entity; 276 + connector = of_graph_get_remote_port_parent(ep_node); 277 + of_node_put(ep_node); 278 + 279 + if (!connector) { 280 + dev_warn(rcdu->dev, 281 + "no connector for encoder %s, skipping\n", 282 + encoder->full_name); 283 + of_node_put(entity_ep_node); 284 + of_node_put(encoder); 285 + return 0; 286 + } 287 + 288 + break; 289 + } 290 + 291 + of_node_put(entity_ep_node); 292 + 293 + if (encoder) { 294 + /* 295 + * If an encoder has been found, get its type based on its 296 + * compatible string. 297 + */ 298 + unsigned int i; 299 + 300 + for (i = 0; i < ARRAY_SIZE(encoders); ++i) { 301 + if (of_device_is_compatible(encoder, 302 + encoders[i].compatible)) { 303 + enc_type = encoders[i].type; 304 + break; 305 + } 306 + } 307 + 308 + if (i == ARRAY_SIZE(encoders)) { 309 + dev_warn(rcdu->dev, 310 + "unknown encoder type for %s, skipping\n", 311 + encoder->full_name); 312 + of_node_put(encoder); 313 + of_node_put(connector); 314 + return 0; 315 + } 316 + } else { 317 + /* 318 + * If no encoder has been found the entity must be the 319 + * connector. 320 + */ 321 + connector = entity; 322 + } 323 + 324 + ret = rcar_du_encoder_init(rcdu, enc_type, output, NULL, connector); 325 + of_node_put(encoder); 326 + of_node_put(connector); 327 + 328 + return ret < 0 ? ret : 1; 329 + } 330 + 331 + static int rcar_du_encoders_init_dt(struct rcar_du_device *rcdu) 332 + { 333 + struct device_node *np = rcdu->dev->of_node; 334 + struct device_node *prev = NULL; 335 + unsigned int num_encoders = 0; 336 + 337 + /* 338 + * Iterate over the endpoints and create one encoder for each output 339 + * pipeline. 340 + */ 341 + while (1) { 342 + struct device_node *ep_node; 343 + enum rcar_du_output output; 344 + struct of_endpoint ep; 345 + unsigned int i; 346 + int ret; 347 + 348 + ep_node = of_graph_get_next_endpoint(np, prev); 349 + of_node_put(prev); 350 + prev = ep_node; 351 + 352 + if (ep_node == NULL) 353 + break; 354 + 355 + ret = of_graph_parse_endpoint(ep_node, &ep); 356 + if (ret < 0) { 357 + of_node_put(ep_node); 358 + return ret; 359 + } 360 + 361 + /* Find the output route corresponding to the port number. */ 362 + for (i = 0; i < RCAR_DU_OUTPUT_MAX; ++i) { 363 + if (rcdu->info->routes[i].possible_crtcs && 364 + rcdu->info->routes[i].port == ep.port) { 365 + output = i; 366 + break; 367 + } 368 + } 369 + 370 + if (i == RCAR_DU_OUTPUT_MAX) { 371 + dev_warn(rcdu->dev, 372 + "port %u references unexisting output, skipping\n", 373 + ep.port); 374 + continue; 375 + } 376 + 377 + /* Process the output pipeline. */ 378 + ret = rcar_du_encoders_init_dt_one(rcdu, output, &ep); 379 + if (ret < 0) { 380 + of_node_put(ep_node); 381 + return ret; 382 + } 383 + 384 + num_encoders += ret; 385 + } 386 + 387 + return num_encoders; 388 + } 389 + 193 390 int rcar_du_modeset_init(struct rcar_du_device *rcdu) 194 391 { 195 392 static const unsigned int mmio_offsets[] = { ··· 398 197 struct drm_device *dev = rcdu->ddev; 399 198 struct drm_encoder *encoder; 400 199 struct drm_fbdev_cma *fbdev; 200 + unsigned int num_encoders; 401 201 unsigned int num_groups; 402 202 unsigned int i; 403 203 int ret; ··· 442 240 if (ret < 0) 443 241 return ret; 444 242 445 - for (i = 0; i < rcdu->pdata->num_encoders; ++i) { 446 - const struct rcar_du_encoder_data *pdata = 447 - &rcdu->pdata->encoders[i]; 448 - const struct rcar_du_output_routing *route = 449 - &rcdu->info->routes[pdata->output]; 243 + if (rcdu->pdata) 244 + ret = rcar_du_encoders_init_pdata(rcdu); 245 + else 246 + ret = rcar_du_encoders_init_dt(rcdu); 450 247 451 - if (pdata->type == RCAR_DU_ENCODER_UNUSED) 452 - continue; 248 + if (ret < 0) 249 + return ret; 453 250 454 - if (pdata->output >= RCAR_DU_OUTPUT_MAX || 455 - route->possible_crtcs == 0) { 456 - dev_warn(rcdu->dev, 457 - "encoder %u references unexisting output %u, skipping\n", 458 - i, pdata->output); 459 - continue; 460 - } 461 - 462 - ret = rcar_du_encoder_init(rcdu, pdata->type, pdata->output, 463 - pdata); 464 - if (ret < 0) 465 - return ret; 466 - } 251 + num_encoders = ret; 467 252 468 253 /* Set the possible CRTCs and possible clones. There's always at least 469 254 * one way for all encoders to clone each other, set all bits in the ··· 462 273 &rcdu->info->routes[renc->output]; 463 274 464 275 encoder->possible_crtcs = route->possible_crtcs; 465 - encoder->possible_clones = (1 << rcdu->pdata->num_encoders) - 1; 276 + encoder->possible_clones = (1 << num_encoders) - 1; 466 277 } 467 278 468 279 /* Now that the CRTCs have been initialized register the planes. */
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_kms.h
··· 1 1 /* 2 2 * rcar_du_kms.h -- R-Car Display Unit Mode Setting 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+26 -17
drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
··· 1 1 /* 2 2 * rcar_du_lvdscon.c -- R-Car Display Unit LVDS Connector 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 * ··· 15 15 #include <drm/drm_crtc.h> 16 16 #include <drm/drm_crtc_helper.h> 17 17 18 + #include <video/display_timing.h> 19 + #include <video/of_display_timing.h> 20 + #include <video/videomode.h> 21 + 18 22 #include "rcar_du_drv.h" 19 23 #include "rcar_du_encoder.h" 20 24 #include "rcar_du_kms.h" ··· 27 23 struct rcar_du_lvds_connector { 28 24 struct rcar_du_connector connector; 29 25 30 - const struct rcar_du_panel_data *panel; 26 + struct rcar_du_panel_data panel; 31 27 }; 32 28 33 29 #define to_rcar_lvds_connector(c) \ ··· 44 40 return 0; 45 41 46 42 mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; 47 - mode->clock = lvdscon->panel->mode.clock; 48 - mode->hdisplay = lvdscon->panel->mode.hdisplay; 49 - mode->hsync_start = lvdscon->panel->mode.hsync_start; 50 - mode->hsync_end = lvdscon->panel->mode.hsync_end; 51 - mode->htotal = lvdscon->panel->mode.htotal; 52 - mode->vdisplay = lvdscon->panel->mode.vdisplay; 53 - mode->vsync_start = lvdscon->panel->mode.vsync_start; 54 - mode->vsync_end = lvdscon->panel->mode.vsync_end; 55 - mode->vtotal = lvdscon->panel->mode.vtotal; 56 - mode->flags = lvdscon->panel->mode.flags; 57 43 58 - drm_mode_set_name(mode); 44 + drm_display_mode_from_videomode(&lvdscon->panel.mode, mode); 45 + 59 46 drm_mode_probed_add(connector, mode); 60 47 61 48 return 1; ··· 78 83 79 84 int rcar_du_lvds_connector_init(struct rcar_du_device *rcdu, 80 85 struct rcar_du_encoder *renc, 81 - const struct rcar_du_panel_data *panel) 86 + const struct rcar_du_panel_data *panel, 87 + /* TODO const */ struct device_node *np) 82 88 { 83 89 struct rcar_du_lvds_connector *lvdscon; 84 90 struct drm_connector *connector; ··· 89 93 if (lvdscon == NULL) 90 94 return -ENOMEM; 91 95 92 - lvdscon->panel = panel; 96 + if (panel) { 97 + lvdscon->panel = *panel; 98 + } else { 99 + struct display_timing timing; 100 + 101 + ret = of_get_display_timing(np, "panel-timing", &timing); 102 + if (ret < 0) 103 + return ret; 104 + 105 + videomode_from_timing(&timing, &lvdscon->panel.mode); 106 + 107 + of_property_read_u32(np, "width-mm", &lvdscon->panel.width_mm); 108 + of_property_read_u32(np, "height-mm", &lvdscon->panel.height_mm); 109 + } 93 110 94 111 connector = &lvdscon->connector.connector; 95 - connector->display_info.width_mm = panel->width_mm; 96 - connector->display_info.height_mm = panel->height_mm; 112 + connector->display_info.width_mm = lvdscon->panel.width_mm; 113 + connector->display_info.height_mm = lvdscon->panel.height_mm; 97 114 98 115 ret = drm_connector_init(rcdu->ddev, connector, &connector_funcs, 99 116 DRM_MODE_CONNECTOR_LVDS);
+3 -2
drivers/gpu/drm/rcar-du/rcar_du_lvdscon.h
··· 1 1 /* 2 2 * rcar_du_lvdscon.h -- R-Car Display Unit LVDS Connector 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 * ··· 20 20 21 21 int rcar_du_lvds_connector_init(struct rcar_du_device *rcdu, 22 22 struct rcar_du_encoder *renc, 23 - const struct rcar_du_panel_data *panel); 23 + const struct rcar_du_panel_data *panel, 24 + struct device_node *np); 24 25 25 26 #endif /* __RCAR_DU_LVDSCON_H__ */
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c
··· 1 1 /* 2 2 * rcar_du_lvdsenc.c -- R-Car Display Unit LVDS Encoder 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.h
··· 1 1 /* 2 2 * rcar_du_lvdsenc.h -- R-Car Display Unit LVDS Encoder 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_plane.c
··· 1 1 /* 2 2 * rcar_du_plane.c -- R-Car Display Unit Planes 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_plane.h
··· 1 1 /* 2 2 * rcar_du_plane.h -- R-Car Display Unit Planes 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
··· 1 1 /* 2 2 * rcar_du_vgacon.c -- R-Car Display Unit VGA Connector 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/rcar-du/rcar_du_vgacon.h
··· 1 1 /* 2 2 * rcar_du_vgacon.h -- R-Car Display Unit VGA Connector 3 3 * 4 - * Copyright (C) 2013 Renesas Corporation 4 + * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 5 * 6 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_backlight.c
··· 1 1 /* 2 2 * shmob_drm_backlight.c -- SH Mobile DRM Backlight 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_backlight.h
··· 1 1 /* 2 2 * shmob_drm_backlight.h -- SH Mobile DRM Backlight 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_crtc.c
··· 1 1 /* 2 2 * shmob_drm_crtc.c -- SH Mobile DRM CRTCs 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_crtc.h
··· 1 1 /* 2 2 * shmob_drm_crtc.h -- SH Mobile DRM CRTCs 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_drv.c
··· 1 1 /* 2 2 * shmob_drm_drv.c -- SH Mobile DRM driver 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_drv.h
··· 1 1 /* 2 2 * shmob_drm.h -- SH Mobile DRM driver 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_kms.c
··· 1 1 /* 2 2 * shmob_drm_kms.c -- SH Mobile DRM Mode Setting 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_kms.h
··· 1 1 /* 2 2 * shmob_drm_kms.h -- SH Mobile DRM Mode Setting 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_plane.c
··· 1 1 /* 2 2 * shmob_drm_plane.c -- SH Mobile DRM Planes 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_plane.h
··· 1 1 /* 2 2 * shmob_drm_plane.h -- SH Mobile DRM Planes 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+1 -1
drivers/gpu/drm/shmobile/shmob_drm_regs.h
··· 1 1 /* 2 2 * shmob_drm_regs.h -- SH Mobile DRM registers 3 3 * 4 - * Copyright (C) 2012 Renesas Corporation 4 + * Copyright (C) 2012 Renesas Electronics Corporation 5 5 * 6 6 * Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 7 *
+2 -2
include/linux/platform_data/rcar-du.h
··· 14 14 #ifndef __RCAR_DU_H__ 15 15 #define __RCAR_DU_H__ 16 16 17 - #include <drm/drm_mode.h> 17 + #include <video/videomode.h> 18 18 19 19 enum rcar_du_output { 20 20 RCAR_DU_OUTPUT_DPAD0, ··· 35 35 struct rcar_du_panel_data { 36 36 unsigned int width_mm; /* Panel width in mm */ 37 37 unsigned int height_mm; /* Panel height in mm */ 38 - struct drm_mode_modeinfo mode; 38 + struct videomode mode; 39 39 }; 40 40 41 41 struct rcar_du_connector_lvds_data {