forked from Minki/linux
152cce0006
Analogix_dp driver acquires all its resources in the ->bind() callback,
what is a bit against the component driver based approach, where the
driver initialization is split into a probe(), where all resources are
gathered, and a bind(), where all objects are created and a compound
driver is initialized.
Extract all the resource related operations to analogix_dp_probe() and
analogix_dp_remove(), then call them before/after registration of the
device components from the main Exynos DP and Rockchip DP drivers. Also
move the plat_data initialization to the probe() to make it available for
the analogix_dp_probe() function.
This fixes the multiple calls to the bind() of the DRM compound driver
when the DP PHY driver is not yet loaded/probed:
[drm] Exynos DRM: using 14400000.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 14400000.fimd (ops fimd_component_ops [exynosdrm])
exynos-drm exynos-drm: bound 14450000.mixer (ops mixer_component_ops [exynosdrm])
exynos-dp 145b0000.dp-controller: no DP phy configured
exynos-drm exynos-drm: failed to bind 145b0000.dp-controller (ops exynos_dp_ops [exynosdrm]): -517
exynos-drm exynos-drm: master bind failed: -517
...
[drm] Exynos DRM: using 14400000.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 14400000.fimd (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 14450000.mixer (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 145b0000.dp-controller (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 14530000.hdmi (ops hdmi_enable [exynosdrm])
[drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
Console: switching to colour frame buffer device 170x48
exynos-drm exynos-drm: fb0: exynosdrmfb frame buffer device
[drm] Initialized exynos 1.1.0 20180330 for exynos-drm on minor 1
...
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Andy Yan <andy.yan@rock-chips.com>
Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200310103427.26048-1-m.szyprowski@samsung.com
(cherry picked from commit 83a196773b
)
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Analogix DP (Display Port) Core interface driver.
|
|
*
|
|
* Copyright (C) 2015 Rockchip Electronics Co., Ltd.
|
|
*/
|
|
#ifndef _ANALOGIX_DP_H_
|
|
#define _ANALOGIX_DP_H_
|
|
|
|
#include <drm/drm_crtc.h>
|
|
|
|
struct analogix_dp_device;
|
|
|
|
enum analogix_dp_devtype {
|
|
EXYNOS_DP,
|
|
RK3288_DP,
|
|
RK3399_EDP,
|
|
};
|
|
|
|
static inline bool is_rockchip(enum analogix_dp_devtype type)
|
|
{
|
|
return type == RK3288_DP || type == RK3399_EDP;
|
|
}
|
|
|
|
struct analogix_dp_plat_data {
|
|
enum analogix_dp_devtype dev_type;
|
|
struct drm_panel *panel;
|
|
struct drm_encoder *encoder;
|
|
struct drm_connector *connector;
|
|
bool skip_connector;
|
|
|
|
int (*power_on_start)(struct analogix_dp_plat_data *);
|
|
int (*power_on_end)(struct analogix_dp_plat_data *);
|
|
int (*power_off)(struct analogix_dp_plat_data *);
|
|
int (*attach)(struct analogix_dp_plat_data *, struct drm_bridge *,
|
|
struct drm_connector *);
|
|
int (*get_modes)(struct analogix_dp_plat_data *,
|
|
struct drm_connector *);
|
|
};
|
|
|
|
int analogix_dp_resume(struct analogix_dp_device *dp);
|
|
int analogix_dp_suspend(struct analogix_dp_device *dp);
|
|
|
|
struct analogix_dp_device *
|
|
analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data);
|
|
int analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm_dev);
|
|
void analogix_dp_unbind(struct analogix_dp_device *dp);
|
|
void analogix_dp_remove(struct analogix_dp_device *dp);
|
|
|
|
int analogix_dp_start_crc(struct drm_connector *connector);
|
|
int analogix_dp_stop_crc(struct drm_connector *connector);
|
|
|
|
#endif /* _ANALOGIX_DP_H_ */
|