[PATCH v4] drm/rockchip: Refactor the component match logic.
jeffy
jeffy.chen at rock-chips.com
Thu Mar 16 02:15:49 PDT 2017
Hi Heiko,
On 03/16/2017 04:20 PM, Heiko Stuebner wrote:
> Hi Jeffy,
>
> Am Donnerstag, 16. März 2017, 10:05:56 CET schrieb Jeffy Chen:
>> Currently we are adding all components from the dts, if one of their
>> drivers been disabled, we would not be able to bring up others.
>>
>> Refactor component match logic, follow exynos drm.
>>
>> Signed-off-by: Jeffy Chen <jeffy.chen at rock-chips.com>
>> Reviewed-by: Andrzej Hajda <a.hajda at samsung.com>
>
> [...]
>
>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index b360e62..51433da 100644
>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
>> @@ -356,34 +356,42 @@ static const struct dev_pm_ops rockchip_drm_pm_ops = {
>> rockchip_drm_sys_resume)
>> };
>>
>> -static int compare_of(struct device *dev, void *data)
>> -{
>> - struct device_node *np = data;
>> +#define MAX_ROCKCHIP_DRM_DRVS 16
>> +static struct platform_driver *rockchip_drm_drvs[MAX_ROCKCHIP_DRM_DRVS];
>> +static int rockchip_drm_drvs_cnt;
>>
>> - return dev->of_node == np;
>> +#define ROCKCHIP_DRM_DRV(drv, cond) { \
>> + if (IS_ENABLED(cond)) \
>> + rockchip_drm_drvs[rockchip_drm_drvs_cnt++] = &drv; \
>> }
>
> [...]
>
>> +static int __init rockchip_drm_init(void)
>> +{
>> + int ret;
>> +
>> + rockchip_drm_drvs_cnt = 0;
>> + ROCKCHIP_DRM_DRV(vop_platform_driver, CONFIG_DRM_ROCKCHIP);
>> + ROCKCHIP_DRM_DRV(rockchip_dp_driver, CONFIG_ROCKCHIP_ANALOGIX_DP);
>> + ROCKCHIP_DRM_DRV(cdn_dp_driver, CONFIG_ROCKCHIP_CDN_DP);
>> + ROCKCHIP_DRM_DRV(dw_hdmi_rockchip_pltfm_driver,
>> + CONFIG_ROCKCHIP_DW_HDMI);
>> + ROCKCHIP_DRM_DRV(dw_mipi_dsi_driver, CONFIG_ROCKCHIP_DW_MIPI_DSI);
>> + ROCKCHIP_DRM_DRV(inno_hdmi_driver, CONFIG_ROCKCHIP_INNO_HDMI);
>> +
>> + ret = platform_register_drivers(rockchip_drm_drvs,
>> + rockchip_drm_drvs_cnt);
>> + if (ret)
>> + return ret;
>
> With the following config snippet
>
> CONFIG_DRM_ROCKCHIP=m
> CONFIG_ROCKCHIP_ANALOGIX_DP=y
> # CONFIG_ROCKCHIP_CDN_DP is not set
> CONFIG_ROCKCHIP_DW_HDMI=y
> CONFIG_ROCKCHIP_DW_MIPI_DSI=y
> CONFIG_ROCKCHIP_INNO_HDMI=y
>
> I get these faults on arm32 (1 warning, 1 linker error):
>
> CC [M] drivers/gpu/drm/rockchip/rockchip_drm_drv.o
> CC [M] drivers/gpu/drm/rockchip/rockchip_drm_fb.o
> CC [M] drivers/gpu/drm/rockchip/rockchip_drm_gem.o
> CC [M] drivers/gpu/drm/rockchip/rockchip_drm_psr.o
> CC [M] drivers/gpu/drm/rockchip/rockchip_drm_vop.o
> CC [M] drivers/gpu/drm/rockchip/rockchip_vop_reg.o
> ../drivers/gpu/drm/rockchip/rockchip_vop_reg.c:407:31: warning: ‘vop_platform_driver’ defined but not used [-Wunused-variable]
> static struct platform_driver vop_platform_driver = {
> ^~~~~~~~~~~~~~~~~~~
> CC [M] drivers/gpu/drm/rockchip/rockchip_drm_fbdev.o
> CC [M] drivers/gpu/drm/rockchip/analogix_dp-rockchip.o
> CC [M] drivers/gpu/drm/rockchip/dw_hdmi-rockchip.o
> CC [M] drivers/gpu/drm/rockchip/dw-mipi-dsi.o
> CC [M] drivers/gpu/drm/rockchip/inno_hdmi.o
> LD [M] drivers/gpu/drm/rockchip/rockchipdrm.o
> Building modules, stage 2.
> MODPOST 352 modules
> ERROR: "vop_platform_driver" [drivers/gpu/drm/rockchip/rockchipdrm.ko] undefined!
>
>
>
>
>
oops, sorry again...thanx for testing it, i should be more
careful(porting it from my local 4.4 kernel).
More information about the Linux-rockchip
mailing list