drm/rockchip: backlight: fix null pointer error

drm backlight maybe not enabled, the private->backlight
can be null pointer.

[    1.842225] PC is at rockchip_drm_backlight_update+0x14/0xd0
[    1.842733] LR is at rockchip_atomic_commit_complete+0x34/0x70
[    2.012457] [<ffffff800849cb70>] rockchip_drm_backlight_update+0x14/0xd0
[    2.013057] [<ffffff800849f5c8>] rockchip_atomic_commit_complete+0x34/0x70
[    2.013666] [<ffffff800849f680>] rockchip_drm_atomic_commit+0x7c/0x9c
[    2.014244] [<ffffff800848c510>] drm_atomic_commit+0x64/0x70
[    2.014747] [<ffffff800849ed64>] show_loader_logo+0x83c/0x944
[    2.015260] [<ffffff800849f1f4>] rockchip_drm_bind+0x388/0x418
[    2.015783] [<ffffff800850dbf4>] try_to_bring_up_master.part.3+0xac/0x114
[    2.016390] [<ffffff800850dd24>] component_master_add_with_match+0xc8/0x124
[    2.017010] [<ffffff800849e008>] rockchip_drm_platform_probe+0x208/0x238
[    2.017609] [<ffffff8008514898>] platform_drv_probe+0x58/0xa4
[    2.018123] [<ffffff8008512b38>] driver_probe_device+0x118/0x2ac
[    2.018656] [<ffffff8008512e18>] __device_attach_driver+0x88/0x98
[    2.019200] [<ffffff8008510f40>] bus_for_each_drv+0x7c/0xac
[    2.019702] [<ffffff800851296c>] __device_attach+0xa4/0x124
[    2.020204] [<ffffff8008512f84>] device_initial_probe+0x10/0x18
[    2.020737] [<ffffff8008511fc4>] bus_probe_device+0x2c/0x8c
[    2.021238] [<ffffff8008512440>] deferred_probe_work_func+0x74/0xa0
[    2.021795] [<ffffff80080b715c>] process_one_work+0x218/0x3e0
[    2.022307] [<ffffff80080b7b5c>] worker_thread+0x2e8/0x404
[    2.022797] [<ffffff80080bc4a0>] kthread+0xf8/0x100
[    2.023235] [<ffffff8008082840>] ret_from_fork+0x10/0x50

Change-Id: Ib77e871402dfcb1276befa274fc3cf43b017d879
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
This commit is contained in:
Mark Yao
2017-07-24 09:47:19 +08:00
committed by Huang, Tao
parent 874cecd9af
commit d26cbbbdb0

View File

@@ -204,15 +204,17 @@ void rockchip_drm_backlight_update(struct drm_device *drm)
{
struct rockchip_drm_private *private = drm->dev_private;
struct rockchip_drm_backlight *bl = private->backlight;
struct drm_connector *connector = bl->connector;
struct sub_backlight *sub = bl->sub;
struct drm_connector *connector;
struct sub_backlight *sub;
struct rockchip_crtc_state *s;
struct drm_crtc *crtc;
bool backlight_changed = false;
if (!connector)
if (!bl || !bl->connector)
return;
sub = bl->sub;
connector = bl->connector;
crtc = connector->state->crtc;
if (!crtc) {
if (sub) {