Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp5215914ybi; Tue, 4 Jun 2019 03:14:24 -0700 (PDT) X-Google-Smtp-Source: APXvYqzGWaj4WRYu011k3LEuMWgMF/Q+ox6y1KxwfWnaOq5xvxJ3d/yi1+zUwfmpg/3jKadljRTR X-Received: by 2002:a63:eb0d:: with SMTP id t13mr34848008pgh.37.1559643264777; Tue, 04 Jun 2019 03:14:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559643264; cv=none; d=google.com; s=arc-20160816; b=g/x1UiBCjkKz6CSoNAldaLL/5d4ZeXpkEv9546D8ThO1bjnPGlsEwM1/ptbKw8XwXn s++fF8A3HwSydOiTqcPfJVbXJfhsJiAR9fnb10f941zA7hYIQkp8IhYJgpCVrSTlwCMA pB3gdVQsG2iT732XpnY2gCf6VgVgAOpoHwpHLsLoRk6pvtc154m0ELmIEmiyChpeEMEE Nrqoe3dmPtb1X6oaCkzu7e+zIHW3TE2BGMsuj+m98/j08jfuqPqkPnGQLj+07n6v9AIR pI55EyP0aBzjkb7hmE2A6kHi86/LQdXABeiH7fT+BQoZokaVVWd4nLoWFxJQZ6YKZoY4 oH7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=EM7xAHtN10RxZWgSfDukMDp2CkyeLsWTnVDDEww6sj4=; b=howj79VGBRAbk8KgQudsCfB1AuVOMSW5eIZT21vFTSRV+XoyKzbcS2z94pmzqFBkCW 3zj3999JUUvOwVGT/T7EbNe6V+0nY9g6BT6BpVMk2wGE0SzuXyQALtj1ajDzfD0Y46A6 5kg43wziVDUUMRy8B47YD+4YSavN30MLNIzsGsjlodhlFO1rQvSM4JFU2ay0ofRwXaZO IuvYjTRUcYtZXpou2L3ukKOfMoEcSGd87MTUsq1RV/WRUXJaGdHINLVFJea/Vxy76mnS YqRmGbk16Spyj0QtlW07MA+cBHdDsMLr7f7oONZEUjLYxrGepVl7zwuNsiQdf5SK6kHK izpA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b8si23484948ple.370.2019.06.04.03.14.07; Tue, 04 Jun 2019 03:14:24 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727415AbfFDKMd (ORCPT + 99 others); Tue, 4 Jun 2019 06:12:33 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:37102 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727369AbfFDKM2 (ORCPT ); Tue, 4 Jun 2019 06:12:28 -0400 X-UUID: b8ef724c09d84f16b3ca2b57b38e1c28-20190604 X-UUID: b8ef724c09d84f16b3ca2b57b38e1c28-20190604 Received: from mtkcas09.mediatek.inc [(172.21.101.178)] by mailgw02.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 1927676770; Tue, 04 Jun 2019 18:12:03 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Tue, 4 Jun 2019 18:12:02 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Tue, 4 Jun 2019 18:12:02 +0800 From: Stu Hsieh To: Mauro Carvalho Chehab , Rob Herring , CK Hu CC: Mark Rutland , Matthias Brugger , Stu Hsieh , , , , , , Subject: [PATCH v4 14/14] [media] mtk-mipicsi: add function to support SerDes for link number Date: Tue, 4 Jun 2019 18:11:55 +0800 Message-ID: <1559643115-15124-15-git-send-email-stu.hsieh@mediatek.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1559643115-15124-1-git-send-email-stu.hsieh@mediatek.com> References: <1559643115-15124-1-git-send-email-stu.hsieh@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch add function to support SerDes for link number. Mt2712 can serve at most four camera link for each mipicsi port. Therefore, driver need to know how many camera link in SerDes and set the mipicsi HW to serve. The value "link_reg" defined in dts, and use it to get the link status for SerDes. Signed-off-by: Stu Hsieh --- .../media/platform/mtk-mipicsi/mtk_mipicsi.c | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/mtk-mipicsi/mtk_mipicsi.c b/drivers/media/platform/mtk-mipicsi/mtk_mipicsi.c index 9b5983b39f2b..ab703e3469ca 100644 --- a/drivers/media/platform/mtk-mipicsi/mtk_mipicsi.c +++ b/drivers/media/platform/mtk-mipicsi/mtk_mipicsi.c @@ -143,6 +143,7 @@ struct mtk_mipicsi_subdev { struct v4l2_async_subdev asd; struct v4l2_subdev *subdev; unsigned int max_vc; + u32 link_reg; }; struct mtk_mipicsi_channel { @@ -257,12 +258,37 @@ static const struct file_operations mtk_mipicsi_debug_fops = { }; #endif /* CONFIG_DEBUG_FS */ +static int get_subdev_register(struct mtk_mipicsi_dev *mipicsi, + struct v4l2_dbg_register *reg) +{ + struct v4l2_subdev *sd = mipicsi->mipicsi_sd.subdev; + struct device *dev = &mipicsi->pdev->dev; + int ret = 0; + + reg->match.type = V4L2_CHIP_MATCH_SUBDEV; + reg->match.addr = 0; + ret = v4l2_subdev_call(sd, core, g_register, reg); + if (ret != 2) { + dev_err(dev, "mipicsi get des register 0x%llx fail, ret=%d\n", + reg->reg, ret); + return -EIO; + } + + dev_info(dev, "read DES [reg/val/ret] is [0x%llx/0x%llx/%d]\n", + reg->reg, reg->val, ret); + + return ret; +} + + static int get_subdev_link(struct mtk_mipicsi_dev *mipicsi, unsigned int *link, u8 *link_reg_val) { struct device *dev = &mipicsi->pdev->dev; struct mtk_mipicsi_subdev *sd = &mipicsi->mipicsi_sd; - + struct v4l2_dbg_register reg; + int ret = 0; + unsigned int index = 0; if (sd->max_vc == 1) { *link = 1; @@ -274,6 +300,24 @@ static int get_subdev_link(struct mtk_mipicsi_dev *mipicsi, dev_info(dev, "mtk mipicsi support %d channel\n", sd->max_vc); + memset(®, 0, sizeof(reg)); + /*get camera link number*/ + reg.reg = sd->link_reg; + ret = get_subdev_register(mipicsi, ®); + if (ret < 0) + return ret; + + *link = 0; + for (index = 0; index < sd->max_vc; index++) { + if ((reg.val & 0x01) == 0x01) { + *link += 1; + *link_reg_val |= (0x01 << index); + } + reg.val >>= 1; + } + + dev_info(dev, "%u camera linked to sub device\n", *link); + return 0; } @@ -1199,6 +1243,13 @@ static int mtk_mipicsi_node_parse(struct mtk_mipicsi_dev *mipicsi) sd->max_vc = 1; } + ret = of_property_read_u32(dev->of_node, "mediatek,serdes_link_reg", + &sd->link_reg); + if (ret != 0) { + dev_info(dev, "not set mediatek,serdes_link_reg, can't read subdev link number\n"); + sd->link_reg = 0x0; + } + /* get and parse seninf_mux_camsv */ camsv_num = of_count_phandle_with_args(dev->of_node, "mediatek,seninf_mux_camsv", NULL); -- 2.18.0