From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83EF9C35280 for ; Fri, 8 May 2020 03:29:29 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 48D3A2085B for ; Fri, 8 May 2020 03:29:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Ph0NcHAm"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="Fy3GJHb6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 48D3A2085B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=WgIs4nJqXYLQ5Agd1U5Z/eUq+FVc5pGJOWFzrQ6EGwk=; b=Ph0NcHAmann9Ha lercDtM3HH6qaesEEwb2TbOF4nDhz8PYzixcCbrMvghhzI30fsb8/wxeWoQ0TsPlOQ1YP5yKg+Vd3 hmBm4RYKyTV2d/5HMMN90l8EPr+lxhnDuvNClijofPV4/r53qFp89rDX8H2bzVEqBFO+fWrF7xDjr X3vUtCTIp1EagQMIUprNgRQ9bHipUaAlkvwfpFwZfFWByY0TzKgCcyg01ascWPTnqDxlcJRLNy9vH bQ4g9/dkvz7GG7dtw10oBJf29GNtop2FLBYtpRFFJMGuMzjGO/UEe1gnlqBGLGk1nciYtM/wNsUzx a/HKwjHGRl2TvR7mrLOg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWthP-00069o-B1; Fri, 08 May 2020 03:29:19 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWthL-00069O-UH; Fri, 08 May 2020 03:29:17 +0000 X-UUID: a9c32ce2699e42d2801649969ea19698-20200507 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=icQs5PDsZ+HS7pah9d3Y69qQhITqVAyFXAMdCV9xDH0=; b=Fy3GJHb69C4fIfgtV1teujNTRbSQ6qDkS6dj2f6310683k2lNzOCvKKpTeKG1SLje2X3a+N8Kme8dk72x0RocNh7n8W8brdlOYqIgo9X8ylSechJC6huEH1NjEYSIdLUMCIijKlh48Ym5dnyD6ePA3XY/LSDJdNpnm7yd9b/Xko=; X-UUID: a9c32ce2699e42d2801649969ea19698-20200507 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 1222480207; Thu, 07 May 2020 19:29:08 -0800 Received: from MTKMBS31N1.mediatek.inc (172.27.4.69) by MTKMBS62N2.mediatek.inc (172.29.193.42) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 7 May 2020 20:29:08 -0700 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 May 2020 11:29:07 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 8 May 2020 11:29:04 +0800 Message-ID: <1588908477.8804.201.camel@mhfsdcap03> Subject: Re: [V5, 2/2] media: i2c: dw9768: Add DW9768 VCM driver From: Dongchun Zhu To: Sakari Ailus Date: Fri, 8 May 2020 11:27:57 +0800 In-Reply-To: <20200507135959.GD9190@paasikivi.fi.intel.com> References: <20200502161727.30463-1-dongchun.zhu@mediatek.com> <20200502161727.30463-3-dongchun.zhu@mediatek.com> <20200506151352.GZ9190@paasikivi.fi.intel.com> <1588855524.8804.168.camel@mhfsdcap03> <20200507131220.GC9190@paasikivi.fi.intel.com> <20200507135959.GD9190@paasikivi.fi.intel.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: B9B8DF3FDB241D7AE7B00BB849706813FFC5DFCAF7C46C704BD9235CB8F51AE52000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200507_202915_992964_278AB406 X-CRM114-Status: GOOD ( 34.10 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Nicolas Boichat , Andy Shevchenko , srv_heupstream , linux-devicetree , Linus Walleij , Shengnan Wang =?UTF-8?Q?=28=E7=8E=8B=E5=9C=A3=E7=94=B7=29?= , Tomasz Figa , Bartosz Golaszewski , Sj Huang , Rob Herring , "moderated list:ARM/Mediatek SoC support" , dongchun.zhu@mediatek.com, Louis Kuo , Matthias Brugger , Cao Bing Bu , Mauro Carvalho Chehab , "list@263.net:IOMMU DRIVERS , Joerg Roedel , " , Linux Media Mailing List Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Hi Sakari, Thanks for the review. On Thu, 2020-05-07 at 17:00 +0300, Sakari Ailus wrote: > Hi Tomasz, > > On Thu, May 07, 2020 at 03:46:31PM +0200, Tomasz Figa wrote: > > Hi Sakari, Dongchun, > > > > On Thu, May 7, 2020 at 3:12 PM Sakari Ailus > > wrote: > > > > > > HI Dongchun, > > > > > > On Thu, May 07, 2020 at 08:45:24PM +0800, Dongchun Zhu wrote: > > > > Hi Sakari, > > > > > > > > Thanks for the review. > > > > > > > > On Wed, 2020-05-06 at 18:13 +0300, Sakari Ailus wrote: > > > > > Hi Dongchun, > > > > > > > > > > On Sun, May 03, 2020 at 12:17:27AM +0800, Dongchun Zhu wrote: > > > > > > Add a V4L2 sub-device driver for DW9768 voice coil motor, providing > > > > > > control to set the desired focus via IIC serial interface. > > > > > > > > > > > > Signed-off-by: Dongchun Zhu > > > > > > --- > > > > > > MAINTAINERS | 1 + > > > > > > drivers/media/i2c/Kconfig | 11 ++ > > > > > > drivers/media/i2c/Makefile | 1 + > > > > > > drivers/media/i2c/dw9768.c | 440 +++++++++++++++++++++++++++++++++++++++++++++ > > > > > > 4 files changed, 453 insertions(+) > > > > > > create mode 100644 drivers/media/i2c/dw9768.c > > > > > > > > > > > > diff --git a/MAINTAINERS b/MAINTAINERS > > > > > > index 8d72c41..c92dc99 100644 > > > > > > --- a/MAINTAINERS > > > > > > +++ b/MAINTAINERS > > > > > > @@ -5157,6 +5157,7 @@ L: linux-media@vger.kernel.org > > > > > > S: Maintained > > > > > > T: git git://linuxtv.org/media_tree.git > > > > > > F: Documentation/devicetree/bindings/media/i2c/dongwoon,dw9768.yaml > > > > > > +F: drivers/media/i2c/dw9768.c > > > > > > > > > > > > DONGWOON DW9807 LENS VOICE COIL DRIVER > > > > > > M: Sakari Ailus > > > > > > diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig > > > > > > index 125d596..6a3f9da 100644 > > > > > > --- a/drivers/media/i2c/Kconfig > > > > > > +++ b/drivers/media/i2c/Kconfig > > > > > > @@ -1040,6 +1040,17 @@ config VIDEO_DW9714 > > > > > > capability. This is designed for linear control of > > > > > > voice coil motors, controlled via I2C serial interface. > > > > > > > > > > > > +config VIDEO_DW9768 > > > > > > + tristate "DW9768 lens voice coil support" > > > > > > + depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER > > > > > > + depends on VIDEO_V4L2_SUBDEV_API > > > > > > > > > > Please check how this works in the media tree master branch now --- it's > > > > > largely select based. > > > > > > > > > > > > > The actuator driver uses some structures that require the > > > > VIDEO_V4L2_SUBDEV_API code, so here we add VIDEO_V4L2_SUBDEV_API > > > > dependency to avoid possible build error when it's not enabled. > > > > > > Please make sure this works with current media tree master. Right now it > > > does not. > > > > > > > Dongchun, as Sakari said, please make sure to base the patches on the > > master branch of the media tree. > > (https://git.linuxtv.org/media_tree.git/). The approach for Kconfig > > dependency selection there seems to have changed recently. > > > > > > > > > > > In general the patch seems fine to me, but please see the other comments > > > > > below, too. > > > > > > > > > > > + depends on PM > > > > > > + help > > > > > > + This is a driver for the DW9768 camera lens voice coil. > > > > > > + DW9768 is a 10 bit DAC with 100mA output current sink > > > > > > + capability. This is designed for linear control of > > > > > > + voice coil motors, controlled via I2C serial interface. > > > > > > + > > > > > > config VIDEO_DW9807_VCM > > > > > > tristate "DW9807 lens voice coil support" > > > > > > depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER > > > > > > diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile > > > > > > index 77bf7d0..4057476 100644 > > > > > > --- a/drivers/media/i2c/Makefile > > > > > > +++ b/drivers/media/i2c/Makefile > > > > > > @@ -24,6 +24,7 @@ obj-$(CONFIG_VIDEO_SAA6752HS) += saa6752hs.o > > > > > > obj-$(CONFIG_VIDEO_AD5820) += ad5820.o > > > > > > obj-$(CONFIG_VIDEO_AK7375) += ak7375.o > > > > > > obj-$(CONFIG_VIDEO_DW9714) += dw9714.o > > > > > > +obj-$(CONFIG_VIDEO_DW9768) += dw9768.o > > > > > > obj-$(CONFIG_VIDEO_DW9807_VCM) += dw9807-vcm.o > > > > > > obj-$(CONFIG_VIDEO_ADV7170) += adv7170.o > > > > > > obj-$(CONFIG_VIDEO_ADV7175) += adv7175.o > > > > > > diff --git a/drivers/media/i2c/dw9768.c b/drivers/media/i2c/dw9768.c > > > > > > new file mode 100644 > > > > > > index 0000000..dd68534 > > > > > > --- /dev/null > > > > > > +++ b/drivers/media/i2c/dw9768.c > > > > > > @@ -0,0 +1,440 @@ > > > > > > +// SPDX-License-Identifier: GPL-2.0 > > > > > > +// Copyright (c) 2020 MediaTek Inc. > > > > > > + > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > + > > > > > > +#define DW9768_NAME "dw9768" > > > > > > +#define DW9768_MAX_FOCUS_POS (1024 - 1) > > > > > > +/* > > > > > > + * This sets the minimum granularity for the focus positions. > > > > > > + * A value of 1 gives maximum accuracy for a desired focus position > > > > > > + */ > > > > > > +#define DW9768_FOCUS_STEPS 1 > > > > > > + > > > > > > +/* > > > > > > + * Ring control and Power control register > > > > > > + * Bit[1] RING_EN > > > > > > + * 0: Direct mode > > > > > > + * 1: AAC mode (ringing control mode) > > > > > > + * Bit[0] PD > > > > > > + * 0: Normal operation mode > > > > > > + * 1: Power down mode > > > > > > + * DW9768 requires waiting time of Topr after PD reset takes place. > > > > > > + */ > > > > > > +#define DW9768_RING_PD_CONTROL_REG 0x02 > > > > > > +#define DW9768_PD_MODE_OFF 0x00 > > > > > > +#define DW9768_PD_MODE_EN BIT(0) > > > > > > +#define DW9768_AAC_MODE_EN BIT(1) > > > > > > + > > > > > > +/* > > > > > > + * DW9768 separates two registers to control the VCM position. > > > > > > + * One for MSB value, another is LSB value. > > > > > > + * DAC_MSB: D[9:8] (ADD: 0x03) > > > > > > + * DAC_LSB: D[7:0] (ADD: 0x04) > > > > > > + * D[9:0] DAC data input: positive output current = D[9:0] / 1023 * 100[mA] > > > > > > + */ > > > > > > +#define DW9768_MSB_ADDR 0x03 > > > > > > +#define DW9768_LSB_ADDR 0x04 > > > > > > +#define DW9768_STATUS_ADDR 0x05 > > > > > > + > > > > > > +/* > > > > > > + * AAC mode control & prescale register > > > > > > + * Bit[7:5] Namely AC[2:0], decide the VCM mode and operation time. > > > > > > + * 000 Direct(default) > > > > > > + * 001 AAC2 0.48xTvib > > > > > > + * 010 AAC3 0.70xTvib > > > > > > + * 011 AAC4 0.75xTvib > > > > > > + * 100 Reserved > > > > > > + * 101 AAC8 1.13xTvib > > > > > > + * 110 Reserved > > > > > > + * 111 Reserved > > > > > > + * Bit[2:0] Namely PRESC[2:0], set the internal clock dividing rate as follow. > > > > > > + * 000 2 > > > > > > + * 001 1(default) > > > > > > + * 010 1/2 > > > > > > + * 011 1/4 > > > > > > + * 100 8 > > > > > > + * 101 4 > > > > > > + * 110 Reserved > > > > > > + * 111 Reserved > > > > > > + */ > > > > > > +#define DW9768_AAC_PRESC_REG 0x06 > > > > > > +#define DW9768_AAC3_SELECT_DIVIDING_RATE_1 0x41 > > > > > > > > > > I guess we can start with these values. But I can't think of another option > > > > > than putting them into DT if there are differences between what hardware > > > > > platforms require. > > > > > > > > > > > > > Let's have a discussion about this. > > > > Now these non-default register settings represent one AAC operation > > > > mode, this is one option and works for a given lens or a module. > > > > If sometime in the future hardware platforms require another different > > > > settings, then DT properties may need to be created. > > > > > > If these values indeed are specific to a given lens (and presumably also a > > > spring), then I'd put them to DT right now --- we don't have drivers for > > > these components the drivers of which could hold this information, nor it > > > makes sense to add them just for that. > > > > > > > I tend to stay on the conservative side and only add DT properties > > once there is really a need to do so. Right now we haven't seen any > > system which would use different values of these parameters. > > I think it's also conservative to put things that are system specific to > DT. :-) > > In practice we haven't put lens specific parameters to DT before, but > that's because 1) devices that need them are old, and so are the drivers > and the matter was not recognised at the time they were merged and 2) a lot > of devices these days don't have such configuration registers. > > That said, I don't have a strong opinion on this one, but I think putting > this to DT would be a safer bet in the long run as this is specific to the > board, not the device itself. > In theory, lens parameter settings tend to be similar as sensor mode. Current settings should be common and it is not board specific, at least for our 2 projects/boards in hand. In practice, for one set of lens parameters, it would be some complicated to create DT properties as the driver indeed doesn't use various values of these parameters. _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6CFBC47247 for ; Fri, 8 May 2020 03:29:31 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A86D720731 for ; Fri, 8 May 2020 03:29:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="D07hH70W"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="Fy3GJHb6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A86D720731 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nU2XG31m46rwW7uUY0GModmhanQR2djXmF2SnyBHiuQ=; b=D07hH70WGA5eIN on/7ORRh95t0Jz8FTrNDKLMb91adZTwE19txmImHZkOJCwnHWnvntCmh2n2123k3eDfYhaySJRpyA kdnBlXPa96YcM7WSsU988581uGWwralGnAUMy7OygJvBFgS2v3db8tDd+W6oJfTZmZrmWcog+EH6m fpbhSQEB60acwPcPE6cyi7CvmNSRS5wpUCjDbCJ82OUPCd7ricMOw0coLYBZQEPGzw0xeO2ryGMzg FNCy8L+h10a/M3HYADuChP36x1W4YrkuoFAbRlLI5Shklqd8Nzhy85X1ETC9+P1XsrI2s4/usewXJ s7FFydMByLu/TFXuMsew==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWthQ-0006AZ-GB; Fri, 08 May 2020 03:29:20 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWthL-00069O-UH; Fri, 08 May 2020 03:29:17 +0000 X-UUID: a9c32ce2699e42d2801649969ea19698-20200507 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=icQs5PDsZ+HS7pah9d3Y69qQhITqVAyFXAMdCV9xDH0=; b=Fy3GJHb69C4fIfgtV1teujNTRbSQ6qDkS6dj2f6310683k2lNzOCvKKpTeKG1SLje2X3a+N8Kme8dk72x0RocNh7n8W8brdlOYqIgo9X8ylSechJC6huEH1NjEYSIdLUMCIijKlh48Ym5dnyD6ePA3XY/LSDJdNpnm7yd9b/Xko=; X-UUID: a9c32ce2699e42d2801649969ea19698-20200507 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 1222480207; Thu, 07 May 2020 19:29:08 -0800 Received: from MTKMBS31N1.mediatek.inc (172.27.4.69) by MTKMBS62N2.mediatek.inc (172.29.193.42) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 7 May 2020 20:29:08 -0700 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 May 2020 11:29:07 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 8 May 2020 11:29:04 +0800 Message-ID: <1588908477.8804.201.camel@mhfsdcap03> Subject: Re: [V5, 2/2] media: i2c: dw9768: Add DW9768 VCM driver From: Dongchun Zhu To: Sakari Ailus Date: Fri, 8 May 2020 11:27:57 +0800 In-Reply-To: <20200507135959.GD9190@paasikivi.fi.intel.com> References: <20200502161727.30463-1-dongchun.zhu@mediatek.com> <20200502161727.30463-3-dongchun.zhu@mediatek.com> <20200506151352.GZ9190@paasikivi.fi.intel.com> <1588855524.8804.168.camel@mhfsdcap03> <20200507131220.GC9190@paasikivi.fi.intel.com> <20200507135959.GD9190@paasikivi.fi.intel.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: B9B8DF3FDB241D7AE7B00BB849706813FFC5DFCAF7C46C704BD9235CB8F51AE52000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200507_202915_992964_278AB406 X-CRM114-Status: GOOD ( 34.10 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Nicolas Boichat , Andy Shevchenko , srv_heupstream , linux-devicetree , Linus Walleij , Shengnan Wang =?UTF-8?Q?=28=E7=8E=8B=E5=9C=A3=E7=94=B7=29?= , Tomasz Figa , Bartosz Golaszewski , Sj Huang , Rob Herring , "moderated list:ARM/Mediatek SoC support" , dongchun.zhu@mediatek.com, Louis Kuo , Matthias Brugger , Cao Bing Bu , Mauro Carvalho Chehab , "list@263.net:IOMMU DRIVERS , Joerg Roedel , " , Linux Media Mailing List Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Sakari, Thanks for the review. On Thu, 2020-05-07 at 17:00 +0300, Sakari Ailus wrote: > Hi Tomasz, > > On Thu, May 07, 2020 at 03:46:31PM +0200, Tomasz Figa wrote: > > Hi Sakari, Dongchun, > > > > On Thu, May 7, 2020 at 3:12 PM Sakari Ailus > > wrote: > > > > > > HI Dongchun, > > > > > > On Thu, May 07, 2020 at 08:45:24PM +0800, Dongchun Zhu wrote: > > > > Hi Sakari, > > > > > > > > Thanks for the review. > > > > > > > > On Wed, 2020-05-06 at 18:13 +0300, Sakari Ailus wrote: > > > > > Hi Dongchun, > > > > > > > > > > On Sun, May 03, 2020 at 12:17:27AM +0800, Dongchun Zhu wrote: > > > > > > Add a V4L2 sub-device driver for DW9768 voice coil motor, providing > > > > > > control to set the desired focus via IIC serial interface. > > > > > > > > > > > > Signed-off-by: Dongchun Zhu > > > > > > --- > > > > > > MAINTAINERS | 1 + > > > > > > drivers/media/i2c/Kconfig | 11 ++ > > > > > > drivers/media/i2c/Makefile | 1 + > > > > > > drivers/media/i2c/dw9768.c | 440 +++++++++++++++++++++++++++++++++++++++++++++ > > > > > > 4 files changed, 453 insertions(+) > > > > > > create mode 100644 drivers/media/i2c/dw9768.c > > > > > > > > > > > > diff --git a/MAINTAINERS b/MAINTAINERS > > > > > > index 8d72c41..c92dc99 100644 > > > > > > --- a/MAINTAINERS > > > > > > +++ b/MAINTAINERS > > > > > > @@ -5157,6 +5157,7 @@ L: linux-media@vger.kernel.org > > > > > > S: Maintained > > > > > > T: git git://linuxtv.org/media_tree.git > > > > > > F: Documentation/devicetree/bindings/media/i2c/dongwoon,dw9768.yaml > > > > > > +F: drivers/media/i2c/dw9768.c > > > > > > > > > > > > DONGWOON DW9807 LENS VOICE COIL DRIVER > > > > > > M: Sakari Ailus > > > > > > diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig > > > > > > index 125d596..6a3f9da 100644 > > > > > > --- a/drivers/media/i2c/Kconfig > > > > > > +++ b/drivers/media/i2c/Kconfig > > > > > > @@ -1040,6 +1040,17 @@ config VIDEO_DW9714 > > > > > > capability. This is designed for linear control of > > > > > > voice coil motors, controlled via I2C serial interface. > > > > > > > > > > > > +config VIDEO_DW9768 > > > > > > + tristate "DW9768 lens voice coil support" > > > > > > + depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER > > > > > > + depends on VIDEO_V4L2_SUBDEV_API > > > > > > > > > > Please check how this works in the media tree master branch now --- it's > > > > > largely select based. > > > > > > > > > > > > > The actuator driver uses some structures that require the > > > > VIDEO_V4L2_SUBDEV_API code, so here we add VIDEO_V4L2_SUBDEV_API > > > > dependency to avoid possible build error when it's not enabled. > > > > > > Please make sure this works with current media tree master. Right now it > > > does not. > > > > > > > Dongchun, as Sakari said, please make sure to base the patches on the > > master branch of the media tree. > > (https://git.linuxtv.org/media_tree.git/). The approach for Kconfig > > dependency selection there seems to have changed recently. > > > > > > > > > > > In general the patch seems fine to me, but please see the other comments > > > > > below, too. > > > > > > > > > > > + depends on PM > > > > > > + help > > > > > > + This is a driver for the DW9768 camera lens voice coil. > > > > > > + DW9768 is a 10 bit DAC with 100mA output current sink > > > > > > + capability. This is designed for linear control of > > > > > > + voice coil motors, controlled via I2C serial interface. > > > > > > + > > > > > > config VIDEO_DW9807_VCM > > > > > > tristate "DW9807 lens voice coil support" > > > > > > depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER > > > > > > diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile > > > > > > index 77bf7d0..4057476 100644 > > > > > > --- a/drivers/media/i2c/Makefile > > > > > > +++ b/drivers/media/i2c/Makefile > > > > > > @@ -24,6 +24,7 @@ obj-$(CONFIG_VIDEO_SAA6752HS) += saa6752hs.o > > > > > > obj-$(CONFIG_VIDEO_AD5820) += ad5820.o > > > > > > obj-$(CONFIG_VIDEO_AK7375) += ak7375.o > > > > > > obj-$(CONFIG_VIDEO_DW9714) += dw9714.o > > > > > > +obj-$(CONFIG_VIDEO_DW9768) += dw9768.o > > > > > > obj-$(CONFIG_VIDEO_DW9807_VCM) += dw9807-vcm.o > > > > > > obj-$(CONFIG_VIDEO_ADV7170) += adv7170.o > > > > > > obj-$(CONFIG_VIDEO_ADV7175) += adv7175.o > > > > > > diff --git a/drivers/media/i2c/dw9768.c b/drivers/media/i2c/dw9768.c > > > > > > new file mode 100644 > > > > > > index 0000000..dd68534 > > > > > > --- /dev/null > > > > > > +++ b/drivers/media/i2c/dw9768.c > > > > > > @@ -0,0 +1,440 @@ > > > > > > +// SPDX-License-Identifier: GPL-2.0 > > > > > > +// Copyright (c) 2020 MediaTek Inc. > > > > > > + > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > +#include > > > > > > + > > > > > > +#define DW9768_NAME "dw9768" > > > > > > +#define DW9768_MAX_FOCUS_POS (1024 - 1) > > > > > > +/* > > > > > > + * This sets the minimum granularity for the focus positions. > > > > > > + * A value of 1 gives maximum accuracy for a desired focus position > > > > > > + */ > > > > > > +#define DW9768_FOCUS_STEPS 1 > > > > > > + > > > > > > +/* > > > > > > + * Ring control and Power control register > > > > > > + * Bit[1] RING_EN > > > > > > + * 0: Direct mode > > > > > > + * 1: AAC mode (ringing control mode) > > > > > > + * Bit[0] PD > > > > > > + * 0: Normal operation mode > > > > > > + * 1: Power down mode > > > > > > + * DW9768 requires waiting time of Topr after PD reset takes place. > > > > > > + */ > > > > > > +#define DW9768_RING_PD_CONTROL_REG 0x02 > > > > > > +#define DW9768_PD_MODE_OFF 0x00 > > > > > > +#define DW9768_PD_MODE_EN BIT(0) > > > > > > +#define DW9768_AAC_MODE_EN BIT(1) > > > > > > + > > > > > > +/* > > > > > > + * DW9768 separates two registers to control the VCM position. > > > > > > + * One for MSB value, another is LSB value. > > > > > > + * DAC_MSB: D[9:8] (ADD: 0x03) > > > > > > + * DAC_LSB: D[7:0] (ADD: 0x04) > > > > > > + * D[9:0] DAC data input: positive output current = D[9:0] / 1023 * 100[mA] > > > > > > + */ > > > > > > +#define DW9768_MSB_ADDR 0x03 > > > > > > +#define DW9768_LSB_ADDR 0x04 > > > > > > +#define DW9768_STATUS_ADDR 0x05 > > > > > > + > > > > > > +/* > > > > > > + * AAC mode control & prescale register > > > > > > + * Bit[7:5] Namely AC[2:0], decide the VCM mode and operation time. > > > > > > + * 000 Direct(default) > > > > > > + * 001 AAC2 0.48xTvib > > > > > > + * 010 AAC3 0.70xTvib > > > > > > + * 011 AAC4 0.75xTvib > > > > > > + * 100 Reserved > > > > > > + * 101 AAC8 1.13xTvib > > > > > > + * 110 Reserved > > > > > > + * 111 Reserved > > > > > > + * Bit[2:0] Namely PRESC[2:0], set the internal clock dividing rate as follow. > > > > > > + * 000 2 > > > > > > + * 001 1(default) > > > > > > + * 010 1/2 > > > > > > + * 011 1/4 > > > > > > + * 100 8 > > > > > > + * 101 4 > > > > > > + * 110 Reserved > > > > > > + * 111 Reserved > > > > > > + */ > > > > > > +#define DW9768_AAC_PRESC_REG 0x06 > > > > > > +#define DW9768_AAC3_SELECT_DIVIDING_RATE_1 0x41 > > > > > > > > > > I guess we can start with these values. But I can't think of another option > > > > > than putting them into DT if there are differences between what hardware > > > > > platforms require. > > > > > > > > > > > > > Let's have a discussion about this. > > > > Now these non-default register settings represent one AAC operation > > > > mode, this is one option and works for a given lens or a module. > > > > If sometime in the future hardware platforms require another different > > > > settings, then DT properties may need to be created. > > > > > > If these values indeed are specific to a given lens (and presumably also a > > > spring), then I'd put them to DT right now --- we don't have drivers for > > > these components the drivers of which could hold this information, nor it > > > makes sense to add them just for that. > > > > > > > I tend to stay on the conservative side and only add DT properties > > once there is really a need to do so. Right now we haven't seen any > > system which would use different values of these parameters. > > I think it's also conservative to put things that are system specific to > DT. :-) > > In practice we haven't put lens specific parameters to DT before, but > that's because 1) devices that need them are old, and so are the drivers > and the matter was not recognised at the time they were merged and 2) a lot > of devices these days don't have such configuration registers. > > That said, I don't have a strong opinion on this one, but I think putting > this to DT would be a safer bet in the long run as this is specific to the > board, not the device itself. > In theory, lens parameter settings tend to be similar as sensor mode. Current settings should be common and it is not board specific, at least for our 2 projects/boards in hand. In practice, for one set of lens parameters, it would be some complicated to create DT properties as the driver indeed doesn't use various values of these parameters. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BA473C35280 for ; Fri, 8 May 2020 03:29:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 86A4220731 for ; Fri, 8 May 2020 03:29:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="JVpCOLue" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726683AbgEHD3V (ORCPT ); Thu, 7 May 2020 23:29:21 -0400 Received: from mailgw02.mediatek.com ([1.203.163.81]:1160 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726661AbgEHD3U (ORCPT ); Thu, 7 May 2020 23:29:20 -0400 X-UUID: b5541d3237224ddf99342840c4f8bd8e-20200508 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=icQs5PDsZ+HS7pah9d3Y69qQhITqVAyFXAMdCV9xDH0=; b=JVpCOLuepmicZ7CBIH9hzfjhvoq7fRYxshR2rqieGCH8di9BTFZeltj87UdIEfQDPtLJYyx/7VdDBKNActnVPXY87+BO1BQ5A/QCEs6rIQxnQvgXuUVqAVnEnyp5kBRXqX8a3HFCivDMLt5XsEXo0l5XPQ6tSwuCT4YMe3CFGaA=; X-UUID: b5541d3237224ddf99342840c4f8bd8e-20200508 Received: from mtkcas32.mediatek.inc [(172.27.4.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 651244020; Fri, 08 May 2020 11:29:07 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 May 2020 11:29:07 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 8 May 2020 11:29:04 +0800 Message-ID: <1588908477.8804.201.camel@mhfsdcap03> Subject: Re: [V5, 2/2] media: i2c: dw9768: Add DW9768 VCM driver From: Dongchun Zhu To: Sakari Ailus CC: Tomasz Figa , Linus Walleij , Bartosz Golaszewski , Mauro Carvalho Chehab , , Andy Shevchenko , Rob Herring , "Mark Rutland" , Nicolas Boichat , Matthias Brugger , Cao Bing Bu , srv_heupstream , "moderated list:ARM/Mediatek SoC support" , "list@263.net:IOMMU DRIVERS , Joerg Roedel ," , Sj Huang , Linux Media Mailing List , linux-devicetree , Louis Kuo , "Shengnan Wang =?UTF-8?Q?=28=E7=8E=8B=E5=9C=A3=E7=94=B7=29?=" Date: Fri, 8 May 2020 11:27:57 +0800 In-Reply-To: <20200507135959.GD9190@paasikivi.fi.intel.com> References: <20200502161727.30463-1-dongchun.zhu@mediatek.com> <20200502161727.30463-3-dongchun.zhu@mediatek.com> <20200506151352.GZ9190@paasikivi.fi.intel.com> <1588855524.8804.168.camel@mhfsdcap03> <20200507131220.GC9190@paasikivi.fi.intel.com> <20200507135959.GD9190@paasikivi.fi.intel.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: B9B8DF3FDB241D7AE7B00BB849706813FFC5DFCAF7C46C704BD9235CB8F51AE52000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org SGkgU2FrYXJpLA0KDQpUaGFua3MgZm9yIHRoZSByZXZpZXcuDQoNCk9uIFRodSwgMjAyMC0wNS0w NyBhdCAxNzowMCArMDMwMCwgU2FrYXJpIEFpbHVzIHdyb3RlOg0KPiBIaSBUb21hc3osDQo+IA0K PiBPbiBUaHUsIE1heSAwNywgMjAyMCBhdCAwMzo0NjozMVBNICswMjAwLCBUb21hc3ogRmlnYSB3 cm90ZToNCj4gPiBIaSBTYWthcmksIERvbmdjaHVuLA0KPiA+IA0KPiA+IE9uIFRodSwgTWF5IDcs IDIwMjAgYXQgMzoxMiBQTSBTYWthcmkgQWlsdXMNCj4gPiA8c2FrYXJpLmFpbHVzQGxpbnV4Lmlu dGVsLmNvbT4gd3JvdGU6DQo+ID4gPg0KPiA+ID4gSEkgRG9uZ2NodW4sDQo+ID4gPg0KPiA+ID4g T24gVGh1LCBNYXkgMDcsIDIwMjAgYXQgMDg6NDU6MjRQTSArMDgwMCwgRG9uZ2NodW4gWmh1IHdy b3RlOg0KPiA+ID4gPiBIaSBTYWthcmksDQo+ID4gPiA+DQo+ID4gPiA+IFRoYW5rcyBmb3IgdGhl IHJldmlldy4NCj4gPiA+ID4NCj4gPiA+ID4gT24gV2VkLCAyMDIwLTA1LTA2IGF0IDE4OjEzICsw MzAwLCBTYWthcmkgQWlsdXMgd3JvdGU6DQo+ID4gPiA+ID4gSGkgRG9uZ2NodW4sDQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiBPbiBTdW4sIE1heSAwMywgMjAyMCBhdCAxMjoxNzoyN0FNICswODAwLCBE b25nY2h1biBaaHUgd3JvdGU6DQo+ID4gPiA+ID4gPiBBZGQgYSBWNEwyIHN1Yi1kZXZpY2UgZHJp dmVyIGZvciBEVzk3Njggdm9pY2UgY29pbCBtb3RvciwgcHJvdmlkaW5nDQo+ID4gPiA+ID4gPiBj b250cm9sIHRvIHNldCB0aGUgZGVzaXJlZCBmb2N1cyB2aWEgSUlDIHNlcmlhbCBpbnRlcmZhY2Uu DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogRG9uZ2NodW4gWmh1IDxk b25nY2h1bi56aHVAbWVkaWF0ZWsuY29tPg0KPiA+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gPiAg TUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgfCAgIDEgKw0KPiA+ID4gPiA+ID4gIGRyaXZlcnMv bWVkaWEvaTJjL0tjb25maWcgIHwgIDExICsrDQo+ID4gPiA+ID4gPiAgZHJpdmVycy9tZWRpYS9p MmMvTWFrZWZpbGUgfCAgIDEgKw0KPiA+ID4gPiA+ID4gIGRyaXZlcnMvbWVkaWEvaTJjL2R3OTc2 OC5jIHwgNDQwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0K PiA+ID4gPiA+ID4gIDQgZmlsZXMgY2hhbmdlZCwgNDUzIGluc2VydGlvbnMoKykNCj4gPiA+ID4g PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9pMmMvZHc5NzY4LmMNCj4gPiA+ ID4gPiA+DQo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVS Uw0KPiA+ID4gPiA+ID4gaW5kZXggOGQ3MmM0MS4uYzkyZGM5OSAxMDA2NDQNCj4gPiA+ID4gPiA+ IC0tLSBhL01BSU5UQUlORVJTDQo+ID4gPiA+ID4gPiArKysgYi9NQUlOVEFJTkVSUw0KPiA+ID4g PiA+ID4gQEAgLTUxNTcsNiArNTE1Nyw3IEBAIEw6ICBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5v cmcNCj4gPiA+ID4gPiA+ICBTOiAgICAgICBNYWludGFpbmVkDQo+ID4gPiA+ID4gPiAgVDogICAg ICAgZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0DQo+ID4gPiA+ID4gPiAgRjog ICAgICAgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL2kyYy9kb25nd29v bixkdzk3NjgueWFtbA0KPiA+ID4gPiA+ID4gK0Y6ICAgICAgIGRyaXZlcnMvbWVkaWEvaTJjL2R3 OTc2OC5jDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gIERPTkdXT09OIERXOTgwNyBMRU5TIFZP SUNFIENPSUwgRFJJVkVSDQo+ID4gPiA+ID4gPiAgTTogICAgICAgU2FrYXJpIEFpbHVzIDxzYWth cmkuYWlsdXNAbGludXguaW50ZWwuY29tPg0KPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWVkaWEvaTJjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnDQo+ID4gPiA+ ID4gPiBpbmRleCAxMjVkNTk2Li42YTNmOWRhIDEwMDY0NA0KPiA+ID4gPiA+ID4gLS0tIGEvZHJp dmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9p MmMvS2NvbmZpZw0KPiA+ID4gPiA+ID4gQEAgLTEwNDAsNiArMTA0MCwxNyBAQCBjb25maWcgVklE RU9fRFc5NzE0DQo+ID4gPiA+ID4gPiAgICAgY2FwYWJpbGl0eS4gVGhpcyBpcyBkZXNpZ25lZCBm b3IgbGluZWFyIGNvbnRyb2wgb2YNCj4gPiA+ID4gPiA+ICAgICB2b2ljZSBjb2lsIG1vdG9ycywg Y29udHJvbGxlZCB2aWEgSTJDIHNlcmlhbCBpbnRlcmZhY2UuDQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gK2NvbmZpZyBWSURFT19EVzk3NjgNCj4gPiA+ID4gPiA+ICsgdHJpc3RhdGUgIkRXOTc2 OCBsZW5zIHZvaWNlIGNvaWwgc3VwcG9ydCINCj4gPiA+ID4gPiA+ICsgZGVwZW5kcyBvbiBJMkMg JiYgVklERU9fVjRMMiAmJiBNRURJQV9DT05UUk9MTEVSDQo+ID4gPiA+ID4gPiArIGRlcGVuZHMg b24gVklERU9fVjRMMl9TVUJERVZfQVBJDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBQbGVhc2UgY2hl Y2sgaG93IHRoaXMgd29ya3MgaW4gdGhlIG1lZGlhIHRyZWUgbWFzdGVyIGJyYW5jaCBub3cgLS0t IGl0J3MNCj4gPiA+ID4gPiBsYXJnZWx5IHNlbGVjdCBiYXNlZC4NCj4gPiA+ID4gPg0KPiA+ID4g Pg0KPiA+ID4gPiBUaGUgYWN0dWF0b3IgZHJpdmVyIHVzZXMgc29tZSBzdHJ1Y3R1cmVzIHRoYXQg cmVxdWlyZSB0aGUNCj4gPiA+ID4gVklERU9fVjRMMl9TVUJERVZfQVBJIGNvZGUsIHNvIGhlcmUg d2UgYWRkIFZJREVPX1Y0TDJfU1VCREVWX0FQSQ0KPiA+ID4gPiBkZXBlbmRlbmN5IHRvIGF2b2lk IHBvc3NpYmxlIGJ1aWxkIGVycm9yIHdoZW4gaXQncyBub3QgZW5hYmxlZC4NCj4gPiA+DQo+ID4g PiBQbGVhc2UgbWFrZSBzdXJlIHRoaXMgd29ya3Mgd2l0aCBjdXJyZW50IG1lZGlhIHRyZWUgbWFz dGVyLiBSaWdodCBub3cgaXQNCj4gPiA+IGRvZXMgbm90Lg0KPiA+ID4NCj4gPiANCj4gPiBEb25n Y2h1biwgYXMgU2FrYXJpIHNhaWQsIHBsZWFzZSBtYWtlIHN1cmUgdG8gYmFzZSB0aGUgcGF0Y2hl cyBvbiB0aGUNCj4gPiBtYXN0ZXIgYnJhbmNoIG9mIHRoZSBtZWRpYSB0cmVlLg0KPiA+IChodHRw czovL2dpdC5saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdC8pLiBUaGUgYXBwcm9hY2ggZm9yIEtj b25maWcNCj4gPiBkZXBlbmRlbmN5IHNlbGVjdGlvbiB0aGVyZSBzZWVtcyB0byBoYXZlIGNoYW5n ZWQgcmVjZW50bHkuDQo+ID4gDQo+ID4gPiA+DQo+ID4gPiA+ID4gSW4gZ2VuZXJhbCB0aGUgcGF0 Y2ggc2VlbXMgZmluZSB0byBtZSwgYnV0IHBsZWFzZSBzZWUgdGhlIG90aGVyIGNvbW1lbnRzDQo+ ID4gPiA+ID4gYmVsb3csIHRvby4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKyBkZXBlbmRzIG9u IFBNDQo+ID4gPiA+ID4gPiArIGhlbHANCj4gPiA+ID4gPiA+ICsgICBUaGlzIGlzIGEgZHJpdmVy IGZvciB0aGUgRFc5NzY4IGNhbWVyYSBsZW5zIHZvaWNlIGNvaWwuDQo+ID4gPiA+ID4gPiArICAg RFc5NzY4IGlzIGEgMTAgYml0IERBQyB3aXRoIDEwMG1BIG91dHB1dCBjdXJyZW50IHNpbmsNCj4g PiA+ID4gPiA+ICsgICBjYXBhYmlsaXR5LiBUaGlzIGlzIGRlc2lnbmVkIGZvciBsaW5lYXIgY29u dHJvbCBvZg0KPiA+ID4gPiA+ID4gKyAgIHZvaWNlIGNvaWwgbW90b3JzLCBjb250cm9sbGVkIHZp YSBJMkMgc2VyaWFsIGludGVyZmFjZS4NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICBjb25m aWcgVklERU9fRFc5ODA3X1ZDTQ0KPiA+ID4gPiA+ID4gICB0cmlzdGF0ZSAiRFc5ODA3IGxlbnMg dm9pY2UgY29pbCBzdXBwb3J0Ig0KPiA+ID4gPiA+ID4gICBkZXBlbmRzIG9uIEkyQyAmJiBWSURF T19WNEwyICYmIE1FRElBX0NPTlRST0xMRVINCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL21lZGlhL2kyYy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlDQo+ID4g PiA+ID4gPiBpbmRleCA3N2JmN2QwLi40MDU3NDc2IDEwMDY0NA0KPiA+ID4gPiA+ID4gLS0tIGEv ZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUNCj4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvbWVk aWEvaTJjL01ha2VmaWxlDQo+ID4gPiA+ID4gPiBAQCAtMjQsNiArMjQsNyBAQCBvYmotJChDT05G SUdfVklERU9fU0FBNjc1MkhTKSArPSBzYWE2NzUyaHMubw0KPiA+ID4gPiA+ID4gIG9iai0kKENP TkZJR19WSURFT19BRDU4MjApICArPSBhZDU4MjAubw0KPiA+ID4gPiA+ID4gIG9iai0kKENPTkZJ R19WSURFT19BSzczNzUpICArPSBhazczNzUubw0KPiA+ID4gPiA+ID4gIG9iai0kKENPTkZJR19W SURFT19EVzk3MTQpICArPSBkdzk3MTQubw0KPiA+ID4gPiA+ID4gK29iai0kKENPTkZJR19WSURF T19EVzk3NjgpICArPSBkdzk3Njgubw0KPiA+ID4gPiA+ID4gIG9iai0kKENPTkZJR19WSURFT19E Vzk4MDdfVkNNKSAgKz0gZHc5ODA3LXZjbS5vDQo+ID4gPiA+ID4gPiAgb2JqLSQoQ09ORklHX1ZJ REVPX0FEVjcxNzApICs9IGFkdjcxNzAubw0KPiA+ID4gPiA+ID4gIG9iai0kKENPTkZJR19WSURF T19BRFY3MTc1KSArPSBhZHY3MTc1Lm8NCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL2kyYy9kdzk3NjguYyBiL2RyaXZlcnMvbWVkaWEvaTJjL2R3OTc2OC5jDQo+ID4gPiA+ ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gPiA+ID4gaW5kZXggMDAwMDAwMC4uZGQ2 ODUzNA0KPiA+ID4gPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVy cy9tZWRpYS9pMmMvZHc5NzY4LmMNCj4gPiA+ID4gPiA+IEBAIC0wLDAgKzEsNDQwIEBADQo+ID4g PiA+ID4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiA+ID4gPiA+ ICsvLyBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5jLg0KPiA+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ID4gPiA+ID4gKyNpbmNsdWRl IDxsaW51eC9pMmMuaD4NCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ ID4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPiA+ID4gPiA+ICsj aW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQo+ID4gPiA+ID4gPiArI2luY2x1 ZGUgPG1lZGlhL3Y0bDItYXN5bmMuaD4NCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRs Mi1jdHJscy5oPg0KPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPg0K PiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPg0KPiA+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ID4gKyNkZWZpbmUgRFc5NzY4X05BTUUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiZHc5NzY4Ig0KPiA+ID4gPiA+ID4gKyNkZWZpbmUgRFc5NzY4X01BWF9GT0NVU19Q T1MgICAgICAgICAgICAgICAgICAgICAoMTAyNCAtIDEpDQo+ID4gPiA+ID4gPiArLyoNCj4gPiA+ ID4gPiA+ICsgKiBUaGlzIHNldHMgdGhlIG1pbmltdW0gZ3JhbnVsYXJpdHkgZm9yIHRoZSBmb2N1 cyBwb3NpdGlvbnMuDQo+ID4gPiA+ID4gPiArICogQSB2YWx1ZSBvZiAxIGdpdmVzIG1heGltdW0g YWNjdXJhY3kgZm9yIGEgZGVzaXJlZCBmb2N1cyBwb3NpdGlvbg0KPiA+ID4gPiA+ID4gKyAqLw0K PiA+ID4gPiA+ID4gKyNkZWZpbmUgRFc5NzY4X0ZPQ1VTX1NURVBTICAgICAgICAgICAgICAgICAg ICAgICAxDQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArLyoNCj4gPiA+ID4gPiA+ICsgKiBS aW5nIGNvbnRyb2wgYW5kIFBvd2VyIGNvbnRyb2wgcmVnaXN0ZXINCj4gPiA+ID4gPiA+ICsgKiBC aXRbMV0gUklOR19FTg0KPiA+ID4gPiA+ID4gKyAqIDA6IERpcmVjdCBtb2RlDQo+ID4gPiA+ID4g PiArICogMTogQUFDIG1vZGUgKHJpbmdpbmcgY29udHJvbCBtb2RlKQ0KPiA+ID4gPiA+ID4gKyAq IEJpdFswXSBQRA0KPiA+ID4gPiA+ID4gKyAqIDA6IE5vcm1hbCBvcGVyYXRpb24gbW9kZQ0KPiA+ ID4gPiA+ID4gKyAqIDE6IFBvd2VyIGRvd24gbW9kZQ0KPiA+ID4gPiA+ID4gKyAqIERXOTc2OCBy ZXF1aXJlcyB3YWl0aW5nIHRpbWUgb2YgVG9wciBhZnRlciBQRCByZXNldCB0YWtlcyBwbGFjZS4N Cj4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ICsjZGVmaW5lIERXOTc2OF9SSU5HX1BEX0NP TlRST0xfUkVHICAgICAgICAgICAgICAgMHgwMg0KPiA+ID4gPiA+ID4gKyNkZWZpbmUgRFc5NzY4 X1BEX01PREVfT0ZGICAgICAgICAgICAgICAgICAgICAgICAweDAwDQo+ID4gPiA+ID4gPiArI2Rl ZmluZSBEVzk3NjhfUERfTU9ERV9FTiAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQ0KPiA+ ID4gPiA+ID4gKyNkZWZpbmUgRFc5NzY4X0FBQ19NT0RFX0VOICAgICAgICAgICAgICAgICAgICAg ICBCSVQoMSkNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKg0KPiA+ID4gPiA+ID4gKyAq IERXOTc2OCBzZXBhcmF0ZXMgdHdvIHJlZ2lzdGVycyB0byBjb250cm9sIHRoZSBWQ00gcG9zaXRp b24uDQo+ID4gPiA+ID4gPiArICogT25lIGZvciBNU0IgdmFsdWUsIGFub3RoZXIgaXMgTFNCIHZh bHVlLg0KPiA+ID4gPiA+ID4gKyAqIERBQ19NU0I6IERbOTo4XSAoQUREOiAweDAzKQ0KPiA+ID4g PiA+ID4gKyAqIERBQ19MU0I6IERbNzowXSAoQUREOiAweDA0KQ0KPiA+ID4gPiA+ID4gKyAqIERb OTowXSBEQUMgZGF0YSBpbnB1dDogcG9zaXRpdmUgb3V0cHV0IGN1cnJlbnQgPSBEWzk6MF0gLyAx MDIzICogMTAwW21BXQ0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ID4gKyNkZWZpbmUgRFc5 NzY4X01TQl9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzDQo+ID4gPiA+ID4gPiAr I2RlZmluZSBEVzk3NjhfTFNCX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQNCj4g PiA+ID4gPiA+ICsjZGVmaW5lIERXOTc2OF9TVEFUVVNfQUREUiAgICAgICAgICAgICAgICAgICAg ICAgMHgwNQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qDQo+ID4gPiA+ID4gPiArICog QUFDIG1vZGUgY29udHJvbCAmIHByZXNjYWxlIHJlZ2lzdGVyDQo+ID4gPiA+ID4gPiArICogQml0 Wzc6NV0gTmFtZWx5IEFDWzI6MF0sIGRlY2lkZSB0aGUgVkNNIG1vZGUgYW5kIG9wZXJhdGlvbiB0 aW1lLg0KPiA+ID4gPiA+ID4gKyAqIDAwMCBEaXJlY3QoZGVmYXVsdCkNCj4gPiA+ID4gPiA+ICsg KiAwMDEgQUFDMiAwLjQ4eFR2aWINCj4gPiA+ID4gPiA+ICsgKiAwMTAgQUFDMyAwLjcweFR2aWIN Cj4gPiA+ID4gPiA+ICsgKiAwMTEgQUFDNCAwLjc1eFR2aWINCj4gPiA+ID4gPiA+ICsgKiAxMDAg UmVzZXJ2ZWQNCj4gPiA+ID4gPiA+ICsgKiAxMDEgQUFDOCAxLjEzeFR2aWINCj4gPiA+ID4gPiA+ ICsgKiAxMTAgUmVzZXJ2ZWQNCj4gPiA+ID4gPiA+ICsgKiAxMTEgUmVzZXJ2ZWQNCj4gPiA+ID4g PiA+ICsgKiBCaXRbMjowXSBOYW1lbHkgUFJFU0NbMjowXSwgc2V0IHRoZSBpbnRlcm5hbCBjbG9j ayBkaXZpZGluZyByYXRlIGFzIGZvbGxvdy4NCj4gPiA+ID4gPiA+ICsgKiAwMDAgMg0KPiA+ID4g PiA+ID4gKyAqIDAwMSAxKGRlZmF1bHQpDQo+ID4gPiA+ID4gPiArICogMDEwIDEvMg0KPiA+ID4g PiA+ID4gKyAqIDAxMSAxLzQNCj4gPiA+ID4gPiA+ICsgKiAxMDAgOA0KPiA+ID4gPiA+ID4gKyAq IDEwMSA0DQo+ID4gPiA+ID4gPiArICogMTEwIFJlc2VydmVkDQo+ID4gPiA+ID4gPiArICogMTEx IFJlc2VydmVkDQo+ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiArI2RlZmluZSBEVzk3Njhf QUFDX1BSRVNDX1JFRyAgICAgICAgICAgICAgICAgICAgIDB4MDYNCj4gPiA+ID4gPiA+ICsjZGVm aW5lIERXOTc2OF9BQUMzX1NFTEVDVF9ESVZJRElOR19SQVRFXzEgICAgICAgMHg0MQ0KPiA+ID4g PiA+DQo+ID4gPiA+ID4gSSBndWVzcyB3ZSBjYW4gc3RhcnQgd2l0aCB0aGVzZSB2YWx1ZXMuIEJ1 dCBJIGNhbid0IHRoaW5rIG9mIGFub3RoZXIgb3B0aW9uDQo+ID4gPiA+ID4gdGhhbiBwdXR0aW5n IHRoZW0gaW50byBEVCBpZiB0aGVyZSBhcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB3aGF0IGhhcmR3 YXJlDQo+ID4gPiA+ID4gcGxhdGZvcm1zIHJlcXVpcmUuDQo+ID4gPiA+ID4NCj4gPiA+ID4NCj4g PiA+ID4gTGV0J3MgaGF2ZSBhIGRpc2N1c3Npb24gYWJvdXQgdGhpcy4NCj4gPiA+ID4gTm93IHRo ZXNlIG5vbi1kZWZhdWx0IHJlZ2lzdGVyIHNldHRpbmdzIHJlcHJlc2VudCBvbmUgQUFDIG9wZXJh dGlvbg0KPiA+ID4gPiBtb2RlLCB0aGlzIGlzIG9uZSBvcHRpb24gYW5kIHdvcmtzIGZvciBhIGdp dmVuIGxlbnMgb3IgYSBtb2R1bGUuDQo+ID4gPiA+IElmIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUg aGFyZHdhcmUgcGxhdGZvcm1zIHJlcXVpcmUgYW5vdGhlciBkaWZmZXJlbnQNCj4gPiA+ID4gc2V0 dGluZ3MsIHRoZW4gRFQgcHJvcGVydGllcyBtYXkgbmVlZCB0byBiZSBjcmVhdGVkLg0KPiA+ID4N Cj4gPiA+IElmIHRoZXNlIHZhbHVlcyBpbmRlZWQgYXJlIHNwZWNpZmljIHRvIGEgZ2l2ZW4gbGVu cyAoYW5kIHByZXN1bWFibHkgYWxzbyBhDQo+ID4gPiBzcHJpbmcpLCB0aGVuIEknZCBwdXQgdGhl bSB0byBEVCByaWdodCBub3cgLS0tIHdlIGRvbid0IGhhdmUgZHJpdmVycyBmb3INCj4gPiA+IHRo ZXNlIGNvbXBvbmVudHMgdGhlIGRyaXZlcnMgb2Ygd2hpY2ggY291bGQgaG9sZCB0aGlzIGluZm9y bWF0aW9uLCBub3IgaXQNCj4gPiA+IG1ha2VzIHNlbnNlIHRvIGFkZCB0aGVtIGp1c3QgZm9yIHRo YXQuDQo+ID4gPg0KPiA+IA0KPiA+IEkgdGVuZCB0byBzdGF5IG9uIHRoZSBjb25zZXJ2YXRpdmUg c2lkZSBhbmQgb25seSBhZGQgRFQgcHJvcGVydGllcw0KPiA+IG9uY2UgdGhlcmUgaXMgcmVhbGx5 IGEgbmVlZCB0byBkbyBzby4gUmlnaHQgbm93IHdlIGhhdmVuJ3Qgc2VlbiBhbnkNCj4gPiBzeXN0 ZW0gd2hpY2ggd291bGQgdXNlIGRpZmZlcmVudCB2YWx1ZXMgb2YgdGhlc2UgcGFyYW1ldGVycy4N Cj4gDQo+IEkgdGhpbmsgaXQncyBhbHNvIGNvbnNlcnZhdGl2ZSB0byBwdXQgdGhpbmdzIHRoYXQg YXJlIHN5c3RlbSBzcGVjaWZpYyB0bw0KPiBEVC4gOi0pDQo+IA0KPiBJbiBwcmFjdGljZSB3ZSBo YXZlbid0IHB1dCBsZW5zIHNwZWNpZmljIHBhcmFtZXRlcnMgdG8gRFQgYmVmb3JlLCBidXQNCj4g dGhhdCdzIGJlY2F1c2UgMSkgZGV2aWNlcyB0aGF0IG5lZWQgdGhlbSBhcmUgb2xkLCBhbmQgc28g YXJlIHRoZSBkcml2ZXJzDQo+IGFuZCB0aGUgbWF0dGVyIHdhcyBub3QgcmVjb2duaXNlZCBhdCB0 aGUgdGltZSB0aGV5IHdlcmUgbWVyZ2VkIGFuZCAyKSBhIGxvdA0KPiBvZiBkZXZpY2VzIHRoZXNl IGRheXMgZG9uJ3QgaGF2ZSBzdWNoIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLg0KPiANCj4gVGhh dCBzYWlkLCBJIGRvbid0IGhhdmUgYSBzdHJvbmcgb3BpbmlvbiBvbiB0aGlzIG9uZSwgYnV0IEkg dGhpbmsgcHV0dGluZw0KPiB0aGlzIHRvIERUIHdvdWxkIGJlIGEgc2FmZXIgYmV0IGluIHRoZSBs b25nIHJ1biBhcyB0aGlzIGlzIHNwZWNpZmljIHRvIHRoZQ0KPiBib2FyZCwgbm90IHRoZSBkZXZp Y2UgaXRzZWxmLg0KPiANCg0KSW4gdGhlb3J5LCBsZW5zIHBhcmFtZXRlciBzZXR0aW5ncyB0ZW5k IHRvIGJlIHNpbWlsYXIgYXMgc2Vuc29yIG1vZGUuDQpDdXJyZW50IHNldHRpbmdzIHNob3VsZCBi ZSBjb21tb24gYW5kIGl0IGlzIG5vdCBib2FyZCBzcGVjaWZpYywNCmF0IGxlYXN0IGZvciBvdXIg MiBwcm9qZWN0cy9ib2FyZHMgaW4gaGFuZC4NCg0KSW4gcHJhY3RpY2UsIGZvciBvbmUgc2V0IG9m IGxlbnMgcGFyYW1ldGVycywgaXQgd291bGQgYmUgc29tZQ0KY29tcGxpY2F0ZWQgdG8gY3JlYXRl IERUIHByb3BlcnRpZXMgYXMgdGhlIGRyaXZlciBpbmRlZWQgZG9lc24ndCB1c2UNCnZhcmlvdXMg dmFsdWVzIG9mIHRoZXNlIHBhcmFtZXRlcnMuDQoNCg==