Thomas Zimmermann
2020-Mar-05 15:59 UTC
[PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()
A call to drm_simple_encoder_init() initializes an encoder without further functionality. It only provides the destroy callback to cleanup the encoder's state. Only few drivers implement more sophisticated encoders than that. Most drivers implement such a simple encoder and can use drm_simple_encoder_init() instead. The patchset converts drivers where the encoder's instance is embedded in a larger data structure. The driver releases the memory during cleanup. Each patch replaces drm_encoder_init() with drm_simple_encoder_init() and removes the (now unused) driver's encoder functions. While the patchset is fairly large, the indiviual patches are self- contained and can be merged independently from each other. The simple-encoder functionality is currently in drm-misc-next, where these patches could go as well. Future directions: There's another common case where the driver calls kzalloc() plus drm_encoder_init(). Such drivers are not handled by this patchset. The plan here is to use a simple encoder with either managed memory allocation (once it's merged), or embed the encoder in a larger data structure and drop kzalloc() entirely. The patchset has been compile-tested on x86-64, aarch64 and arm. Thomas Zimmermann (22): drm/arc: Use simple encoder drm/atmel-hlcdc: Use simple encoder drm/exynos: Use simple encoder drm/fsl-dcu: Use simple encoder drm/gma500: Use simple encoder drm/hisilicon/kirin: Use simple encoder drm/i2c/tda998x: Use simple encoder drm/imx: Use simple encoder drm/ingenic: Use simple encoder drm/mediatek: Use simple encoder drm/rcar-du: Use simple encoder drm/rockchip: Use simple encoder drm/shmobile: Use simple encoder drm/sun4i: Use simple encoder drm/tegra: Use simple encoder drm/tidss: Use simple encoder drm/tilcdc: Use simple encoder drm/vc4: Use simple encoder drm/virtgpu: Use simple encoder drm/vkms: Use simple encoder drm/writeback: Use simple encoder drm/zte: Use simple encoder drivers/gpu/drm/arc/arcpgu_hdmi.c | 10 +++------- drivers/gpu/drm/arc/arcpgu_sim.c | 8 ++------ .../gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 12 ++++-------- drivers/gpu/drm/drm_writeback.c | 10 +++------- drivers/gpu/drm/exynos/exynos_dp.c | 8 ++------ drivers/gpu/drm/exynos/exynos_drm_dpi.c | 8 ++------ drivers/gpu/drm/exynos/exynos_drm_dsi.c | 8 ++------ drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 ++------ drivers/gpu/drm/exynos/exynos_hdmi.c | 8 ++------ drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 14 +++----------- drivers/gpu/drm/gma500/cdv_intel_crt.c | 14 +++----------- drivers/gpu/drm/gma500/cdv_intel_dp.c | 16 +++------------- drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 4 ++-- drivers/gpu/drm/gma500/cdv_intel_lvds.c | 17 +++-------------- drivers/gpu/drm/gma500/mdfld_dsi_dpi.c | 7 +++---- drivers/gpu/drm/gma500/mdfld_output.h | 1 - drivers/gpu/drm/gma500/mdfld_tmd_vid.c | 6 ------ drivers/gpu/drm/gma500/mdfld_tpo_vid.c | 6 ------ drivers/gpu/drm/gma500/oaktrail_hdmi.c | 14 ++------------ drivers/gpu/drm/gma500/oaktrail_lvds.c | 5 +++-- drivers/gpu/drm/gma500/psb_intel_drv.h | 1 - drivers/gpu/drm/gma500/psb_intel_lvds.c | 18 +++--------------- drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c | 5 ----- drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 8 ++------ drivers/gpu/drm/i2c/tda998x_drv.c | 14 +++----------- drivers/gpu/drm/imx/dw_hdmi-imx.c | 8 ++------ drivers/gpu/drm/imx/imx-drm-core.c | 6 ------ drivers/gpu/drm/imx/imx-drm.h | 1 - drivers/gpu/drm/imx/imx-ldb.c | 8 ++------ drivers/gpu/drm/imx/imx-tve.c | 8 ++------ drivers/gpu/drm/imx/parallel-display.c | 8 ++------ drivers/gpu/drm/ingenic/ingenic-drm.c | 9 +++------ drivers/gpu/drm/mediatek/mtk_dpi.c | 14 +++----------- drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++----------- drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 14 +++----------- .../gpu/drm/rockchip/analogix_dp-rockchip.c | 9 +++------ drivers/gpu/drm/rockchip/cdn-dp-core.c | 9 +++------ .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 8 ++------ drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 8 ++------ drivers/gpu/drm/rockchip/inno_hdmi.c | 8 ++------ drivers/gpu/drm/rockchip/rk3066_hdmi.c | 8 ++------ drivers/gpu/drm/rockchip/rockchip_lvds.c | 10 +++------- drivers/gpu/drm/rockchip/rockchip_rgb.c | 8 ++------ drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 14 +++----------- drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 12 +++--------- drivers/gpu/drm/sun4i/sun4i_lvds.c | 12 +++--------- drivers/gpu/drm/sun4i/sun4i_rgb.c | 17 +++-------------- drivers/gpu/drm/sun4i/sun4i_tv.c | 17 +++-------------- drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 12 +++--------- drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 8 ++------ drivers/gpu/drm/tegra/drm.h | 2 -- drivers/gpu/drm/tegra/dsi.c | 10 +++------- drivers/gpu/drm/tegra/hdmi.c | 9 +++------ drivers/gpu/drm/tegra/output.c | 6 +----- drivers/gpu/drm/tegra/rgb.c | 8 ++------ drivers/gpu/drm/tegra/sor.c | 8 ++------ drivers/gpu/drm/tidss/tidss_encoder.c | 10 +++------- drivers/gpu/drm/tilcdc/tilcdc_external.c | 10 +++------- drivers/gpu/drm/tilcdc/tilcdc_panel.c | 8 ++------ drivers/gpu/drm/vc4/vc4_dpi.c | 8 ++------ drivers/gpu/drm/vc4/vc4_dsi.c | 15 +++------------ drivers/gpu/drm/vc4/vc4_hdmi.c | 17 ++++------------- drivers/gpu/drm/vc4/vc4_vec.c | 8 ++------ drivers/gpu/drm/virtio/virtgpu_display.c | 8 ++------ drivers/gpu/drm/vkms/vkms_output.c | 8 ++------ drivers/gpu/drm/zte/zx_hdmi.c | 8 ++------ drivers/gpu/drm/zte/zx_tvenc.c | 8 ++------ drivers/gpu/drm/zte/zx_vga.c | 8 ++------ 68 files changed, 151 insertions(+), 488 deletions(-) -- 2.25.1
The arc driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/arc/arcpgu_hdmi.c | 10 +++-------
drivers/gpu/drm/arc/arcpgu_sim.c | 8 ++------
2 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/arc/arcpgu_hdmi.c
b/drivers/gpu/drm/arc/arcpgu_hdmi.c
index 52839934f2fb..780911765e2e 100644
--- a/drivers/gpu/drm/arc/arcpgu_hdmi.c
+++ b/drivers/gpu/drm/arc/arcpgu_hdmi.c
@@ -7,15 +7,12 @@
#include <drm/drm_bridge.h>
#include <drm/drm_crtc.h>
-#include <drm/drm_encoder.h>
#include <drm/drm_device.h>
+#include <drm/drm_encoder.h>
+#include <drm/drm_simple_kms_helper.h>
#include "arcpgu.h"
-static struct drm_encoder_funcs arcpgu_drm_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
int arcpgu_drm_hdmi_init(struct drm_device *drm, struct device_node *np)
{
struct drm_encoder *encoder;
@@ -34,8 +31,7 @@ int arcpgu_drm_hdmi_init(struct drm_device *drm, struct
device_node *np)
encoder->possible_crtcs = 1;
encoder->possible_clones = 0;
- ret = drm_encoder_init(drm, encoder, &arcpgu_drm_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/arc/arcpgu_sim.c b/drivers/gpu/drm/arc/arcpgu_sim.c
index 37d961668dfe..66ca2c26e339 100644
--- a/drivers/gpu/drm/arc/arcpgu_sim.c
+++ b/drivers/gpu/drm/arc/arcpgu_sim.c
@@ -8,6 +8,7 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_device.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "arcpgu.h"
@@ -50,10 +51,6 @@ static const struct drm_connector_funcs
arcpgu_drm_connector_funcs = {
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
};
-static struct drm_encoder_funcs arcpgu_drm_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
int arcpgu_drm_sim_init(struct drm_device *drm, struct device_node *np)
{
struct arcpgu_drm_connector *arcpgu_connector;
@@ -68,8 +65,7 @@ int arcpgu_drm_sim_init(struct drm_device *drm, struct
device_node *np)
encoder->possible_crtcs = 1;
encoder->possible_clones = 0;
- ret = drm_encoder_init(drm, encoder, &arcpgu_drm_encoder_funcs,
- DRM_MODE_ENCODER_VIRTUAL, NULL);
+ ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_VIRTUAL);
if (ret)
return ret;
--
2.25.1
The atmel-hlcdc driver uses an empty implementation for its encoder.
Replace the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
index e2019fe97fff..43bc709e3523 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
@@ -11,9 +11,10 @@
#include <linux/media-bus-format.h>
#include <linux/of_graph.h>
+#include <drm/drm_bridge.h>
#include <drm/drm_encoder.h>
#include <drm/drm_of.h>
-#include <drm/drm_bridge.h>
+#include <drm/drm_simple_kms_helper.h>
#include "atmel_hlcdc_dc.h"
@@ -22,10 +23,6 @@ struct atmel_hlcdc_rgb_output {
int bus_fmt;
};
-static const struct drm_encoder_funcs atmel_hlcdc_panel_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static struct atmel_hlcdc_rgb_output *
atmel_hlcdc_encoder_to_rgb_output(struct drm_encoder *encoder)
{
@@ -98,9 +95,8 @@ static int atmel_hlcdc_attach_endpoint(struct drm_device *dev,
int endpoint)
return -EINVAL;
}
- ret = drm_encoder_init(dev, &output->encoder,
- &atmel_hlcdc_panel_encoder_funcs,
- DRM_MODE_ENCODER_NONE, NULL);
+ ret = drm_simple_encoder_init(dev, &output->encoder,
+ DRM_MODE_ENCODER_NONE);
if (ret)
return ret;
--
2.25.1
The exynos driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/exynos/exynos_dp.c | 8 ++------
drivers/gpu/drm/exynos/exynos_drm_dpi.c | 8 ++------
drivers/gpu/drm/exynos/exynos_drm_dsi.c | 8 ++------
drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 ++------
drivers/gpu/drm/exynos/exynos_hdmi.c | 8 ++------
5 files changed, 10 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_dp.c
b/drivers/gpu/drm/exynos/exynos_dp.c
index d23d3502ca91..a61482af2998 100644
--- a/drivers/gpu/drm/exynos/exynos_dp.c
+++ b/drivers/gpu/drm/exynos/exynos_dp.c
@@ -25,6 +25,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <drm/exynos_drm.h>
#include "exynos_drm_crtc.h"
@@ -135,10 +136,6 @@ static const struct drm_encoder_helper_funcs
exynos_dp_encoder_helper_funcs = {
.disable = exynos_dp_nop,
};
-static const struct drm_encoder_funcs exynos_dp_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int exynos_dp_dt_parse_panel(struct exynos_dp_device *dp)
{
int ret;
@@ -174,8 +171,7 @@ static int exynos_dp_bind(struct device *dev, struct device
*master, void *data)
return ret;
}
- drm_encoder_init(drm_dev, encoder, &exynos_dp_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
drm_encoder_helper_add(encoder, &exynos_dp_encoder_helper_funcs);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
index 43fa0f26c052..7ba5354e7d94 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
@@ -14,6 +14,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <video/of_videomode.h>
#include <video/videomode.h>
@@ -149,10 +150,6 @@ static const struct drm_encoder_helper_funcs
exynos_dpi_encoder_helper_funcs = {
.disable = exynos_dpi_disable,
};
-static const struct drm_encoder_funcs exynos_dpi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
enum {
FIMD_PORT_IN0,
FIMD_PORT_IN1,
@@ -201,8 +198,7 @@ int exynos_dpi_bind(struct drm_device *dev, struct
drm_encoder *encoder)
{
int ret;
- drm_encoder_init(dev, encoder, &exynos_dpi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS);
drm_encoder_helper_add(encoder, &exynos_dpi_encoder_helper_funcs);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 669d3857502a..2986c93382e0 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -30,6 +30,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "exynos_drm_crtc.h"
#include "exynos_drm_drv.h"
@@ -1524,10 +1525,6 @@ static const struct drm_encoder_helper_funcs
exynos_dsi_encoder_helper_funcs = {
.disable = exynos_dsi_disable,
};
-static const struct drm_encoder_funcs exynos_dsi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
MODULE_DEVICE_TABLE(of, exynos_dsi_of_match);
static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
@@ -1705,8 +1702,7 @@ static int exynos_dsi_bind(struct device *dev, struct
device *master,
struct drm_bridge *in_bridge;
int ret;
- drm_encoder_init(drm_dev, encoder, &exynos_dsi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
drm_encoder_helper_add(encoder, &exynos_dsi_encoder_helper_funcs);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
index b320b3a21ad4..282467121699 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
@@ -14,6 +14,7 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_edid.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <drm/drm_vblank.h>
#include <drm/exynos_drm.h>
@@ -369,10 +370,6 @@ static const struct drm_encoder_helper_funcs
exynos_vidi_encoder_helper_funcs .disable = exynos_vidi_disable,
};
-static const struct drm_encoder_funcs exynos_vidi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int vidi_bind(struct device *dev, struct device *master, void *data)
{
struct vidi_context *ctx = dev_get_drvdata(dev);
@@ -406,8 +403,7 @@ static int vidi_bind(struct device *dev, struct device
*master, void *data)
return PTR_ERR(ctx->crtc);
}
- drm_encoder_init(drm_dev, encoder, &exynos_vidi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
drm_encoder_helper_add(encoder, &exynos_vidi_encoder_helper_funcs);
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c
b/drivers/gpu/drm/exynos/exynos_hdmi.c
index 3e5f1a77286d..302ffda5f297 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -38,6 +38,7 @@
#include <drm/drm_edid.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "exynos_drm_crtc.h"
#include "regs-hdmi.h"
@@ -1559,10 +1560,6 @@ static const struct drm_encoder_helper_funcs
exynos_hdmi_encoder_helper_funcs .disable = hdmi_disable,
};
-static const struct drm_encoder_funcs exynos_hdmi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static void hdmi_audio_shutdown(struct device *dev, void *data)
{
struct hdmi_context *hdata = dev_get_drvdata(dev);
@@ -1851,8 +1848,7 @@ static int hdmi_bind(struct device *dev, struct device
*master, void *data)
hdata->phy_clk.enable = hdmiphy_clk_enable;
- drm_encoder_init(drm_dev, encoder, &exynos_hdmi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
drm_encoder_helper_add(encoder, &exynos_hdmi_encoder_helper_funcs);
--
2.25.1
The fsl-dcu driver uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
index cff344367f81..9b0c4736c21a 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
@@ -13,19 +13,11 @@
#include <drm/drm_of.h>
#include <drm/drm_panel.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "fsl_dcu_drm_drv.h"
#include "fsl_tcon.h"
-static void fsl_dcu_drm_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs encoder_funcs = {
- .destroy = fsl_dcu_drm_encoder_destroy,
-};
-
int fsl_dcu_drm_encoder_create(struct fsl_dcu_drm_device *fsl_dev,
struct drm_crtc *crtc)
{
@@ -38,8 +30,8 @@ int fsl_dcu_drm_encoder_create(struct fsl_dcu_drm_device
*fsl_dev,
if (fsl_dev->tcon)
fsl_tcon_bypass_enable(fsl_dev->tcon);
- ret = drm_encoder_init(fsl_dev->drm, encoder, &encoder_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
+ ret = drm_simple_encoder_init(fsl_dev->drm, encoder,
+ DRM_MODE_ENCODER_LVDS);
if (ret < 0)
return ret;
--
2.25.1
The gma500 driver uses empty implementations for some of its encoders.
Replace the code with the generic simple encoder. As a side effect, the
patch also removes an indirection in the encoder setup for Medfield.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/gma500/cdv_intel_crt.c | 14 +++-----------
drivers/gpu/drm/gma500/cdv_intel_dp.c | 16 +++-------------
drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 4 ++--
drivers/gpu/drm/gma500/cdv_intel_lvds.c | 17 +++--------------
drivers/gpu/drm/gma500/mdfld_dsi_dpi.c | 7 +++----
drivers/gpu/drm/gma500/mdfld_output.h | 1 -
drivers/gpu/drm/gma500/mdfld_tmd_vid.c | 6 ------
drivers/gpu/drm/gma500/mdfld_tpo_vid.c | 6 ------
drivers/gpu/drm/gma500/oaktrail_hdmi.c | 14 ++------------
drivers/gpu/drm/gma500/oaktrail_lvds.c | 5 +++--
drivers/gpu/drm/gma500/psb_intel_drv.h | 1 -
drivers/gpu/drm/gma500/psb_intel_lvds.c | 18 +++---------------
drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c | 5 -----
13 files changed, 22 insertions(+), 92 deletions(-)
diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c
b/drivers/gpu/drm/gma500/cdv_intel_crt.c
index 29c36d63b20e..88535f5aacc5 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_crt.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c
@@ -28,6 +28,8 @@
#include <linux/i2c.h>
#include <linux/pm_runtime.h>
+#include <drm/drm_simple_kms_helper.h>
+
#include "cdv_device.h"
#include "intel_bios.h"
#include "power.h"
@@ -237,15 +239,6 @@ static const struct drm_connector_helper_funcs
.best_encoder = gma_best_encoder,
};
-static void cdv_intel_crt_enc_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs cdv_intel_crt_enc_funcs = {
- .destroy = cdv_intel_crt_enc_destroy,
-};
-
void cdv_intel_crt_init(struct drm_device *dev,
struct psb_intel_mode_device *mode_dev)
{
@@ -271,8 +264,7 @@ void cdv_intel_crt_init(struct drm_device *dev,
&cdv_intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA);
encoder = &gma_encoder->base;
- drm_encoder_init(dev, encoder,
- &cdv_intel_crt_enc_funcs, DRM_MODE_ENCODER_DAC, NULL);
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_DAC);
gma_connector_attach_encoder(gma_connector, gma_encoder);
diff --git a/drivers/gpu/drm/gma500/cdv_intel_dp.c
b/drivers/gpu/drm/gma500/cdv_intel_dp.c
index 5772b2dce0d6..13947ec06dbb 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_dp.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_dp.c
@@ -32,6 +32,7 @@
#include <drm/drm_crtc.h>
#include <drm/drm_crtc_helper.h>
#include <drm/drm_dp_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "gma_display.h"
#include "psb_drv.h"
@@ -1908,11 +1909,6 @@ cdv_intel_dp_destroy(struct drm_connector *connector)
kfree(connector);
}
-static void cdv_intel_dp_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
static const struct drm_encoder_helper_funcs cdv_intel_dp_helper_funcs = {
.dpms = cdv_intel_dp_dpms,
.mode_fixup = cdv_intel_dp_mode_fixup,
@@ -1935,11 +1931,6 @@ static const struct drm_connector_helper_funcs
cdv_intel_dp_connector_helper_fun
.best_encoder = gma_best_encoder,
};
-static const struct drm_encoder_funcs cdv_intel_dp_enc_funcs = {
- .destroy = cdv_intel_dp_encoder_destroy,
-};
-
-
static void cdv_intel_dp_add_properties(struct drm_connector *connector)
{
cdv_intel_attach_force_audio_property(connector);
@@ -2016,8 +2007,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct
psb_intel_mode_device *mode_dev
encoder = &gma_encoder->base;
drm_connector_init(dev, connector, &cdv_intel_dp_connector_funcs, type);
- drm_encoder_init(dev, encoder, &cdv_intel_dp_enc_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS);
gma_connector_attach_encoder(gma_connector, gma_encoder);
@@ -2120,7 +2110,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct
psb_intel_mode_device *mode_dev
if (ret == 0) {
/* if this fails, presume the device is a ghost */
DRM_INFO("failed to retrieve link info, disabling eDP\n");
- cdv_intel_dp_encoder_destroy(encoder);
+ drm_encoder_cleanup(encoder);
cdv_intel_dp_destroy(connector);
goto err_priv;
} else {
diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
index 1711a41acc16..0d12c6ffbc40 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
@@ -32,6 +32,7 @@
#include <drm/drm.h>
#include <drm/drm_crtc.h>
#include <drm/drm_edid.h>
+#include <drm/drm_simple_kms_helper.h>
#include "cdv_device.h"
#include "psb_drv.h"
@@ -311,8 +312,7 @@ void cdv_hdmi_init(struct drm_device *dev,
&cdv_hdmi_connector_funcs,
DRM_MODE_CONNECTOR_DVID);
- drm_encoder_init(dev, encoder, &psb_intel_lvds_enc_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS);
gma_connector_attach_encoder(gma_connector, gma_encoder);
gma_encoder->type = INTEL_OUTPUT_HDMI;
diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c
b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
index ea0a5d9a0acc..18de10e9ff9a 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
@@ -12,6 +12,8 @@
#include <linux/i2c.h>
#include <linux/pm_runtime.h>
+#include <drm/drm_simple_kms_helper.h>
+
#include "cdv_device.h"
#include "intel_bios.h"
#include "power.h"
@@ -499,16 +501,6 @@ static const struct drm_connector_funcs
cdv_intel_lvds_connector_funcs = {
.destroy = cdv_intel_lvds_destroy,
};
-
-static void cdv_intel_lvds_enc_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs cdv_intel_lvds_enc_funcs = {
- .destroy = cdv_intel_lvds_enc_destroy,
-};
-
/*
* Enumerate the child dev array parsed from VBT to check whether
* the LVDS is present.
@@ -616,10 +608,7 @@ void cdv_intel_lvds_init(struct drm_device *dev,
&cdv_intel_lvds_connector_funcs,
DRM_MODE_CONNECTOR_LVDS);
- drm_encoder_init(dev, encoder,
- &cdv_intel_lvds_enc_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
-
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
gma_connector_attach_encoder(gma_connector, gma_encoder);
gma_encoder->type = INTEL_OUTPUT_LVDS;
diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
index d4c65f268922..aa5aa293ddb6 100644
--- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
+++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
@@ -27,6 +27,8 @@
#include <linux/delay.h>
+#include <drm/drm_simple_kms_helper.h>
+
#include "mdfld_dsi_dpi.h"
#include "mdfld_dsi_pkg_sender.h"
#include "mdfld_output.h"
@@ -993,10 +995,7 @@ struct mdfld_dsi_encoder *mdfld_dsi_dpi_init(struct
drm_device *dev,
/*create drm encoder object*/
connector = &dsi_connector->base.base;
encoder = &dpi_output->base.base.base;
- drm_encoder_init(dev,
- encoder,
- p_funcs->encoder_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
drm_encoder_helper_add(encoder,
p_funcs->encoder_helper_funcs);
diff --git a/drivers/gpu/drm/gma500/mdfld_output.h
b/drivers/gpu/drm/gma500/mdfld_output.h
index ab2b27c0f037..17a944d70add 100644
--- a/drivers/gpu/drm/gma500/mdfld_output.h
+++ b/drivers/gpu/drm/gma500/mdfld_output.h
@@ -51,7 +51,6 @@ struct panel_info {
};
struct panel_funcs {
- const struct drm_encoder_funcs *encoder_funcs;
const struct drm_encoder_helper_funcs *encoder_helper_funcs;
struct drm_display_mode * (*get_config_mode)(struct drm_device *);
int (*get_panel_info)(struct drm_device *, int, struct panel_info *);
diff --git a/drivers/gpu/drm/gma500/mdfld_tmd_vid.c
b/drivers/gpu/drm/gma500/mdfld_tmd_vid.c
index 49c92debb7b2..25e897b98f86 100644
--- a/drivers/gpu/drm/gma500/mdfld_tmd_vid.c
+++ b/drivers/gpu/drm/gma500/mdfld_tmd_vid.c
@@ -188,13 +188,7 @@ static const struct drm_encoder_helper_funcs
.commit = mdfld_dsi_dpi_commit,
};
-/*TPO DPI encoder funcs*/
-static const struct drm_encoder_funcs mdfld_tpo_dpi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
const struct panel_funcs mdfld_tmd_vid_funcs = {
- .encoder_funcs = &mdfld_tpo_dpi_encoder_funcs,
.encoder_helper_funcs = &mdfld_tpo_dpi_encoder_helper_funcs,
.get_config_mode = &tmd_vid_get_config_mode,
.get_panel_info = tmd_vid_get_panel_info,
diff --git a/drivers/gpu/drm/gma500/mdfld_tpo_vid.c
b/drivers/gpu/drm/gma500/mdfld_tpo_vid.c
index a9420bf9a419..11845978fb0a 100644
--- a/drivers/gpu/drm/gma500/mdfld_tpo_vid.c
+++ b/drivers/gpu/drm/gma500/mdfld_tpo_vid.c
@@ -76,13 +76,7 @@ static const struct drm_encoder_helper_funcs
.commit = mdfld_dsi_dpi_commit,
};
-/*TPO DPI encoder funcs*/
-static const struct drm_encoder_funcs mdfld_tpo_dpi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
const struct panel_funcs mdfld_tpo_vid_funcs = {
- .encoder_funcs = &mdfld_tpo_dpi_encoder_funcs,
.encoder_helper_funcs = &mdfld_tpo_dpi_encoder_helper_funcs,
.get_config_mode = &tpo_vid_get_config_mode,
.get_panel_info = tpo_vid_get_panel_info,
diff --git a/drivers/gpu/drm/gma500/oaktrail_hdmi.c
b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
index f4370232767d..b25086f252ae 100644
--- a/drivers/gpu/drm/gma500/oaktrail_hdmi.c
+++ b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
@@ -27,6 +27,7 @@
#include <linux/delay.h>
#include <drm/drm.h>
+#include <drm/drm_simple_kms_helper.h>
#include "psb_drv.h"
#include "psb_intel_drv.h"
@@ -620,15 +621,6 @@ static const struct drm_connector_funcs
oaktrail_hdmi_connector_funcs = {
.destroy = oaktrail_hdmi_destroy,
};
-static void oaktrail_hdmi_enc_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs oaktrail_hdmi_enc_funcs = {
- .destroy = oaktrail_hdmi_enc_destroy,
-};
-
void oaktrail_hdmi_init(struct drm_device *dev,
struct psb_intel_mode_device *mode_dev)
{
@@ -651,9 +643,7 @@ void oaktrail_hdmi_init(struct drm_device *dev,
&oaktrail_hdmi_connector_funcs,
DRM_MODE_CONNECTOR_DVID);
- drm_encoder_init(dev, encoder,
- &oaktrail_hdmi_enc_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS);
gma_connector_attach_encoder(gma_connector, gma_encoder);
diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c
b/drivers/gpu/drm/gma500/oaktrail_lvds.c
index 582e09597500..2828360153d1 100644
--- a/drivers/gpu/drm/gma500/oaktrail_lvds.c
+++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c
@@ -13,6 +13,8 @@
#include <asm/intel-mid.h>
+#include <drm/drm_simple_kms_helper.h>
+
#include "intel_bios.h"
#include "power.h"
#include "psb_drv.h"
@@ -311,8 +313,7 @@ void oaktrail_lvds_init(struct drm_device *dev,
&psb_intel_lvds_connector_funcs,
DRM_MODE_CONNECTOR_LVDS);
- drm_encoder_init(dev, encoder, &psb_intel_lvds_enc_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
gma_connector_attach_encoder(gma_connector, gma_encoder);
gma_encoder->type = INTEL_OUTPUT_LVDS;
diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h
b/drivers/gpu/drm/gma500/psb_intel_drv.h
index 16c6136f778b..fb601983cef0 100644
--- a/drivers/gpu/drm/gma500/psb_intel_drv.h
+++ b/drivers/gpu/drm/gma500/psb_intel_drv.h
@@ -252,7 +252,6 @@ extern int psb_intel_lvds_set_property(struct drm_connector
*connector,
struct drm_property *property,
uint64_t value);
extern void psb_intel_lvds_destroy(struct drm_connector *connector);
-extern const struct drm_encoder_funcs psb_intel_lvds_enc_funcs;
/* intel_gmbus.c */
extern void gma_intel_i2c_reset(struct drm_device *dev);
diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c
b/drivers/gpu/drm/gma500/psb_intel_lvds.c
index afaebab7bc17..063c66bb946d 100644
--- a/drivers/gpu/drm/gma500/psb_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c
@@ -11,6 +11,8 @@
#include <linux/i2c.h>
#include <linux/pm_runtime.h>
+#include <drm/drm_simple_kms_helper.h>
+
#include "intel_bios.h"
#include "power.h"
#include "psb_drv.h"
@@ -621,18 +623,6 @@ const struct drm_connector_funcs
psb_intel_lvds_connector_funcs = {
.destroy = psb_intel_lvds_destroy,
};
-
-static void psb_intel_lvds_enc_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-const struct drm_encoder_funcs psb_intel_lvds_enc_funcs = {
- .destroy = psb_intel_lvds_enc_destroy,
-};
-
-
-
/**
* psb_intel_lvds_init - setup LVDS connectors on this device
* @dev: drm device
@@ -683,9 +673,7 @@ void psb_intel_lvds_init(struct drm_device *dev,
&psb_intel_lvds_connector_funcs,
DRM_MODE_CONNECTOR_LVDS);
- drm_encoder_init(dev, encoder,
- &psb_intel_lvds_enc_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
gma_connector_attach_encoder(gma_connector, gma_encoder);
gma_encoder->type = INTEL_OUTPUT_LVDS;
diff --git a/drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c
b/drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c
index 9e8224456ea2..f7e121f4c609 100644
--- a/drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c
+++ b/drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c
@@ -765,12 +765,7 @@ static const struct drm_encoder_helper_funcs
tc35876x_encoder_helper_funcs = {
.commit = mdfld_dsi_dpi_commit,
};
-static const struct drm_encoder_funcs tc35876x_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
const struct panel_funcs mdfld_tc35876x_funcs = {
- .encoder_funcs = &tc35876x_encoder_funcs,
.encoder_helper_funcs = &tc35876x_encoder_helper_funcs,
.get_config_mode = tc35876x_get_config_mode,
.get_panel_info = tc35876x_get_panel_info,
--
2.25.1
Thomas Zimmermann
2020-Mar-05 15:59 UTC
[PATCH 06/22] drm/hisilicon/kirin: Use simple encoder
The kirin driver uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
index f31068d74b18..08c1ab542c03 100644
--- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
+++ b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
@@ -25,6 +25,7 @@
#include <drm/drm_of.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "dw_dsi_reg.h"
@@ -696,10 +697,6 @@ static const struct drm_encoder_helper_funcs
dw_encoder_helper_funcs = {
.disable = dsi_encoder_disable
};
-static const struct drm_encoder_funcs dw_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int dw_drm_encoder_init(struct device *dev,
struct drm_device *drm_dev,
struct drm_encoder *encoder)
@@ -713,8 +710,7 @@ static int dw_drm_encoder_init(struct device *dev,
}
encoder->possible_crtcs = crtc_mask;
- ret = drm_encoder_init(drm_dev, encoder, &dw_encoder_funcs,
- DRM_MODE_ENCODER_DSI, NULL);
+ ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_DSI);
if (ret) {
DRM_ERROR("failed to init dsi encoder\n");
return ret;
--
2.25.1
The tda998x driver uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/i2c/tda998x_drv.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c
b/drivers/gpu/drm/i2c/tda998x_drv.c
index c3332209f27a..0e1a90f70ec0 100644
--- a/drivers/gpu/drm/i2c/tda998x_drv.c
+++ b/drivers/gpu/drm/i2c/tda998x_drv.c
@@ -19,6 +19,7 @@
#include <drm/drm_of.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <drm/i2c/tda998x.h>
#include <media/cec-notifier.h>
@@ -1997,15 +1998,6 @@ static int tda998x_create(struct device *dev)
/* DRM encoder functions */
-static void tda998x_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs tda998x_encoder_funcs = {
- .destroy = tda998x_encoder_destroy,
-};
-
static int tda998x_encoder_init(struct device *dev, struct drm_device *drm)
{
struct tda998x_priv *priv = dev_get_drvdata(dev);
@@ -2023,8 +2015,8 @@ static int tda998x_encoder_init(struct device *dev, struct
drm_device *drm)
priv->encoder.possible_crtcs = crtcs;
- ret = drm_encoder_init(drm, &priv->encoder, &tda998x_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ ret = drm_simple_encoder_init(drm, &priv->encoder,
+ DRM_MODE_ENCODER_TMDS);
if (ret)
goto err_encoder;
--
2.25.1
The imx driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/imx/dw_hdmi-imx.c | 8 ++------
drivers/gpu/drm/imx/imx-drm-core.c | 6 ------
drivers/gpu/drm/imx/imx-drm.h | 1 -
drivers/gpu/drm/imx/imx-ldb.c | 8 ++------
drivers/gpu/drm/imx/imx-tve.c | 8 ++------
drivers/gpu/drm/imx/parallel-display.c | 8 ++------
6 files changed, 8 insertions(+), 31 deletions(-)
diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c
b/drivers/gpu/drm/imx/dw_hdmi-imx.c
index f22cfbf9353e..ba4ca17fd4d8 100644
--- a/drivers/gpu/drm/imx/dw_hdmi-imx.c
+++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c
@@ -18,6 +18,7 @@
#include <drm/drm_edid.h>
#include <drm/drm_encoder.h>
#include <drm/drm_of.h>
+#include <drm/drm_simple_kms_helper.h>
#include "imx-drm.h"
@@ -143,10 +144,6 @@ static const struct drm_encoder_helper_funcs
dw_hdmi_imx_encoder_helper_funcs .atomic_check = dw_hdmi_imx_atomic_check,
};
-static const struct drm_encoder_funcs dw_hdmi_imx_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static enum drm_mode_status
imx6q_hdmi_mode_valid(struct drm_connector *con,
const struct drm_display_mode *mode)
@@ -236,8 +233,7 @@ static int dw_hdmi_imx_bind(struct device *dev, struct
device *master,
return ret;
drm_encoder_helper_add(encoder, &dw_hdmi_imx_encoder_helper_funcs);
- drm_encoder_init(drm, encoder, &dw_hdmi_imx_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
platform_set_drvdata(pdev, hdmi);
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c
b/drivers/gpu/drm/imx/imx-drm-core.c
index da87c70e413b..9979547ca883 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -42,12 +42,6 @@ void imx_drm_connector_destroy(struct drm_connector
*connector)
}
EXPORT_SYMBOL_GPL(imx_drm_connector_destroy);
-void imx_drm_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-EXPORT_SYMBOL_GPL(imx_drm_encoder_destroy);
-
static int imx_drm_atomic_check(struct drm_device *dev,
struct drm_atomic_state *state)
{
diff --git a/drivers/gpu/drm/imx/imx-drm.h b/drivers/gpu/drm/imx/imx-drm.h
index ab9c6f706eb3..c3e1a3f14d30 100644
--- a/drivers/gpu/drm/imx/imx-drm.h
+++ b/drivers/gpu/drm/imx/imx-drm.h
@@ -38,7 +38,6 @@ int imx_drm_encoder_parse_of(struct drm_device *drm,
struct drm_encoder *encoder, struct device_node *np);
void imx_drm_connector_destroy(struct drm_connector *connector);
-void imx_drm_encoder_destroy(struct drm_encoder *encoder);
int ipu_planes_assign_pre(struct drm_device *dev,
struct drm_atomic_state *state);
diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
index 4da22a94790c..66ea68e8da87 100644
--- a/drivers/gpu/drm/imx/imx-ldb.c
+++ b/drivers/gpu/drm/imx/imx-ldb.c
@@ -26,6 +26,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "imx-drm.h"
@@ -393,10 +394,6 @@ static const struct drm_connector_helper_funcs
imx_ldb_connector_helper_funcs .best_encoder = imx_ldb_connector_best_encoder,
};
-static const struct drm_encoder_funcs imx_ldb_encoder_funcs = {
- .destroy = imx_drm_encoder_destroy,
-};
-
static const struct drm_encoder_helper_funcs imx_ldb_encoder_helper_funcs = {
.atomic_mode_set = imx_ldb_encoder_atomic_mode_set,
.enable = imx_ldb_encoder_enable,
@@ -441,8 +438,7 @@ static int imx_ldb_register(struct drm_device *drm,
}
drm_encoder_helper_add(encoder, &imx_ldb_encoder_helper_funcs);
- drm_encoder_init(drm, encoder, &imx_ldb_encoder_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
+ drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_LVDS);
if (imx_ldb_ch->bridge) {
ret = drm_bridge_attach(&imx_ldb_ch->encoder,
diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c
index 5bbfaa2cd0f4..ee63782c77e9 100644
--- a/drivers/gpu/drm/imx/imx-tve.c
+++ b/drivers/gpu/drm/imx/imx-tve.c
@@ -21,6 +21,7 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_fb_helper.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "imx-drm.h"
@@ -348,10 +349,6 @@ static const struct drm_connector_helper_funcs
imx_tve_connector_helper_funcs .mode_valid = imx_tve_connector_mode_valid,
};
-static const struct drm_encoder_funcs imx_tve_encoder_funcs = {
- .destroy = imx_drm_encoder_destroy,
-};
-
static const struct drm_encoder_helper_funcs imx_tve_encoder_helper_funcs = {
.mode_set = imx_tve_encoder_mode_set,
.enable = imx_tve_encoder_enable,
@@ -479,8 +476,7 @@ static int imx_tve_register(struct drm_device *drm, struct
imx_tve *tve)
return ret;
drm_encoder_helper_add(&tve->encoder,
&imx_tve_encoder_helper_funcs);
- drm_encoder_init(drm, &tve->encoder, &imx_tve_encoder_funcs,
- encoder_type, NULL);
+ drm_simple_encoder_init(drm, &tve->encoder, encoder_type);
drm_connector_helper_add(&tve->connector,
&imx_tve_connector_helper_funcs);
diff --git a/drivers/gpu/drm/imx/parallel-display.c
b/drivers/gpu/drm/imx/parallel-display.c
index 08fafa4bf8c2..ac916c84a631 100644
--- a/drivers/gpu/drm/imx/parallel-display.c
+++ b/drivers/gpu/drm/imx/parallel-display.c
@@ -18,6 +18,7 @@
#include <drm/drm_of.h>
#include <drm/drm_panel.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "imx-drm.h"
@@ -256,10 +257,6 @@ static const struct drm_connector_helper_funcs
imx_pd_connector_helper_funcs = {
.best_encoder = imx_pd_connector_best_encoder,
};
-static const struct drm_encoder_funcs imx_pd_encoder_funcs = {
- .destroy = imx_drm_encoder_destroy,
-};
-
static const struct drm_bridge_funcs imx_pd_bridge_funcs = {
.enable = imx_pd_bridge_enable,
.disable = imx_pd_bridge_disable,
@@ -288,8 +285,7 @@ static int imx_pd_register(struct drm_device *drm,
*/
imxpd->connector.dpms = DRM_MODE_DPMS_OFF;
- drm_encoder_init(drm, encoder, &imx_pd_encoder_funcs,
- DRM_MODE_ENCODER_NONE, NULL);
+ drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_NONE);
imxpd->bridge.funcs = &imx_pd_bridge_funcs;
drm_bridge_attach(encoder, &imxpd->bridge, NULL, 0);
--
2.25.1
The ingenic driver uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/ingenic/ingenic-drm.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/ingenic/ingenic-drm.c
b/drivers/gpu/drm/ingenic/ingenic-drm.c
index 9dfe7cb530e1..9f7983a97392 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm.c
@@ -28,6 +28,7 @@
#include <drm/drm_plane.h>
#include <drm/drm_plane_helper.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <drm/drm_vblank.h>
#define JZ_REG_LCD_CFG 0x00
@@ -592,10 +593,6 @@ static const struct drm_mode_config_funcs
ingenic_drm_mode_config_funcs = {
.atomic_commit = drm_atomic_helper_commit,
};
-static const struct drm_encoder_funcs ingenic_drm_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static void ingenic_drm_free_dma_hwdesc(void *d)
{
struct ingenic_drm *priv = d;
@@ -730,8 +727,8 @@ static int ingenic_drm_probe(struct platform_device *pdev)
drm_encoder_helper_add(&priv->encoder,
&ingenic_drm_encoder_helper_funcs);
- ret = drm_encoder_init(drm, &priv->encoder,
&ingenic_drm_encoder_funcs,
- DRM_MODE_ENCODER_DPI, NULL);
+ ret = drm_simple_encoder_init(drm, &priv->encoder,
+ DRM_MODE_ENCODER_DPI);
if (ret) {
dev_err(dev, "Failed to init encoder: %i", ret);
return ret;
--
2.25.1
The mediatak driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/mediatek/mtk_dpi.c | 14 +++-----------
drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++-----------
2 files changed, 6 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c
b/drivers/gpu/drm/mediatek/mtk_dpi.c
index 14fbe1c09ce9..9c90c58e5acd 100644
--- a/drivers/gpu/drm/mediatek/mtk_dpi.c
+++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
@@ -20,6 +20,7 @@
#include <drm/drm_bridge.h>
#include <drm/drm_crtc.h>
#include <drm/drm_of.h>
+#include <drm/drm_simple_kms_helper.h>
#include "mtk_dpi_regs.h"
#include "mtk_drm_ddp_comp.h"
@@ -509,15 +510,6 @@ static int mtk_dpi_set_display_mode(struct mtk_dpi *dpi,
return 0;
}
-static void mtk_dpi_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs mtk_dpi_encoder_funcs = {
- .destroy = mtk_dpi_encoder_destroy,
-};
-
static bool mtk_dpi_encoder_mode_fixup(struct drm_encoder *encoder,
const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
@@ -596,8 +588,8 @@ static int mtk_dpi_bind(struct device *dev, struct device
*master, void *data)
return ret;
}
- ret = drm_encoder_init(drm_dev, &dpi->encoder,
&mtk_dpi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ ret = drm_simple_encoder_init(drm_dev, &dpi->encoder,
+ DRM_MODE_ENCODER_TMDS);
if (ret) {
dev_err(dev, "Failed to initialize decoder: %d\n", ret);
goto err_unregister;
diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c
b/drivers/gpu/drm/mediatek/mtk_dsi.c
index 0ede69830a9d..a9a25087112f 100644
--- a/drivers/gpu/drm/mediatek/mtk_dsi.c
+++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
@@ -22,6 +22,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "mtk_drm_ddp_comp.h"
@@ -787,15 +788,6 @@ static void mtk_output_dsi_disable(struct mtk_dsi *dsi)
dsi->enabled = false;
}
-static void mtk_dsi_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs mtk_dsi_encoder_funcs = {
- .destroy = mtk_dsi_encoder_destroy,
-};
-
static bool mtk_dsi_encoder_mode_fixup(struct drm_encoder *encoder,
const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
@@ -888,8 +880,8 @@ static int mtk_dsi_create_conn_enc(struct drm_device *drm,
struct mtk_dsi *dsi)
{
int ret;
- ret = drm_encoder_init(drm, &dsi->encoder, &mtk_dsi_encoder_funcs,
- DRM_MODE_ENCODER_DSI, NULL);
+ ret = drm_simple_encoder_init(drm, &dsi->encoder,
+ DRM_MODE_ENCODER_DSI);
if (ret) {
DRM_ERROR("Failed to encoder init to drm\n");
return ret;
--
2.25.1
The rcar-du driver uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
index c07c6a88aff0..b0335da0c161 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
@@ -13,6 +13,7 @@
#include <drm/drm_crtc.h>
#include <drm/drm_modeset_helper_vtables.h>
#include <drm/drm_panel.h>
+#include <drm/drm_simple_kms_helper.h>
#include "rcar_du_drv.h"
#include "rcar_du_encoder.h"
@@ -23,13 +24,6 @@
* Encoder
*/
-static const struct drm_encoder_helper_funcs encoder_helper_funcs = {
-};
-
-static const struct drm_encoder_funcs encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static unsigned int rcar_du_encoder_count_ports(struct device_node *node)
{
struct device_node *ports;
@@ -110,13 +104,11 @@ int rcar_du_encoder_init(struct rcar_du_device *rcdu,
}
}
- ret = drm_encoder_init(rcdu->ddev, encoder, &encoder_funcs,
- DRM_MODE_ENCODER_NONE, NULL);
+ ret = drm_simple_encoder_init(rcdu->ddev, encoder,
+ DRM_MODE_ENCODER_NONE);
if (ret < 0)
goto done;
- drm_encoder_helper_add(encoder, &encoder_helper_funcs);
-
/*
* Attach the bridge to the encoder. The bridge will create the
* connector.
--
2.25.1
The rockchip driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 9 +++------
drivers/gpu/drm/rockchip/cdn-dp-core.c | 9 +++------
drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 8 ++------
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 8 ++------
drivers/gpu/drm/rockchip/inno_hdmi.c | 8 ++------
drivers/gpu/drm/rockchip/rk3066_hdmi.c | 8 ++------
drivers/gpu/drm/rockchip/rockchip_lvds.c | 10 +++-------
drivers/gpu/drm/rockchip/rockchip_rgb.c | 8 ++------
8 files changed, 19 insertions(+), 49 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
index f38f5e113c6b..848522797314 100644
--- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
@@ -26,6 +26,7 @@
#include <drm/drm_of.h>
#include <drm/drm_panel.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "rockchip_drm_drv.h"
#include "rockchip_drm_vop.h"
@@ -258,10 +259,6 @@ static struct drm_encoder_helper_funcs
rockchip_dp_encoder_helper_funcs = {
.atomic_check = rockchip_dp_drm_encoder_atomic_check,
};
-static struct drm_encoder_funcs rockchip_dp_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int rockchip_dp_of_probe(struct rockchip_dp_device *dp)
{
struct device *dev = dp->dev;
@@ -309,8 +306,8 @@ static int rockchip_dp_drm_create_encoder(struct
rockchip_dp_device *dp)
dev->of_node);
DRM_DEBUG_KMS("possible_crtcs = 0x%x\n",
encoder->possible_crtcs);
- ret = drm_encoder_init(drm_dev, encoder, &rockchip_dp_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ ret = drm_simple_encoder_init(drm_dev, encoder,
+ DRM_MODE_ENCODER_TMDS);
if (ret) {
DRM_ERROR("failed to initialize encoder with drm\n");
return ret;
diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c
b/drivers/gpu/drm/rockchip/cdn-dp-core.c
index eed594bd38d3..06f85138b51b 100644
--- a/drivers/gpu/drm/rockchip/cdn-dp-core.c
+++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c
@@ -20,6 +20,7 @@
#include <drm/drm_edid.h>
#include <drm/drm_of.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "cdn-dp-core.h"
#include "cdn-dp-reg.h"
@@ -689,10 +690,6 @@ static const struct drm_encoder_helper_funcs
cdn_dp_encoder_helper_funcs = {
.atomic_check = cdn_dp_encoder_atomic_check,
};
-static const struct drm_encoder_funcs cdn_dp_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int cdn_dp_parse_dt(struct cdn_dp_device *dp)
{
struct device *dev = dp->dev;
@@ -1030,8 +1027,8 @@ static int cdn_dp_bind(struct device *dev, struct device
*master, void *data)
dev->of_node);
DRM_DEBUG_KMS("possible_crtcs = 0x%x\n",
encoder->possible_crtcs);
- ret = drm_encoder_init(drm_dev, encoder, &cdn_dp_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ ret = drm_simple_encoder_init(drm_dev, encoder,
+ DRM_MODE_ENCODER_TMDS);
if (ret) {
DRM_ERROR("failed to initialize encoder with drm\n");
return ret;
diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
index 6e1270e45f97..3feff0c45b3f 100644
--- a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
@@ -21,6 +21,7 @@
#include <drm/bridge/dw_mipi_dsi.h>
#include <drm/drm_mipi_dsi.h>
#include <drm/drm_of.h>
+#include <drm/drm_simple_kms_helper.h>
#include "rockchip_drm_drv.h"
#include "rockchip_drm_vop.h"
@@ -789,10 +790,6 @@ dw_mipi_dsi_encoder_helper_funcs = {
.disable = dw_mipi_dsi_encoder_disable,
};
-static const struct drm_encoder_funcs dw_mipi_dsi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int rockchip_dsi_drm_create_encoder(struct dw_mipi_dsi_rockchip *dsi,
struct drm_device *drm_dev)
{
@@ -802,8 +799,7 @@ static int rockchip_dsi_drm_create_encoder(struct
dw_mipi_dsi_rockchip *dsi,
encoder->possible_crtcs = drm_of_find_possible_crtcs(drm_dev,
dsi->dev->of_node);
- ret = drm_encoder_init(drm_dev, encoder, &dw_mipi_dsi_encoder_funcs,
- DRM_MODE_ENCODER_DSI, NULL);
+ ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_DSI);
if (ret) {
DRM_ERROR("Failed to initialize encoder with drm\n");
return ret;
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index 7f56d8c3491d..121aa8a63a76 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -14,6 +14,7 @@
#include <drm/drm_edid.h>
#include <drm/drm_of.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "rockchip_drm_drv.h"
#include "rockchip_drm_vop.h"
@@ -237,10 +238,6 @@ dw_hdmi_rockchip_mode_valid(struct drm_connector
*connector,
return (valid) ? MODE_OK : MODE_BAD;
}
-static const struct drm_encoder_funcs dw_hdmi_rockchip_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static void dw_hdmi_rockchip_encoder_disable(struct drm_encoder *encoder)
{
}
@@ -546,8 +543,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct
device *master,
}
drm_encoder_helper_add(encoder, &dw_hdmi_rockchip_encoder_helper_funcs);
- drm_encoder_init(drm, encoder, &dw_hdmi_rockchip_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
platform_set_drvdata(pdev, hdmi);
diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c
b/drivers/gpu/drm/rockchip/inno_hdmi.c
index e5864e823020..7afdc54eb3ec 100644
--- a/drivers/gpu/drm/rockchip/inno_hdmi.c
+++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
@@ -19,6 +19,7 @@
#include <drm/drm_edid.h>
#include <drm/drm_of.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "rockchip_drm_drv.h"
#include "rockchip_drm_vop.h"
@@ -532,10 +533,6 @@ static struct drm_encoder_helper_funcs
inno_hdmi_encoder_helper_funcs = {
.atomic_check = inno_hdmi_encoder_atomic_check,
};
-static struct drm_encoder_funcs inno_hdmi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static enum drm_connector_status
inno_hdmi_connector_detect(struct drm_connector *connector, bool force)
{
@@ -617,8 +614,7 @@ static int inno_hdmi_register(struct drm_device *drm, struct
inno_hdmi *hdmi)
return -EPROBE_DEFER;
drm_encoder_helper_add(encoder, &inno_hdmi_encoder_helper_funcs);
- drm_encoder_init(drm, encoder, &inno_hdmi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
hdmi->connector.polled = DRM_CONNECTOR_POLL_HPD;
diff --git a/drivers/gpu/drm/rockchip/rk3066_hdmi.c
b/drivers/gpu/drm/rockchip/rk3066_hdmi.c
index fe203d38664e..1c546c3a8998 100644
--- a/drivers/gpu/drm/rockchip/rk3066_hdmi.c
+++ b/drivers/gpu/drm/rockchip/rk3066_hdmi.c
@@ -6,6 +6,7 @@
#include <drm/drm_of.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <linux/clk.h>
#include <linux/mfd/syscon.h>
@@ -451,10 +452,6 @@ struct drm_encoder_helper_funcs
rk3066_hdmi_encoder_helper_funcs = {
.atomic_check = rk3066_hdmi_encoder_atomic_check,
};
-static const struct drm_encoder_funcs rk3066_hdmi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static enum drm_connector_status
rk3066_hdmi_connector_detect(struct drm_connector *connector, bool force)
{
@@ -557,8 +554,7 @@ rk3066_hdmi_register(struct drm_device *drm, struct
rk3066_hdmi *hdmi)
return -EPROBE_DEFER;
drm_encoder_helper_add(encoder, &rk3066_hdmi_encoder_helper_funcs);
- drm_encoder_init(drm, encoder, &rk3066_hdmi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
hdmi->connector.polled = DRM_CONNECTOR_POLL_HPD;
diff --git a/drivers/gpu/drm/rockchip/rockchip_lvds.c
b/drivers/gpu/drm/rockchip/rockchip_lvds.c
index 449a62908d21..63f967902c2d 100644
--- a/drivers/gpu/drm/rockchip/rockchip_lvds.c
+++ b/drivers/gpu/drm/rockchip/rockchip_lvds.c
@@ -16,13 +16,14 @@
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <linux/reset.h>
+
#include <drm/drm_atomic_helper.h>
#include <drm/drm_bridge.h>
-
#include <drm/drm_dp_helper.h>
#include <drm/drm_of.h>
#include <drm/drm_panel.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "rockchip_drm_drv.h"
#include "rockchip_drm_vop.h"
@@ -435,10 +436,6 @@ struct drm_encoder_helper_funcs
px30_lvds_encoder_helper_funcs = {
.atomic_check = rockchip_lvds_encoder_atomic_check,
};
-static const struct drm_encoder_funcs rockchip_lvds_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int rk3288_lvds_probe(struct platform_device *pdev,
struct rockchip_lvds *lvds)
{
@@ -607,8 +604,7 @@ static int rockchip_lvds_bind(struct device *dev, struct
device *master,
encoder->possible_crtcs = drm_of_find_possible_crtcs(drm_dev,
dev->of_node);
- ret = drm_encoder_init(drm_dev, encoder, &rockchip_lvds_encoder_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
+ ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_LVDS);
if (ret < 0) {
DRM_DEV_ERROR(drm_dev->dev,
"failed to initialize encoder: %d\n", ret);
diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c
b/drivers/gpu/drm/rockchip/rockchip_rgb.c
index 3e2484985955..6c10caecd0db 100644
--- a/drivers/gpu/drm/rockchip/rockchip_rgb.c
+++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c
@@ -14,6 +14,7 @@
#include <drm/drm_of.h>
#include <drm/drm_panel.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "rockchip_drm_drv.h"
#include "rockchip_drm_vop.h"
@@ -67,10 +68,6 @@ struct drm_encoder_helper_funcs
rockchip_rgb_encoder_helper_funcs = {
.atomic_check = rockchip_rgb_encoder_atomic_check,
};
-static const struct drm_encoder_funcs rockchip_rgb_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
struct rockchip_rgb *rockchip_rgb_init(struct device *dev,
struct drm_crtc *crtc,
struct drm_device *drm_dev)
@@ -125,8 +122,7 @@ struct rockchip_rgb *rockchip_rgb_init(struct device *dev,
encoder = &rgb->encoder;
encoder->possible_crtcs = drm_crtc_mask(crtc);
- ret = drm_encoder_init(drm_dev, encoder, &rockchip_rgb_encoder_funcs,
- DRM_MODE_ENCODER_NONE, NULL);
+ ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_NONE);
if (ret < 0) {
DRM_DEV_ERROR(drm_dev->dev,
"failed to initialize encoder: %d\n", ret);
--
2.25.1
The shmobile driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
index 75a752d59ef1..03556dbfcafb 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
@@ -17,6 +17,7 @@
#include <drm/drm_gem_cma_helper.h>
#include <drm/drm_plane_helper.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <drm/drm_vblank.h>
#include "shmob_drm_backlight.h"
@@ -558,15 +559,6 @@ static const struct drm_encoder_helper_funcs
encoder_helper_funcs = {
.mode_set = shmob_drm_encoder_mode_set,
};
-static void shmob_drm_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs encoder_funcs = {
- .destroy = shmob_drm_encoder_destroy,
-};
-
int shmob_drm_encoder_create(struct shmob_drm_device *sdev)
{
struct drm_encoder *encoder = &sdev->encoder.encoder;
@@ -576,8 +568,8 @@ int shmob_drm_encoder_create(struct shmob_drm_device *sdev)
encoder->possible_crtcs = 1;
- ret = drm_encoder_init(sdev->ddev, encoder, &encoder_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
+ ret = drm_simple_encoder_init(sdev->ddev, encoder,
+ DRM_MODE_ENCODER_LVDS);
if (ret < 0)
return ret;
--
2.25.1
The ingenic driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 12 +++---------
drivers/gpu/drm/sun4i/sun4i_lvds.c | 12 +++---------
drivers/gpu/drm/sun4i/sun4i_rgb.c | 17 +++--------------
drivers/gpu/drm/sun4i/sun4i_tv.c | 17 +++--------------
drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 12 +++---------
drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 8 ++------
6 files changed, 17 insertions(+), 61 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
index 68d4644ac2dc..e324d7db7b7d 100644
--- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
+++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
@@ -22,6 +22,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "sun4i_backend.h"
#include "sun4i_crtc.h"
@@ -204,10 +205,6 @@ static const struct drm_encoder_helper_funcs
sun4i_hdmi_helper_funcs = {
.mode_valid = sun4i_hdmi_mode_valid,
};
-static const struct drm_encoder_funcs sun4i_hdmi_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int sun4i_hdmi_get_modes(struct drm_connector *connector)
{
struct sun4i_hdmi *hdmi = drm_connector_to_sun4i_hdmi(connector);
@@ -611,11 +608,8 @@ static int sun4i_hdmi_bind(struct device *dev, struct
device *master,
drm_encoder_helper_add(&hdmi->encoder,
&sun4i_hdmi_helper_funcs);
- ret = drm_encoder_init(drm,
- &hdmi->encoder,
- &sun4i_hdmi_funcs,
- DRM_MODE_ENCODER_TMDS,
- NULL);
+ ret = drm_simple_encoder_init(drm, &hdmi->encoder,
+ DRM_MODE_ENCODER_TMDS);
if (ret) {
dev_err(dev, "Couldn't initialise the HDMI encoder\n");
goto err_put_ddc_i2c;
diff --git a/drivers/gpu/drm/sun4i/sun4i_lvds.c
b/drivers/gpu/drm/sun4i/sun4i_lvds.c
index 26e5c7ceb8ff..ffda3184aa12 100644
--- a/drivers/gpu/drm/sun4i/sun4i_lvds.c
+++ b/drivers/gpu/drm/sun4i/sun4i_lvds.c
@@ -12,6 +12,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "sun4i_crtc.h"
#include "sun4i_tcon.h"
@@ -96,10 +97,6 @@ static const struct drm_encoder_helper_funcs
sun4i_lvds_enc_helper_funcs = {
.enable = sun4i_lvds_encoder_enable,
};
-static const struct drm_encoder_funcs sun4i_lvds_enc_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
int sun4i_lvds_init(struct drm_device *drm, struct sun4i_tcon *tcon)
{
struct drm_encoder *encoder;
@@ -121,11 +118,8 @@ int sun4i_lvds_init(struct drm_device *drm, struct
sun4i_tcon *tcon)
drm_encoder_helper_add(&lvds->encoder,
&sun4i_lvds_enc_helper_funcs);
- ret = drm_encoder_init(drm,
- &lvds->encoder,
- &sun4i_lvds_enc_funcs,
- DRM_MODE_ENCODER_LVDS,
- NULL);
+ ret = drm_simple_encoder_init(drm, &lvds->encoder,
+ DRM_MODE_ENCODER_LVDS);
if (ret) {
dev_err(drm->dev, "Couldn't initialise the lvds encoder\n");
goto err_out;
diff --git a/drivers/gpu/drm/sun4i/sun4i_rgb.c
b/drivers/gpu/drm/sun4i/sun4i_rgb.c
index 3b23d5be3cf3..5a7d43939ae6 100644
--- a/drivers/gpu/drm/sun4i/sun4i_rgb.c
+++ b/drivers/gpu/drm/sun4i/sun4i_rgb.c
@@ -14,6 +14,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "sun4i_crtc.h"
#include "sun4i_tcon.h"
@@ -188,15 +189,6 @@ static struct drm_encoder_helper_funcs
sun4i_rgb_enc_helper_funcs = {
.mode_valid = sun4i_rgb_mode_valid,
};
-static void sun4i_rgb_enc_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static struct drm_encoder_funcs sun4i_rgb_enc_funcs = {
- .destroy = sun4i_rgb_enc_destroy,
-};
-
int sun4i_rgb_init(struct drm_device *drm, struct sun4i_tcon *tcon)
{
struct drm_encoder *encoder;
@@ -218,11 +210,8 @@ int sun4i_rgb_init(struct drm_device *drm, struct
sun4i_tcon *tcon)
drm_encoder_helper_add(&rgb->encoder,
&sun4i_rgb_enc_helper_funcs);
- ret = drm_encoder_init(drm,
- &rgb->encoder,
- &sun4i_rgb_enc_funcs,
- DRM_MODE_ENCODER_NONE,
- NULL);
+ ret = drm_simple_encoder_init(drm, &rgb->encoder,
+ DRM_MODE_ENCODER_NONE);
if (ret) {
dev_err(drm->dev, "Couldn't initialise the rgb encoder\n");
goto err_out;
diff --git a/drivers/gpu/drm/sun4i/sun4i_tv.c b/drivers/gpu/drm/sun4i/sun4i_tv.c
index 39c15282e448..63f4428ac3bf 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tv.c
@@ -19,6 +19,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "sun4i_crtc.h"
#include "sun4i_drv.h"
@@ -473,15 +474,6 @@ static struct drm_encoder_helper_funcs
sun4i_tv_helper_funcs = {
.mode_set = sun4i_tv_mode_set,
};
-static void sun4i_tv_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static struct drm_encoder_funcs sun4i_tv_funcs = {
- .destroy = sun4i_tv_destroy,
-};
-
static int sun4i_tv_comp_get_modes(struct drm_connector *connector)
{
int i;
@@ -592,11 +584,8 @@ static int sun4i_tv_bind(struct device *dev, struct device
*master,
drm_encoder_helper_add(&tv->encoder,
&sun4i_tv_helper_funcs);
- ret = drm_encoder_init(drm,
- &tv->encoder,
- &sun4i_tv_funcs,
- DRM_MODE_ENCODER_TVDAC,
- NULL);
+ ret = drm_simple_encoder_init(drm, &tv->encoder,
+ DRM_MODE_ENCODER_TVDAC);
if (ret) {
dev_err(dev, "Couldn't initialise the TV encoder\n");
goto err_disable_clk;
diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
index 059939789730..f6c67dd87a05 100644
--- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
+++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
@@ -24,6 +24,7 @@
#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "sun4i_crtc.h"
#include "sun4i_tcon.h"
@@ -846,10 +847,6 @@ static const struct drm_encoder_helper_funcs
sun6i_dsi_enc_helper_funcs = {
.enable = sun6i_dsi_encoder_enable,
};
-static const struct drm_encoder_funcs sun6i_dsi_enc_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static u32 sun6i_dsi_dcs_build_pkt_hdr(struct sun6i_dsi *dsi,
const struct mipi_dsi_msg *msg)
{
@@ -1062,11 +1059,8 @@ static int sun6i_dsi_bind(struct device *dev, struct
device *master,
drm_encoder_helper_add(&dsi->encoder,
&sun6i_dsi_enc_helper_funcs);
- ret = drm_encoder_init(drm,
- &dsi->encoder,
- &sun6i_dsi_enc_funcs,
- DRM_MODE_ENCODER_DSI,
- NULL);
+ ret = drm_simple_encoder_init(drm, &dsi->encoder,
+ DRM_MODE_ENCODER_DSI);
if (ret) {
dev_err(dsi->dev, "Couldn't initialise the DSI encoder\n");
return ret;
diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
index e8a317d5ba19..972682bb8000 100644
--- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
+++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
@@ -10,6 +10,7 @@
#include <drm/drm_crtc_helper.h>
#include <drm/drm_of.h>
+#include <drm/drm_simple_kms_helper.h>
#include "sun8i_dw_hdmi.h"
#include "sun8i_tcon_top.h"
@@ -29,10 +30,6 @@ sun8i_dw_hdmi_encoder_helper_funcs = {
.mode_set = sun8i_dw_hdmi_encoder_mode_set,
};
-static const struct drm_encoder_funcs sun8i_dw_hdmi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static enum drm_mode_status
sun8i_dw_hdmi_mode_valid_a83t(struct drm_connector *connector,
const struct drm_display_mode *mode)
@@ -220,8 +217,7 @@ static int sun8i_dw_hdmi_bind(struct device *dev, struct
device *master,
}
drm_encoder_helper_add(encoder, &sun8i_dw_hdmi_encoder_helper_funcs);
- drm_encoder_init(drm, encoder, &sun8i_dw_hdmi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
sun8i_hdmi_phy_init(hdmi->phy);
--
2.25.1
The tegra driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/tegra/drm.h | 2 --
drivers/gpu/drm/tegra/dsi.c | 10 +++-------
drivers/gpu/drm/tegra/hdmi.c | 9 +++------
drivers/gpu/drm/tegra/output.c | 6 +-----
drivers/gpu/drm/tegra/rgb.c | 8 ++------
drivers/gpu/drm/tegra/sor.c | 8 ++------
6 files changed, 11 insertions(+), 32 deletions(-)
diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
index ed99b67deb29..804869799305 100644
--- a/drivers/gpu/drm/tegra/drm.h
+++ b/drivers/gpu/drm/tegra/drm.h
@@ -152,8 +152,6 @@ enum drm_connector_status
tegra_output_connector_detect(struct drm_connector *connector, bool force);
void tegra_output_connector_destroy(struct drm_connector *connector);
-void tegra_output_encoder_destroy(struct drm_encoder *encoder);
-
/* from dpaux.c */
struct drm_dp_aux *drm_dp_aux_find_by_of_node(struct device_node *np);
enum drm_connector_status drm_dp_aux_detect(struct drm_dp_aux *aux);
diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c
index 88b9d64c77bf..76369b128e5d 100644
--- a/drivers/gpu/drm/tegra/dsi.c
+++ b/drivers/gpu/drm/tegra/dsi.c
@@ -22,6 +22,7 @@
#include <drm/drm_file.h>
#include <drm/drm_mipi_dsi.h>
#include <drm/drm_panel.h>
+#include <drm/drm_simple_kms_helper.h>
#include "dc.h"
#include "drm.h"
@@ -824,10 +825,6 @@ static const struct drm_connector_helper_funcs
tegra_dsi_connector_helper_funcs
.mode_valid = tegra_dsi_connector_mode_valid,
};
-static const struct drm_encoder_funcs tegra_dsi_encoder_funcs = {
- .destroy = tegra_output_encoder_destroy,
-};
-
static void tegra_dsi_unprepare(struct tegra_dsi *dsi)
{
int err;
@@ -1058,9 +1055,8 @@ static int tegra_dsi_init(struct host1x_client *client)
&tegra_dsi_connector_helper_funcs);
dsi->output.connector.dpms = DRM_MODE_DPMS_OFF;
- drm_encoder_init(drm, &dsi->output.encoder,
- &tegra_dsi_encoder_funcs,
- DRM_MODE_ENCODER_DSI, NULL);
+ drm_simple_encoder_init(drm, &dsi->output.encoder,
+ DRM_MODE_ENCODER_DSI);
drm_encoder_helper_add(&dsi->output.encoder,
&tegra_dsi_encoder_helper_funcs);
diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
index 6f117628f257..8ec72546f330 100644
--- a/drivers/gpu/drm/tegra/hdmi.c
+++ b/drivers/gpu/drm/tegra/hdmi.c
@@ -22,6 +22,7 @@
#include <drm/drm_file.h>
#include <drm/drm_fourcc.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "hda.h"
#include "hdmi.h"
@@ -1136,10 +1137,6 @@ tegra_hdmi_connector_helper_funcs = {
.mode_valid = tegra_hdmi_connector_mode_valid,
};
-static const struct drm_encoder_funcs tegra_hdmi_encoder_funcs = {
- .destroy = tegra_output_encoder_destroy,
-};
-
static void tegra_hdmi_encoder_disable(struct drm_encoder *encoder)
{
struct tegra_output *output = encoder_to_output(encoder);
@@ -1445,8 +1442,8 @@ static int tegra_hdmi_init(struct host1x_client *client)
&tegra_hdmi_connector_helper_funcs);
hdmi->output.connector.dpms = DRM_MODE_DPMS_OFF;
- drm_encoder_init(drm, &hdmi->output.encoder,
&tegra_hdmi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm, &hdmi->output.encoder,
+ DRM_MODE_ENCODER_TMDS);
drm_encoder_helper_add(&hdmi->output.encoder,
&tegra_hdmi_encoder_helper_funcs);
diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c
index a264259b97a2..e36e5e7c2f69 100644
--- a/drivers/gpu/drm/tegra/output.c
+++ b/drivers/gpu/drm/tegra/output.c
@@ -6,6 +6,7 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_panel.h>
+#include <drm/drm_simple_kms_helper.h>
#include "drm.h"
#include "dc.h"
@@ -79,11 +80,6 @@ void tegra_output_connector_destroy(struct drm_connector
*connector)
drm_connector_cleanup(connector);
}
-void tegra_output_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
static irqreturn_t hpd_irq(int irq, void *data)
{
struct tegra_output *output = data;
diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c
index 4be4dfd4a68a..0562a7eb793f 100644
--- a/drivers/gpu/drm/tegra/rgb.c
+++ b/drivers/gpu/drm/tegra/rgb.c
@@ -8,6 +8,7 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_panel.h>
+#include <drm/drm_simple_kms_helper.h>
#include "drm.h"
#include "dc.h"
@@ -110,10 +111,6 @@ static const struct drm_connector_helper_funcs
tegra_rgb_connector_helper_funcs
.mode_valid = tegra_rgb_connector_mode_valid,
};
-static const struct drm_encoder_funcs tegra_rgb_encoder_funcs = {
- .destroy = tegra_output_encoder_destroy,
-};
-
static void tegra_rgb_encoder_disable(struct drm_encoder *encoder)
{
struct tegra_output *output = encoder_to_output(encoder);
@@ -281,8 +278,7 @@ int tegra_dc_rgb_init(struct drm_device *drm, struct
tegra_dc *dc)
&tegra_rgb_connector_helper_funcs);
output->connector.dpms = DRM_MODE_DPMS_OFF;
- drm_encoder_init(drm, &output->encoder, &tegra_rgb_encoder_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
+ drm_simple_encoder_init(drm, &output->encoder, DRM_MODE_ENCODER_LVDS);
drm_encoder_helper_add(&output->encoder,
&tegra_rgb_encoder_helper_funcs);
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
index 81226a4953c1..606cab4f37b2 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -23,6 +23,7 @@
#include <drm/drm_file.h>
#include <drm/drm_panel.h>
#include <drm/drm_scdc_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "dc.h"
#include "dp.h"
@@ -1805,10 +1806,6 @@ static const struct drm_connector_helper_funcs
tegra_sor_connector_helper_funcs
.mode_valid = tegra_sor_connector_mode_valid,
};
-static const struct drm_encoder_funcs tegra_sor_encoder_funcs = {
- .destroy = tegra_output_encoder_destroy,
-};
-
static int
tegra_sor_encoder_atomic_check(struct drm_encoder *encoder,
struct drm_crtc_state *crtc_state,
@@ -3102,8 +3099,7 @@ static int tegra_sor_init(struct host1x_client *client)
&tegra_sor_connector_helper_funcs);
sor->output.connector.dpms = DRM_MODE_DPMS_OFF;
- drm_encoder_init(drm, &sor->output.encoder,
&tegra_sor_encoder_funcs,
- encoder, NULL);
+ drm_simple_encoder_init(drm, &sor->output.encoder, encoder);
drm_encoder_helper_add(&sor->output.encoder, helpers);
drm_connector_attach_encoder(&sor->output.connector,
--
2.25.1
The tidss driver uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/tidss/tidss_encoder.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/tidss/tidss_encoder.c
b/drivers/gpu/drm/tidss/tidss_encoder.c
index 83785b0a66a9..4c0558286f5e 100644
--- a/drivers/gpu/drm/tidss/tidss_encoder.c
+++ b/drivers/gpu/drm/tidss/tidss_encoder.c
@@ -8,8 +8,9 @@
#include <drm/drm_crtc.h>
#include <drm/drm_crtc_helper.h>
-#include <drm/drm_panel.h>
#include <drm/drm_of.h>
+#include <drm/drm_panel.h>
+#include <drm/drm_simple_kms_helper.h>
#include "tidss_crtc.h"
#include "tidss_drv.h"
@@ -59,10 +60,6 @@ static const struct drm_encoder_helper_funcs
encoder_helper_funcs = {
.atomic_check = tidss_encoder_atomic_check,
};
-static const struct drm_encoder_funcs encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
struct drm_encoder *tidss_encoder_create(struct tidss_device *tidss,
u32 encoder_type, u32 possible_crtcs)
{
@@ -75,8 +72,7 @@ struct drm_encoder *tidss_encoder_create(struct tidss_device
*tidss,
enc->possible_crtcs = possible_crtcs;
- ret = drm_encoder_init(&tidss->ddev, enc, &encoder_funcs,
- encoder_type, NULL);
+ ret = drm_simple_encoder_init(&tidss->ddev, enc, encoder_type);
if (ret < 0)
return ERR_PTR(ret);
--
2.25.1
The tilcdc driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/tilcdc/tilcdc_external.c | 10 +++-------
drivers/gpu/drm/tilcdc/tilcdc_panel.c | 8 ++------
2 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c
b/drivers/gpu/drm/tilcdc/tilcdc_external.c
index 28b7f703236e..b177525588c1 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_external.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c
@@ -10,6 +10,7 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_bridge.h>
#include <drm/drm_of.h>
+#include <drm/drm_simple_kms_helper.h>
#include "tilcdc_drv.h"
#include "tilcdc_external.h"
@@ -83,10 +84,6 @@ int tilcdc_add_component_encoder(struct drm_device *ddev)
return 0;
}
-static const struct drm_encoder_funcs tilcdc_external_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static
int tilcdc_attach_bridge(struct drm_device *ddev, struct drm_bridge *bridge)
{
@@ -131,9 +128,8 @@ int tilcdc_attach_external_device(struct drm_device *ddev)
if (!priv->external_encoder)
return -ENOMEM;
- ret = drm_encoder_init(ddev, priv->external_encoder,
- &tilcdc_external_encoder_funcs,
- DRM_MODE_ENCODER_NONE, NULL);
+ ret = drm_simple_encoder_init(ddev, priv->external_encoder,
+ DRM_MODE_ENCODER_NONE);
if (ret) {
dev_err(ddev->dev, "drm_encoder_init() failed %d\n", ret);
return ret;
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c
b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
index 5584e656b857..12823d60c4e8 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
@@ -16,6 +16,7 @@
#include <drm/drm_connector.h>
#include <drm/drm_modeset_helper_vtables.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "tilcdc_drv.h"
#include "tilcdc_panel.h"
@@ -74,10 +75,6 @@ static void panel_encoder_mode_set(struct drm_encoder
*encoder,
/* nothing needed */
}
-static const struct drm_encoder_funcs panel_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static const struct drm_encoder_helper_funcs panel_encoder_helper_funcs = {
.dpms = panel_encoder_dpms,
.prepare = panel_encoder_prepare,
@@ -102,8 +99,7 @@ static struct drm_encoder *panel_encoder_create(struct
drm_device *dev,
encoder = &panel_encoder->base;
encoder->possible_crtcs = 1;
- ret = drm_encoder_init(dev, encoder, &panel_encoder_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
+ ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
if (ret < 0)
goto fail;
--
2.25.1
The vc4 driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/vc4/vc4_dpi.c | 8 ++------
drivers/gpu/drm/vc4/vc4_dsi.c | 15 +++------------
drivers/gpu/drm/vc4/vc4_hdmi.c | 17 ++++-------------
drivers/gpu/drm/vc4/vc4_vec.c | 8 ++------
4 files changed, 11 insertions(+), 37 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
index 6dfede03396e..a90f2545baee 100644
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -17,6 +17,7 @@
#include <drm/drm_of.h>
#include <drm/drm_panel.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <linux/clk.h>
#include <linux/component.h>
#include <linux/of_graph.h>
@@ -114,10 +115,6 @@ static const struct debugfs_reg32 dpi_regs[] = {
VC4_REG32(DPI_ID),
};
-static const struct drm_encoder_funcs vc4_dpi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static void vc4_dpi_encoder_disable(struct drm_encoder *encoder)
{
struct vc4_dpi_encoder *vc4_encoder = to_vc4_dpi_encoder(encoder);
@@ -309,8 +306,7 @@ static int vc4_dpi_bind(struct device *dev, struct device
*master, void *data)
if (ret)
DRM_ERROR("Failed to turn on core clock: %d\n", ret);
- drm_encoder_init(drm, dpi->encoder, &vc4_dpi_encoder_funcs,
- DRM_MODE_ENCODER_DPI, NULL);
+ drm_simple_encoder_init(drm, dpi->encoder, DRM_MODE_ENCODER_DPI);
drm_encoder_helper_add(dpi->encoder, &vc4_dpi_encoder_helper_funcs);
ret = vc4_dpi_init_bridge(dpi);
diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index d99b1d526651..eaf276978ee7 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -37,6 +37,7 @@
#include <drm/drm_of.h>
#include <drm/drm_panel.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "vc4_drv.h"
#include "vc4_regs.h"
@@ -652,15 +653,6 @@ static const struct debugfs_reg32 dsi1_regs[] = {
VC4_REG32(DSI1_ID),
};
-static void vc4_dsi_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs vc4_dsi_encoder_funcs = {
- .destroy = vc4_dsi_encoder_destroy,
-};
-
static void vc4_dsi_latch_ulps(struct vc4_dsi *dsi, bool latch)
{
u32 afec0 = DSI_PORT_READ(PHY_AFEC0);
@@ -1615,8 +1607,7 @@ static int vc4_dsi_bind(struct device *dev, struct device
*master, void *data)
if (dsi->port == 1)
vc4->dsi1 = dsi;
- drm_encoder_init(drm, dsi->encoder, &vc4_dsi_encoder_funcs,
- DRM_MODE_ENCODER_DSI, NULL);
+ drm_simple_encoder_init(drm, dsi->encoder, DRM_MODE_ENCODER_DSI);
drm_encoder_helper_add(dsi->encoder, &vc4_dsi_encoder_helper_funcs);
ret = drm_bridge_attach(dsi->encoder, dsi->bridge, NULL, 0);
@@ -1656,7 +1647,7 @@ static void vc4_dsi_unbind(struct device *dev, struct
device *master,
* normally.
*/
list_splice_init(&dsi->bridge_chain,
&dsi->encoder->bridge_chain);
- vc4_dsi_encoder_destroy(dsi->encoder);
+ drm_encoder_cleanup(dsi->encoder);
if (dsi->port == 1)
vc4->dsi1 = NULL;
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index cea18dc15f77..8f956156eb8e 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -34,6 +34,7 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_edid.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <linux/clk.h>
#include <linux/component.h>
#include <linux/i2c.h>
@@ -306,15 +307,6 @@ static struct drm_connector *vc4_hdmi_connector_init(struct
drm_device *dev,
return connector;
}
-static void vc4_hdmi_encoder_destroy(struct drm_encoder *encoder)
-{
- drm_encoder_cleanup(encoder);
-}
-
-static const struct drm_encoder_funcs vc4_hdmi_encoder_funcs = {
- .destroy = vc4_hdmi_encoder_destroy,
-};
-
static int vc4_hdmi_stop_packet(struct drm_encoder *encoder,
enum hdmi_infoframe_type type)
{
@@ -1394,8 +1386,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device
*master, void *data)
}
pm_runtime_enable(dev);
- drm_encoder_init(drm, hdmi->encoder, &vc4_hdmi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm, hdmi->encoder, DRM_MODE_ENCODER_TMDS);
drm_encoder_helper_add(hdmi->encoder, &vc4_hdmi_encoder_helper_funcs);
hdmi->connector @@ -1453,7 +1444,7 @@ static int vc4_hdmi_bind(struct
device *dev, struct device *master, void *data)
vc4_hdmi_connector_destroy(hdmi->connector);
#endif
err_destroy_encoder:
- vc4_hdmi_encoder_destroy(hdmi->encoder);
+ drm_encoder_cleanup(hdmi->encoder);
err_unprepare_hsm:
clk_disable_unprepare(hdmi->hsm_clock);
pm_runtime_disable(dev);
@@ -1472,7 +1463,7 @@ static void vc4_hdmi_unbind(struct device *dev, struct
device *master,
cec_unregister_adapter(hdmi->cec_adap);
vc4_hdmi_connector_destroy(hdmi->connector);
- vc4_hdmi_encoder_destroy(hdmi->encoder);
+ drm_encoder_cleanup(hdmi->encoder);
clk_disable_unprepare(hdmi->hsm_clock);
pm_runtime_disable(dev);
diff --git a/drivers/gpu/drm/vc4/vc4_vec.c b/drivers/gpu/drm/vc4/vc4_vec.c
index 7402bc768664..bd5b8eb58b18 100644
--- a/drivers/gpu/drm/vc4/vc4_vec.c
+++ b/drivers/gpu/drm/vc4/vc4_vec.c
@@ -17,6 +17,7 @@
#include <drm/drm_edid.h>
#include <drm/drm_panel.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include <linux/clk.h>
#include <linux/component.h>
#include <linux/of_graph.h>
@@ -374,10 +375,6 @@ static struct drm_connector *vc4_vec_connector_init(struct
drm_device *dev,
return connector;
}
-static const struct drm_encoder_funcs vc4_vec_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static void vc4_vec_encoder_disable(struct drm_encoder *encoder)
{
struct vc4_vec_encoder *vc4_vec_encoder = to_vc4_vec_encoder(encoder);
@@ -566,8 +563,7 @@ static int vc4_vec_bind(struct device *dev, struct device
*master, void *data)
pm_runtime_enable(dev);
- drm_encoder_init(drm, vec->encoder, &vc4_vec_encoder_funcs,
- DRM_MODE_ENCODER_TVDAC, NULL);
+ drm_simple_encoder_init(drm, vec->encoder, DRM_MODE_ENCODER_TVDAC);
drm_encoder_helper_add(vec->encoder, &vc4_vec_encoder_helper_funcs);
vec->connector = vc4_vec_connector_init(drm, vec);
--
2.25.1
The virtgpu driver uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/virtio/virtgpu_display.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c
b/drivers/gpu/drm/virtio/virtgpu_display.c
index 2b7e6ae65546..cc7fd957a307 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -30,6 +30,7 @@
#include <drm/drm_fourcc.h>
#include <drm/drm_gem_framebuffer_helper.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "virtgpu_drv.h"
@@ -240,10 +241,6 @@ static const struct drm_connector_funcs
virtio_gpu_connector_funcs = {
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
};
-static const struct drm_encoder_funcs virtio_gpu_enc_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int vgdev_output_init(struct virtio_gpu_device *vgdev, int index)
{
struct drm_device *dev = vgdev->ddev;
@@ -276,8 +273,7 @@ static int vgdev_output_init(struct virtio_gpu_device
*vgdev, int index)
if (vgdev->has_edid)
drm_connector_attach_edid_property(connector);
- drm_encoder_init(dev, encoder, &virtio_gpu_enc_funcs,
- DRM_MODE_ENCODER_VIRTUAL, NULL);
+ drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_VIRTUAL);
drm_encoder_helper_add(encoder, &virtio_gpu_enc_helper_funcs);
encoder->possible_crtcs = 1 << index;
--
2.25.1
The vkms driver uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/vkms/vkms_output.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/vkms/vkms_output.c
b/drivers/gpu/drm/vkms/vkms_output.c
index fb1941a6522c..85afb77e97f0 100644
--- a/drivers/gpu/drm/vkms/vkms_output.c
+++ b/drivers/gpu/drm/vkms/vkms_output.c
@@ -3,6 +3,7 @@
#include "vkms_drv.h"
#include <drm/drm_atomic_helper.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
static void vkms_connector_destroy(struct drm_connector *connector)
{
@@ -17,10 +18,6 @@ static const struct drm_connector_funcs vkms_connector_funcs
= {
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
};
-static const struct drm_encoder_funcs vkms_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int vkms_conn_get_modes(struct drm_connector *connector)
{
int count;
@@ -70,8 +67,7 @@ int vkms_output_init(struct vkms_device *vkmsdev, int index)
drm_connector_helper_add(connector, &vkms_conn_helper_funcs);
- ret = drm_encoder_init(dev, encoder, &vkms_encoder_funcs,
- DRM_MODE_ENCODER_VIRTUAL, NULL);
+ ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_VIRTUAL);
if (ret) {
DRM_ERROR("Failed to init encoder\n");
goto err_encoder;
--
2.25.1
The writeback code uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/drm_writeback.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c
index 43d9e3bb3a94..cefb500c4ed7 100644
--- a/drivers/gpu/drm/drm_writeback.c
+++ b/drivers/gpu/drm/drm_writeback.c
@@ -16,6 +16,7 @@
#include <drm/drm_drv.h>
#include <drm/drm_modeset_helper_vtables.h>
#include <drm/drm_property.h>
+#include <drm/drm_simple_kms_helper.h>
#include <drm/drm_writeback.h>
/**
@@ -146,10 +147,6 @@ static int create_writeback_properties(struct drm_device
*dev)
return 0;
}
-static const struct drm_encoder_funcs drm_writeback_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
/**
* drm_writeback_connector_init - Initialize a writeback connector and its
properties
* @dev: DRM device
@@ -191,9 +188,8 @@ int drm_writeback_connector_init(struct drm_device *dev,
return PTR_ERR(blob);
drm_encoder_helper_add(&wb_connector->encoder, enc_helper_funcs);
- ret = drm_encoder_init(dev, &wb_connector->encoder,
- &drm_writeback_encoder_funcs,
- DRM_MODE_ENCODER_VIRTUAL, NULL);
+ ret = drm_simple_encoder_init(dev, &wb_connector->encoder,
+ DRM_MODE_ENCODER_VIRTUAL);
if (ret)
goto fail;
--
2.25.1
The zte driver uses empty implementations for its encoders. Replace
the code with the generic simple encoder.
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
---
drivers/gpu/drm/zte/zx_hdmi.c | 8 ++------
drivers/gpu/drm/zte/zx_tvenc.c | 8 ++------
drivers/gpu/drm/zte/zx_vga.c | 8 ++------
3 files changed, 6 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/zte/zx_hdmi.c b/drivers/gpu/drm/zte/zx_hdmi.c
index b98a1420dcd3..76a16d997a23 100644
--- a/drivers/gpu/drm/zte/zx_hdmi.c
+++ b/drivers/gpu/drm/zte/zx_hdmi.c
@@ -20,6 +20,7 @@
#include <drm/drm_of.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_print.h>
+#include <drm/drm_simple_kms_helper.h>
#include <sound/hdmi-codec.h>
@@ -254,10 +255,6 @@ static const struct drm_encoder_helper_funcs
zx_hdmi_encoder_helper_funcs = {
.mode_set = zx_hdmi_encoder_mode_set,
};
-static const struct drm_encoder_funcs zx_hdmi_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int zx_hdmi_connector_get_modes(struct drm_connector *connector)
{
struct zx_hdmi *hdmi = to_zx_hdmi(connector);
@@ -313,8 +310,7 @@ static int zx_hdmi_register(struct drm_device *drm, struct
zx_hdmi *hdmi)
encoder->possible_crtcs = VOU_CRTC_MASK;
- drm_encoder_init(drm, encoder, &zx_hdmi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
+ drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
drm_encoder_helper_add(encoder, &zx_hdmi_encoder_helper_funcs);
hdmi->connector.polled = DRM_CONNECTOR_POLL_HPD;
diff --git a/drivers/gpu/drm/zte/zx_tvenc.c b/drivers/gpu/drm/zte/zx_tvenc.c
index c598b7daf1f1..d8a89ba383bc 100644
--- a/drivers/gpu/drm/zte/zx_tvenc.c
+++ b/drivers/gpu/drm/zte/zx_tvenc.c
@@ -14,6 +14,7 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "zx_drm_drv.h"
#include "zx_tvenc_regs.h"
@@ -218,10 +219,6 @@ static const struct drm_encoder_helper_funcs
zx_tvenc_encoder_helper_funcs = {
.mode_set = zx_tvenc_encoder_mode_set,
};
-static const struct drm_encoder_funcs zx_tvenc_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int zx_tvenc_connector_get_modes(struct drm_connector *connector)
{
struct zx_tvenc *tvenc = to_zx_tvenc(connector);
@@ -285,8 +282,7 @@ static int zx_tvenc_register(struct drm_device *drm, struct
zx_tvenc *tvenc)
*/
encoder->possible_crtcs = BIT(1);
- drm_encoder_init(drm, encoder, &zx_tvenc_encoder_funcs,
- DRM_MODE_ENCODER_TVDAC, NULL);
+ drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TVDAC);
drm_encoder_helper_add(encoder, &zx_tvenc_encoder_helper_funcs);
connector->interlace_allowed = true;
diff --git a/drivers/gpu/drm/zte/zx_vga.c b/drivers/gpu/drm/zte/zx_vga.c
index c4fa3bbaba78..a7ed7f5ca837 100644
--- a/drivers/gpu/drm/zte/zx_vga.c
+++ b/drivers/gpu/drm/zte/zx_vga.c
@@ -14,6 +14,7 @@
#include <drm/drm_atomic_helper.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
#include "zx_drm_drv.h"
#include "zx_vga_regs.h"
@@ -72,10 +73,6 @@ static const struct drm_encoder_helper_funcs
zx_vga_encoder_helper_funcs = {
.disable = zx_vga_encoder_disable,
};
-static const struct drm_encoder_funcs zx_vga_encoder_funcs = {
- .destroy = drm_encoder_cleanup,
-};
-
static int zx_vga_connector_get_modes(struct drm_connector *connector)
{
struct zx_vga *vga = to_zx_vga(connector);
@@ -154,8 +151,7 @@ static int zx_vga_register(struct drm_device *drm, struct
zx_vga *vga)
encoder->possible_crtcs = VOU_CRTC_MASK;
- ret = drm_encoder_init(drm, encoder, &zx_vga_encoder_funcs,
- DRM_MODE_ENCODER_DAC, NULL);
+ ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_DAC);
if (ret) {
DRM_DEV_ERROR(dev, "failed to init encoder: %d\n", ret);
return ret;
--
2.25.1
On Thu, Mar 5, 2020 at 8:00 AM Thomas Zimmermann <tzimmermann at suse.de> wrote:> > The vc4 driver uses empty implementations for its encoders. Replace > the code with the generic simple encoder.Acked-by: Eric Anholt <eric at anholt.net>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[also build test ERROR on v5.6-rc4]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: mips-randconfig-a001-20200306 (attached as .config)
compiler: mipsel-linux-gcc (GCC) 5.5.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=5.5.0 make.cross ARCH=mips
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/arc/arcpgu_hdmi.c: In function
'arcpgu_drm_hdmi_init':>> drivers/gpu/drm/arc/arcpgu_hdmi.c:34:8: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
^
cc1: some warnings being treated as errors
--
drivers/gpu/drm/arc/arcpgu_sim.c: In function
'arcpgu_drm_sim_init':>> drivers/gpu/drm/arc/arcpgu_sim.c:68:8: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_VIRTUAL);
^
cc1: some warnings being treated as errors
vim +/drm_simple_encoder_init +34 drivers/gpu/drm/arc/arcpgu_hdmi.c
15
16 int arcpgu_drm_hdmi_init(struct drm_device *drm, struct device_node *np)
17 {
18 struct drm_encoder *encoder;
19 struct drm_bridge *bridge;
20
21 int ret = 0;
22
23 encoder = devm_kzalloc(drm->dev, sizeof(*encoder), GFP_KERNEL);
24 if (encoder == NULL)
25 return -ENOMEM;
26
27 /* Locate drm bridge from the hdmi encoder DT node */
28 bridge = of_drm_find_bridge(np);
29 if (!bridge)
30 return -EPROBE_DEFER;
31
32 encoder->possible_crtcs = 1;
33 encoder->possible_clones = 0;
> 34 ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 29264 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/caffcba2/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: sparc-allyesconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 7.5.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=sparc
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c: In function
'rockchip_dp_drm_create_encoder':>> drivers/gpu/drm/rockchip/analogix_dp-rockchip.c:309:8: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(drm_dev, encoder,
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/rockchip/cdn-dp-core.c: In function
'cdn_dp_bind':>> drivers/gpu/drm/rockchip/cdn-dp-core.c:1030:8: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(drm_dev, encoder,
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c: In function
'dw_hdmi_rockchip_bind':>> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c:546:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c: In function
'rockchip_dsi_drm_create_encoder':>> drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c:802:8: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_DSI);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/rockchip/inno_hdmi.c: In function
'inno_hdmi_register':>> drivers/gpu/drm/rockchip/inno_hdmi.c:617:2: error: implicit declaration
of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/rockchip/rockchip_lvds.c: In function
'rockchip_lvds_bind':>> drivers/gpu/drm/rockchip/rockchip_lvds.c:607:8: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_LVDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/rockchip/rockchip_rgb.c: In function
'rockchip_rgb_init':>> drivers/gpu/drm/rockchip/rockchip_rgb.c:125:8: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_NONE);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/rockchip/rk3066_hdmi.c: In function
'rk3066_hdmi_register':>> drivers/gpu/drm/rockchip/rk3066_hdmi.c:557:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
vim +309 drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
297
298 static int rockchip_dp_drm_create_encoder(struct rockchip_dp_device *dp)
299 {
300 struct drm_encoder *encoder = &dp->encoder;
301 struct drm_device *drm_dev = dp->drm_dev;
302 struct device *dev = dp->dev;
303 int ret;
304
305 encoder->possible_crtcs = drm_of_find_possible_crtcs(drm_dev,
306 dev->of_node);
307 DRM_DEBUG_KMS("possible_crtcs = 0x%x\n",
encoder->possible_crtcs);
308
> 309 ret = drm_simple_encoder_init(drm_dev, encoder,
310 DRM_MODE_ENCODER_TMDS);
311 if (ret) {
312 DRM_ERROR("failed to initialize encoder with drm\n");
313 return ret;
314 }
315
316 drm_encoder_helper_add(encoder, &rockchip_dp_encoder_helper_funcs);
317
318 return 0;
319 }
320
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 61637 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/9211d4ed/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[also build test ERROR on v5.6-rc4]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm-multi_v7_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 7.5.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c: In function
'fsl_dcu_drm_encoder_create':>> drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c:33:8: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(fsl_dev->drm, encoder,
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
vim +33 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
20
21 int fsl_dcu_drm_encoder_create(struct fsl_dcu_drm_device *fsl_dev,
22 struct drm_crtc *crtc)
23 {
24 struct drm_encoder *encoder = &fsl_dev->encoder;
25 int ret;
26
27 encoder->possible_crtcs = 1;
28
29 /* Use bypass mode for parallel RGB/LVDS encoder */
30 if (fsl_dev->tcon)
31 fsl_tcon_bypass_enable(fsl_dev->tcon);
32
> 33 ret = drm_simple_encoder_init(fsl_dev->drm, encoder,
34 DRM_MODE_ENCODER_LVDS);
35 if (ret < 0)
36 return ret;
37
38 return 0;
39 }
40
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 50199 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/a5f68f86/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: mips-randconfig-a001-20200306 (attached as .config)
compiler: mipsel-linux-gcc (GCC) 5.5.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=5.5.0 make.cross ARCH=mips
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/vkms/vkms_output.c: In function
'vkms_output_init':>> drivers/gpu/drm/vkms/vkms_output.c:70:8: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_VIRTUAL);
^
cc1: some warnings being treated as errors
vim +/drm_simple_encoder_init +70 drivers/gpu/drm/vkms/vkms_output.c
34
35 int vkms_output_init(struct vkms_device *vkmsdev, int index)
36 {
37 struct vkms_output *output = &vkmsdev->output;
38 struct drm_device *dev = &vkmsdev->drm;
39 struct drm_connector *connector = &output->connector;
40 struct drm_encoder *encoder = &output->encoder;
41 struct drm_crtc *crtc = &output->crtc;
42 struct drm_plane *primary, *cursor = NULL;
43 int ret;
44
45 primary = vkms_plane_init(vkmsdev, DRM_PLANE_TYPE_PRIMARY, index);
46 if (IS_ERR(primary))
47 return PTR_ERR(primary);
48
49 if (enable_cursor) {
50 cursor = vkms_plane_init(vkmsdev, DRM_PLANE_TYPE_CURSOR, index);
51 if (IS_ERR(cursor)) {
52 ret = PTR_ERR(cursor);
53 goto err_cursor;
54 }
55 }
56
57 ret = vkms_crtc_init(dev, crtc, primary, cursor);
58 if (ret)
59 goto err_crtc;
60
61 ret = drm_connector_init(dev, connector, &vkms_connector_funcs,
62 DRM_MODE_CONNECTOR_VIRTUAL);
63 if (ret) {
64 DRM_ERROR("Failed to init connector\n");
65 goto err_connector;
66 }
67
68 drm_connector_helper_add(connector, &vkms_conn_helper_funcs);
69
> 70 ret = drm_simple_encoder_init(dev, encoder,
DRM_MODE_ENCODER_VIRTUAL);
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 29264 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/28d3ddd2/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[also build test ERROR on v5.6-rc4]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm-at91_dt_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 7.5.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu//drm/atmel-hlcdc/atmel_hlcdc_output.c: In function
'atmel_hlcdc_attach_endpoint':>> drivers/gpu//drm/atmel-hlcdc/atmel_hlcdc_output.c:98:8: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(dev, &output->encoder,
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
vim +98 drivers/gpu//drm/atmel-hlcdc/atmel_hlcdc_output.c
65
66 static int atmel_hlcdc_attach_endpoint(struct drm_device *dev, int
endpoint)
67 {
68 struct atmel_hlcdc_rgb_output *output;
69 struct device_node *ep;
70 struct drm_panel *panel;
71 struct drm_bridge *bridge;
72 int ret;
73
74 ep = of_graph_get_endpoint_by_regs(dev->dev->of_node, 0,
endpoint);
75 if (!ep)
76 return -ENODEV;
77
78 ret = drm_of_find_panel_or_bridge(dev->dev->of_node, 0, endpoint,
79 &panel, &bridge);
80 if (ret) {
81 of_node_put(ep);
82 return ret;
83 }
84
85 output = devm_kzalloc(dev->dev, sizeof(*output), GFP_KERNEL);
86 if (!output) {
87 of_node_put(ep);
88 return -ENOMEM;
89 }
90
91 output->bus_fmt = atmel_hlcdc_of_bus_fmt(ep);
92 of_node_put(ep);
93 if (output->bus_fmt < 0) {
94 dev_err(dev->dev, "endpoint %d: invalid bus width\n",
endpoint);
95 return -EINVAL;
96 }
97
> 98 ret = drm_simple_encoder_init(dev, &output->encoder,
99 DRM_MODE_ENCODER_NONE);
100 if (ret)
101 return ret;
102
103 output->encoder.possible_crtcs = 0x1;
104
105 if (panel) {
106 bridge = drm_panel_bridge_add_typed(panel,
107 DRM_MODE_CONNECTOR_Unknown);
108 if (IS_ERR(bridge))
109 return PTR_ERR(bridge);
110 }
111
112 if (bridge) {
113 ret = drm_bridge_attach(&output->encoder, bridge, NULL, 0);
114 if (!ret)
115 return 0;
116
117 if (panel)
118 drm_panel_bridge_remove(bridge);
119 }
120
121 drm_encoder_cleanup(&output->encoder);
122
123 return ret;
124 }
125
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 26878 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/d221e89b/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[also build test ERROR on v5.6-rc4]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: x86_64-allyesconfig (attached as .config)
compiler: gcc-7 (Debian 7.5.0-5) 7.5.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/gma500/psb_intel_lvds.c: In function
'psb_intel_lvds_init':>> drivers/gpu/drm/gma500/psb_intel_lvds.c:676:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/gma500/cdv_intel_crt.c: In function
'cdv_intel_crt_init':>> drivers/gpu/drm/gma500/cdv_intel_crt.c:267:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_DAC);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/gma500/cdv_intel_hdmi.c: In function
'cdv_hdmi_init':>> drivers/gpu/drm/gma500/cdv_intel_hdmi.c:315:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/gma500/cdv_intel_dp.c: In function
'cdv_intel_dp_init':>> drivers/gpu/drm/gma500/cdv_intel_dp.c:2010:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/gma500/cdv_intel_lvds.c: In function
'cdv_intel_lvds_init':>> drivers/gpu/drm/gma500/cdv_intel_lvds.c:611:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/gma500/oaktrail_lvds.c: In function
'oaktrail_lvds_init':>> drivers/gpu/drm/gma500/oaktrail_lvds.c:316:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/gma500/oaktrail_hdmi.c: In function
'oaktrail_hdmi_init':>> drivers/gpu/drm/gma500/oaktrail_hdmi.c:646:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/gma500/mdfld_dsi_dpi.c: In function
'mdfld_dsi_dpi_init':>> drivers/gpu/drm/gma500/mdfld_dsi_dpi.c:998:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
vim +676 drivers/gpu/drm/gma500/psb_intel_lvds.c
625
626 /**
627 * psb_intel_lvds_init - setup LVDS connectors on this device
628 * @dev: drm device
629 *
630 * Create the connector, register the LVDS DDC bus, and try to figure out
what
631 * modes we can display on the LVDS panel (if present).
632 */
633 void psb_intel_lvds_init(struct drm_device *dev,
634 struct psb_intel_mode_device *mode_dev)
635 {
636 struct gma_encoder *gma_encoder;
637 struct gma_connector *gma_connector;
638 struct psb_intel_lvds_priv *lvds_priv;
639 struct drm_connector *connector;
640 struct drm_encoder *encoder;
641 struct drm_display_mode *scan; /* *modes, *bios_mode; */
642 struct drm_crtc *crtc;
643 struct drm_psb_private *dev_priv = dev->dev_private;
644 u32 lvds;
645 int pipe;
646
647 gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL);
648 if (!gma_encoder) {
649 dev_err(dev->dev, "gma_encoder allocation error\n");
650 return;
651 }
652
653 gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL);
654 if (!gma_connector) {
655 dev_err(dev->dev, "gma_connector allocation error\n");
656 goto failed_encoder;
657 }
658
659 lvds_priv = kzalloc(sizeof(struct psb_intel_lvds_priv), GFP_KERNEL);
660 if (!lvds_priv) {
661 dev_err(dev->dev, "LVDS private allocation error\n");
662 goto failed_connector;
663 }
664
665 gma_encoder->dev_priv = lvds_priv;
666
667 connector = &gma_connector->base;
668 gma_connector->save = psb_intel_lvds_save;
669 gma_connector->restore = psb_intel_lvds_restore;
670
671 encoder = &gma_encoder->base;
672 drm_connector_init(dev, connector,
673 &psb_intel_lvds_connector_funcs,
674 DRM_MODE_CONNECTOR_LVDS);
675
> 676 drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS);
677
678 gma_connector_attach_encoder(gma_connector, gma_encoder);
679 gma_encoder->type = INTEL_OUTPUT_LVDS;
680
681 drm_encoder_helper_add(encoder, &psb_intel_lvds_helper_funcs);
682 drm_connector_helper_add(connector,
683 &psb_intel_lvds_connector_helper_funcs);
684 connector->display_info.subpixel_order = SubPixelHorizontalRGB;
685 connector->interlace_allowed = false;
686 connector->doublescan_allowed = false;
687
688 /*Attach connector properties*/
689 drm_object_attach_property(&connector->base,
690 dev->mode_config.scaling_mode_property,
691 DRM_MODE_SCALE_FULLSCREEN);
692 drm_object_attach_property(&connector->base,
693 dev_priv->backlight_property,
694 BRIGHTNESS_MAX_LEVEL);
695
696 /*
697 * Set up I2C bus
698 * FIXME: distroy i2c_bus when exit
699 */
700 lvds_priv->i2c_bus = psb_intel_i2c_create(dev, GPIOB,
"LVDSBLC_B");
701 if (!lvds_priv->i2c_bus) {
702 dev_printk(KERN_ERR,
703 &dev->pdev->dev, "I2C bus registration
failed.\n");
704 goto failed_blc_i2c;
705 }
706 lvds_priv->i2c_bus->slave_addr = 0x2C;
707 dev_priv->lvds_i2c_bus = lvds_priv->i2c_bus;
708
709 /*
710 * LVDS discovery:
711 * 1) check for EDID on DDC
712 * 2) check for VBT data
713 * 3) check to see if LVDS is already on
714 * if none of the above, no panel
715 * 4) make sure lid is open
716 * if closed, act like it's not there for now
717 */
718
719 /* Set up the DDC bus. */
720 lvds_priv->ddc_bus = psb_intel_i2c_create(dev, GPIOC,
"LVDSDDC_C");
721 if (!lvds_priv->ddc_bus) {
722 dev_printk(KERN_ERR, &dev->pdev->dev,
723 "DDC bus registration " "failed.\n");
724 goto failed_ddc;
725 }
726
727 /*
728 * Attempt to get the fixed panel mode from DDC. Assume that the
729 * preferred mode is the right one.
730 */
731 mutex_lock(&dev->mode_config.mutex);
732 psb_intel_ddc_get_modes(connector,
&lvds_priv->ddc_bus->adapter);
733 list_for_each_entry(scan, &connector->probed_modes, head) {
734 if (scan->type & DRM_MODE_TYPE_PREFERRED) {
735 mode_dev->panel_fixed_mode 736 drm_mode_duplicate(dev,
scan);
737 DRM_DEBUG_KMS("Using mode from DDC\n");
738 goto out; /* FIXME: check for quirks */
739 }
740 }
741
742 /* Failed to get EDID, what about VBT? do we need this? */
743 if (dev_priv->lfp_lvds_vbt_mode) {
744 mode_dev->panel_fixed_mode 745 drm_mode_duplicate(dev,
dev_priv->lfp_lvds_vbt_mode);
746
747 if (mode_dev->panel_fixed_mode) {
748 mode_dev->panel_fixed_mode->type | 749
DRM_MODE_TYPE_PREFERRED;
750 DRM_DEBUG_KMS("Using mode from VBT\n");
751 goto out;
752 }
753 }
754
755 /*
756 * If we didn't get EDID, try checking if the panel is already
turned
757 * on. If so, assume that whatever is currently programmed is the
758 * correct mode.
759 */
760 lvds = REG_READ(LVDS);
761 pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0;
762 crtc = psb_intel_get_crtc_from_pipe(dev, pipe);
763
764 if (crtc && (lvds & LVDS_PORT_EN)) {
765 mode_dev->panel_fixed_mode 766 psb_intel_crtc_mode_get(dev,
crtc);
767 if (mode_dev->panel_fixed_mode) {
768 mode_dev->panel_fixed_mode->type | 769
DRM_MODE_TYPE_PREFERRED;
770 DRM_DEBUG_KMS("Using pre-programmed mode\n");
771 goto out; /* FIXME: check for quirks */
772 }
773 }
774
775 /* If we still don't have a mode after all that, give up. */
776 if (!mode_dev->panel_fixed_mode) {
777 dev_err(dev->dev, "Found no modes on the lvds, ignoring the
LVDS\n");
778 goto failed_find;
779 }
780
781 /*
782 * Blacklist machines with BIOSes that list an LVDS panel without
783 * actually having one.
784 */
785 out:
786 mutex_unlock(&dev->mode_config.mutex);
787 drm_connector_register(connector);
788 return;
789
790 failed_find:
791 mutex_unlock(&dev->mode_config.mutex);
792 psb_intel_i2c_destroy(lvds_priv->ddc_bus);
793 failed_ddc:
794 psb_intel_i2c_destroy(lvds_priv->i2c_bus);
795 failed_blc_i2c:
796 drm_encoder_cleanup(encoder);
797 drm_connector_cleanup(connector);
798 failed_connector:
799 kfree(gma_connector);
800 failed_encoder:
801 kfree(gma_encoder);
802 }
803
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 72615 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/70137678/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: x86_64-defconfig (attached as .config)
compiler: gcc-7 (Debian 7.5.0-5) 7.5.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/drm_writeback.c: In function
'drm_writeback_connector_init':>> drivers/gpu/drm/drm_writeback.c:191:8: error: implicit declaration of
function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(dev, &wb_connector->encoder,
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
vim +191 drivers/gpu/drm/drm_writeback.c
149
150 /**
151 * drm_writeback_connector_init - Initialize a writeback connector and
its properties
152 * @dev: DRM device
153 * @wb_connector: Writeback connector to initialize
154 * @con_funcs: Connector funcs vtable
155 * @enc_helper_funcs: Encoder helper funcs vtable to be used by the
internal encoder
156 * @formats: Array of supported pixel formats for the writeback engine
157 * @n_formats: Length of the formats array
158 *
159 * This function creates the writeback-connector-specific properties if
they
160 * have not been already created, initializes the connector as
161 * type DRM_MODE_CONNECTOR_WRITEBACK, and correctly initializes the
property
162 * values. It will also create an internal encoder associated with the
163 * drm_writeback_connector and set it to use the @enc_helper_funcs vtable
for
164 * the encoder helper.
165 *
166 * Drivers should always use this function instead of
drm_connector_init() to
167 * set up writeback connectors.
168 *
169 * Returns: 0 on success, or a negative error code
170 */
171 int drm_writeback_connector_init(struct drm_device *dev,
172 struct drm_writeback_connector *wb_connector,
173 const struct drm_connector_funcs *con_funcs,
174 const struct drm_encoder_helper_funcs *enc_helper_funcs,
175 const u32 *formats, int n_formats)
176 {
177 struct drm_property_blob *blob;
178 struct drm_connector *connector = &wb_connector->base;
179 struct drm_mode_config *config = &dev->mode_config;
180 int ret = create_writeback_properties(dev);
181
182 if (ret != 0)
183 return ret;
184
185 blob = drm_property_create_blob(dev, n_formats * sizeof(*formats),
186 formats);
187 if (IS_ERR(blob))
188 return PTR_ERR(blob);
189
190 drm_encoder_helper_add(&wb_connector->encoder, enc_helper_funcs);
> 191 ret = drm_simple_encoder_init(dev, &wb_connector->encoder,
192 DRM_MODE_ENCODER_VIRTUAL);
193 if (ret)
194 goto fail;
195
196 connector->interlace_allowed = 0;
197
198 ret = drm_connector_init(dev, connector, con_funcs,
199 DRM_MODE_CONNECTOR_WRITEBACK);
200 if (ret)
201 goto connector_fail;
202
203 ret = drm_connector_attach_encoder(connector,
204 &wb_connector->encoder);
205 if (ret)
206 goto attach_fail;
207
208 INIT_LIST_HEAD(&wb_connector->job_queue);
209 spin_lock_init(&wb_connector->job_lock);
210
211 wb_connector->fence_context = dma_fence_context_alloc(1);
212 spin_lock_init(&wb_connector->fence_lock);
213 snprintf(wb_connector->timeline_name,
214 sizeof(wb_connector->timeline_name),
215 "CONNECTOR:%d-%s", connector->base.id,
connector->name);
216
217 drm_object_attach_property(&connector->base,
218 config->writeback_out_fence_ptr_property, 0);
219
220 drm_object_attach_property(&connector->base,
221 config->writeback_fb_id_property, 0);
222
223 drm_object_attach_property(&connector->base,
224 config->writeback_pixel_formats_property,
225 blob->base.id);
226 wb_connector->pixel_formats_blob_ptr = blob;
227
228 return 0;
229
230 attach_fail:
231 drm_connector_cleanup(connector);
232 connector_fail:
233 drm_encoder_cleanup(&wb_connector->encoder);
234 fail:
235 drm_property_blob_put(blob);
236 return ret;
237 }
238 EXPORT_SYMBOL(drm_writeback_connector_init);
239
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 29068 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/a4fbdefd/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[also build test ERROR on v5.6-rc4]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: m68k-allmodconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 7.5.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=m68k
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/exynos/exynos_drm_dpi.c: In function
'exynos_dpi_bind':>> drivers/gpu/drm/exynos/exynos_drm_dpi.c:201:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
--
drivers/gpu/drm/exynos/exynos_dp.c: In function
'exynos_dp_bind':>> drivers/gpu/drm/exynos/exynos_dp.c:174:2: error: implicit declaration
of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
vim +201 drivers/gpu/drm/exynos/exynos_drm_dpi.c
196
197 int exynos_dpi_bind(struct drm_device *dev, struct drm_encoder *encoder)
198 {
199 int ret;
200
> 201 drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS);
202
203 drm_encoder_helper_add(encoder, &exynos_dpi_encoder_helper_funcs);
204
205 ret = exynos_drm_set_possible_crtcs(encoder, EXYNOS_DISPLAY_TYPE_LCD);
206 if (ret < 0)
207 return ret;
208
209 ret = exynos_dpi_create_connector(encoder);
210 if (ret) {
211 DRM_DEV_ERROR(encoder_to_dpi(encoder)->dev,
212 "failed to create connector ret = %d\n", ret);
213 drm_encoder_cleanup(encoder);
214 return ret;
215 }
216
217 return 0;
218 }
219
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 53261 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/e3bec5de/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: mips-randconfig-a001-20200306 (attached as .config)
compiler: mipsel-linux-gcc (GCC) 5.5.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=5.5.0 make.cross ARCH=mips
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/drm_writeback.c: In function
'drm_writeback_connector_init':>> drivers/gpu/drm/drm_writeback.c:191:8: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(dev, &wb_connector->encoder,
^
cc1: some warnings being treated as errors
vim +/drm_simple_encoder_init +191 drivers/gpu/drm/drm_writeback.c
149
150 /**
151 * drm_writeback_connector_init - Initialize a writeback connector and
its properties
152 * @dev: DRM device
153 * @wb_connector: Writeback connector to initialize
154 * @con_funcs: Connector funcs vtable
155 * @enc_helper_funcs: Encoder helper funcs vtable to be used by the
internal encoder
156 * @formats: Array of supported pixel formats for the writeback engine
157 * @n_formats: Length of the formats array
158 *
159 * This function creates the writeback-connector-specific properties if
they
160 * have not been already created, initializes the connector as
161 * type DRM_MODE_CONNECTOR_WRITEBACK, and correctly initializes the
property
162 * values. It will also create an internal encoder associated with the
163 * drm_writeback_connector and set it to use the @enc_helper_funcs vtable
for
164 * the encoder helper.
165 *
166 * Drivers should always use this function instead of
drm_connector_init() to
167 * set up writeback connectors.
168 *
169 * Returns: 0 on success, or a negative error code
170 */
171 int drm_writeback_connector_init(struct drm_device *dev,
172 struct drm_writeback_connector *wb_connector,
173 const struct drm_connector_funcs *con_funcs,
174 const struct drm_encoder_helper_funcs *enc_helper_funcs,
175 const u32 *formats, int n_formats)
176 {
177 struct drm_property_blob *blob;
178 struct drm_connector *connector = &wb_connector->base;
179 struct drm_mode_config *config = &dev->mode_config;
180 int ret = create_writeback_properties(dev);
181
182 if (ret != 0)
183 return ret;
184
185 blob = drm_property_create_blob(dev, n_formats * sizeof(*formats),
186 formats);
187 if (IS_ERR(blob))
188 return PTR_ERR(blob);
189
190 drm_encoder_helper_add(&wb_connector->encoder, enc_helper_funcs);
> 191 ret = drm_simple_encoder_init(dev, &wb_connector->encoder,
192 DRM_MODE_ENCODER_VIRTUAL);
193 if (ret)
194 goto fail;
195
196 connector->interlace_allowed = 0;
197
198 ret = drm_connector_init(dev, connector, con_funcs,
199 DRM_MODE_CONNECTOR_WRITEBACK);
200 if (ret)
201 goto connector_fail;
202
203 ret = drm_connector_attach_encoder(connector,
204 &wb_connector->encoder);
205 if (ret)
206 goto attach_fail;
207
208 INIT_LIST_HEAD(&wb_connector->job_queue);
209 spin_lock_init(&wb_connector->job_lock);
210
211 wb_connector->fence_context = dma_fence_context_alloc(1);
212 spin_lock_init(&wb_connector->fence_lock);
213 snprintf(wb_connector->timeline_name,
214 sizeof(wb_connector->timeline_name),
215 "CONNECTOR:%d-%s", connector->base.id,
connector->name);
216
217 drm_object_attach_property(&connector->base,
218 config->writeback_out_fence_ptr_property, 0);
219
220 drm_object_attach_property(&connector->base,
221 config->writeback_fb_id_property, 0);
222
223 drm_object_attach_property(&connector->base,
224 config->writeback_pixel_formats_property,
225 blob->base.id);
226 wb_connector->pixel_formats_blob_ptr = blob;
227
228 return 0;
229
230 attach_fail:
231 drm_connector_cleanup(connector);
232 connector_fail:
233 drm_encoder_cleanup(&wb_connector->encoder);
234 fail:
235 drm_property_blob_put(blob);
236 return ret;
237 }
238 EXPORT_SYMBOL(drm_writeback_connector_init);
239
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 29264 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/354b29f1/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[also build test ERROR on v5.6-rc4]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm64-defconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project
a0cd413426479abb207381bdbab862f3dfb3ce7d)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
>> drivers/gpu/drm/exynos/exynos_drm_dsi.c:1705:2: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
^
drivers/gpu/drm/exynos/exynos_drm_dsi.c:1705:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/exynos/exynos_hdmi.c:1851:2: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
^
drivers/gpu/drm/exynos/exynos_hdmi.c:1851:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
vim +/drm_simple_encoder_init +1705 drivers/gpu/drm/exynos/exynos_drm_dsi.c
1695
1696 static int exynos_dsi_bind(struct device *dev, struct device *master,
1697 void *data)
1698 {
1699 struct drm_encoder *encoder = dev_get_drvdata(dev);
1700 struct exynos_dsi *dsi = encoder_to_dsi(encoder);
1701 struct drm_device *drm_dev = data;
1702 struct drm_bridge *in_bridge;
1703 int ret;
1704 > 1705 drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
1706
1707 drm_encoder_helper_add(encoder, &exynos_dsi_encoder_helper_funcs);
1708
1709 ret = exynos_drm_set_possible_crtcs(encoder, EXYNOS_DISPLAY_TYPE_LCD);
1710 if (ret < 0)
1711 return ret;
1712
1713 if (dsi->in_bridge_node) {
1714 in_bridge = of_drm_find_bridge(dsi->in_bridge_node);
1715 if (in_bridge)
1716 drm_bridge_attach(encoder, in_bridge, NULL, 0);
1717 }
1718
1719 return mipi_dsi_host_register(&dsi->dsi_host);
1720 }
1721
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 47744 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/ce2f57f5/attachment-0001.gz>
kbuild test robot
2020-Mar-06 06:16 UTC
[PATCH 06/22] drm/hisilicon/kirin: Use simple encoder
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[also build test ERROR on v5.6-rc4]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm64-defconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project
a0cd413426479abb207381bdbab862f3dfb3ce7d)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
>> drivers/gpu//drm/hisilicon/kirin/dw_drm_dsi.c:713:8: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm_dev, encoder,
DRM_MODE_ENCODER_DSI);
^
drivers/gpu//drm/hisilicon/kirin/dw_drm_dsi.c:713:8: note: did you mean
'drm_i2c_encoder_init'?
include/drm/drm_encoder_slave.h:104:5: note: 'drm_i2c_encoder_init'
declared here
int drm_i2c_encoder_init(struct drm_device *dev,
^
1 error generated.
vim +/drm_simple_encoder_init +713 drivers/gpu//drm/hisilicon/kirin/dw_drm_dsi.c
699
700 static int dw_drm_encoder_init(struct device *dev,
701 struct drm_device *drm_dev,
702 struct drm_encoder *encoder)
703 {
704 int ret;
705 u32 crtc_mask = drm_of_find_possible_crtcs(drm_dev, dev->of_node);
706
707 if (!crtc_mask) {
708 DRM_ERROR("failed to find crtc mask\n");
709 return -EINVAL;
710 }
711
712 encoder->possible_crtcs = crtc_mask;
> 713 ret = drm_simple_encoder_init(drm_dev, encoder,
DRM_MODE_ENCODER_DSI);
714 if (ret) {
715 DRM_ERROR("failed to init dsi encoder\n");
716 return ret;
717 }
718
719 drm_encoder_helper_add(encoder, &dw_encoder_helper_funcs);
720
721 return 0;
722 }
723
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 47744 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/43de0946/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[also build test ERROR on v5.6-rc4]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm64-defconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project
a0cd413426479abb207381bdbab862f3dfb3ce7d)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
>> drivers/gpu/drm/i2c/tda998x_drv.c:2018:8: error: implicit declaration
of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm, &priv->encoder,
^
drivers/gpu/drm/i2c/tda998x_drv.c:2018:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
vim +/drm_simple_encoder_init +2018 drivers/gpu/drm/i2c/tda998x_drv.c
2000
2001 static int tda998x_encoder_init(struct device *dev, struct drm_device
*drm)
2002 {
2003 struct tda998x_priv *priv = dev_get_drvdata(dev);
2004 u32 crtcs = 0;
2005 int ret;
2006
2007 if (dev->of_node)
2008 crtcs = drm_of_find_possible_crtcs(drm, dev->of_node);
2009
2010 /* If no CRTCs were found, fall back to our old behaviour */
2011 if (crtcs == 0) {
2012 dev_warn(dev, "Falling back to first CRTC\n");
2013 crtcs = 1 << 0;
2014 }
2015
2016 priv->encoder.possible_crtcs = crtcs;
2017 > 2018 ret = drm_simple_encoder_init(drm, &priv->encoder,
2019 DRM_MODE_ENCODER_TMDS);
2020 if (ret)
2021 goto err_encoder;
2022
2023 ret = drm_bridge_attach(&priv->encoder, &priv->bridge,
NULL, 0);
2024 if (ret)
2025 goto err_bridge;
2026
2027 return 0;
2028
2029 err_bridge:
2030 drm_encoder_cleanup(&priv->encoder);
2031 err_encoder:
2032 return ret;
2033 }
2034
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 47744 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/c5d989d3/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm64-defconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project
a0cd413426479abb207381bdbab862f3dfb3ce7d)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
>> drivers/gpu//drm/rcar-du/rcar_du_encoder.c:107:8: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(rcdu->ddev, encoder,
^
drivers/gpu//drm/rcar-du/rcar_du_encoder.c:107:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
vim +/drm_simple_encoder_init +107 drivers/gpu//drm/rcar-du/rcar_du_encoder.c
46
47 int rcar_du_encoder_init(struct rcar_du_device *rcdu,
48 enum rcar_du_output output,
49 struct device_node *enc_node)
50 {
51 struct rcar_du_encoder *renc;
52 struct drm_encoder *encoder;
53 struct drm_bridge *bridge;
54 int ret;
55
56 renc = devm_kzalloc(rcdu->dev, sizeof(*renc), GFP_KERNEL);
57 if (renc == NULL)
58 return -ENOMEM;
59
60 rcdu->encoders[output] = renc;
61 renc->output = output;
62 encoder = rcar_encoder_to_drm_encoder(renc);
63
64 dev_dbg(rcdu->dev, "initializing encoder %pOF for output
%u\n",
65 enc_node, output);
66
67 /*
68 * Locate the DRM bridge from the DT node. For the DPAD outputs, if the
69 * DT node has a single port, assume that it describes a panel and
70 * create a panel bridge.
71 */
72 if ((output == RCAR_DU_OUTPUT_DPAD0 ||
73 output == RCAR_DU_OUTPUT_DPAD1) &&
74 rcar_du_encoder_count_ports(enc_node) == 1) {
75 struct drm_panel *panel = of_drm_find_panel(enc_node);
76
77 if (IS_ERR(panel)) {
78 ret = PTR_ERR(panel);
79 goto done;
80 }
81
82 bridge = devm_drm_panel_bridge_add_typed(rcdu->dev, panel,
83 DRM_MODE_CONNECTOR_DPI);
84 if (IS_ERR(bridge)) {
85 ret = PTR_ERR(bridge);
86 goto done;
87 }
88 } else {
89 bridge = of_drm_find_bridge(enc_node);
90 if (!bridge) {
91 ret = -EPROBE_DEFER;
92 goto done;
93 }
94 }
95
96 /*
97 * On Gen3 skip the LVDS1 output if the LVDS1 encoder is used as a
98 * companion for LVDS0 in dual-link mode.
99 */
100 if (rcdu->info->gen >= 3 && output ==
RCAR_DU_OUTPUT_LVDS1) {
101 if (rcar_lvds_dual_link(bridge)) {
102 ret = -ENOLINK;
103 goto done;
104 }
105 }
106
> 107 ret = drm_simple_encoder_init(rcdu->ddev, encoder,
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 47744 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/8f960c9f/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm64-defconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project
a0cd413426479abb207381bdbab862f3dfb3ce7d)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
>> drivers/gpu/drm/rockchip/analogix_dp-rockchip.c:309:8: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm_dev, encoder,
^
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c:309:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/rockchip/cdn-dp-core.c:1030:8: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm_dev, encoder,
^
drivers/gpu/drm/rockchip/cdn-dp-core.c:1030:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c:546:2: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
^
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c:546:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c:802:8: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm_dev, encoder,
DRM_MODE_ENCODER_DSI);
^
drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c:802:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/rockchip/inno_hdmi.c:617:2: error: implicit declaration
of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
^
drivers/gpu/drm/rockchip/inno_hdmi.c:617:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
vim +/drm_simple_encoder_init +309
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
297
298 static int rockchip_dp_drm_create_encoder(struct rockchip_dp_device *dp)
299 {
300 struct drm_encoder *encoder = &dp->encoder;
301 struct drm_device *drm_dev = dp->drm_dev;
302 struct device *dev = dp->dev;
303 int ret;
304
305 encoder->possible_crtcs = drm_of_find_possible_crtcs(drm_dev,
306 dev->of_node);
307 DRM_DEBUG_KMS("possible_crtcs = 0x%x\n",
encoder->possible_crtcs);
308
> 309 ret = drm_simple_encoder_init(drm_dev, encoder,
310 DRM_MODE_ENCODER_TMDS);
311 if (ret) {
312 DRM_ERROR("failed to initialize encoder with drm\n");
313 return ret;
314 }
315
316 drm_encoder_helper_add(encoder, &rockchip_dp_encoder_helper_funcs);
317
318 return 0;
319 }
320
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 47744 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/f683b9dd/attachment-0001.gz>
Daniel Vetter
2020-Mar-06 10:56 UTC
[PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()
On Thu, Mar 05, 2020 at 04:59:28PM +0100, Thomas Zimmermann wrote:> A call to drm_simple_encoder_init() initializes an encoder without > further functionality. It only provides the destroy callback to > cleanup the encoder's state. Only few drivers implement more > sophisticated encoders than that. Most drivers implement such a > simple encoder and can use drm_simple_encoder_init() instead. > > The patchset converts drivers where the encoder's instance is > embedded in a larger data structure. The driver releases the > memory during cleanup. Each patch replaces drm_encoder_init() with > drm_simple_encoder_init() and removes the (now unused) driver's > encoder functions. > > While the patchset is fairly large, the indiviual patches are self- > contained and can be merged independently from each other. The > simple-encoder functionality is currently in drm-misc-next, where > these patches could go as well. > > Future directions: There's another common case where the driver > calls kzalloc() plus drm_encoder_init(). Such drivers are not > handled by this patchset. The plan here is to use a simple encoder > with either managed memory allocation (once it's merged), or embed > the encoder in a larger data structure and drop kzalloc() entirely. > > The patchset has been compile-tested on x86-64, aarch64 and arm.So from a cursory look all these drivers get it wrong and devm_kzalloc their encoders. But I guess simplifying stuff like you do here will at least give us a nice list of things to look at once we get to the drmm_simple_encoder_init version of all this. On the series: Acked-by: Daniel Vetter <daniel.vetter at ffwll.ch>> > Thomas Zimmermann (22): > drm/arc: Use simple encoder > drm/atmel-hlcdc: Use simple encoder > drm/exynos: Use simple encoder > drm/fsl-dcu: Use simple encoder > drm/gma500: Use simple encoder > drm/hisilicon/kirin: Use simple encoder > drm/i2c/tda998x: Use simple encoder > drm/imx: Use simple encoder > drm/ingenic: Use simple encoder > drm/mediatek: Use simple encoder > drm/rcar-du: Use simple encoder > drm/rockchip: Use simple encoder > drm/shmobile: Use simple encoder > drm/sun4i: Use simple encoder > drm/tegra: Use simple encoder > drm/tidss: Use simple encoder > drm/tilcdc: Use simple encoder > drm/vc4: Use simple encoder > drm/virtgpu: Use simple encoder > drm/vkms: Use simple encoder > drm/writeback: Use simple encoder > drm/zte: Use simple encoder > > drivers/gpu/drm/arc/arcpgu_hdmi.c | 10 +++------- > drivers/gpu/drm/arc/arcpgu_sim.c | 8 ++------ > .../gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 12 ++++-------- > drivers/gpu/drm/drm_writeback.c | 10 +++------- > drivers/gpu/drm/exynos/exynos_dp.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_drm_dpi.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_drm_dsi.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_hdmi.c | 8 ++------ > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 14 +++----------- > drivers/gpu/drm/gma500/cdv_intel_crt.c | 14 +++----------- > drivers/gpu/drm/gma500/cdv_intel_dp.c | 16 +++------------- > drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 4 ++-- > drivers/gpu/drm/gma500/cdv_intel_lvds.c | 17 +++-------------- > drivers/gpu/drm/gma500/mdfld_dsi_dpi.c | 7 +++---- > drivers/gpu/drm/gma500/mdfld_output.h | 1 - > drivers/gpu/drm/gma500/mdfld_tmd_vid.c | 6 ------ > drivers/gpu/drm/gma500/mdfld_tpo_vid.c | 6 ------ > drivers/gpu/drm/gma500/oaktrail_hdmi.c | 14 ++------------ > drivers/gpu/drm/gma500/oaktrail_lvds.c | 5 +++-- > drivers/gpu/drm/gma500/psb_intel_drv.h | 1 - > drivers/gpu/drm/gma500/psb_intel_lvds.c | 18 +++--------------- > drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c | 5 ----- > drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 8 ++------ > drivers/gpu/drm/i2c/tda998x_drv.c | 14 +++----------- > drivers/gpu/drm/imx/dw_hdmi-imx.c | 8 ++------ > drivers/gpu/drm/imx/imx-drm-core.c | 6 ------ > drivers/gpu/drm/imx/imx-drm.h | 1 - > drivers/gpu/drm/imx/imx-ldb.c | 8 ++------ > drivers/gpu/drm/imx/imx-tve.c | 8 ++------ > drivers/gpu/drm/imx/parallel-display.c | 8 ++------ > drivers/gpu/drm/ingenic/ingenic-drm.c | 9 +++------ > drivers/gpu/drm/mediatek/mtk_dpi.c | 14 +++----------- > drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++----------- > drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 14 +++----------- > .../gpu/drm/rockchip/analogix_dp-rockchip.c | 9 +++------ > drivers/gpu/drm/rockchip/cdn-dp-core.c | 9 +++------ > .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 8 ++------ > drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 8 ++------ > drivers/gpu/drm/rockchip/inno_hdmi.c | 8 ++------ > drivers/gpu/drm/rockchip/rk3066_hdmi.c | 8 ++------ > drivers/gpu/drm/rockchip/rockchip_lvds.c | 10 +++------- > drivers/gpu/drm/rockchip/rockchip_rgb.c | 8 ++------ > drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 14 +++----------- > drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 12 +++--------- > drivers/gpu/drm/sun4i/sun4i_lvds.c | 12 +++--------- > drivers/gpu/drm/sun4i/sun4i_rgb.c | 17 +++-------------- > drivers/gpu/drm/sun4i/sun4i_tv.c | 17 +++-------------- > drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 12 +++--------- > drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 8 ++------ > drivers/gpu/drm/tegra/drm.h | 2 -- > drivers/gpu/drm/tegra/dsi.c | 10 +++------- > drivers/gpu/drm/tegra/hdmi.c | 9 +++------ > drivers/gpu/drm/tegra/output.c | 6 +----- > drivers/gpu/drm/tegra/rgb.c | 8 ++------ > drivers/gpu/drm/tegra/sor.c | 8 ++------ > drivers/gpu/drm/tidss/tidss_encoder.c | 10 +++------- > drivers/gpu/drm/tilcdc/tilcdc_external.c | 10 +++------- > drivers/gpu/drm/tilcdc/tilcdc_panel.c | 8 ++------ > drivers/gpu/drm/vc4/vc4_dpi.c | 8 ++------ > drivers/gpu/drm/vc4/vc4_dsi.c | 15 +++------------ > drivers/gpu/drm/vc4/vc4_hdmi.c | 17 ++++------------- > drivers/gpu/drm/vc4/vc4_vec.c | 8 ++------ > drivers/gpu/drm/virtio/virtgpu_display.c | 8 ++------ > drivers/gpu/drm/vkms/vkms_output.c | 8 ++------ > drivers/gpu/drm/zte/zx_hdmi.c | 8 ++------ > drivers/gpu/drm/zte/zx_tvenc.c | 8 ++------ > drivers/gpu/drm/zte/zx_vga.c | 8 ++------ > 68 files changed, 151 insertions(+), 488 deletions(-) > > -- > 2.25.1 >-- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm64-defconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project
a0cd413426479abb207381bdbab862f3dfb3ce7d)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
>> drivers/gpu/drm/sun4i/sun4i_lvds.c:121:8: error: implicit declaration
of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm, &lvds->encoder,
^
drivers/gpu/drm/sun4i/sun4i_lvds.c:121:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/sun4i/sun4i_rgb.c:213:8: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm, &rgb->encoder,
^
drivers/gpu/drm/sun4i/sun4i_rgb.c:213:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c:611:8: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm, &hdmi->encoder,
^
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c:611:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c:220:2: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
^
drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c:220:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/sun4i/sun4i_tv.c:587:8: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm, &tv->encoder,
^
drivers/gpu/drm/sun4i/sun4i_tv.c:587:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c:1062:8: error: implicit
declaration of function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(drm, &dsi->encoder,
^
drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c:1062:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
vim +/drm_simple_encoder_init +121 drivers/gpu/drm/sun4i/sun4i_lvds.c
99
100 int sun4i_lvds_init(struct drm_device *drm, struct sun4i_tcon *tcon)
101 {
102 struct drm_encoder *encoder;
103 struct drm_bridge *bridge;
104 struct sun4i_lvds *lvds;
105 int ret;
106
107 lvds = devm_kzalloc(drm->dev, sizeof(*lvds), GFP_KERNEL);
108 if (!lvds)
109 return -ENOMEM;
110 encoder = &lvds->encoder;
111
112 ret = drm_of_find_panel_or_bridge(tcon->dev->of_node, 1, 0,
113 &lvds->panel, &bridge);
114 if (ret) {
115 dev_info(drm->dev, "No panel or bridge found... LVDS output
disabled\n");
116 return 0;
117 }
118
119 drm_encoder_helper_add(&lvds->encoder,
120 &sun4i_lvds_enc_helper_funcs);
> 121 ret = drm_simple_encoder_init(drm, &lvds->encoder,
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 47744 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/23e37ea2/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm64-defconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project
a0cd413426479abb207381bdbab862f3dfb3ce7d)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
>> drivers/gpu/drm/tegra/rgb.c:281:2: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, &output->encoder,
DRM_MODE_ENCODER_LVDS);
^
drivers/gpu/drm/tegra/rgb.c:281:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/tegra/hdmi.c:1445:2: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, &hdmi->output.encoder,
^
drivers/gpu/drm/tegra/hdmi.c:1445:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/tegra/dsi.c:1058:3: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, &dsi->output.encoder,
^
drivers/gpu/drm/tegra/dsi.c:1058:3: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu/drm/tegra/sor.c:3102:2: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, &sor->output.encoder, encoder);
^
drivers/gpu/drm/tegra/sor.c:3102:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
vim +/drm_simple_encoder_init +281 drivers/gpu/drm/tegra/rgb.c
266
267 int tegra_dc_rgb_init(struct drm_device *drm, struct tegra_dc *dc)
268 {
269 struct tegra_output *output = dc->rgb;
270 int err;
271
272 if (!dc->rgb)
273 return -ENODEV;
274
275 drm_connector_init(drm, &output->connector,
&tegra_rgb_connector_funcs,
276 DRM_MODE_CONNECTOR_LVDS);
277 drm_connector_helper_add(&output->connector,
278 &tegra_rgb_connector_helper_funcs);
279 output->connector.dpms = DRM_MODE_DPMS_OFF;
280
> 281 drm_simple_encoder_init(drm, &output->encoder,
DRM_MODE_ENCODER_LVDS);
282 drm_encoder_helper_add(&output->encoder,
283 &tegra_rgb_encoder_helper_funcs);
284
285 drm_connector_attach_encoder(&output->connector,
286 &output->encoder);
287 drm_connector_register(&output->connector);
288
289 err = tegra_output_init(drm, output);
290 if (err < 0) {
291 dev_err(output->dev, "failed to initialize output: %d\n",
err);
292 return err;
293 }
294
295 /*
296 * Other outputs can be attached to either display controller. The RGB
297 * outputs are an exception and work only with their parent display
298 * controller.
299 */
300 output->encoder.possible_crtcs = drm_crtc_mask(&dc->base);
301
302 return 0;
303 }
304
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 47744 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/c8190e1c/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm64-defconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project
a0cd413426479abb207381bdbab862f3dfb3ce7d)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
>> drivers/gpu//drm/vc4/vc4_dpi.c:309:2: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, dpi->encoder, DRM_MODE_ENCODER_DPI);
^
drivers/gpu//drm/vc4/vc4_dpi.c:309:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu//drm/vc4/vc4_dsi.c:1610:2: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, dsi->encoder, DRM_MODE_ENCODER_DSI);
^
drivers/gpu//drm/vc4/vc4_dsi.c:1610:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu//drm/vc4/vc4_hdmi.c:1389:2: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, hdmi->encoder,
DRM_MODE_ENCODER_TMDS);
^
drivers/gpu//drm/vc4/vc4_hdmi.c:1389:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
-->> drivers/gpu//drm/vc4/vc4_vec.c:566:2: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
drm_simple_encoder_init(drm, vec->encoder,
DRM_MODE_ENCODER_TVDAC);
^
drivers/gpu//drm/vc4/vc4_vec.c:566:2: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
vim +/drm_simple_encoder_init +309 drivers/gpu//drm/vc4/vc4_dpi.c
254
255 static int vc4_dpi_bind(struct device *dev, struct device *master, void
*data)
256 {
257 struct platform_device *pdev = to_platform_device(dev);
258 struct drm_device *drm = dev_get_drvdata(master);
259 struct vc4_dev *vc4 = to_vc4_dev(drm);
260 struct vc4_dpi *dpi;
261 struct vc4_dpi_encoder *vc4_dpi_encoder;
262 int ret;
263
264 dpi = devm_kzalloc(dev, sizeof(*dpi), GFP_KERNEL);
265 if (!dpi)
266 return -ENOMEM;
267
268 vc4_dpi_encoder = devm_kzalloc(dev, sizeof(*vc4_dpi_encoder),
269 GFP_KERNEL);
270 if (!vc4_dpi_encoder)
271 return -ENOMEM;
272 vc4_dpi_encoder->base.type = VC4_ENCODER_TYPE_DPI;
273 vc4_dpi_encoder->dpi = dpi;
274 dpi->encoder = &vc4_dpi_encoder->base.base;
275
276 dpi->pdev = pdev;
277 dpi->regs = vc4_ioremap_regs(pdev, 0);
278 if (IS_ERR(dpi->regs))
279 return PTR_ERR(dpi->regs);
280 dpi->regset.base = dpi->regs;
281 dpi->regset.regs = dpi_regs;
282 dpi->regset.nregs = ARRAY_SIZE(dpi_regs);
283
284 if (DPI_READ(DPI_ID) != DPI_ID_VALUE) {
285 dev_err(dev, "Port returned 0x%08x for ID instead of
0x%08x\n",
286 DPI_READ(DPI_ID), DPI_ID_VALUE);
287 return -ENODEV;
288 }
289
290 dpi->core_clock = devm_clk_get(dev, "core");
291 if (IS_ERR(dpi->core_clock)) {
292 ret = PTR_ERR(dpi->core_clock);
293 if (ret != -EPROBE_DEFER)
294 DRM_ERROR("Failed to get core clock: %d\n", ret);
295 return ret;
296 }
297 dpi->pixel_clock = devm_clk_get(dev, "pixel");
298 if (IS_ERR(dpi->pixel_clock)) {
299 ret = PTR_ERR(dpi->pixel_clock);
300 if (ret != -EPROBE_DEFER)
301 DRM_ERROR("Failed to get pixel clock: %d\n", ret);
302 return ret;
303 }
304
305 ret = clk_prepare_enable(dpi->core_clock);
306 if (ret)
307 DRM_ERROR("Failed to turn on core clock: %d\n", ret);
308
> 309 drm_simple_encoder_init(drm, dpi->encoder, DRM_MODE_ENCODER_DPI);
310 drm_encoder_helper_add(dpi->encoder,
&vc4_dpi_encoder_helper_funcs);
311
312 ret = vc4_dpi_init_bridge(dpi);
313 if (ret)
314 goto err_destroy_encoder;
315
316 dev_set_drvdata(dev, dpi);
317
318 vc4->dpi = dpi;
319
320 vc4_debugfs_add_regset32(drm, "dpi_regs",
&dpi->regset);
321
322 return 0;
323
324 err_destroy_encoder:
325 drm_encoder_cleanup(dpi->encoder);
326 clk_disable_unprepare(dpi->core_clock);
327 return ret;
328 }
329
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 47744 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/73f50201/attachment-0001.gz>
Laurent Pinchart
2020-Mar-06 14:22 UTC
[PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()
Hi Thomas, Thank you for the patch. On Thu, Mar 05, 2020 at 04:59:28PM +0100, Thomas Zimmermann wrote:> A call to drm_simple_encoder_init() initializes an encoder without > further functionality. It only provides the destroy callback to > cleanup the encoder's state. Only few drivers implement more > sophisticated encoders than that. Most drivers implement such a > simple encoder and can use drm_simple_encoder_init() instead. > > The patchset converts drivers where the encoder's instance is > embedded in a larger data structure. The driver releases the > memory during cleanup. Each patch replaces drm_encoder_init() with > drm_simple_encoder_init() and removes the (now unused) driver's > encoder functions. > > While the patchset is fairly large, the indiviual patches are self- > contained and can be merged independently from each other. The > simple-encoder functionality is currently in drm-misc-next, where > these patches could go as well.I've reviewed the whole series, including verifying that the few instances of struct drm_encoder_funcs that were not declared const were not modified somewhere to add more function pointers. Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com> for all the patches. However, I'd like to note that drm_simple_encoder_init() is a bit of a misnommer here. Several of the encoders in those drivers to implement additional functionality. They just expose them through drm_encoder_helper_funcs, not drm_encoder_funcs.> Future directions: There's another common case where the driver > calls kzalloc() plus drm_encoder_init(). Such drivers are not > handled by this patchset. The plan here is to use a simple encoder > with either managed memory allocation (once it's merged), or embed > the encoder in a larger data structure and drop kzalloc() entirely.I think an even more interesting future enhancement would be to add encoder support to the newly added drm_bridge_connector_init(), for drivers that are fully based on bridges and don't implement any encoder operation, neither through drm_encoder_funcs nor through drm_encoder_helper_funcs.> The patchset has been compile-tested on x86-64, aarch64 and arm. > > Thomas Zimmermann (22): > drm/arc: Use simple encoder > drm/atmel-hlcdc: Use simple encoder > drm/exynos: Use simple encoder > drm/fsl-dcu: Use simple encoder > drm/gma500: Use simple encoder > drm/hisilicon/kirin: Use simple encoder > drm/i2c/tda998x: Use simple encoder > drm/imx: Use simple encoder > drm/ingenic: Use simple encoder > drm/mediatek: Use simple encoder > drm/rcar-du: Use simple encoder > drm/rockchip: Use simple encoder > drm/shmobile: Use simple encoder > drm/sun4i: Use simple encoder > drm/tegra: Use simple encoder > drm/tidss: Use simple encoder > drm/tilcdc: Use simple encoder > drm/vc4: Use simple encoder > drm/virtgpu: Use simple encoder > drm/vkms: Use simple encoder > drm/writeback: Use simple encoder > drm/zte: Use simple encoder > > drivers/gpu/drm/arc/arcpgu_hdmi.c | 10 +++------- > drivers/gpu/drm/arc/arcpgu_sim.c | 8 ++------ > .../gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 12 ++++-------- > drivers/gpu/drm/drm_writeback.c | 10 +++------- > drivers/gpu/drm/exynos/exynos_dp.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_drm_dpi.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_drm_dsi.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_hdmi.c | 8 ++------ > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 14 +++----------- > drivers/gpu/drm/gma500/cdv_intel_crt.c | 14 +++----------- > drivers/gpu/drm/gma500/cdv_intel_dp.c | 16 +++------------- > drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 4 ++-- > drivers/gpu/drm/gma500/cdv_intel_lvds.c | 17 +++-------------- > drivers/gpu/drm/gma500/mdfld_dsi_dpi.c | 7 +++---- > drivers/gpu/drm/gma500/mdfld_output.h | 1 - > drivers/gpu/drm/gma500/mdfld_tmd_vid.c | 6 ------ > drivers/gpu/drm/gma500/mdfld_tpo_vid.c | 6 ------ > drivers/gpu/drm/gma500/oaktrail_hdmi.c | 14 ++------------ > drivers/gpu/drm/gma500/oaktrail_lvds.c | 5 +++-- > drivers/gpu/drm/gma500/psb_intel_drv.h | 1 - > drivers/gpu/drm/gma500/psb_intel_lvds.c | 18 +++--------------- > drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c | 5 ----- > drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 8 ++------ > drivers/gpu/drm/i2c/tda998x_drv.c | 14 +++----------- > drivers/gpu/drm/imx/dw_hdmi-imx.c | 8 ++------ > drivers/gpu/drm/imx/imx-drm-core.c | 6 ------ > drivers/gpu/drm/imx/imx-drm.h | 1 - > drivers/gpu/drm/imx/imx-ldb.c | 8 ++------ > drivers/gpu/drm/imx/imx-tve.c | 8 ++------ > drivers/gpu/drm/imx/parallel-display.c | 8 ++------ > drivers/gpu/drm/ingenic/ingenic-drm.c | 9 +++------ > drivers/gpu/drm/mediatek/mtk_dpi.c | 14 +++----------- > drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++----------- > drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 14 +++----------- > .../gpu/drm/rockchip/analogix_dp-rockchip.c | 9 +++------ > drivers/gpu/drm/rockchip/cdn-dp-core.c | 9 +++------ > .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 8 ++------ > drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 8 ++------ > drivers/gpu/drm/rockchip/inno_hdmi.c | 8 ++------ > drivers/gpu/drm/rockchip/rk3066_hdmi.c | 8 ++------ > drivers/gpu/drm/rockchip/rockchip_lvds.c | 10 +++------- > drivers/gpu/drm/rockchip/rockchip_rgb.c | 8 ++------ > drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 14 +++----------- > drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 12 +++--------- > drivers/gpu/drm/sun4i/sun4i_lvds.c | 12 +++--------- > drivers/gpu/drm/sun4i/sun4i_rgb.c | 17 +++-------------- > drivers/gpu/drm/sun4i/sun4i_tv.c | 17 +++-------------- > drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 12 +++--------- > drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 8 ++------ > drivers/gpu/drm/tegra/drm.h | 2 -- > drivers/gpu/drm/tegra/dsi.c | 10 +++------- > drivers/gpu/drm/tegra/hdmi.c | 9 +++------ > drivers/gpu/drm/tegra/output.c | 6 +----- > drivers/gpu/drm/tegra/rgb.c | 8 ++------ > drivers/gpu/drm/tegra/sor.c | 8 ++------ > drivers/gpu/drm/tidss/tidss_encoder.c | 10 +++------- > drivers/gpu/drm/tilcdc/tilcdc_external.c | 10 +++------- > drivers/gpu/drm/tilcdc/tilcdc_panel.c | 8 ++------ > drivers/gpu/drm/vc4/vc4_dpi.c | 8 ++------ > drivers/gpu/drm/vc4/vc4_dsi.c | 15 +++------------ > drivers/gpu/drm/vc4/vc4_hdmi.c | 17 ++++------------- > drivers/gpu/drm/vc4/vc4_vec.c | 8 ++------ > drivers/gpu/drm/virtio/virtgpu_display.c | 8 ++------ > drivers/gpu/drm/vkms/vkms_output.c | 8 ++------ > drivers/gpu/drm/zte/zx_hdmi.c | 8 ++------ > drivers/gpu/drm/zte/zx_tvenc.c | 8 ++------ > drivers/gpu/drm/zte/zx_vga.c | 8 ++------ > 68 files changed, 151 insertions(+), 488 deletions(-)-- Regards, Laurent Pinchart
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: arm64-defconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project
a0cd413426479abb207381bdbab862f3dfb3ce7d)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
>> drivers/gpu/drm/drm_writeback.c:191:8: error: implicit declaration of
function 'drm_simple_encoder_init'
[-Werror,-Wimplicit-function-declaration]
ret = drm_simple_encoder_init(dev, &wb_connector->encoder,
^
drivers/gpu/drm/drm_writeback.c:191:8: note: did you mean
'drm_encoder_init'?
include/drm/drm_encoder.h:189:5: note: 'drm_encoder_init' declared
here
int drm_encoder_init(struct drm_device *dev,
^
1 error generated.
vim +/drm_simple_encoder_init +191 drivers/gpu/drm/drm_writeback.c
149
150 /**
151 * drm_writeback_connector_init - Initialize a writeback connector and
its properties
152 * @dev: DRM device
153 * @wb_connector: Writeback connector to initialize
154 * @con_funcs: Connector funcs vtable
155 * @enc_helper_funcs: Encoder helper funcs vtable to be used by the
internal encoder
156 * @formats: Array of supported pixel formats for the writeback engine
157 * @n_formats: Length of the formats array
158 *
159 * This function creates the writeback-connector-specific properties if
they
160 * have not been already created, initializes the connector as
161 * type DRM_MODE_CONNECTOR_WRITEBACK, and correctly initializes the
property
162 * values. It will also create an internal encoder associated with the
163 * drm_writeback_connector and set it to use the @enc_helper_funcs vtable
for
164 * the encoder helper.
165 *
166 * Drivers should always use this function instead of
drm_connector_init() to
167 * set up writeback connectors.
168 *
169 * Returns: 0 on success, or a negative error code
170 */
171 int drm_writeback_connector_init(struct drm_device *dev,
172 struct drm_writeback_connector *wb_connector,
173 const struct drm_connector_funcs *con_funcs,
174 const struct drm_encoder_helper_funcs *enc_helper_funcs,
175 const u32 *formats, int n_formats)
176 {
177 struct drm_property_blob *blob;
178 struct drm_connector *connector = &wb_connector->base;
179 struct drm_mode_config *config = &dev->mode_config;
180 int ret = create_writeback_properties(dev);
181
182 if (ret != 0)
183 return ret;
184
185 blob = drm_property_create_blob(dev, n_formats * sizeof(*formats),
186 formats);
187 if (IS_ERR(blob))
188 return PTR_ERR(blob);
189
190 drm_encoder_helper_add(&wb_connector->encoder, enc_helper_funcs);
> 191 ret = drm_simple_encoder_init(dev, &wb_connector->encoder,
192 DRM_MODE_ENCODER_VIRTUAL);
193 if (ret)
194 goto fail;
195
196 connector->interlace_allowed = 0;
197
198 ret = drm_connector_init(dev, connector, con_funcs,
199 DRM_MODE_CONNECTOR_WRITEBACK);
200 if (ret)
201 goto connector_fail;
202
203 ret = drm_connector_attach_encoder(connector,
204 &wb_connector->encoder);
205 if (ret)
206 goto attach_fail;
207
208 INIT_LIST_HEAD(&wb_connector->job_queue);
209 spin_lock_init(&wb_connector->job_lock);
210
211 wb_connector->fence_context = dma_fence_context_alloc(1);
212 spin_lock_init(&wb_connector->fence_lock);
213 snprintf(wb_connector->timeline_name,
214 sizeof(wb_connector->timeline_name),
215 "CONNECTOR:%d-%s", connector->base.id,
connector->name);
216
217 drm_object_attach_property(&connector->base,
218 config->writeback_out_fence_ptr_property, 0);
219
220 drm_object_attach_property(&connector->base,
221 config->writeback_fb_id_property, 0);
222
223 drm_object_attach_property(&connector->base,
224 config->writeback_pixel_formats_property,
225 blob->base.id);
226 wb_connector->pixel_formats_blob_ptr = blob;
227
228 return 0;
229
230 attach_fail:
231 drm_connector_cleanup(connector);
232 connector_fail:
233 drm_encoder_cleanup(&wb_connector->encoder);
234 fail:
235 drm_property_blob_put(blob);
236 return ret;
237 }
238 EXPORT_SYMBOL(drm_writeback_connector_init);
239
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 47744 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/a04dafa2/attachment-0001.gz>
Thomas Zimmermann
2020-Mar-06 15:10 UTC
[PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()
Hi Am 06.03.20 um 11:56 schrieb Daniel Vetter:> On Thu, Mar 05, 2020 at 04:59:28PM +0100, Thomas Zimmermann wrote: >> A call to drm_simple_encoder_init() initializes an encoder without >> further functionality. It only provides the destroy callback to >> cleanup the encoder's state. Only few drivers implement more >> sophisticated encoders than that. Most drivers implement such a >> simple encoder and can use drm_simple_encoder_init() instead. >> >> The patchset converts drivers where the encoder's instance is >> embedded in a larger data structure. The driver releases the >> memory during cleanup. Each patch replaces drm_encoder_init() with >> drm_simple_encoder_init() and removes the (now unused) driver's >> encoder functions. >> >> While the patchset is fairly large, the indiviual patches are self- >> contained and can be merged independently from each other. The >> simple-encoder functionality is currently in drm-misc-next, where >> these patches could go as well. >> >> Future directions: There's another common case where the driver >> calls kzalloc() plus drm_encoder_init(). Such drivers are not >> handled by this patchset. The plan here is to use a simple encoder >> with either managed memory allocation (once it's merged), or embed >> the encoder in a larger data structure and drop kzalloc() entirely. >> >> The patchset has been compile-tested on x86-64, aarch64 and arm. > > So from a cursory look all these drivers get it wrong and devm_kzalloc > their encoders. But I guess simplifying stuff like you do here will at > least give us a nice list of things to look at once we get to the > drmm_simple_encoder_init version of all this. On the series: > > Acked-by: Daniel Vetter <daniel.vetter at ffwll.ch>Thanks!> >> >> Thomas Zimmermann (22): >> drm/arc: Use simple encoder >> drm/atmel-hlcdc: Use simple encoder >> drm/exynos: Use simple encoder >> drm/fsl-dcu: Use simple encoder >> drm/gma500: Use simple encoder >> drm/hisilicon/kirin: Use simple encoder >> drm/i2c/tda998x: Use simple encoder >> drm/imx: Use simple encoder >> drm/ingenic: Use simple encoder >> drm/mediatek: Use simple encoder >> drm/rcar-du: Use simple encoder >> drm/rockchip: Use simple encoder >> drm/shmobile: Use simple encoder >> drm/sun4i: Use simple encoder >> drm/tegra: Use simple encoder >> drm/tidss: Use simple encoder >> drm/tilcdc: Use simple encoder >> drm/vc4: Use simple encoder >> drm/virtgpu: Use simple encoder >> drm/vkms: Use simple encoder >> drm/writeback: Use simple encoder >> drm/zte: Use simple encoder >> >> drivers/gpu/drm/arc/arcpgu_hdmi.c | 10 +++------- >> drivers/gpu/drm/arc/arcpgu_sim.c | 8 ++------ >> .../gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 12 ++++-------- >> drivers/gpu/drm/drm_writeback.c | 10 +++------- >> drivers/gpu/drm/exynos/exynos_dp.c | 8 ++------ >> drivers/gpu/drm/exynos/exynos_drm_dpi.c | 8 ++------ >> drivers/gpu/drm/exynos/exynos_drm_dsi.c | 8 ++------ >> drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 ++------ >> drivers/gpu/drm/exynos/exynos_hdmi.c | 8 ++------ >> drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 14 +++----------- >> drivers/gpu/drm/gma500/cdv_intel_crt.c | 14 +++----------- >> drivers/gpu/drm/gma500/cdv_intel_dp.c | 16 +++------------- >> drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 4 ++-- >> drivers/gpu/drm/gma500/cdv_intel_lvds.c | 17 +++-------------- >> drivers/gpu/drm/gma500/mdfld_dsi_dpi.c | 7 +++---- >> drivers/gpu/drm/gma500/mdfld_output.h | 1 - >> drivers/gpu/drm/gma500/mdfld_tmd_vid.c | 6 ------ >> drivers/gpu/drm/gma500/mdfld_tpo_vid.c | 6 ------ >> drivers/gpu/drm/gma500/oaktrail_hdmi.c | 14 ++------------ >> drivers/gpu/drm/gma500/oaktrail_lvds.c | 5 +++-- >> drivers/gpu/drm/gma500/psb_intel_drv.h | 1 - >> drivers/gpu/drm/gma500/psb_intel_lvds.c | 18 +++--------------- >> drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c | 5 ----- >> drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 8 ++------ >> drivers/gpu/drm/i2c/tda998x_drv.c | 14 +++----------- >> drivers/gpu/drm/imx/dw_hdmi-imx.c | 8 ++------ >> drivers/gpu/drm/imx/imx-drm-core.c | 6 ------ >> drivers/gpu/drm/imx/imx-drm.h | 1 - >> drivers/gpu/drm/imx/imx-ldb.c | 8 ++------ >> drivers/gpu/drm/imx/imx-tve.c | 8 ++------ >> drivers/gpu/drm/imx/parallel-display.c | 8 ++------ >> drivers/gpu/drm/ingenic/ingenic-drm.c | 9 +++------ >> drivers/gpu/drm/mediatek/mtk_dpi.c | 14 +++----------- >> drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++----------- >> drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 14 +++----------- >> .../gpu/drm/rockchip/analogix_dp-rockchip.c | 9 +++------ >> drivers/gpu/drm/rockchip/cdn-dp-core.c | 9 +++------ >> .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 8 ++------ >> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 8 ++------ >> drivers/gpu/drm/rockchip/inno_hdmi.c | 8 ++------ >> drivers/gpu/drm/rockchip/rk3066_hdmi.c | 8 ++------ >> drivers/gpu/drm/rockchip/rockchip_lvds.c | 10 +++------- >> drivers/gpu/drm/rockchip/rockchip_rgb.c | 8 ++------ >> drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 14 +++----------- >> drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 12 +++--------- >> drivers/gpu/drm/sun4i/sun4i_lvds.c | 12 +++--------- >> drivers/gpu/drm/sun4i/sun4i_rgb.c | 17 +++-------------- >> drivers/gpu/drm/sun4i/sun4i_tv.c | 17 +++-------------- >> drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 12 +++--------- >> drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 8 ++------ >> drivers/gpu/drm/tegra/drm.h | 2 -- >> drivers/gpu/drm/tegra/dsi.c | 10 +++------- >> drivers/gpu/drm/tegra/hdmi.c | 9 +++------ >> drivers/gpu/drm/tegra/output.c | 6 +----- >> drivers/gpu/drm/tegra/rgb.c | 8 ++------ >> drivers/gpu/drm/tegra/sor.c | 8 ++------ >> drivers/gpu/drm/tidss/tidss_encoder.c | 10 +++------- >> drivers/gpu/drm/tilcdc/tilcdc_external.c | 10 +++------- >> drivers/gpu/drm/tilcdc/tilcdc_panel.c | 8 ++------ >> drivers/gpu/drm/vc4/vc4_dpi.c | 8 ++------ >> drivers/gpu/drm/vc4/vc4_dsi.c | 15 +++------------ >> drivers/gpu/drm/vc4/vc4_hdmi.c | 17 ++++------------- >> drivers/gpu/drm/vc4/vc4_vec.c | 8 ++------ >> drivers/gpu/drm/virtio/virtgpu_display.c | 8 ++------ >> drivers/gpu/drm/vkms/vkms_output.c | 8 ++------ >> drivers/gpu/drm/zte/zx_hdmi.c | 8 ++------ >> drivers/gpu/drm/zte/zx_tvenc.c | 8 ++------ >> drivers/gpu/drm/zte/zx_vga.c | 8 ++------ >> 68 files changed, 151 insertions(+), 488 deletions(-) >> >> -- >> 2.25.1 >> >-- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 N?rnberg, Germany (HRB 36809, AG N?rnberg) Gesch?ftsf?hrer: Felix Imend?rffer -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: <http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/259af06f/attachment.sig>
Thomas Zimmermann
2020-Mar-06 15:18 UTC
[PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()
Hi Laurent Am 06.03.20 um 15:22 schrieb Laurent Pinchart:> Hi Thomas, > > Thank you for the patch. > > On Thu, Mar 05, 2020 at 04:59:28PM +0100, Thomas Zimmermann wrote: >> A call to drm_simple_encoder_init() initializes an encoder without >> further functionality. It only provides the destroy callback to >> cleanup the encoder's state. Only few drivers implement more >> sophisticated encoders than that. Most drivers implement such a >> simple encoder and can use drm_simple_encoder_init() instead. >> >> The patchset converts drivers where the encoder's instance is >> embedded in a larger data structure. The driver releases the >> memory during cleanup. Each patch replaces drm_encoder_init() with >> drm_simple_encoder_init() and removes the (now unused) driver's >> encoder functions. >> >> While the patchset is fairly large, the indiviual patches are self- >> contained and can be merged independently from each other. The >> simple-encoder functionality is currently in drm-misc-next, where >> these patches could go as well. > > I've reviewed the whole series, including verifying that the few > instances of struct drm_encoder_funcs that were not declared const were > not modified somewhere to add more function pointers. > > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>Thanks for the detailed review.> > for all the patches. > > However, I'd like to note that drm_simple_encoder_init() is a bit of a > misnommer here. Several of the encoders in those drivers to implement > additional functionality. They just expose them through > drm_encoder_helper_funcs, not drm_encoder_funcs.True. It's called 'simple encoder' for the lack of a better name. It's part of the simple KMS helpers, so the name's at least consistent. OTOH I always find drm_simple_display_pipe a bad name. We can still rename the simple-encoder function without much effort. I'm open for suggestions. Best regards Thomas> >> Future directions: There's another common case where the driver >> calls kzalloc() plus drm_encoder_init(). Such drivers are not >> handled by this patchset. The plan here is to use a simple encoder >> with either managed memory allocation (once it's merged), or embed >> the encoder in a larger data structure and drop kzalloc() entirely. > > I think an even more interesting future enhancement would be to add > encoder support to the newly added drm_bridge_connector_init(), for > drivers that are fully based on bridges and don't implement any encoder > operation, neither through drm_encoder_funcs nor through > drm_encoder_helper_funcs. > >> The patchset has been compile-tested on x86-64, aarch64 and arm. >> >> Thomas Zimmermann (22): >> drm/arc: Use simple encoder >> drm/atmel-hlcdc: Use simple encoder >> drm/exynos: Use simple encoder >> drm/fsl-dcu: Use simple encoder >> drm/gma500: Use simple encoder >> drm/hisilicon/kirin: Use simple encoder >> drm/i2c/tda998x: Use simple encoder >> drm/imx: Use simple encoder >> drm/ingenic: Use simple encoder >> drm/mediatek: Use simple encoder >> drm/rcar-du: Use simple encoder >> drm/rockchip: Use simple encoder >> drm/shmobile: Use simple encoder >> drm/sun4i: Use simple encoder >> drm/tegra: Use simple encoder >> drm/tidss: Use simple encoder >> drm/tilcdc: Use simple encoder >> drm/vc4: Use simple encoder >> drm/virtgpu: Use simple encoder >> drm/vkms: Use simple encoder >> drm/writeback: Use simple encoder >> drm/zte: Use simple encoder >> >> drivers/gpu/drm/arc/arcpgu_hdmi.c | 10 +++------- >> drivers/gpu/drm/arc/arcpgu_sim.c | 8 ++------ >> .../gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 12 ++++-------- >> drivers/gpu/drm/drm_writeback.c | 10 +++------- >> drivers/gpu/drm/exynos/exynos_dp.c | 8 ++------ >> drivers/gpu/drm/exynos/exynos_drm_dpi.c | 8 ++------ >> drivers/gpu/drm/exynos/exynos_drm_dsi.c | 8 ++------ >> drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 ++------ >> drivers/gpu/drm/exynos/exynos_hdmi.c | 8 ++------ >> drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 14 +++----------- >> drivers/gpu/drm/gma500/cdv_intel_crt.c | 14 +++----------- >> drivers/gpu/drm/gma500/cdv_intel_dp.c | 16 +++------------- >> drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 4 ++-- >> drivers/gpu/drm/gma500/cdv_intel_lvds.c | 17 +++-------------- >> drivers/gpu/drm/gma500/mdfld_dsi_dpi.c | 7 +++---- >> drivers/gpu/drm/gma500/mdfld_output.h | 1 - >> drivers/gpu/drm/gma500/mdfld_tmd_vid.c | 6 ------ >> drivers/gpu/drm/gma500/mdfld_tpo_vid.c | 6 ------ >> drivers/gpu/drm/gma500/oaktrail_hdmi.c | 14 ++------------ >> drivers/gpu/drm/gma500/oaktrail_lvds.c | 5 +++-- >> drivers/gpu/drm/gma500/psb_intel_drv.h | 1 - >> drivers/gpu/drm/gma500/psb_intel_lvds.c | 18 +++--------------- >> drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c | 5 ----- >> drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 8 ++------ >> drivers/gpu/drm/i2c/tda998x_drv.c | 14 +++----------- >> drivers/gpu/drm/imx/dw_hdmi-imx.c | 8 ++------ >> drivers/gpu/drm/imx/imx-drm-core.c | 6 ------ >> drivers/gpu/drm/imx/imx-drm.h | 1 - >> drivers/gpu/drm/imx/imx-ldb.c | 8 ++------ >> drivers/gpu/drm/imx/imx-tve.c | 8 ++------ >> drivers/gpu/drm/imx/parallel-display.c | 8 ++------ >> drivers/gpu/drm/ingenic/ingenic-drm.c | 9 +++------ >> drivers/gpu/drm/mediatek/mtk_dpi.c | 14 +++----------- >> drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++----------- >> drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 14 +++----------- >> .../gpu/drm/rockchip/analogix_dp-rockchip.c | 9 +++------ >> drivers/gpu/drm/rockchip/cdn-dp-core.c | 9 +++------ >> .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 8 ++------ >> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 8 ++------ >> drivers/gpu/drm/rockchip/inno_hdmi.c | 8 ++------ >> drivers/gpu/drm/rockchip/rk3066_hdmi.c | 8 ++------ >> drivers/gpu/drm/rockchip/rockchip_lvds.c | 10 +++------- >> drivers/gpu/drm/rockchip/rockchip_rgb.c | 8 ++------ >> drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 14 +++----------- >> drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 12 +++--------- >> drivers/gpu/drm/sun4i/sun4i_lvds.c | 12 +++--------- >> drivers/gpu/drm/sun4i/sun4i_rgb.c | 17 +++-------------- >> drivers/gpu/drm/sun4i/sun4i_tv.c | 17 +++-------------- >> drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 12 +++--------- >> drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 8 ++------ >> drivers/gpu/drm/tegra/drm.h | 2 -- >> drivers/gpu/drm/tegra/dsi.c | 10 +++------- >> drivers/gpu/drm/tegra/hdmi.c | 9 +++------ >> drivers/gpu/drm/tegra/output.c | 6 +----- >> drivers/gpu/drm/tegra/rgb.c | 8 ++------ >> drivers/gpu/drm/tegra/sor.c | 8 ++------ >> drivers/gpu/drm/tidss/tidss_encoder.c | 10 +++------- >> drivers/gpu/drm/tilcdc/tilcdc_external.c | 10 +++------- >> drivers/gpu/drm/tilcdc/tilcdc_panel.c | 8 ++------ >> drivers/gpu/drm/vc4/vc4_dpi.c | 8 ++------ >> drivers/gpu/drm/vc4/vc4_dsi.c | 15 +++------------ >> drivers/gpu/drm/vc4/vc4_hdmi.c | 17 ++++------------- >> drivers/gpu/drm/vc4/vc4_vec.c | 8 ++------ >> drivers/gpu/drm/virtio/virtgpu_display.c | 8 ++------ >> drivers/gpu/drm/vkms/vkms_output.c | 8 ++------ >> drivers/gpu/drm/zte/zx_hdmi.c | 8 ++------ >> drivers/gpu/drm/zte/zx_tvenc.c | 8 ++------ >> drivers/gpu/drm/zte/zx_vga.c | 8 ++------ >> 68 files changed, 151 insertions(+), 488 deletions(-) >-- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 N?rnberg, Germany (HRB 36809, AG N?rnberg) Gesch?ftsf?hrer: Felix Imend?rffer -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: <http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200306/deb770be/attachment-0001.sig>
On Thu, Mar 05, 2020 at 04:59:29PM +0100, Thomas Zimmermann wrote:> The arc driver uses empty implementations for its encoders. Replace > the code with the generic simple encoder.We should , as a follow-up patch, embed the encoder in arcgpu_drm_private. Then we drop the kzalloc() and avoid that life-time challenge. This patch looks good for what it does. Acked-by: Sam Ravnborg <sam at ravnborg.org>> > Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de> > --- > drivers/gpu/drm/arc/arcpgu_hdmi.c | 10 +++------- > drivers/gpu/drm/arc/arcpgu_sim.c | 8 ++------ > 2 files changed, 5 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/arc/arcpgu_hdmi.c b/drivers/gpu/drm/arc/arcpgu_hdmi.c > index 52839934f2fb..780911765e2e 100644 > --- a/drivers/gpu/drm/arc/arcpgu_hdmi.c > +++ b/drivers/gpu/drm/arc/arcpgu_hdmi.c > @@ -7,15 +7,12 @@ > > #include <drm/drm_bridge.h> > #include <drm/drm_crtc.h> > -#include <drm/drm_encoder.h> > #include <drm/drm_device.h> > +#include <drm/drm_encoder.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "arcpgu.h" > > -static struct drm_encoder_funcs arcpgu_drm_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > int arcpgu_drm_hdmi_init(struct drm_device *drm, struct device_node *np) > { > struct drm_encoder *encoder; > @@ -34,8 +31,7 @@ int arcpgu_drm_hdmi_init(struct drm_device *drm, struct device_node *np) > > encoder->possible_crtcs = 1; > encoder->possible_clones = 0; > - ret = drm_encoder_init(drm, encoder, &arcpgu_drm_encoder_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS); > if (ret) > return ret; > > diff --git a/drivers/gpu/drm/arc/arcpgu_sim.c b/drivers/gpu/drm/arc/arcpgu_sim.c > index 37d961668dfe..66ca2c26e339 100644 > --- a/drivers/gpu/drm/arc/arcpgu_sim.c > +++ b/drivers/gpu/drm/arc/arcpgu_sim.c > @@ -8,6 +8,7 @@ > #include <drm/drm_atomic_helper.h> > #include <drm/drm_device.h> > #include <drm/drm_probe_helper.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "arcpgu.h" > > @@ -50,10 +51,6 @@ static const struct drm_connector_funcs arcpgu_drm_connector_funcs = { > .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, > }; > > -static struct drm_encoder_funcs arcpgu_drm_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > int arcpgu_drm_sim_init(struct drm_device *drm, struct device_node *np) > { > struct arcpgu_drm_connector *arcpgu_connector; > @@ -68,8 +65,7 @@ int arcpgu_drm_sim_init(struct drm_device *drm, struct device_node *np) > encoder->possible_crtcs = 1; > encoder->possible_clones = 0; > > - ret = drm_encoder_init(drm, encoder, &arcpgu_drm_encoder_funcs, > - DRM_MODE_ENCODER_VIRTUAL, NULL); > + ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_VIRTUAL); > if (ret) > return ret; > > -- > 2.25.1
On Thu, Mar 05, 2020 at 04:59:30PM +0100, Thomas Zimmermann wrote:> The atmel-hlcdc driver uses an empty implementation for its encoder. > Replace the code with the generic simple encoder. > > Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>Reviewed-by: Sam Ravnborg <sam at ravnborg.org>> --- > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 12 ++++-------- > 1 file changed, 4 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c > index e2019fe97fff..43bc709e3523 100644 > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c > @@ -11,9 +11,10 @@ > #include <linux/media-bus-format.h> > #include <linux/of_graph.h> > > +#include <drm/drm_bridge.h> > #include <drm/drm_encoder.h> > #include <drm/drm_of.h> > -#include <drm/drm_bridge.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "atmel_hlcdc_dc.h" > > @@ -22,10 +23,6 @@ struct atmel_hlcdc_rgb_output { > int bus_fmt; > }; > > -static const struct drm_encoder_funcs atmel_hlcdc_panel_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > static struct atmel_hlcdc_rgb_output * > atmel_hlcdc_encoder_to_rgb_output(struct drm_encoder *encoder) > { > @@ -98,9 +95,8 @@ static int atmel_hlcdc_attach_endpoint(struct drm_device *dev, int endpoint) > return -EINVAL; > } > > - ret = drm_encoder_init(dev, &output->encoder, > - &atmel_hlcdc_panel_encoder_funcs, > - DRM_MODE_ENCODER_NONE, NULL); > + ret = drm_simple_encoder_init(dev, &output->encoder, > + DRM_MODE_ENCODER_NONE); > if (ret) > return ret; > > -- > 2.25.1
On Thu, Mar 05, 2020 at 04:59:31PM +0100, Thomas Zimmermann wrote:> The exynos driver uses empty implementations for its encoders. Replace > the code with the generic simple encoder. > > Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>Acked-by: Sam Ravnborg <sam at ravnborg.org>> --- > drivers/gpu/drm/exynos/exynos_dp.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_drm_dpi.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_drm_dsi.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 ++------ > drivers/gpu/drm/exynos/exynos_hdmi.c | 8 ++------ > 5 files changed, 10 insertions(+), 30 deletions(-) > > diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c > index d23d3502ca91..a61482af2998 100644 > --- a/drivers/gpu/drm/exynos/exynos_dp.c > +++ b/drivers/gpu/drm/exynos/exynos_dp.c > @@ -25,6 +25,7 @@ > #include <drm/drm_panel.h> > #include <drm/drm_print.h> > #include <drm/drm_probe_helper.h> > +#include <drm/drm_simple_kms_helper.h> > #include <drm/exynos_drm.h> > > #include "exynos_drm_crtc.h" > @@ -135,10 +136,6 @@ static const struct drm_encoder_helper_funcs exynos_dp_encoder_helper_funcs = { > .disable = exynos_dp_nop, > }; > > -static const struct drm_encoder_funcs exynos_dp_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > static int exynos_dp_dt_parse_panel(struct exynos_dp_device *dp) > { > int ret; > @@ -174,8 +171,7 @@ static int exynos_dp_bind(struct device *dev, struct device *master, void *data) > return ret; > } > > - drm_encoder_init(drm_dev, encoder, &exynos_dp_encoder_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS); > > drm_encoder_helper_add(encoder, &exynos_dp_encoder_helper_funcs); > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c > index 43fa0f26c052..7ba5354e7d94 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c > @@ -14,6 +14,7 @@ > #include <drm/drm_panel.h> > #include <drm/drm_print.h> > #include <drm/drm_probe_helper.h> > +#include <drm/drm_simple_kms_helper.h> > > #include <video/of_videomode.h> > #include <video/videomode.h> > @@ -149,10 +150,6 @@ static const struct drm_encoder_helper_funcs exynos_dpi_encoder_helper_funcs = { > .disable = exynos_dpi_disable, > }; > > -static const struct drm_encoder_funcs exynos_dpi_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > enum { > FIMD_PORT_IN0, > FIMD_PORT_IN1, > @@ -201,8 +198,7 @@ int exynos_dpi_bind(struct drm_device *dev, struct drm_encoder *encoder) > { > int ret; > > - drm_encoder_init(dev, encoder, &exynos_dpi_encoder_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS); > > drm_encoder_helper_add(encoder, &exynos_dpi_encoder_helper_funcs); > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c > index 669d3857502a..2986c93382e0 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c > @@ -30,6 +30,7 @@ > #include <drm/drm_panel.h> > #include <drm/drm_print.h> > #include <drm/drm_probe_helper.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "exynos_drm_crtc.h" > #include "exynos_drm_drv.h" > @@ -1524,10 +1525,6 @@ static const struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = { > .disable = exynos_dsi_disable, > }; > > -static const struct drm_encoder_funcs exynos_dsi_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > MODULE_DEVICE_TABLE(of, exynos_dsi_of_match); > > static int exynos_dsi_host_attach(struct mipi_dsi_host *host, > @@ -1705,8 +1702,7 @@ static int exynos_dsi_bind(struct device *dev, struct device *master, > struct drm_bridge *in_bridge; > int ret; > > - drm_encoder_init(drm_dev, encoder, &exynos_dsi_encoder_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS); > > drm_encoder_helper_add(encoder, &exynos_dsi_encoder_helper_funcs); > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c > index b320b3a21ad4..282467121699 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c > @@ -14,6 +14,7 @@ > #include <drm/drm_atomic_helper.h> > #include <drm/drm_edid.h> > #include <drm/drm_probe_helper.h> > +#include <drm/drm_simple_kms_helper.h> > #include <drm/drm_vblank.h> > #include <drm/exynos_drm.h> > > @@ -369,10 +370,6 @@ static const struct drm_encoder_helper_funcs exynos_vidi_encoder_helper_funcs > .disable = exynos_vidi_disable, > }; > > -static const struct drm_encoder_funcs exynos_vidi_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > static int vidi_bind(struct device *dev, struct device *master, void *data) > { > struct vidi_context *ctx = dev_get_drvdata(dev); > @@ -406,8 +403,7 @@ static int vidi_bind(struct device *dev, struct device *master, void *data) > return PTR_ERR(ctx->crtc); > } > > - drm_encoder_init(drm_dev, encoder, &exynos_vidi_encoder_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS); > > drm_encoder_helper_add(encoder, &exynos_vidi_encoder_helper_funcs); > > diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c > index 3e5f1a77286d..302ffda5f297 100644 > --- a/drivers/gpu/drm/exynos/exynos_hdmi.c > +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c > @@ -38,6 +38,7 @@ > #include <drm/drm_edid.h> > #include <drm/drm_print.h> > #include <drm/drm_probe_helper.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "exynos_drm_crtc.h" > #include "regs-hdmi.h" > @@ -1559,10 +1560,6 @@ static const struct drm_encoder_helper_funcs exynos_hdmi_encoder_helper_funcs > .disable = hdmi_disable, > }; > > -static const struct drm_encoder_funcs exynos_hdmi_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > static void hdmi_audio_shutdown(struct device *dev, void *data) > { > struct hdmi_context *hdata = dev_get_drvdata(dev); > @@ -1851,8 +1848,7 @@ static int hdmi_bind(struct device *dev, struct device *master, void *data) > > hdata->phy_clk.enable = hdmiphy_clk_enable; > > - drm_encoder_init(drm_dev, encoder, &exynos_hdmi_encoder_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS); > > drm_encoder_helper_add(encoder, &exynos_hdmi_encoder_helper_funcs); > > -- > 2.25.1
Hi Thomas. On Thu, Mar 05, 2020 at 04:59:33PM +0100, Thomas Zimmermann wrote:> The gma500 driver uses empty implementations for some of its encoders. > Replace the code with the generic simple encoder.This parts looks good.> As a side effect, the > patch also removes an indirection in the encoder setup for Medfield.I failed to see where this was done. Maybe too late for me to review patches, so I will stop now. No matter - patch is: Acked-by: Sam Ravnborg <sam at ravnborg.org>> > Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de> > --- > drivers/gpu/drm/gma500/cdv_intel_crt.c | 14 +++----------- > drivers/gpu/drm/gma500/cdv_intel_dp.c | 16 +++------------- > drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 4 ++-- > drivers/gpu/drm/gma500/cdv_intel_lvds.c | 17 +++-------------- > drivers/gpu/drm/gma500/mdfld_dsi_dpi.c | 7 +++---- > drivers/gpu/drm/gma500/mdfld_output.h | 1 - > drivers/gpu/drm/gma500/mdfld_tmd_vid.c | 6 ------ > drivers/gpu/drm/gma500/mdfld_tpo_vid.c | 6 ------ > drivers/gpu/drm/gma500/oaktrail_hdmi.c | 14 ++------------ > drivers/gpu/drm/gma500/oaktrail_lvds.c | 5 +++-- > drivers/gpu/drm/gma500/psb_intel_drv.h | 1 - > drivers/gpu/drm/gma500/psb_intel_lvds.c | 18 +++--------------- > drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c | 5 ----- > 13 files changed, 22 insertions(+), 92 deletions(-) > > diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c b/drivers/gpu/drm/gma500/cdv_intel_crt.c > index 29c36d63b20e..88535f5aacc5 100644 > --- a/drivers/gpu/drm/gma500/cdv_intel_crt.c > +++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c > @@ -28,6 +28,8 @@ > #include <linux/i2c.h> > #include <linux/pm_runtime.h> > > +#include <drm/drm_simple_kms_helper.h> > + > #include "cdv_device.h" > #include "intel_bios.h" > #include "power.h" > @@ -237,15 +239,6 @@ static const struct drm_connector_helper_funcs > .best_encoder = gma_best_encoder, > }; > > -static void cdv_intel_crt_enc_destroy(struct drm_encoder *encoder) > -{ > - drm_encoder_cleanup(encoder); > -} > - > -static const struct drm_encoder_funcs cdv_intel_crt_enc_funcs = { > - .destroy = cdv_intel_crt_enc_destroy, > -}; > - > void cdv_intel_crt_init(struct drm_device *dev, > struct psb_intel_mode_device *mode_dev) > { > @@ -271,8 +264,7 @@ void cdv_intel_crt_init(struct drm_device *dev, > &cdv_intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA); > > encoder = &gma_encoder->base; > - drm_encoder_init(dev, encoder, > - &cdv_intel_crt_enc_funcs, DRM_MODE_ENCODER_DAC, NULL); > + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_DAC); > > gma_connector_attach_encoder(gma_connector, gma_encoder); > > diff --git a/drivers/gpu/drm/gma500/cdv_intel_dp.c b/drivers/gpu/drm/gma500/cdv_intel_dp.c > index 5772b2dce0d6..13947ec06dbb 100644 > --- a/drivers/gpu/drm/gma500/cdv_intel_dp.c > +++ b/drivers/gpu/drm/gma500/cdv_intel_dp.c > @@ -32,6 +32,7 @@ > #include <drm/drm_crtc.h> > #include <drm/drm_crtc_helper.h> > #include <drm/drm_dp_helper.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "gma_display.h" > #include "psb_drv.h" > @@ -1908,11 +1909,6 @@ cdv_intel_dp_destroy(struct drm_connector *connector) > kfree(connector); > } > > -static void cdv_intel_dp_encoder_destroy(struct drm_encoder *encoder) > -{ > - drm_encoder_cleanup(encoder); > -} > - > static const struct drm_encoder_helper_funcs cdv_intel_dp_helper_funcs = { > .dpms = cdv_intel_dp_dpms, > .mode_fixup = cdv_intel_dp_mode_fixup, > @@ -1935,11 +1931,6 @@ static const struct drm_connector_helper_funcs cdv_intel_dp_connector_helper_fun > .best_encoder = gma_best_encoder, > }; > > -static const struct drm_encoder_funcs cdv_intel_dp_enc_funcs = { > - .destroy = cdv_intel_dp_encoder_destroy, > -}; > - > - > static void cdv_intel_dp_add_properties(struct drm_connector *connector) > { > cdv_intel_attach_force_audio_property(connector); > @@ -2016,8 +2007,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev > encoder = &gma_encoder->base; > > drm_connector_init(dev, connector, &cdv_intel_dp_connector_funcs, type); > - drm_encoder_init(dev, encoder, &cdv_intel_dp_enc_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS); > > gma_connector_attach_encoder(gma_connector, gma_encoder); > > @@ -2120,7 +2110,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev > if (ret == 0) { > /* if this fails, presume the device is a ghost */ > DRM_INFO("failed to retrieve link info, disabling eDP\n"); > - cdv_intel_dp_encoder_destroy(encoder); > + drm_encoder_cleanup(encoder); > cdv_intel_dp_destroy(connector); > goto err_priv; > } else { > diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c > index 1711a41acc16..0d12c6ffbc40 100644 > --- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c > +++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c > @@ -32,6 +32,7 @@ > #include <drm/drm.h> > #include <drm/drm_crtc.h> > #include <drm/drm_edid.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "cdv_device.h" > #include "psb_drv.h" > @@ -311,8 +312,7 @@ void cdv_hdmi_init(struct drm_device *dev, > &cdv_hdmi_connector_funcs, > DRM_MODE_CONNECTOR_DVID); > > - drm_encoder_init(dev, encoder, &psb_intel_lvds_enc_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS); > > gma_connector_attach_encoder(gma_connector, gma_encoder); > gma_encoder->type = INTEL_OUTPUT_HDMI; > diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c > index ea0a5d9a0acc..18de10e9ff9a 100644 > --- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c > +++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c > @@ -12,6 +12,8 @@ > #include <linux/i2c.h> > #include <linux/pm_runtime.h> > > +#include <drm/drm_simple_kms_helper.h> > + > #include "cdv_device.h" > #include "intel_bios.h" > #include "power.h" > @@ -499,16 +501,6 @@ static const struct drm_connector_funcs cdv_intel_lvds_connector_funcs = { > .destroy = cdv_intel_lvds_destroy, > }; > > - > -static void cdv_intel_lvds_enc_destroy(struct drm_encoder *encoder) > -{ > - drm_encoder_cleanup(encoder); > -} > - > -static const struct drm_encoder_funcs cdv_intel_lvds_enc_funcs = { > - .destroy = cdv_intel_lvds_enc_destroy, > -}; > - > /* > * Enumerate the child dev array parsed from VBT to check whether > * the LVDS is present. > @@ -616,10 +608,7 @@ void cdv_intel_lvds_init(struct drm_device *dev, > &cdv_intel_lvds_connector_funcs, > DRM_MODE_CONNECTOR_LVDS); > > - drm_encoder_init(dev, encoder, > - &cdv_intel_lvds_enc_funcs, > - DRM_MODE_ENCODER_LVDS, NULL); > - > + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); > > gma_connector_attach_encoder(gma_connector, gma_encoder); > gma_encoder->type = INTEL_OUTPUT_LVDS; > diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c > index d4c65f268922..aa5aa293ddb6 100644 > --- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c > +++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c > @@ -27,6 +27,8 @@ > > #include <linux/delay.h> > > +#include <drm/drm_simple_kms_helper.h> > + > #include "mdfld_dsi_dpi.h" > #include "mdfld_dsi_pkg_sender.h" > #include "mdfld_output.h" > @@ -993,10 +995,7 @@ struct mdfld_dsi_encoder *mdfld_dsi_dpi_init(struct drm_device *dev, > /*create drm encoder object*/ > connector = &dsi_connector->base.base; > encoder = &dpi_output->base.base.base; > - drm_encoder_init(dev, > - encoder, > - p_funcs->encoder_funcs, > - DRM_MODE_ENCODER_LVDS, NULL); > + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); > drm_encoder_helper_add(encoder, > p_funcs->encoder_helper_funcs); > > diff --git a/drivers/gpu/drm/gma500/mdfld_output.h b/drivers/gpu/drm/gma500/mdfld_output.h > index ab2b27c0f037..17a944d70add 100644 > --- a/drivers/gpu/drm/gma500/mdfld_output.h > +++ b/drivers/gpu/drm/gma500/mdfld_output.h > @@ -51,7 +51,6 @@ struct panel_info { > }; > > struct panel_funcs { > - const struct drm_encoder_funcs *encoder_funcs; > const struct drm_encoder_helper_funcs *encoder_helper_funcs; > struct drm_display_mode * (*get_config_mode)(struct drm_device *); > int (*get_panel_info)(struct drm_device *, int, struct panel_info *); > diff --git a/drivers/gpu/drm/gma500/mdfld_tmd_vid.c b/drivers/gpu/drm/gma500/mdfld_tmd_vid.c > index 49c92debb7b2..25e897b98f86 100644 > --- a/drivers/gpu/drm/gma500/mdfld_tmd_vid.c > +++ b/drivers/gpu/drm/gma500/mdfld_tmd_vid.c > @@ -188,13 +188,7 @@ static const struct drm_encoder_helper_funcs > .commit = mdfld_dsi_dpi_commit, > }; > > -/*TPO DPI encoder funcs*/ > -static const struct drm_encoder_funcs mdfld_tpo_dpi_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > const struct panel_funcs mdfld_tmd_vid_funcs = { > - .encoder_funcs = &mdfld_tpo_dpi_encoder_funcs, > .encoder_helper_funcs = &mdfld_tpo_dpi_encoder_helper_funcs, > .get_config_mode = &tmd_vid_get_config_mode, > .get_panel_info = tmd_vid_get_panel_info, > diff --git a/drivers/gpu/drm/gma500/mdfld_tpo_vid.c b/drivers/gpu/drm/gma500/mdfld_tpo_vid.c > index a9420bf9a419..11845978fb0a 100644 > --- a/drivers/gpu/drm/gma500/mdfld_tpo_vid.c > +++ b/drivers/gpu/drm/gma500/mdfld_tpo_vid.c > @@ -76,13 +76,7 @@ static const struct drm_encoder_helper_funcs > .commit = mdfld_dsi_dpi_commit, > }; > > -/*TPO DPI encoder funcs*/ > -static const struct drm_encoder_funcs mdfld_tpo_dpi_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > const struct panel_funcs mdfld_tpo_vid_funcs = { > - .encoder_funcs = &mdfld_tpo_dpi_encoder_funcs, > .encoder_helper_funcs = &mdfld_tpo_dpi_encoder_helper_funcs, > .get_config_mode = &tpo_vid_get_config_mode, > .get_panel_info = tpo_vid_get_panel_info, > diff --git a/drivers/gpu/drm/gma500/oaktrail_hdmi.c b/drivers/gpu/drm/gma500/oaktrail_hdmi.c > index f4370232767d..b25086f252ae 100644 > --- a/drivers/gpu/drm/gma500/oaktrail_hdmi.c > +++ b/drivers/gpu/drm/gma500/oaktrail_hdmi.c > @@ -27,6 +27,7 @@ > #include <linux/delay.h> > > #include <drm/drm.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "psb_drv.h" > #include "psb_intel_drv.h" > @@ -620,15 +621,6 @@ static const struct drm_connector_funcs oaktrail_hdmi_connector_funcs = { > .destroy = oaktrail_hdmi_destroy, > }; > > -static void oaktrail_hdmi_enc_destroy(struct drm_encoder *encoder) > -{ > - drm_encoder_cleanup(encoder); > -} > - > -static const struct drm_encoder_funcs oaktrail_hdmi_enc_funcs = { > - .destroy = oaktrail_hdmi_enc_destroy, > -}; > - > void oaktrail_hdmi_init(struct drm_device *dev, > struct psb_intel_mode_device *mode_dev) > { > @@ -651,9 +643,7 @@ void oaktrail_hdmi_init(struct drm_device *dev, > &oaktrail_hdmi_connector_funcs, > DRM_MODE_CONNECTOR_DVID); > > - drm_encoder_init(dev, encoder, > - &oaktrail_hdmi_enc_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS); > > gma_connector_attach_encoder(gma_connector, gma_encoder); > > diff --git a/drivers/gpu/drm/gma500/oaktrail_lvds.c b/drivers/gpu/drm/gma500/oaktrail_lvds.c > index 582e09597500..2828360153d1 100644 > --- a/drivers/gpu/drm/gma500/oaktrail_lvds.c > +++ b/drivers/gpu/drm/gma500/oaktrail_lvds.c > @@ -13,6 +13,8 @@ > > #include <asm/intel-mid.h> > > +#include <drm/drm_simple_kms_helper.h> > + > #include "intel_bios.h" > #include "power.h" > #include "psb_drv.h" > @@ -311,8 +313,7 @@ void oaktrail_lvds_init(struct drm_device *dev, > &psb_intel_lvds_connector_funcs, > DRM_MODE_CONNECTOR_LVDS); > > - drm_encoder_init(dev, encoder, &psb_intel_lvds_enc_funcs, > - DRM_MODE_ENCODER_LVDS, NULL); > + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); > > gma_connector_attach_encoder(gma_connector, gma_encoder); > gma_encoder->type = INTEL_OUTPUT_LVDS; > diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h > index 16c6136f778b..fb601983cef0 100644 > --- a/drivers/gpu/drm/gma500/psb_intel_drv.h > +++ b/drivers/gpu/drm/gma500/psb_intel_drv.h > @@ -252,7 +252,6 @@ extern int psb_intel_lvds_set_property(struct drm_connector *connector, > struct drm_property *property, > uint64_t value); > extern void psb_intel_lvds_destroy(struct drm_connector *connector); > -extern const struct drm_encoder_funcs psb_intel_lvds_enc_funcs; > > /* intel_gmbus.c */ > extern void gma_intel_i2c_reset(struct drm_device *dev); > diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c > index afaebab7bc17..063c66bb946d 100644 > --- a/drivers/gpu/drm/gma500/psb_intel_lvds.c > +++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c > @@ -11,6 +11,8 @@ > #include <linux/i2c.h> > #include <linux/pm_runtime.h> > > +#include <drm/drm_simple_kms_helper.h> > + > #include "intel_bios.h" > #include "power.h" > #include "psb_drv.h" > @@ -621,18 +623,6 @@ const struct drm_connector_funcs psb_intel_lvds_connector_funcs = { > .destroy = psb_intel_lvds_destroy, > }; > > - > -static void psb_intel_lvds_enc_destroy(struct drm_encoder *encoder) > -{ > - drm_encoder_cleanup(encoder); > -} > - > -const struct drm_encoder_funcs psb_intel_lvds_enc_funcs = { > - .destroy = psb_intel_lvds_enc_destroy, > -}; > - > - > - > /** > * psb_intel_lvds_init - setup LVDS connectors on this device > * @dev: drm device > @@ -683,9 +673,7 @@ void psb_intel_lvds_init(struct drm_device *dev, > &psb_intel_lvds_connector_funcs, > DRM_MODE_CONNECTOR_LVDS); > > - drm_encoder_init(dev, encoder, > - &psb_intel_lvds_enc_funcs, > - DRM_MODE_ENCODER_LVDS, NULL); > + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_LVDS); > > gma_connector_attach_encoder(gma_connector, gma_encoder); > gma_encoder->type = INTEL_OUTPUT_LVDS; > diff --git a/drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c b/drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c > index 9e8224456ea2..f7e121f4c609 100644 > --- a/drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c > +++ b/drivers/gpu/drm/gma500/tc35876x-dsi-lvds.c > @@ -765,12 +765,7 @@ static const struct drm_encoder_helper_funcs tc35876x_encoder_helper_funcs = { > .commit = mdfld_dsi_dpi_commit, > }; > > -static const struct drm_encoder_funcs tc35876x_encoder_funcs = { > - .destroy = drm_encoder_cleanup, > -}; > - > const struct panel_funcs mdfld_tc35876x_funcs = { > - .encoder_funcs = &tc35876x_encoder_funcs, > .encoder_helper_funcs = &tc35876x_encoder_helper_funcs, > .get_config_mode = tc35876x_get_config_mode, > .get_panel_info = tc35876x_get_panel_info, > -- > 2.25.1
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: i386-randconfig-h001-20200307 (attached as .config)
compiler: gcc-7 (Debian 7.5.0-5) 7.5.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu//drm/vkms/vkms_output.c: In function
'vkms_output_init':>> drivers/gpu//drm/vkms/vkms_output.c:70:8: error: implicit declaration
of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_VIRTUAL);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
vim +70 drivers/gpu//drm/vkms/vkms_output.c
34
35 int vkms_output_init(struct vkms_device *vkmsdev, int index)
36 {
37 struct vkms_output *output = &vkmsdev->output;
38 struct drm_device *dev = &vkmsdev->drm;
39 struct drm_connector *connector = &output->connector;
40 struct drm_encoder *encoder = &output->encoder;
41 struct drm_crtc *crtc = &output->crtc;
42 struct drm_plane *primary, *cursor = NULL;
43 int ret;
44
45 primary = vkms_plane_init(vkmsdev, DRM_PLANE_TYPE_PRIMARY, index);
46 if (IS_ERR(primary))
47 return PTR_ERR(primary);
48
49 if (enable_cursor) {
50 cursor = vkms_plane_init(vkmsdev, DRM_PLANE_TYPE_CURSOR, index);
51 if (IS_ERR(cursor)) {
52 ret = PTR_ERR(cursor);
53 goto err_cursor;
54 }
55 }
56
57 ret = vkms_crtc_init(dev, crtc, primary, cursor);
58 if (ret)
59 goto err_crtc;
60
61 ret = drm_connector_init(dev, connector, &vkms_connector_funcs,
62 DRM_MODE_CONNECTOR_VIRTUAL);
63 if (ret) {
64 DRM_ERROR("Failed to init connector\n");
65 goto err_connector;
66 }
67
68 drm_connector_helper_add(connector, &vkms_conn_helper_funcs);
69
> 70 ret = drm_simple_encoder_init(dev, encoder,
DRM_MODE_ENCODER_VIRTUAL);
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 40866 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200307/9b515771/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2 v5.6-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: i386-randconfig-h002-20200307 (attached as .config)
compiler: gcc-7 (Debian 7.5.0-5) 7.5.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/virtio/virtgpu_display.c: In function
'vgdev_output_init':>> drivers/gpu/drm/virtio/virtgpu_display.c:276:2: error: implicit
declaration of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_VIRTUAL);
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:fls
Cyclomatic Complexity 1 include/linux/log2.h:__ilog2_u32
Cyclomatic Complexity 1 include/linux/err.h:ERR_PTR
Cyclomatic Complexity 1 include/linux/err.h:PTR_ERR
Cyclomatic Complexity 3 include/linux/slab.h:kmalloc_type
Cyclomatic Complexity 28 include/linux/slab.h:kmalloc_index
Cyclomatic Complexity 1 include/linux/slab.h:kmalloc_large
Cyclomatic Complexity 4 include/linux/slab.h:kmalloc
Cyclomatic Complexity 1 include/linux/slab.h:kzalloc
Cyclomatic Complexity 1
include/drm/drm_modeset_helper_vtables.h:drm_crtc_helper_add
Cyclomatic Complexity 1
include/drm/drm_modeset_helper_vtables.h:drm_encoder_helper_add
Cyclomatic Complexity 1
include/drm/drm_modeset_helper_vtables.h:drm_connector_helper_add
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_crtc_atomic_enable
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_crtc_atomic_check
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_crtc_atomic_flush
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_enc_mode_set
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_enc_enable
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_enc_disable
Cyclomatic Complexity 2
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_conn_detect
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:vgdev_atomic_commit_tail
Cyclomatic Complexity 67 include/asm-generic/getorder.h:get_order
Cyclomatic Complexity 1 include/linux/err.h:IS_ERR
Cyclomatic Complexity 2
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_framebuffer_init
Cyclomatic Complexity 5
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_user_framebuffer_create
Cyclomatic Complexity 5
drivers/gpu/drm/virtio/virtgpu_display.c:vgdev_output_init
Cyclomatic Complexity 8
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_conn_mode_valid
Cyclomatic Complexity 4
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_conn_get_modes
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_conn_destroy
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_crtc_atomic_disable
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_crtc_mode_set_nofb
Cyclomatic Complexity 2
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_modeset_init
Cyclomatic Complexity 2
drivers/gpu/drm/virtio/virtgpu_display.c:virtio_gpu_modeset_fini
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:_GLOBAL__sub_I_00100_0_virtio_gpu_modeset_init
Cyclomatic Complexity 1
drivers/gpu/drm/virtio/virtgpu_display.c:_GLOBAL__sub_D_00100_1_virtio_gpu_modeset_init
cc1: some warnings being treated as errors
vim +276 drivers/gpu/drm/virtio/virtgpu_display.c
243
244 static int vgdev_output_init(struct virtio_gpu_device *vgdev, int index)
245 {
246 struct drm_device *dev = vgdev->ddev;
247 struct virtio_gpu_output *output = vgdev->outputs + index;
248 struct drm_connector *connector = &output->conn;
249 struct drm_encoder *encoder = &output->enc;
250 struct drm_crtc *crtc = &output->crtc;
251 struct drm_plane *primary, *cursor;
252
253 output->index = index;
254 if (index == 0) {
255 output->info.enabled = cpu_to_le32(true);
256 output->info.r.width = cpu_to_le32(XRES_DEF);
257 output->info.r.height = cpu_to_le32(YRES_DEF);
258 }
259
260 primary = virtio_gpu_plane_init(vgdev, DRM_PLANE_TYPE_PRIMARY, index);
261 if (IS_ERR(primary))
262 return PTR_ERR(primary);
263 cursor = virtio_gpu_plane_init(vgdev, DRM_PLANE_TYPE_CURSOR, index);
264 if (IS_ERR(cursor))
265 return PTR_ERR(cursor);
266 drm_crtc_init_with_planes(dev, crtc, primary, cursor,
267 &virtio_gpu_crtc_funcs, NULL);
268 drm_crtc_helper_add(crtc, &virtio_gpu_crtc_helper_funcs);
269
270 drm_connector_init(dev, connector, &virtio_gpu_connector_funcs,
271 DRM_MODE_CONNECTOR_VIRTUAL);
272 drm_connector_helper_add(connector, &virtio_gpu_conn_helper_funcs);
273 if (vgdev->has_edid)
274 drm_connector_attach_edid_property(connector);
275
> 276 drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_VIRTUAL);
277 drm_encoder_helper_add(encoder, &virtio_gpu_enc_helper_funcs);
278 encoder->possible_crtcs = 1 << index;
279
280 drm_connector_attach_encoder(connector, encoder);
281 drm_connector_register(connector);
282 return 0;
283 }
284
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 38019 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200307/0e712006/attachment-0001.gz>
Hi Thomas,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20200305]
[also build test ERROR on v5.6-rc4]
[cannot apply to rockchip/for-next shawnguo/for-next sunxi/sunxi/for-next
tegra/for-next linus/master v5.6-rc4 v5.6-rc3 v5.6-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to
specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url:
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-Convert-drivers-to-drm_simple_encoder_init/20200306-045931
base: 47466dcf84ee66a973ea7d2fca7e582fe9328932
config: x86_64-randconfig-h002-20200307 (attached as .config)
compiler: gcc-7 (Debian 7.5.0-5) 7.5.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/i2c/tda998x_drv.c: In function
'tda998x_encoder_init':>> drivers/gpu/drm/i2c/tda998x_drv.c:2018:8: error: implicit declaration
of function 'drm_simple_encoder_init'; did you mean
'drm_encoder_init'? [-Werror=implicit-function-declaration]
ret = drm_simple_encoder_init(drm, &priv->encoder,
^~~~~~~~~~~~~~~~~~~~~~~
drm_encoder_init
cc1: some warnings being treated as errors
vim +2018 drivers/gpu/drm/i2c/tda998x_drv.c
2000
2001 static int tda998x_encoder_init(struct device *dev, struct drm_device
*drm)
2002 {
2003 struct tda998x_priv *priv = dev_get_drvdata(dev);
2004 u32 crtcs = 0;
2005 int ret;
2006
2007 if (dev->of_node)
2008 crtcs = drm_of_find_possible_crtcs(drm, dev->of_node);
2009
2010 /* If no CRTCs were found, fall back to our old behaviour */
2011 if (crtcs == 0) {
2012 dev_warn(dev, "Falling back to first CRTC\n");
2013 crtcs = 1 << 0;
2014 }
2015
2016 priv->encoder.possible_crtcs = crtcs;
2017 > 2018 ret = drm_simple_encoder_init(drm, &priv->encoder,
2019 DRM_MODE_ENCODER_TMDS);
2020 if (ret)
2021 goto err_encoder;
2022
2023 ret = drm_bridge_attach(&priv->encoder, &priv->bridge,
NULL, 0);
2024 if (ret)
2025 goto err_bridge;
2026
2027 return 0;
2028
2029 err_bridge:
2030 drm_encoder_cleanup(&priv->encoder);
2031 err_encoder:
2032 return ret;
2033 }
2034
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 32004 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200307/4106e528/attachment-0001.gz>
On 05/03/2020 16:59, Thomas Zimmermann wrote:> The mediatak driver uses empty implementations for its encoders. Replace > the code with the generic simple encoder. > > Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>Reviewed-by: Matthias Brugger <matthias.bgg at gmail.com>> --- > drivers/gpu/drm/mediatek/mtk_dpi.c | 14 +++----------- > drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++----------- > 2 files changed, 6 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c > index 14fbe1c09ce9..9c90c58e5acd 100644 > --- a/drivers/gpu/drm/mediatek/mtk_dpi.c > +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c > @@ -20,6 +20,7 @@ > #include <drm/drm_bridge.h> > #include <drm/drm_crtc.h> > #include <drm/drm_of.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "mtk_dpi_regs.h" > #include "mtk_drm_ddp_comp.h" > @@ -509,15 +510,6 @@ static int mtk_dpi_set_display_mode(struct mtk_dpi *dpi, > return 0; > } > > -static void mtk_dpi_encoder_destroy(struct drm_encoder *encoder) > -{ > - drm_encoder_cleanup(encoder); > -} > - > -static const struct drm_encoder_funcs mtk_dpi_encoder_funcs = { > - .destroy = mtk_dpi_encoder_destroy, > -}; > - > static bool mtk_dpi_encoder_mode_fixup(struct drm_encoder *encoder, > const struct drm_display_mode *mode, > struct drm_display_mode *adjusted_mode) > @@ -596,8 +588,8 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data) > return ret; > } > > - ret = drm_encoder_init(drm_dev, &dpi->encoder, &mtk_dpi_encoder_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + ret = drm_simple_encoder_init(drm_dev, &dpi->encoder, > + DRM_MODE_ENCODER_TMDS); > if (ret) { > dev_err(dev, "Failed to initialize decoder: %d\n", ret); > goto err_unregister; > diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c > index 0ede69830a9d..a9a25087112f 100644 > --- a/drivers/gpu/drm/mediatek/mtk_dsi.c > +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c > @@ -22,6 +22,7 @@ > #include <drm/drm_panel.h> > #include <drm/drm_print.h> > #include <drm/drm_probe_helper.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "mtk_drm_ddp_comp.h" > > @@ -787,15 +788,6 @@ static void mtk_output_dsi_disable(struct mtk_dsi *dsi) > dsi->enabled = false; > } > > -static void mtk_dsi_encoder_destroy(struct drm_encoder *encoder) > -{ > - drm_encoder_cleanup(encoder); > -} > - > -static const struct drm_encoder_funcs mtk_dsi_encoder_funcs = { > - .destroy = mtk_dsi_encoder_destroy, > -}; > - > static bool mtk_dsi_encoder_mode_fixup(struct drm_encoder *encoder, > const struct drm_display_mode *mode, > struct drm_display_mode *adjusted_mode) > @@ -888,8 +880,8 @@ static int mtk_dsi_create_conn_enc(struct drm_device *drm, struct mtk_dsi *dsi) > { > int ret; > > - ret = drm_encoder_init(drm, &dsi->encoder, &mtk_dsi_encoder_funcs, > - DRM_MODE_ENCODER_DSI, NULL); > + ret = drm_simple_encoder_init(drm, &dsi->encoder, > + DRM_MODE_ENCODER_DSI); > if (ret) { > DRM_ERROR("Failed to encoder init to drm\n"); > return ret; >
Hi, Thomas: On Thu, 2020-03-05 at 16:59 +0100, Thomas Zimmermann wrote:> The mediatak driver uses empty implementations for its encoders. Replace > the code with the generic simple encoder. >Acked-by: CK Hu <ck.hu at mediatek.com>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de> > --- > drivers/gpu/drm/mediatek/mtk_dpi.c | 14 +++----------- > drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++----------- > 2 files changed, 6 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c > index 14fbe1c09ce9..9c90c58e5acd 100644 > --- a/drivers/gpu/drm/mediatek/mtk_dpi.c > +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c > @@ -20,6 +20,7 @@ > #include <drm/drm_bridge.h> > #include <drm/drm_crtc.h> > #include <drm/drm_of.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "mtk_dpi_regs.h" > #include "mtk_drm_ddp_comp.h" > @@ -509,15 +510,6 @@ static int mtk_dpi_set_display_mode(struct mtk_dpi *dpi, > return 0; > } > > -static void mtk_dpi_encoder_destroy(struct drm_encoder *encoder) > -{ > - drm_encoder_cleanup(encoder); > -} > - > -static const struct drm_encoder_funcs mtk_dpi_encoder_funcs = { > - .destroy = mtk_dpi_encoder_destroy, > -}; > - > static bool mtk_dpi_encoder_mode_fixup(struct drm_encoder *encoder, > const struct drm_display_mode *mode, > struct drm_display_mode *adjusted_mode) > @@ -596,8 +588,8 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data) > return ret; > } > > - ret = drm_encoder_init(drm_dev, &dpi->encoder, &mtk_dpi_encoder_funcs, > - DRM_MODE_ENCODER_TMDS, NULL); > + ret = drm_simple_encoder_init(drm_dev, &dpi->encoder, > + DRM_MODE_ENCODER_TMDS); > if (ret) { > dev_err(dev, "Failed to initialize decoder: %d\n", ret); > goto err_unregister; > diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c > index 0ede69830a9d..a9a25087112f 100644 > --- a/drivers/gpu/drm/mediatek/mtk_dsi.c > +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c > @@ -22,6 +22,7 @@ > #include <drm/drm_panel.h> > #include <drm/drm_print.h> > #include <drm/drm_probe_helper.h> > +#include <drm/drm_simple_kms_helper.h> > > #include "mtk_drm_ddp_comp.h" > > @@ -787,15 +788,6 @@ static void mtk_output_dsi_disable(struct mtk_dsi *dsi) > dsi->enabled = false; > } > > -static void mtk_dsi_encoder_destroy(struct drm_encoder *encoder) > -{ > - drm_encoder_cleanup(encoder); > -} > - > -static const struct drm_encoder_funcs mtk_dsi_encoder_funcs = { > - .destroy = mtk_dsi_encoder_destroy, > -}; > - > static bool mtk_dsi_encoder_mode_fixup(struct drm_encoder *encoder, > const struct drm_display_mode *mode, > struct drm_display_mode *adjusted_mode) > @@ -888,8 +880,8 @@ static int mtk_dsi_create_conn_enc(struct drm_device *drm, struct mtk_dsi *dsi) > { > int ret; > > - ret = drm_encoder_init(drm, &dsi->encoder, &mtk_dsi_encoder_funcs, > - DRM_MODE_ENCODER_DSI, NULL); > + ret = drm_simple_encoder_init(drm, &dsi->encoder, > + DRM_MODE_ENCODER_DSI); > if (ret) { > DRM_ERROR("Failed to encoder init to drm\n"); > return ret;
Hi Am 24.03.20 um 12:59 schrieb Rodrigo Siqueira:> Hi Thomas, > > First of all, thanks for your patch! > > I applied all your series, compiled it, and when I tried > `make INSTALL_MOD_PATH=/PATH/ modules_instal` I got the following > message: > > depmod: ERROR: Cycle detected: drm_kms_helper -> drm -> drm_kms_helper > depmod: ERROR: Found 2 modules in dependency cycles! > make: *** [Makefile:1317: _modinst_post] Error 1 > > I cleaned up my local files and tried again, but I got the same error; > If I just use `drm-misc-next` everything is fine. Did I miss something?I figured out that this problem is caused by the patch for the writeback encoder, which is located in the DRM core. I'll drop the patch. Thanks for testing! Best regards Thomas> > Thanks > > On 03/05, Thomas Zimmermann wrote: >> The vkms driver uses an empty implementation for its encoder. Replace >> the code with the generic simple encoder. >> >> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de> >> --- >> drivers/gpu/drm/vkms/vkms_output.c | 8 ++------ >> 1 file changed, 2 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/gpu/drm/vkms/vkms_output.c b/drivers/gpu/drm/vkms/vkms_output.c >> index fb1941a6522c..85afb77e97f0 100644 >> --- a/drivers/gpu/drm/vkms/vkms_output.c >> +++ b/drivers/gpu/drm/vkms/vkms_output.c >> @@ -3,6 +3,7 @@ >> #include "vkms_drv.h" >> #include <drm/drm_atomic_helper.h> >> #include <drm/drm_probe_helper.h> >> +#include <drm/drm_simple_kms_helper.h> >> >> static void vkms_connector_destroy(struct drm_connector *connector) >> { >> @@ -17,10 +18,6 @@ static const struct drm_connector_funcs vkms_connector_funcs = { >> .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, >> }; >> >> -static const struct drm_encoder_funcs vkms_encoder_funcs = { >> - .destroy = drm_encoder_cleanup, >> -}; >> - >> static int vkms_conn_get_modes(struct drm_connector *connector) >> { >> int count; >> @@ -70,8 +67,7 @@ int vkms_output_init(struct vkms_device *vkmsdev, int index) >> >> drm_connector_helper_add(connector, &vkms_conn_helper_funcs); >> >> - ret = drm_encoder_init(dev, encoder, &vkms_encoder_funcs, >> - DRM_MODE_ENCODER_VIRTUAL, NULL); >> + ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_VIRTUAL); >> if (ret) { >> DRM_ERROR("Failed to init encoder\n"); >> goto err_encoder; >> -- >> 2.25.1 >> > > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel >-- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 N?rnberg, Germany (HRB 36809, AG N?rnberg) Gesch?ftsf?hrer: Felix Imend?rffer -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: <http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20200401/34b350c9/attachment.sig>
Reasonably Related Threads
- [PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()
- [PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()
- [PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()
- [PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()
- [PATCH 00/22] drm: Convert drivers to drm_simple_encoder_init()