From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751817AbdJSDta (ORCPT ); Wed, 18 Oct 2017 23:49:30 -0400 Received: from regular1.263xmail.com ([211.150.99.130]:51427 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751264AbdJSDt1 (ORCPT ); Wed, 18 Oct 2017 23:49:27 -0400 X-263anti-spam: KSV:0; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ABS-CHECKED: 4 X-RL-SENDER: jeffy.chen@rock-chips.com X-FST-TO: linux-kernel@vger.kernel.org X-SENDER-IP: 103.29.142.67 X-LOGIN-NAME: jeffy.chen@rock-chips.com X-UNIQUE-TAG: <42fd8e91c27564e1726e96b1309f6081> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 From: Jeffy Chen To: linux-kernel@vger.kernel.org Cc: briannorris@chromium.org, seanpaul@chromium.org, dianders@chromium.org, heiko@sntech.de, tfiga@chromium.org, Jeffy Chen , Mark Yao , dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, David Airlie , linux-arm-kernel@lists.infradead.org Subject: [PATCH v6 07/10] drm/rockchip: inno_hdmi: Fix error handling path Date: Thu, 19 Oct 2017 11:48:09 +0800 Message-Id: <20171019034812.13768-8-jeffy.chen@rock-chips.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171019034812.13768-1-jeffy.chen@rock-chips.com> References: <20171019034812.13768-1-jeffy.chen@rock-chips.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add missing error handling in bind(). Fixes: 412d4ae6b7a5 ("drm/rockchip: hdmi: add Innosilicon HDMI support") Signed-off-by: Jeffy Chen --- Changes in v6: None Changes in v5: Call the destroy hook in the error handling path like in unbind(). Update cleanup order in unbind(). drivers/gpu/drm/rockchip/inno_hdmi.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c index ee584d87111f..9a96ff6b022b 100644 --- a/drivers/gpu/drm/rockchip/inno_hdmi.c +++ b/drivers/gpu/drm/rockchip/inno_hdmi.c @@ -851,8 +851,10 @@ static int inno_hdmi_bind(struct device *dev, struct device *master, } irq = platform_get_irq(pdev, 0); - if (irq < 0) - return irq; + if (irq < 0) { + ret = irq; + goto err_disable_clk; + } inno_hdmi_reset(hdmi); @@ -860,7 +862,7 @@ static int inno_hdmi_bind(struct device *dev, struct device *master, if (IS_ERR(hdmi->ddc)) { ret = PTR_ERR(hdmi->ddc); hdmi->ddc = NULL; - return ret; + goto err_disable_clk; } /* @@ -874,7 +876,7 @@ static int inno_hdmi_bind(struct device *dev, struct device *master, ret = inno_hdmi_register(drm, hdmi); if (ret) - return ret; + goto err_put_adapter; dev_set_drvdata(dev, hdmi); @@ -884,7 +886,17 @@ static int inno_hdmi_bind(struct device *dev, struct device *master, ret = devm_request_threaded_irq(dev, irq, inno_hdmi_hardirq, inno_hdmi_irq, IRQF_SHARED, dev_name(dev), hdmi); + if (ret < 0) + goto err_cleanup_hdmi; + return 0; +err_cleanup_hdmi: + hdmi->connector.funcs->destroy(&hdmi->connector); + hdmi->encoder.funcs->destroy(&hdmi->encoder); +err_put_adapter: + i2c_put_adapter(hdmi->ddc); +err_disable_clk: + clk_disable_unprepare(hdmi->pclk); return ret; } @@ -896,8 +908,8 @@ static void inno_hdmi_unbind(struct device *dev, struct device *master, hdmi->connector.funcs->destroy(&hdmi->connector); hdmi->encoder.funcs->destroy(&hdmi->encoder); - clk_disable_unprepare(hdmi->pclk); i2c_put_adapter(hdmi->ddc); + clk_disable_unprepare(hdmi->pclk); } static const struct component_ops inno_hdmi_ops = { -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeffy Chen Subject: [PATCH v6 07/10] drm/rockchip: inno_hdmi: Fix error handling path Date: Thu, 19 Oct 2017 11:48:09 +0800 Message-ID: <20171019034812.13768-8-jeffy.chen@rock-chips.com> References: <20171019034812.13768-1-jeffy.chen@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171019034812.13768-1-jeffy.chen@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org Cc: briannorris@chromium.org, Jeffy Chen , dianders@chromium.org, dri-devel@lists.freedesktop.org, tfiga@chromium.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIG1pc3NpbmcgZXJyb3IgaGFuZGxpbmcgaW4gYmluZCgpLgoKRml4ZXM6IDQxMmQ0YWU2Yjdh NSAoImRybS9yb2NrY2hpcDogaGRtaTogYWRkIElubm9zaWxpY29uIEhETUkgc3VwcG9ydCIpClNp Z25lZC1vZmYtYnk6IEplZmZ5IENoZW4gPGplZmZ5LmNoZW5Acm9jay1jaGlwcy5jb20+Ci0tLQoK Q2hhbmdlcyBpbiB2NjogTm9uZQpDaGFuZ2VzIGluIHY1OgpDYWxsIHRoZSBkZXN0cm95IGhvb2sg aW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggbGlrZSBpbiB1bmJpbmQoKS4KVXBkYXRlIGNsZWFu dXAgb3JkZXIgaW4gdW5iaW5kKCkuCgogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRt aS5jIHwgMjIgKysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE3IGluc2Vy dGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL2lubm9faGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5j CmluZGV4IGVlNTg0ZDg3MTExZi4uOWE5NmZmNmIwMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvaW5ub19oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2lubm9faGRtaS5jCkBAIC04NTEsOCArODUxLDEwIEBAIHN0YXRpYyBpbnQgaW5ub19oZG1pX2Jp bmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCiAJfQogCiAJaXJx ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoaXJxIDwgMCkKLQkJcmV0dXJuIGly cTsKKwlpZiAoaXJxIDwgMCkgeworCQlyZXQgPSBpcnE7CisJCWdvdG8gZXJyX2Rpc2FibGVfY2xr OworCX0KIAogCWlubm9faGRtaV9yZXNldChoZG1pKTsKIApAQCAtODYwLDcgKzg2Miw3IEBAIHN0 YXRpYyBpbnQgaW5ub19oZG1pX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsCiAJaWYgKElTX0VSUihoZG1pLT5kZGMpKSB7CiAJCXJldCA9IFBUUl9FUlIoaGRt aS0+ZGRjKTsKIAkJaGRtaS0+ZGRjID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJf ZGlzYWJsZV9jbGs7CiAJfQogCiAJLyoKQEAgLTg3NCw3ICs4NzYsNyBAQCBzdGF0aWMgaW50IGlu bm9faGRtaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAog CiAJcmV0ID0gaW5ub19oZG1pX3JlZ2lzdGVyKGRybSwgaGRtaSk7CiAJaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKKwkJZ290byBlcnJfcHV0X2FkYXB0ZXI7CiAKIAlkZXZfc2V0X2RydmRhdGEoZGV2 LCBoZG1pKTsKIApAQCAtODg0LDcgKzg4NiwxNyBAQCBzdGF0aWMgaW50IGlubm9faGRtaV9iaW5k KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAogCXJldCA9IGRldm1f cmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBpcnEsIGlubm9faGRtaV9oYXJkaXJxLAogCQkJCQlp bm5vX2hkbWlfaXJxLCBJUlFGX1NIQVJFRCwKIAkJCQkJZGV2X25hbWUoZGV2KSwgaGRtaSk7CisJ aWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2NsZWFudXBfaGRtaTsKIAorCXJldHVybiAwOworZXJy X2NsZWFudXBfaGRtaToKKwloZG1pLT5jb25uZWN0b3IuZnVuY3MtPmRlc3Ryb3koJmhkbWktPmNv bm5lY3Rvcik7CisJaGRtaS0+ZW5jb2Rlci5mdW5jcy0+ZGVzdHJveSgmaGRtaS0+ZW5jb2Rlcik7 CitlcnJfcHV0X2FkYXB0ZXI6CisJaTJjX3B1dF9hZGFwdGVyKGhkbWktPmRkYyk7CitlcnJfZGlz YWJsZV9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPnBjbGspOwogCXJldHVybiBy ZXQ7CiB9CiAKQEAgLTg5Niw4ICs5MDgsOCBAQCBzdGF0aWMgdm9pZCBpbm5vX2hkbWlfdW5iaW5k KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAogCWhkbWktPmNvbm5l Y3Rvci5mdW5jcy0+ZGVzdHJveSgmaGRtaS0+Y29ubmVjdG9yKTsKIAloZG1pLT5lbmNvZGVyLmZ1 bmNzLT5kZXN0cm95KCZoZG1pLT5lbmNvZGVyKTsKIAotCWNsa19kaXNhYmxlX3VucHJlcGFyZSho ZG1pLT5wY2xrKTsKIAlpMmNfcHV0X2FkYXB0ZXIoaGRtaS0+ZGRjKTsKKwljbGtfZGlzYWJsZV91 bnByZXBhcmUoaGRtaS0+cGNsayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50 X29wcyBpbm5vX2hkbWlfb3BzID0gewotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: jeffy.chen@rock-chips.com (Jeffy Chen) Date: Thu, 19 Oct 2017 11:48:09 +0800 Subject: [PATCH v6 07/10] drm/rockchip: inno_hdmi: Fix error handling path In-Reply-To: <20171019034812.13768-1-jeffy.chen@rock-chips.com> References: <20171019034812.13768-1-jeffy.chen@rock-chips.com> Message-ID: <20171019034812.13768-8-jeffy.chen@rock-chips.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Add missing error handling in bind(). Fixes: 412d4ae6b7a5 ("drm/rockchip: hdmi: add Innosilicon HDMI support") Signed-off-by: Jeffy Chen --- Changes in v6: None Changes in v5: Call the destroy hook in the error handling path like in unbind(). Update cleanup order in unbind(). drivers/gpu/drm/rockchip/inno_hdmi.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c index ee584d87111f..9a96ff6b022b 100644 --- a/drivers/gpu/drm/rockchip/inno_hdmi.c +++ b/drivers/gpu/drm/rockchip/inno_hdmi.c @@ -851,8 +851,10 @@ static int inno_hdmi_bind(struct device *dev, struct device *master, } irq = platform_get_irq(pdev, 0); - if (irq < 0) - return irq; + if (irq < 0) { + ret = irq; + goto err_disable_clk; + } inno_hdmi_reset(hdmi); @@ -860,7 +862,7 @@ static int inno_hdmi_bind(struct device *dev, struct device *master, if (IS_ERR(hdmi->ddc)) { ret = PTR_ERR(hdmi->ddc); hdmi->ddc = NULL; - return ret; + goto err_disable_clk; } /* @@ -874,7 +876,7 @@ static int inno_hdmi_bind(struct device *dev, struct device *master, ret = inno_hdmi_register(drm, hdmi); if (ret) - return ret; + goto err_put_adapter; dev_set_drvdata(dev, hdmi); @@ -884,7 +886,17 @@ static int inno_hdmi_bind(struct device *dev, struct device *master, ret = devm_request_threaded_irq(dev, irq, inno_hdmi_hardirq, inno_hdmi_irq, IRQF_SHARED, dev_name(dev), hdmi); + if (ret < 0) + goto err_cleanup_hdmi; + return 0; +err_cleanup_hdmi: + hdmi->connector.funcs->destroy(&hdmi->connector); + hdmi->encoder.funcs->destroy(&hdmi->encoder); +err_put_adapter: + i2c_put_adapter(hdmi->ddc); +err_disable_clk: + clk_disable_unprepare(hdmi->pclk); return ret; } @@ -896,8 +908,8 @@ static void inno_hdmi_unbind(struct device *dev, struct device *master, hdmi->connector.funcs->destroy(&hdmi->connector); hdmi->encoder.funcs->destroy(&hdmi->encoder); - clk_disable_unprepare(hdmi->pclk); i2c_put_adapter(hdmi->ddc); + clk_disable_unprepare(hdmi->pclk); } static const struct component_ops inno_hdmi_ops = { -- 2.11.0