mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
drm: bridge: dw-hdmi: fixup kernel crash when reboot with hdmi connected
when other devices bind failed,drm will unbind and re-bind all devices. if don't cancel the delayed work but flush and destroy workqueue directly, kernel point is likely to become NULL. Change-Id: Ib48704186ee298cbd4daac1cdbbac5fb3906b6bb Signed-off-by: algea.cao <algea.cao@rock-chips.com>
This commit is contained in:
@@ -2828,6 +2828,13 @@ void dw_hdmi_unbind(struct device *dev, struct device *master, void *data)
|
||||
{
|
||||
struct dw_hdmi *hdmi = dev_get_drvdata(dev);
|
||||
|
||||
if (hdmi->irq)
|
||||
disable_irq(hdmi->irq);
|
||||
|
||||
cancel_delayed_work(&hdmi->work);
|
||||
flush_workqueue(hdmi->workqueue);
|
||||
destroy_workqueue(hdmi->workqueue);
|
||||
|
||||
if (hdmi->audio && !IS_ERR(hdmi->audio))
|
||||
platform_device_unregister(hdmi->audio);
|
||||
|
||||
@@ -2847,9 +2854,6 @@ void dw_hdmi_unbind(struct device *dev, struct device *master, void *data)
|
||||
i2c_del_adapter(&hdmi->i2c->adap);
|
||||
else
|
||||
i2c_put_adapter(hdmi->ddc);
|
||||
|
||||
flush_workqueue(hdmi->workqueue);
|
||||
destroy_workqueue(hdmi->workqueue);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dw_hdmi_unbind);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user