From mboxrd@z Thu Jan 1 00:00:00 1970 From: YT Shen Subject: [PATCH v6 06/10] drm/mediatek: add dsi interrupt control Date: Thu, 4 Aug 2016 19:07:20 +0800 Message-ID: <1470308844-20895-7-git-send-email-yt.shen@mediatek.com> References: <1470308844-20895-1-git-send-email-yt.shen@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1470308844-20895-1-git-send-email-yt.shen@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, Philipp Zabel Cc: Mark Rutland , Russell King , Mao Huang , yingjoe.chen@mediatek.com, devicetree@vger.kernel.org, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , shaoming chen , linux-arm-kernel@lists.infradead.org, srv_heupstream@mediatek.com, emil.l.velikov@gmail.com, linux-kernel@vger.kernel.org, Sascha Hauer , Kumar Gala List-Id: linux-mediatek@lists.infradead.org RnJvbTogc2hhb21pbmcgY2hlbiA8c2hhb21pbmcuY2hlbkBtZWRpYXRlay5jb20+CgphZGQgZHNp IGludGVycnVwdCBjb250cm9sCgpTaWduZWQtb2ZmLWJ5OiBzaGFvbWluZyBjaGVuIDxzaGFvbWlu Zy5jaGVuQG1lZGlhdGVrLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rz aS5jIHwgICA3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBj aGFuZ2VkLCA3NiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMKaW5k ZXggYTljZjVhMS4uZWVhNjE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCkBAIC0x OCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgogI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2ly cS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0u aD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgpAQCAtMjksNiArMzAsMTcgQEAKIAogI2Rl ZmluZSBEU0lfU1RBUlQJCTB4MDAKIAorI2RlZmluZSBEU0lfSU5URU4JCTB4MDgKKworI2RlZmlu ZSBEU0lfSU5UU1RBCQkweDBjCisjZGVmaW5lIExQUlhfUkRfUkRZX0lOVF9GTEFHCQlCSVQoMCkK KyNkZWZpbmUgQ01EX0RPTkVfSU5UX0ZMQUcJCUJJVCgxKQorI2RlZmluZSBURV9SRFlfSU5UX0ZM QUcJCQlCSVQoMikKKyNkZWZpbmUgVk1fRE9ORV9JTlRfRkxBRwkJQklUKDMpCisjZGVmaW5lIEVY VF9URV9SRFlfSU5UX0ZMQUcJCUJJVCg0KQorI2RlZmluZSBEU0lfSU5UX0FMTF9CSVRTCQkweDFm CisjZGVmaW5lIERTSV9CVVNZCQkJQklUKDMxKQorCiAjZGVmaW5lIERTSV9DT05fQ1RSTAkJMHgx MAogI2RlZmluZSBEU0lfUkVTRVQJCQlCSVQoMCkKICNkZWZpbmUgRFNJX0VOCQkJCUJJVCgxKQpA QCAtNzEsNiArODMsOSBAQAogCiAjZGVmaW5lIERTSV9IU1RYX0NLTF9XQwkJMHg2NAogCisjZGVm aW5lIERTSV9SQUNLCQkweDg0CisjZGVmaW5lIFJBQ0sJCQkJQklUKDApCisKICNkZWZpbmUgRFNJ X1BIWV9MQ0NPTgkJMHgxMDQKICNkZWZpbmUgTENfSFNfVFhfRU4JCQlCSVQoMCkKICNkZWZpbmUg TENfVUxQTV9FTgkJCUJJVCgxKQpAQCAtMTMxLDggKzE0NiwxMSBAQCBzdHJ1Y3QgbXRrX2RzaSB7 CiAJc3RydWN0IHZpZGVvbW9kZSB2bTsKIAlpbnQgcmVmY291bnQ7CiAJYm9vbCBlbmFibGVkOwor CWludCBpcnFfZGF0YTsKIH07CiAKK3N0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCBfZHNpX2lycV93 YWl0X3F1ZXVlOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHNpICplbmNvZGVyX3RvX2Rz aShzdHJ1Y3QgZHJtX2VuY29kZXIgKmUpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihlLCBzdHJ1 Y3QgbXRrX2RzaSwgZW5jb2Rlcik7CkBAIC00MzcsNiArNDU1LDQzIEBAIHN0YXRpYyB2b2lkIG10 a19kc2lfc3RhcnQoc3RydWN0IG10a19kc2kgKmRzaSkKIAl3cml0ZWwoMSwgZHNpLT5yZWdzICsg RFNJX1NUQVJUKTsKIH0KIAorc3RhdGljIHZvaWQgbXRrX2RzaV9zZXRfaW50ZXJydXB0X2VuYWJs ZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiBpbnRlbiA9IERTSV9JTlRfQUxMX0JJVFM7 CisKKwlpZiAoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFTykKKwkJaW50ZW4g Jj0gfihURV9SRFlfSU5UX0ZMQUcgfCBFWFRfVEVfUkRZX0lOVF9GTEFHKTsKKworCXdyaXRlbChp bnRlbiwgZHNpLT5yZWdzICsgRFNJX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9p cnFfd2FrZXVwKHN0cnVjdCBtdGtfZHNpICpkc2ksIHUzMiBpcnFfYml0KQoreworCWRzaS0+aXJx X2RhdGEgfD0gaXJxX2JpdDsKK30KKworc3RhdGljIGlycXJldHVybl90IG10a19kc2lfaXJxKGlu dCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZGV2X2lkOwor CXUzMiBzdGF0dXMsIHRtcDsKKwl1MzIgZmxhZyA9IExQUlhfUkRfUkRZX0lOVF9GTEFHIHwgQ01E X0RPTkVfSU5UX0ZMQUcgfCBWTV9ET05FX0lOVF9GTEFHOworCisJc3RhdHVzID0gcmVhZGwoZHNp LT5yZWdzICsgRFNJX0lOVFNUQSk7CisKKwlpZiAoc3RhdHVzICYgZmxhZykgeworCQlkbyB7CisJ CQltdGtfZHNpX21hc2soZHNpLCBEU0lfUkFDSywgUkFDSywgUkFDSyk7CisJCQl0bXAgPSByZWFk bChkc2ktPnJlZ3MgKyBEU0lfSU5UU1RBKTsKKwkJfSB3aGlsZSAodG1wICYgRFNJX0JVU1kpOwor CisJCW10a19kc2lfbWFzayhkc2ksIERTSV9JTlRTVEEsIHN0YXR1cyAmIGZsYWcsIDApOworCQlt dGtfZHNpX2lycV93YWtldXAoZHNpLCBzdGF0dXMgJiBmbGFnKTsKKwkJd2FrZV91cF9pbnRlcnJ1 cHRpYmxlKCZfZHNpX2lycV93YWl0X3F1ZXVlKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 Cit9CisKIHN0YXRpYyB2b2lkIG10a19kc2lfcG93ZXJvZmYoc3RydWN0IG10a19kc2kgKmRzaSkK IHsKIAlpZiAoV0FSTl9PTihkc2ktPnJlZmNvdW50ID09IDApKQpAQCAtNDg1LDYgKzU0MCw3IEBA IHN0YXRpYyB2b2lkIG10a19vdXRwdXRfZHNpX2VuYWJsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQog CiAJbXRrX2RzaV9wc19jb250cm9sX3ZhY3QoZHNpKTsKIAltdGtfZHNpX2NvbmZpZ192ZG9fdGlt aW5nKGRzaSk7CisJbXRrX2RzaV9zZXRfaW50ZXJydXB0X2VuYWJsZShkc2kpOwogCiAJbXRrX2Rz aV9zZXRfbW9kZShkc2kpOwogCW10a19kc2lfY2xrX2hzX21vZGUoZHNpLCAxKTsKQEAgLTgwNCw2 ICs4NjAsNyBAQCBzdGF0aWMgaW50IG10a19kc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqcmVtb3RlX25vZGUsICplbmRwb2ludDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7 CisJaW50IGlycV9udW07CiAJaW50IGNvbXBfaWQ7CiAJaW50IHJldDsKIApAQCAtODgwLDggKzkz NywyNyBAQCBzdGF0aWMgaW50IG10a19kc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlpcnFfbnVtID0gcGxhdGZvcm1fZ2V0X2lycShw ZGV2LCAwKTsKKwlpZiAoaXJxX251bSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFp bGVkIHRvIHJlcXVlc3QgZHNpIGlycSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRVBST0JFX0RF RkVSOworCX0KKworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGlycV9udW0sIElSUV9UWVBFX0xFVkVM X0xPVyk7CisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnFfbnVtLCBtdGtf ZHNpX2lycSwKKwkJCSAgICAgICBJUlFGX1RSSUdHRVJfTE9XLCBkZXZfbmFtZSgmcGRldi0+ZGV2 KSwgZHNpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBy ZXF1ZXN0IG1lZGlhdGVrIGRzaSBpcnFcbiIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9 CisKKwlkc2ktPmlycV9kYXRhID0gMDsKKwlkZXZfaW5mbyhkZXYsICJkc2kgaXJxIG51bSBpcyAw eCV4XG4iLCBpcnFfbnVtKTsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzaSk7CiAK Kwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZfZHNpX2lycV93YWl0X3F1ZXVlKTsKKwogCXJldHVybiBj b21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZtdGtfZHNpX2NvbXBvbmVudF9vcHMpOwogfQogCi0t IAoxLjcuOS41CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: yt.shen@mediatek.com (YT Shen) Date: Thu, 4 Aug 2016 19:07:20 +0800 Subject: [PATCH v6 06/10] drm/mediatek: add dsi interrupt control In-Reply-To: <1470308844-20895-1-git-send-email-yt.shen@mediatek.com> References: <1470308844-20895-1-git-send-email-yt.shen@mediatek.com> Message-ID: <1470308844-20895-7-git-send-email-yt.shen@mediatek.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org From: shaoming chen add dsi interrupt control Signed-off-by: shaoming chen --- drivers/gpu/drm/mediatek/mtk_dsi.c | 76 ++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index a9cf5a1..eea6192 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -29,6 +30,17 @@ #define DSI_START 0x00 +#define DSI_INTEN 0x08 + +#define DSI_INTSTA 0x0c +#define LPRX_RD_RDY_INT_FLAG BIT(0) +#define CMD_DONE_INT_FLAG BIT(1) +#define TE_RDY_INT_FLAG BIT(2) +#define VM_DONE_INT_FLAG BIT(3) +#define EXT_TE_RDY_INT_FLAG BIT(4) +#define DSI_INT_ALL_BITS 0x1f +#define DSI_BUSY BIT(31) + #define DSI_CON_CTRL 0x10 #define DSI_RESET BIT(0) #define DSI_EN BIT(1) @@ -71,6 +83,9 @@ #define DSI_HSTX_CKL_WC 0x64 +#define DSI_RACK 0x84 +#define RACK BIT(0) + #define DSI_PHY_LCCON 0x104 #define LC_HS_TX_EN BIT(0) #define LC_ULPM_EN BIT(1) @@ -131,8 +146,11 @@ struct mtk_dsi { struct videomode vm; int refcount; bool enabled; + int irq_data; }; +static wait_queue_head_t _dsi_irq_wait_queue; + static inline struct mtk_dsi *encoder_to_dsi(struct drm_encoder *e) { return container_of(e, struct mtk_dsi, encoder); @@ -437,6 +455,43 @@ static void mtk_dsi_start(struct mtk_dsi *dsi) writel(1, dsi->regs + DSI_START); } +static void mtk_dsi_set_interrupt_enable(struct mtk_dsi *dsi) +{ + u32 inten = DSI_INT_ALL_BITS; + + if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) + inten &= ~(TE_RDY_INT_FLAG | EXT_TE_RDY_INT_FLAG); + + writel(inten, dsi->regs + DSI_INTEN); +} + +static void mtk_dsi_irq_wakeup(struct mtk_dsi *dsi, u32 irq_bit) +{ + dsi->irq_data |= irq_bit; +} + +static irqreturn_t mtk_dsi_irq(int irq, void *dev_id) +{ + struct mtk_dsi *dsi = dev_id; + u32 status, tmp; + u32 flag = LPRX_RD_RDY_INT_FLAG | CMD_DONE_INT_FLAG | VM_DONE_INT_FLAG; + + status = readl(dsi->regs + DSI_INTSTA); + + if (status & flag) { + do { + mtk_dsi_mask(dsi, DSI_RACK, RACK, RACK); + tmp = readl(dsi->regs + DSI_INTSTA); + } while (tmp & DSI_BUSY); + + mtk_dsi_mask(dsi, DSI_INTSTA, status & flag, 0); + mtk_dsi_irq_wakeup(dsi, status & flag); + wake_up_interruptible(&_dsi_irq_wait_queue); + } + + return IRQ_HANDLED; +} + static void mtk_dsi_poweroff(struct mtk_dsi *dsi) { if (WARN_ON(dsi->refcount == 0)) @@ -485,6 +540,7 @@ static void mtk_output_dsi_enable(struct mtk_dsi *dsi) mtk_dsi_ps_control_vact(dsi); mtk_dsi_config_vdo_timing(dsi); + mtk_dsi_set_interrupt_enable(dsi); mtk_dsi_set_mode(dsi); mtk_dsi_clk_hs_mode(dsi, 1); @@ -804,6 +860,7 @@ static int mtk_dsi_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct device_node *remote_node, *endpoint; struct resource *regs; + int irq_num; int comp_id; int ret; @@ -880,8 +937,27 @@ static int mtk_dsi_probe(struct platform_device *pdev) return ret; } + irq_num = platform_get_irq(pdev, 0); + if (irq_num < 0) { + dev_err(&pdev->dev, "failed to request dsi irq resource\n"); + return -EPROBE_DEFER; + } + + irq_set_status_flags(irq_num, IRQ_TYPE_LEVEL_LOW); + ret = devm_request_irq(&pdev->dev, irq_num, mtk_dsi_irq, + IRQF_TRIGGER_LOW, dev_name(&pdev->dev), dsi); + if (ret) { + dev_err(&pdev->dev, "failed to request mediatek dsi irq\n"); + return -EPROBE_DEFER; + } + + dsi->irq_data = 0; + dev_info(dev, "dsi irq num is 0x%x\n", irq_num); + platform_set_drvdata(pdev, dsi); + init_waitqueue_head(&_dsi_irq_wait_queue); + return component_add(&pdev->dev, &mtk_dsi_component_ops); } -- 1.7.9.5 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933553AbcHDLQh (ORCPT ); Thu, 4 Aug 2016 07:16:37 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:38950 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1758039AbcHDLQd (ORCPT ); Thu, 4 Aug 2016 07:16:33 -0400 From: YT Shen To: , Philipp Zabel CC: Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , Russell King , David Airlie , Matthias Brugger , YT Shen , CK Hu , Mao Huang , Bibby Hsieh , , , , , , Sascha Hauer , , , , shaoming chen Subject: [PATCH v6 06/10] drm/mediatek: add dsi interrupt control Date: Thu, 4 Aug 2016 19:07:20 +0800 Message-ID: <1470308844-20895-7-git-send-email-yt.shen@mediatek.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1470308844-20895-1-git-send-email-yt.shen@mediatek.com> References: <1470308844-20895-1-git-send-email-yt.shen@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: shaoming chen add dsi interrupt control Signed-off-by: shaoming chen --- drivers/gpu/drm/mediatek/mtk_dsi.c | 76 ++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index a9cf5a1..eea6192 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -29,6 +30,17 @@ #define DSI_START 0x00 +#define DSI_INTEN 0x08 + +#define DSI_INTSTA 0x0c +#define LPRX_RD_RDY_INT_FLAG BIT(0) +#define CMD_DONE_INT_FLAG BIT(1) +#define TE_RDY_INT_FLAG BIT(2) +#define VM_DONE_INT_FLAG BIT(3) +#define EXT_TE_RDY_INT_FLAG BIT(4) +#define DSI_INT_ALL_BITS 0x1f +#define DSI_BUSY BIT(31) + #define DSI_CON_CTRL 0x10 #define DSI_RESET BIT(0) #define DSI_EN BIT(1) @@ -71,6 +83,9 @@ #define DSI_HSTX_CKL_WC 0x64 +#define DSI_RACK 0x84 +#define RACK BIT(0) + #define DSI_PHY_LCCON 0x104 #define LC_HS_TX_EN BIT(0) #define LC_ULPM_EN BIT(1) @@ -131,8 +146,11 @@ struct mtk_dsi { struct videomode vm; int refcount; bool enabled; + int irq_data; }; +static wait_queue_head_t _dsi_irq_wait_queue; + static inline struct mtk_dsi *encoder_to_dsi(struct drm_encoder *e) { return container_of(e, struct mtk_dsi, encoder); @@ -437,6 +455,43 @@ static void mtk_dsi_start(struct mtk_dsi *dsi) writel(1, dsi->regs + DSI_START); } +static void mtk_dsi_set_interrupt_enable(struct mtk_dsi *dsi) +{ + u32 inten = DSI_INT_ALL_BITS; + + if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) + inten &= ~(TE_RDY_INT_FLAG | EXT_TE_RDY_INT_FLAG); + + writel(inten, dsi->regs + DSI_INTEN); +} + +static void mtk_dsi_irq_wakeup(struct mtk_dsi *dsi, u32 irq_bit) +{ + dsi->irq_data |= irq_bit; +} + +static irqreturn_t mtk_dsi_irq(int irq, void *dev_id) +{ + struct mtk_dsi *dsi = dev_id; + u32 status, tmp; + u32 flag = LPRX_RD_RDY_INT_FLAG | CMD_DONE_INT_FLAG | VM_DONE_INT_FLAG; + + status = readl(dsi->regs + DSI_INTSTA); + + if (status & flag) { + do { + mtk_dsi_mask(dsi, DSI_RACK, RACK, RACK); + tmp = readl(dsi->regs + DSI_INTSTA); + } while (tmp & DSI_BUSY); + + mtk_dsi_mask(dsi, DSI_INTSTA, status & flag, 0); + mtk_dsi_irq_wakeup(dsi, status & flag); + wake_up_interruptible(&_dsi_irq_wait_queue); + } + + return IRQ_HANDLED; +} + static void mtk_dsi_poweroff(struct mtk_dsi *dsi) { if (WARN_ON(dsi->refcount == 0)) @@ -485,6 +540,7 @@ static void mtk_output_dsi_enable(struct mtk_dsi *dsi) mtk_dsi_ps_control_vact(dsi); mtk_dsi_config_vdo_timing(dsi); + mtk_dsi_set_interrupt_enable(dsi); mtk_dsi_set_mode(dsi); mtk_dsi_clk_hs_mode(dsi, 1); @@ -804,6 +860,7 @@ static int mtk_dsi_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct device_node *remote_node, *endpoint; struct resource *regs; + int irq_num; int comp_id; int ret; @@ -880,8 +937,27 @@ static int mtk_dsi_probe(struct platform_device *pdev) return ret; } + irq_num = platform_get_irq(pdev, 0); + if (irq_num < 0) { + dev_err(&pdev->dev, "failed to request dsi irq resource\n"); + return -EPROBE_DEFER; + } + + irq_set_status_flags(irq_num, IRQ_TYPE_LEVEL_LOW); + ret = devm_request_irq(&pdev->dev, irq_num, mtk_dsi_irq, + IRQF_TRIGGER_LOW, dev_name(&pdev->dev), dsi); + if (ret) { + dev_err(&pdev->dev, "failed to request mediatek dsi irq\n"); + return -EPROBE_DEFER; + } + + dsi->irq_data = 0; + dev_info(dev, "dsi irq num is 0x%x\n", irq_num); + platform_set_drvdata(pdev, dsi); + init_waitqueue_head(&_dsi_irq_wait_queue); + return component_add(&pdev->dev, &mtk_dsi_component_ops); } -- 1.7.9.5