Miscellaneous R-Car display driver changes:
- R8A7742, R8A774E1 and R8A77961 support - Fixes for pitch of YUV planar formats, non-visible plane handling and VSP device reference count - Kconfig fix to avoid displaying disabled options in .config -----BEGIN PGP SIGNATURE----- iQJWBAABCgBAFiEEy51od1KYIM1TCZsbZficN7xUIQ0FAl9p29MiHGxhdXJlbnQu cGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbQAKCRBl+Jw3vFQhDW+BD/9NNslfj4mt u3Fo7y4/j/UbAsINJiLlP2OfZlllFuL+y7IY7G0HRdsJmu4DAYLEWSm++zleGWsp PmtgQ4qdzp1SHkJVbZLh0r7qylkgscrQwO3qS8VNqEWSMM51WY5tU9CKZx2q++cF c/YVJaSqGj8FwFtrPjd/D5/55H1V97MTg2hRY4IAgpS6nW7J3XUWIh+3oc+2Bpnr PLduHQTmsu0aX7nuEmFFAHSxomraWiDZYYOWKHzcR2HfUy2fgQeilFjb7WDG8+3N N0C11SSXAjyKEQFD63hFMoXQydR/qv+AZgTPhio6JhaL6nDR7cV78NDN+S1R6j9C b1yi7HqtiGwWR4GbtPmM2U9HA2O+q65p17kAxw56eLKd3Dtf12uhLycUIKH/ntMG oxmV+zed63BWCdZg1YN+JR9Lpborn2rDle2Z1rAyjJBSf7aRCrHmP4L5cHCAH3tF j1zGEOcEbWseH5qhGu54iwGe6wVZxjeP9YqcuMfQGjAhPq18zgt4iOst63Q/cwzN lkHU9lS2e+SprXyKYLN15el2UkfKRbhcPlKdxXvWor0clegKGIX6uqyb/Z+/1jsQ nGDpwWOFDArFflOWIJHe+9KY6NPDlBYlUlVwd3H9xJ33R8viZTUwKPGXJvBNsRWm EyoPkfsTG7juf8uq1SD4QqxLkqHzrpnIJQ== =ALTD -----END PGP SIGNATURE----- Merge tag 'du-next-20200922' of git://linuxtv.org/pinchartl/media into drm-next Miscellaneous R-Car display driver changes: - R8A7742, R8A774E1 and R8A77961 support - Fixes for pitch of YUV planar formats, non-visible plane handling and VSP device reference count - Kconfig fix to avoid displaying disabled options in .config Signed-off-by: Dave Airlie <airlied@redhat.com> From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200922111526.GG8290@pendragon.ideasonboard.com
This commit is contained in:
commit
c03156d7d9
|
@ -79,6 +79,9 @@ properties:
|
|||
The GPIO used to control the power down line of this device.
|
||||
maxItems: 1
|
||||
|
||||
power-supply:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- ports
|
||||
|
|
|
@ -14,8 +14,10 @@ Required properties:
|
|||
- compatible : Shall contain one or more of
|
||||
- "renesas,r8a774a1-hdmi" for R8A774A1 (RZ/G2M) compatible HDMI TX
|
||||
- "renesas,r8a774b1-hdmi" for R8A774B1 (RZ/G2N) compatible HDMI TX
|
||||
- "renesas,r8a774e1-hdmi" for R8A774E1 (RZ/G2H) compatible HDMI TX
|
||||
- "renesas,r8a7795-hdmi" for R8A7795 (R-Car H3) compatible HDMI TX
|
||||
- "renesas,r8a7796-hdmi" for R8A7796 (R-Car M3-W) compatible HDMI TX
|
||||
- "renesas,r8a77961-hdmi" for R8A77961 (R-Car M3-W+) compatible HDMI TX
|
||||
- "renesas,r8a77965-hdmi" for R8A77965 (R-Car M3-N) compatible HDMI TX
|
||||
- "renesas,rcar-gen3-hdmi" for the generic R-Car Gen3 and RZ/G2 compatible
|
||||
HDMI TX
|
||||
|
@ -42,7 +44,7 @@ Optional properties:
|
|||
Example:
|
||||
|
||||
hdmi0: hdmi@fead0000 {
|
||||
compatible = "renesas,r8a7795-dw-hdmi";
|
||||
compatible = "renesas,r8a7795-hdmi", "renesas,rcar-gen3-hdmi";
|
||||
reg = <0 0xfead0000 0 0x10000>;
|
||||
interrupts = <0 389 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_CORE R8A7795_CLK_S0D4>, <&cpg CPG_MOD 729>;
|
||||
|
|
|
@ -16,11 +16,13 @@ description: |
|
|||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- renesas,r8a7742-lvds # for RZ/G1H compatible LVDS encoders
|
||||
- renesas,r8a7743-lvds # for RZ/G1M compatible LVDS encoders
|
||||
- renesas,r8a7744-lvds # for RZ/G1N compatible LVDS encoders
|
||||
- renesas,r8a774a1-lvds # for RZ/G2M compatible LVDS encoders
|
||||
- renesas,r8a774b1-lvds # for RZ/G2N compatible LVDS encoders
|
||||
- renesas,r8a774c0-lvds # for RZ/G2E compatible LVDS encoders
|
||||
- renesas,r8a774e1-lvds # for RZ/G2H compatible LVDS encoders
|
||||
- renesas,r8a7790-lvds # for R-Car H2 compatible LVDS encoders
|
||||
- renesas,r8a7791-lvds # for R-Car M2-W compatible LVDS encoders
|
||||
- renesas,r8a7793-lvds # for R-Car M2-N compatible LVDS encoders
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
Required Properties:
|
||||
|
||||
- compatible: must be one of the following.
|
||||
- "renesas,du-r8a7742" for R8A7742 (RZ/G1H) compatible DU
|
||||
- "renesas,du-r8a7743" for R8A7743 (RZ/G1M) compatible DU
|
||||
- "renesas,du-r8a7744" for R8A7744 (RZ/G1N) compatible DU
|
||||
- "renesas,du-r8a7745" for R8A7745 (RZ/G1E) compatible DU
|
||||
|
@ -10,6 +11,7 @@ Required Properties:
|
|||
- "renesas,du-r8a774a1" for R8A774A1 (RZ/G2M) compatible DU
|
||||
- "renesas,du-r8a774b1" for R8A774B1 (RZ/G2N) compatible DU
|
||||
- "renesas,du-r8a774c0" for R8A774C0 (RZ/G2E) compatible DU
|
||||
- "renesas,du-r8a774e1" for R8A774E1 (RZ/G2H) compatible DU
|
||||
- "renesas,du-r8a7779" for R8A7779 (R-Car H1) compatible DU
|
||||
- "renesas,du-r8a7790" for R8A7790 (R-Car H2) compatible DU
|
||||
- "renesas,du-r8a7791" for R8A7791 (R-Car M2-W) compatible DU
|
||||
|
@ -18,6 +20,7 @@ Required Properties:
|
|||
- "renesas,du-r8a7794" for R8A7794 (R-Car E2) compatible DU
|
||||
- "renesas,du-r8a7795" for R8A7795 (R-Car H3) compatible DU
|
||||
- "renesas,du-r8a7796" for R8A7796 (R-Car M3-W) compatible DU
|
||||
- "renesas,du-r8a77961" for R8A77961 (R-Car M3-W+) compatible DU
|
||||
- "renesas,du-r8a77965" for R8A77965 (R-Car M3-N) compatible DU
|
||||
- "renesas,du-r8a77970" for R8A77970 (R-Car V3M) compatible DU
|
||||
- "renesas,du-r8a77980" for R8A77980 (R-Car V3H) compatible DU
|
||||
|
@ -68,6 +71,7 @@ corresponding to each DU output.
|
|||
|
||||
Port0 Port1 Port2 Port3
|
||||
-----------------------------------------------------------------------------
|
||||
R8A7742 (RZ/G1H) DPAD 0 LVDS 0 LVDS 1 -
|
||||
R8A7743 (RZ/G1M) DPAD 0 LVDS 0 - -
|
||||
R8A7744 (RZ/G1N) DPAD 0 LVDS 0 - -
|
||||
R8A7745 (RZ/G1E) DPAD 0 DPAD 1 - -
|
||||
|
@ -75,6 +79,7 @@ corresponding to each DU output.
|
|||
R8A774A1 (RZ/G2M) DPAD 0 HDMI 0 LVDS 0 -
|
||||
R8A774B1 (RZ/G2N) DPAD 0 HDMI 0 LVDS 0 -
|
||||
R8A774C0 (RZ/G2E) DPAD 0 LVDS 0 LVDS 1 -
|
||||
R8A774E1 (RZ/G2H) DPAD 0 HDMI 0 LVDS 0 -
|
||||
R8A7779 (R-Car H1) DPAD 0 DPAD 1 - -
|
||||
R8A7790 (R-Car H2) DPAD 0 LVDS 0 LVDS 1 -
|
||||
R8A7791 (R-Car M2-W) DPAD 0 LVDS 0 - -
|
||||
|
@ -83,6 +88,7 @@ corresponding to each DU output.
|
|||
R8A7794 (R-Car E2) DPAD 0 DPAD 1 - -
|
||||
R8A7795 (R-Car H3) DPAD 0 HDMI 0 HDMI 1 LVDS 0
|
||||
R8A7796 (R-Car M3-W) DPAD 0 HDMI 0 LVDS 0 -
|
||||
R8A77961 (R-Car M3-W+) DPAD 0 HDMI 0 LVDS 0 -
|
||||
R8A77965 (R-Car M3-N) DPAD 0 HDMI 0 LVDS 0 -
|
||||
R8A77970 (R-Car V3M) DPAD 0 LVDS 0 - -
|
||||
R8A77980 (R-Car V3H) DPAD 0 LVDS 0 - -
|
||||
|
|
|
@ -10,13 +10,16 @@
|
|||
#include <linux/of_device.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
#include <drm/drm_bridge.h>
|
||||
#include <drm/drm_panel.h>
|
||||
|
||||
struct lvds_codec {
|
||||
struct device *dev;
|
||||
struct drm_bridge bridge;
|
||||
struct drm_bridge *panel_bridge;
|
||||
struct regulator *vcc;
|
||||
struct gpio_desc *powerdown_gpio;
|
||||
u32 connector_type;
|
||||
};
|
||||
|
@ -38,6 +41,14 @@ static int lvds_codec_attach(struct drm_bridge *bridge,
|
|||
static void lvds_codec_enable(struct drm_bridge *bridge)
|
||||
{
|
||||
struct lvds_codec *lvds_codec = to_lvds_codec(bridge);
|
||||
int ret;
|
||||
|
||||
ret = regulator_enable(lvds_codec->vcc);
|
||||
if (ret) {
|
||||
dev_err(lvds_codec->dev,
|
||||
"Failed to enable regulator \"vcc\": %d\n", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
if (lvds_codec->powerdown_gpio)
|
||||
gpiod_set_value_cansleep(lvds_codec->powerdown_gpio, 0);
|
||||
|
@ -46,9 +57,15 @@ static void lvds_codec_enable(struct drm_bridge *bridge)
|
|||
static void lvds_codec_disable(struct drm_bridge *bridge)
|
||||
{
|
||||
struct lvds_codec *lvds_codec = to_lvds_codec(bridge);
|
||||
int ret;
|
||||
|
||||
if (lvds_codec->powerdown_gpio)
|
||||
gpiod_set_value_cansleep(lvds_codec->powerdown_gpio, 1);
|
||||
|
||||
ret = regulator_disable(lvds_codec->vcc);
|
||||
if (ret)
|
||||
dev_err(lvds_codec->dev,
|
||||
"Failed to disable regulator \"vcc\": %d\n", ret);
|
||||
}
|
||||
|
||||
static const struct drm_bridge_funcs funcs = {
|
||||
|
@ -63,12 +80,24 @@ static int lvds_codec_probe(struct platform_device *pdev)
|
|||
struct device_node *panel_node;
|
||||
struct drm_panel *panel;
|
||||
struct lvds_codec *lvds_codec;
|
||||
int ret;
|
||||
|
||||
lvds_codec = devm_kzalloc(dev, sizeof(*lvds_codec), GFP_KERNEL);
|
||||
if (!lvds_codec)
|
||||
return -ENOMEM;
|
||||
|
||||
lvds_codec->dev = &pdev->dev;
|
||||
lvds_codec->connector_type = (uintptr_t)of_device_get_match_data(dev);
|
||||
|
||||
lvds_codec->vcc = devm_regulator_get(lvds_codec->dev, "power");
|
||||
if (IS_ERR(lvds_codec->vcc)) {
|
||||
ret = PTR_ERR(lvds_codec->vcc);
|
||||
if (ret != -EPROBE_DEFER)
|
||||
dev_err(lvds_codec->dev,
|
||||
"Unable to get \"vcc\" supply: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
lvds_codec->powerdown_gpio = devm_gpiod_get_optional(dev, "powerdown",
|
||||
GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(lvds_codec->powerdown_gpio))
|
||||
|
|
|
@ -22,11 +22,11 @@ config DRM_RCAR_CMM
|
|||
Enable support for R-Car Color Management Module (CMM).
|
||||
|
||||
config DRM_RCAR_DW_HDMI
|
||||
tristate "R-Car DU Gen3 HDMI Encoder Support"
|
||||
tristate "R-Car Gen3 and RZ/G2 DU HDMI Encoder Support"
|
||||
depends on DRM && OF
|
||||
select DRM_DW_HDMI
|
||||
help
|
||||
Enable support for R-Car Gen3 internal HDMI encoder.
|
||||
Enable support for R-Car Gen3 or RZ/G2 internal HDMI encoder.
|
||||
|
||||
config DRM_RCAR_LVDS
|
||||
tristate "R-Car DU LVDS Encoder Support"
|
||||
|
@ -49,3 +49,4 @@ config DRM_RCAR_VSP
|
|||
config DRM_RCAR_WRITEBACK
|
||||
bool
|
||||
default y if ARM64
|
||||
depends on DRM_RCAR_DU
|
||||
|
|
|
@ -186,6 +186,35 @@ static const struct rcar_du_device_info rcar_du_r8a774c0_info = {
|
|||
.lvds_clk_mask = BIT(1) | BIT(0),
|
||||
};
|
||||
|
||||
static const struct rcar_du_device_info rcar_du_r8a774e1_info = {
|
||||
.gen = 3,
|
||||
.features = RCAR_DU_FEATURE_CRTC_IRQ_CLOCK
|
||||
| RCAR_DU_FEATURE_VSP1_SOURCE
|
||||
| RCAR_DU_FEATURE_INTERLACED
|
||||
| RCAR_DU_FEATURE_TVM_SYNC,
|
||||
.channels_mask = BIT(3) | BIT(1) | BIT(0),
|
||||
.routes = {
|
||||
/*
|
||||
* R8A774E1 has one RGB output, one LVDS output and one HDMI
|
||||
* output.
|
||||
*/
|
||||
[RCAR_DU_OUTPUT_DPAD0] = {
|
||||
.possible_crtcs = BIT(2),
|
||||
.port = 0,
|
||||
},
|
||||
[RCAR_DU_OUTPUT_HDMI0] = {
|
||||
.possible_crtcs = BIT(1),
|
||||
.port = 1,
|
||||
},
|
||||
[RCAR_DU_OUTPUT_LVDS0] = {
|
||||
.possible_crtcs = BIT(0),
|
||||
.port = 2,
|
||||
},
|
||||
},
|
||||
.num_lvds = 1,
|
||||
.dpll_mask = BIT(1),
|
||||
};
|
||||
|
||||
static const struct rcar_du_device_info rcar_du_r8a7779_info = {
|
||||
.gen = 1,
|
||||
.features = RCAR_DU_FEATURE_INTERLACED
|
||||
|
@ -216,8 +245,9 @@ static const struct rcar_du_device_info rcar_du_r8a7790_info = {
|
|||
.channels_mask = BIT(2) | BIT(1) | BIT(0),
|
||||
.routes = {
|
||||
/*
|
||||
* R8A7790 has one RGB output, two LVDS outputs and one
|
||||
* (currently unsupported) TCON output.
|
||||
* R8A7742 and R8A7790 each have one RGB output and two LVDS
|
||||
* outputs. Additionally R8A7790 supports one TCON output
|
||||
* (currently unsupported by the driver).
|
||||
*/
|
||||
[RCAR_DU_OUTPUT_DPAD0] = {
|
||||
.possible_crtcs = BIT(2) | BIT(1) | BIT(0),
|
||||
|
@ -443,6 +473,7 @@ static const struct rcar_du_device_info rcar_du_r8a7799x_info = {
|
|||
};
|
||||
|
||||
static const struct of_device_id rcar_du_of_table[] = {
|
||||
{ .compatible = "renesas,du-r8a7742", .data = &rcar_du_r8a7790_info },
|
||||
{ .compatible = "renesas,du-r8a7743", .data = &rzg1_du_r8a7743_info },
|
||||
{ .compatible = "renesas,du-r8a7744", .data = &rzg1_du_r8a7743_info },
|
||||
{ .compatible = "renesas,du-r8a7745", .data = &rzg1_du_r8a7745_info },
|
||||
|
@ -450,6 +481,7 @@ static const struct of_device_id rcar_du_of_table[] = {
|
|||
{ .compatible = "renesas,du-r8a774a1", .data = &rcar_du_r8a774a1_info },
|
||||
{ .compatible = "renesas,du-r8a774b1", .data = &rcar_du_r8a774b1_info },
|
||||
{ .compatible = "renesas,du-r8a774c0", .data = &rcar_du_r8a774c0_info },
|
||||
{ .compatible = "renesas,du-r8a774e1", .data = &rcar_du_r8a774e1_info },
|
||||
{ .compatible = "renesas,du-r8a7779", .data = &rcar_du_r8a7779_info },
|
||||
{ .compatible = "renesas,du-r8a7790", .data = &rcar_du_r8a7790_info },
|
||||
{ .compatible = "renesas,du-r8a7791", .data = &rcar_du_r8a7791_info },
|
||||
|
@ -458,6 +490,7 @@ static const struct of_device_id rcar_du_of_table[] = {
|
|||
{ .compatible = "renesas,du-r8a7794", .data = &rcar_du_r8a7794_info },
|
||||
{ .compatible = "renesas,du-r8a7795", .data = &rcar_du_r8a7795_info },
|
||||
{ .compatible = "renesas,du-r8a7796", .data = &rcar_du_r8a7796_info },
|
||||
{ .compatible = "renesas,du-r8a77961", .data = &rcar_du_r8a7796_info },
|
||||
{ .compatible = "renesas,du-r8a77965", .data = &rcar_du_r8a77965_info },
|
||||
{ .compatible = "renesas,du-r8a77970", .data = &rcar_du_r8a77970_info },
|
||||
{ .compatible = "renesas,du-r8a77980", .data = &rcar_du_r8a77970_info },
|
||||
|
|
|
@ -40,6 +40,7 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_RGB565,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
.pnmr = PnMR_SPIM_TP | PnMR_DDDF_16BPP,
|
||||
.edf = PnDDCR4_EDF_NONE,
|
||||
}, {
|
||||
|
@ -47,6 +48,7 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_ARGB555,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
.pnmr = PnMR_SPIM_ALP | PnMR_DDDF_ARGB,
|
||||
.edf = PnDDCR4_EDF_NONE,
|
||||
}, {
|
||||
|
@ -61,6 +63,7 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_XBGR32,
|
||||
.bpp = 32,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
.pnmr = PnMR_SPIM_TP | PnMR_DDDF_16BPP,
|
||||
.edf = PnDDCR4_EDF_RGB888,
|
||||
}, {
|
||||
|
@ -68,6 +71,7 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_ABGR32,
|
||||
.bpp = 32,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
.pnmr = PnMR_SPIM_ALP | PnMR_DDDF_16BPP,
|
||||
.edf = PnDDCR4_EDF_ARGB8888,
|
||||
}, {
|
||||
|
@ -75,6 +79,7 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_UYVY,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 2,
|
||||
.pnmr = PnMR_SPIM_TP_OFF | PnMR_DDDF_YC,
|
||||
.edf = PnDDCR4_EDF_NONE,
|
||||
}, {
|
||||
|
@ -82,6 +87,7 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_YUYV,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 2,
|
||||
.pnmr = PnMR_SPIM_TP_OFF | PnMR_DDDF_YC,
|
||||
.edf = PnDDCR4_EDF_NONE,
|
||||
}, {
|
||||
|
@ -89,6 +95,7 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_NV12M,
|
||||
.bpp = 12,
|
||||
.planes = 2,
|
||||
.hsub = 2,
|
||||
.pnmr = PnMR_SPIM_TP_OFF | PnMR_DDDF_YC,
|
||||
.edf = PnDDCR4_EDF_NONE,
|
||||
}, {
|
||||
|
@ -96,6 +103,7 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_NV21M,
|
||||
.bpp = 12,
|
||||
.planes = 2,
|
||||
.hsub = 2,
|
||||
.pnmr = PnMR_SPIM_TP_OFF | PnMR_DDDF_YC,
|
||||
.edf = PnDDCR4_EDF_NONE,
|
||||
}, {
|
||||
|
@ -103,6 +111,7 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_NV16M,
|
||||
.bpp = 16,
|
||||
.planes = 2,
|
||||
.hsub = 2,
|
||||
.pnmr = PnMR_SPIM_TP_OFF | PnMR_DDDF_YC,
|
||||
.edf = PnDDCR4_EDF_NONE,
|
||||
},
|
||||
|
@ -115,156 +124,187 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = {
|
|||
.v4l2 = V4L2_PIX_FMT_RGB332,
|
||||
.bpp = 8,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_ARGB4444,
|
||||
.v4l2 = V4L2_PIX_FMT_ARGB444,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_XRGB4444,
|
||||
.v4l2 = V4L2_PIX_FMT_XRGB444,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_RGBA4444,
|
||||
.v4l2 = V4L2_PIX_FMT_RGBA444,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_RGBX4444,
|
||||
.v4l2 = V4L2_PIX_FMT_RGBX444,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_ABGR4444,
|
||||
.v4l2 = V4L2_PIX_FMT_ABGR444,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_XBGR4444,
|
||||
.v4l2 = V4L2_PIX_FMT_XBGR444,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_BGRA4444,
|
||||
.v4l2 = V4L2_PIX_FMT_BGRA444,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_BGRX4444,
|
||||
.v4l2 = V4L2_PIX_FMT_BGRX444,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_RGBA5551,
|
||||
.v4l2 = V4L2_PIX_FMT_RGBA555,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_RGBX5551,
|
||||
.v4l2 = V4L2_PIX_FMT_RGBX555,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_ABGR1555,
|
||||
.v4l2 = V4L2_PIX_FMT_ABGR555,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_XBGR1555,
|
||||
.v4l2 = V4L2_PIX_FMT_XBGR555,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_BGRA5551,
|
||||
.v4l2 = V4L2_PIX_FMT_BGRA555,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_BGRX5551,
|
||||
.v4l2 = V4L2_PIX_FMT_BGRX555,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_BGR888,
|
||||
.v4l2 = V4L2_PIX_FMT_RGB24,
|
||||
.bpp = 24,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_RGB888,
|
||||
.v4l2 = V4L2_PIX_FMT_BGR24,
|
||||
.bpp = 24,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_RGBA8888,
|
||||
.v4l2 = V4L2_PIX_FMT_BGRA32,
|
||||
.bpp = 32,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_RGBX8888,
|
||||
.v4l2 = V4L2_PIX_FMT_BGRX32,
|
||||
.bpp = 32,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_ABGR8888,
|
||||
.v4l2 = V4L2_PIX_FMT_RGBA32,
|
||||
.bpp = 32,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_XBGR8888,
|
||||
.v4l2 = V4L2_PIX_FMT_RGBX32,
|
||||
.bpp = 32,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_BGRA8888,
|
||||
.v4l2 = V4L2_PIX_FMT_ARGB32,
|
||||
.bpp = 32,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_BGRX8888,
|
||||
.v4l2 = V4L2_PIX_FMT_XRGB32,
|
||||
.bpp = 32,
|
||||
.planes = 1,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_YVYU,
|
||||
.v4l2 = V4L2_PIX_FMT_YVYU,
|
||||
.bpp = 16,
|
||||
.planes = 1,
|
||||
.hsub = 2,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_NV61,
|
||||
.v4l2 = V4L2_PIX_FMT_NV61M,
|
||||
.bpp = 16,
|
||||
.planes = 2,
|
||||
.hsub = 2,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_YUV420,
|
||||
.v4l2 = V4L2_PIX_FMT_YUV420M,
|
||||
.bpp = 12,
|
||||
.planes = 3,
|
||||
.hsub = 2,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_YVU420,
|
||||
.v4l2 = V4L2_PIX_FMT_YVU420M,
|
||||
.bpp = 12,
|
||||
.planes = 3,
|
||||
.hsub = 2,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_YUV422,
|
||||
.v4l2 = V4L2_PIX_FMT_YUV422M,
|
||||
.bpp = 16,
|
||||
.planes = 3,
|
||||
.hsub = 2,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_YVU422,
|
||||
.v4l2 = V4L2_PIX_FMT_YVU422M,
|
||||
.bpp = 16,
|
||||
.planes = 3,
|
||||
.hsub = 2,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_YUV444,
|
||||
.v4l2 = V4L2_PIX_FMT_YUV444M,
|
||||
.bpp = 24,
|
||||
.planes = 3,
|
||||
.hsub = 1,
|
||||
}, {
|
||||
.fourcc = DRM_FORMAT_YVU444,
|
||||
.v4l2 = V4L2_PIX_FMT_YVU444M,
|
||||
.bpp = 24,
|
||||
.planes = 3,
|
||||
.hsub = 1,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -311,6 +351,7 @@ rcar_du_fb_create(struct drm_device *dev, struct drm_file *file_priv,
|
|||
{
|
||||
struct rcar_du_device *rcdu = dev->dev_private;
|
||||
const struct rcar_du_format_info *format;
|
||||
unsigned int chroma_pitch;
|
||||
unsigned int max_pitch;
|
||||
unsigned int align;
|
||||
unsigned int i;
|
||||
|
@ -353,10 +394,19 @@ rcar_du_fb_create(struct drm_device *dev, struct drm_file *file_priv,
|
|||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the chroma plane(s) pitch using the horizontal subsampling
|
||||
* factor. For semi-planar formats, the U and V planes are combined, the
|
||||
* pitch must thus be doubled.
|
||||
*/
|
||||
chroma_pitch = mode_cmd->pitches[0] / format->hsub;
|
||||
if (format->planes == 2)
|
||||
chroma_pitch *= 2;
|
||||
|
||||
for (i = 1; i < format->planes; ++i) {
|
||||
if (mode_cmd->pitches[i] != mode_cmd->pitches[0]) {
|
||||
if (mode_cmd->pitches[i] != chroma_pitch) {
|
||||
dev_dbg(dev->dev,
|
||||
"luma and chroma pitches do not match\n");
|
||||
"luma and chroma pitches are not compatible\n");
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ struct rcar_du_format_info {
|
|||
u32 v4l2;
|
||||
unsigned int bpp;
|
||||
unsigned int planes;
|
||||
unsigned int hsub;
|
||||
unsigned int pnmr;
|
||||
unsigned int edf;
|
||||
};
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <drm/drm_fourcc.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_managed.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_vblank.h>
|
||||
|
||||
|
@ -278,7 +279,7 @@ static void rcar_du_vsp_plane_atomic_update(struct drm_plane *plane,
|
|||
|
||||
if (plane->state->visible)
|
||||
rcar_du_vsp_plane_setup(rplane);
|
||||
else
|
||||
else if (old_state->crtc)
|
||||
vsp1_du_atomic_update(rplane->vsp->vsp, crtc->vsp_pipe,
|
||||
rplane->index, NULL);
|
||||
}
|
||||
|
@ -340,6 +341,13 @@ static const struct drm_plane_funcs rcar_du_vsp_plane_funcs = {
|
|||
.atomic_destroy_state = rcar_du_vsp_plane_atomic_destroy_state,
|
||||
};
|
||||
|
||||
static void rcar_du_vsp_cleanup(struct drm_device *dev, void *res)
|
||||
{
|
||||
struct rcar_du_vsp *vsp = res;
|
||||
|
||||
put_device(vsp->vsp);
|
||||
}
|
||||
|
||||
int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np,
|
||||
unsigned int crtcs)
|
||||
{
|
||||
|
@ -356,6 +364,10 @@ int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np,
|
|||
|
||||
vsp->vsp = &pdev->dev;
|
||||
|
||||
ret = drmm_add_action(rcdu->ddev, rcar_du_vsp_cleanup, vsp);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = vsp1_du_init(vsp->vsp);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
|
@ -978,11 +978,13 @@ static const struct rcar_lvds_device_info rcar_lvds_r8a77995_info = {
|
|||
};
|
||||
|
||||
static const struct of_device_id rcar_lvds_of_table[] = {
|
||||
{ .compatible = "renesas,r8a7742-lvds", .data = &rcar_lvds_gen2_info },
|
||||
{ .compatible = "renesas,r8a7743-lvds", .data = &rcar_lvds_gen2_info },
|
||||
{ .compatible = "renesas,r8a7744-lvds", .data = &rcar_lvds_gen2_info },
|
||||
{ .compatible = "renesas,r8a774a1-lvds", .data = &rcar_lvds_gen3_info },
|
||||
{ .compatible = "renesas,r8a774b1-lvds", .data = &rcar_lvds_gen3_info },
|
||||
{ .compatible = "renesas,r8a774c0-lvds", .data = &rcar_lvds_r8a77990_info },
|
||||
{ .compatible = "renesas,r8a774e1-lvds", .data = &rcar_lvds_gen3_info },
|
||||
{ .compatible = "renesas,r8a7790-lvds", .data = &rcar_lvds_gen2_info },
|
||||
{ .compatible = "renesas,r8a7791-lvds", .data = &rcar_lvds_gen2_info },
|
||||
{ .compatible = "renesas,r8a7793-lvds", .data = &rcar_lvds_gen2_info },
|
||||
|
|
Loading…
Reference in New Issue