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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 0980AC433F5 for ; Wed, 27 Apr 2022 19:20:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=LlNHyTgu/PUFbzNRAuyIyAS1QBVMl0biOUBet9LicOU=; b=VUPnGl4xWprteA mcOJsGRsYpqH1bwrz7SmF4MS3hq+tIcmgyTAWr/mrKzRAfMm2MyJQx4E7BjtdHluU8vJQ+YSRni3H aHBtaNzVclWX/vH0mQIRCE5MiItK8Xrr2eMd7fwkmNwIU7ZLaLOwmWsfag+cjuxl2Zm6VSlnL8OIP ubhBSB64GatNc6Z80AuqKCC7ZdGSLxOJb7jxUGZ96a13ZywscY4r+8Kvz8ZmFIyEbfW/5Vq9DMtYG 33FZb99oExY9jOG8iWyNzLGxxo+pVESWP8cLriKQ1XWwbqh4xXCCcumzt1/ilnpjOTK3m+R69x8e4 3QeOSK1B3Lr80vVz5+Hg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1njnCD-003GH0-VW; Wed, 27 Apr 2022 19:19:30 +0000 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1njnCA-003GEy-50 for linux-arm-kernel@lists.infradead.org; Wed, 27 Apr 2022 19:19:27 +0000 Received: by mail-ej1-x633.google.com with SMTP id bv19so5327647ejb.6 for ; Wed, 27 Apr 2022 12:19:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6yTsPEOBY3cCKcYeHXwiu4LFE1vQQyqmVGUuUkNQfOY=; b=dr9rA1RXW7poH5DEv8lJxBydGsU3OVxR+olF87xFBBnZf7pSOJMmYRctilCAomiLIS 3GipMSau/cDT7rbjeq6e/S6AfzQtZ3OeJ9Dijw06JP/EeSw/I2L0ePnXCDeJOCN1D6T9 VetoMOtufApjI/F9qQYgGf2j/2mKepfTpmJEBUwf8Bu7vH/ept42+UC/8ehTbwBlJbII EtKoKaCdh2B4OvkQE9D/DNyXgP+Ts+x+VXg8OGIv6zW0rXuRB2TI2we3W94rClh+j9HF mENDuk40LW5+Ma/Ic0f2ijThwQmrG/Sqjb4toLJ1eh3/ERQxRkktmjZzxk69E3VQRbLW 54Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6yTsPEOBY3cCKcYeHXwiu4LFE1vQQyqmVGUuUkNQfOY=; b=woMIXnR8nR1ePflMDbxe886qGkD/famXSP3S+urveENeGrj3lzVLC9slkdMubh8RG4 GofmNq1R2QvIcp2SPry7w21kaYEDSYFvwJLcyAF/r415dBlZLFl0UoCMRYAdkYp8xQEY MXMwwuh29LMvTJxf6doBmyEuYTSlsChT1FwhNB1tYPcOJePIn/VUor4XxpCxfhJ0G2By X29r9N0TCRkchG6s5kE/xARJgRxsBw8Qb+sXkF9FAhrgb1oy3uI+kA+CX9aWXmHhvkuU eBo/fouO50edcnjGqzF55NDa+MdUNrrb9/Cf5Dld3tfsdrfFwWBlSqW/JbFQSkuVA5wC NIsA== X-Gm-Message-State: AOAM530U4vPUIW1oYPkoKS0YLN4xy3KFGiQiBrQp0CXeGau9NhoO1tZA Y8jqhzLcxXmdjW7qgpgpfwE= X-Google-Smtp-Source: ABdhPJyD6XH3nmRWwunfAap5tqWfZ7cDoEOrmA1D/uSHOLb1KHXH0zoeq4hrfV+Tjr8+gbTBSpX1pg== X-Received: by 2002:a17:906:3f83:b0:6f3:c1ca:9c72 with SMTP id b3-20020a1709063f8300b006f3c1ca9c72mr5475697ejj.539.1651087156562; Wed, 27 Apr 2022 12:19:16 -0700 (PDT) Received: from jernej-laptop.localnet (89-212-118-115.static.t-2.net. [89.212.118.115]) by smtp.gmail.com with ESMTPSA id q17-20020a1709064cd100b006e78206fe2bsm7339272ejt.111.2022.04.27.12.19.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 12:19:16 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Paul Kocialkowski Cc: Yong Deng , Paul Kocialkowski , Mauro Carvalho Chehab , Chen-Yu Tsai , Samuel Holland , Laurent Pinchart , Maxime Ripard , Thomas Petazzoni Subject: Re: [PATCH v4 22/45] media: sun6i-csi: Split stream sequences and irq code in capture Date: Wed, 27 Apr 2022 21:19:15 +0200 Message-ID: <3661760.kQq0lBPeGt@jernej-laptop> In-Reply-To: <20220415152811.636419-23-paul.kocialkowski@bootlin.com> References: <20220415152811.636419-1-paul.kocialkowski@bootlin.com> <20220415152811.636419-23-paul.kocialkowski@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220427_121926_231166_520202AC X-CRM114-Status: GOOD ( 23.48 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Dne petek, 15. april 2022 ob 17:27:48 CEST je Paul Kocialkowski napisal(a): > Create minimal helpers that split the enable/disable flow, which will > make it easier to move control over to the bridge later on. > > Generally speaking the goal is to move register configuration to > the capture code and later split it with the bridge code. > > Signed-off-by: Paul Kocialkowski Acked-by: Jernej Skrabec Best regards, Jernej > --- > .../platform/sunxi/sun6i-csi/sun6i_csi.c | 26 --------- > .../platform/sunxi/sun6i-csi/sun6i_csi.h | 7 --- > .../sunxi/sun6i-csi/sun6i_csi_capture.c | 58 ++++++++++++++++++- > 3 files changed, 55 insertions(+), 36 deletions(-) > > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c index > 98133c1dbf68..29892e8c2b9d 100644 > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > @@ -535,32 +535,6 @@ int sun6i_csi_update_config(struct sun6i_csi_device > *csi_dev, return 0; > } > > -void sun6i_csi_set_stream(struct sun6i_csi_device *csi_dev, bool enable) > -{ > - struct regmap *regmap = csi_dev->regmap; > - > - if (!enable) { > - regmap_update_bits(regmap, SUN6I_CSI_CAP_REG, > - SUN6I_CSI_CAP_VCAP_ON, 0); > - regmap_write(regmap, SUN6I_CSI_CH_INT_EN_REG, 0); > - return; > - } > - > - regmap_write(regmap, SUN6I_CSI_CH_INT_STA_REG, > - SUN6I_CSI_CH_INT_STA_CLEAR); > - regmap_write(regmap, SUN6I_CSI_CH_INT_EN_REG, > - SUN6I_CSI_CH_INT_EN_VS | > - SUN6I_CSI_CH_INT_EN_HB_OF | > - SUN6I_CSI_CH_INT_EN_FIFO2_OF | > - SUN6I_CSI_CH_INT_EN_FIFO1_OF | > - SUN6I_CSI_CH_INT_EN_FIFO0_OF | > - SUN6I_CSI_CH_INT_EN_FD | > - SUN6I_CSI_CH_INT_EN_CD); > - > - regmap_update_bits(regmap, SUN6I_CSI_CAP_REG, SUN6I_CSI_CAP_VCAP_ON, > - SUN6I_CSI_CAP_VCAP_ON); > -} > - > /* Media */ > > static const struct media_device_ops sun6i_csi_media_ops = { > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h > b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h index > 44fc4d486877..155527961280 100644 > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h > @@ -92,13 +92,6 @@ int sun6i_csi_set_power(struct sun6i_csi_device *csi_dev, > bool enable); int sun6i_csi_update_config(struct sun6i_csi_device *csi_dev, > struct sun6i_csi_config *config); > > -/** > - * sun6i_csi_set_stream() - start/stop csi streaming > - * @csi: pointer to the csi > - * @enable: start/stop > - */ > -void sun6i_csi_set_stream(struct sun6i_csi_device *csi_dev, bool enable); > - > /* get bpp form v4l2 pixformat */ > static inline int sun6i_csi_get_bpp(unsigned int pixformat) > { > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c > b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c index > 7788cbab7810..72fcc60d2695 100644 > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c > @@ -107,6 +107,51 @@ static bool sun6i_csi_capture_format_check(u32 format) > > /* Capture */ > > +static void sun6i_csi_capture_irq_enable(struct sun6i_csi_device *csi_dev) > +{ > + struct regmap *regmap = csi_dev->regmap; > + > + regmap_write(regmap, SUN6I_CSI_CH_INT_EN_REG, > + SUN6I_CSI_CH_INT_EN_VS | > + SUN6I_CSI_CH_INT_EN_HB_OF | > + SUN6I_CSI_CH_INT_EN_FIFO2_OF | > + SUN6I_CSI_CH_INT_EN_FIFO1_OF | > + SUN6I_CSI_CH_INT_EN_FIFO0_OF | > + SUN6I_CSI_CH_INT_EN_FD | > + SUN6I_CSI_CH_INT_EN_CD); > +} > + > +static void sun6i_csi_capture_irq_disable(struct sun6i_csi_device *csi_dev) > +{ > + struct regmap *regmap = csi_dev->regmap; > + > + regmap_write(regmap, SUN6I_CSI_CH_INT_EN_REG, 0); > +} > + > +static void sun6i_csi_capture_irq_clear(struct sun6i_csi_device *csi_dev) > +{ > + struct regmap *regmap = csi_dev->regmap; > + > + regmap_write(regmap, SUN6I_CSI_CH_INT_EN_REG, 0); > + regmap_write(regmap, SUN6I_CSI_CH_INT_STA_REG, > + SUN6I_CSI_CH_INT_STA_CLEAR); > +} > + > +static void sun6i_csi_capture_enable(struct sun6i_csi_device *csi_dev) > +{ > + struct regmap *regmap = csi_dev->regmap; > + > + regmap_update_bits(regmap, SUN6I_CSI_CAP_REG, SUN6I_CSI_CAP_VCAP_ON, > + SUN6I_CSI_CAP_VCAP_ON); > +} > + > +static void sun6i_csi_capture_disable(struct sun6i_csi_device *csi_dev) > +{ > + struct regmap *regmap = csi_dev->regmap; > + > + regmap_update_bits(regmap, SUN6I_CSI_CAP_REG, SUN6I_CSI_CAP_VCAP_ON, 0); > +} > + > static void > sun6i_csi_capture_buffer_configure(struct sun6i_csi_device *csi_dev, > struct sun6i_csi_buffer *csi_buffer) > @@ -357,6 +402,10 @@ static int sun6i_csi_capture_start_streaming(struct > vb2_queue *queue, goto error_media_pipeline; > } > > + /* Clear */ > + > + sun6i_csi_capture_irq_clear(csi_dev); > + > /* Configure */ > > sun6i_csi_capture_configure(csi_dev); > @@ -367,7 +416,8 @@ static int sun6i_csi_capture_start_streaming(struct > vb2_queue *queue, > > /* Enable */ > > - sun6i_csi_set_stream(csi_dev, true); > + sun6i_csi_capture_irq_enable(csi_dev); > + sun6i_csi_capture_enable(csi_dev); > > ret = v4l2_subdev_call(subdev, video, s_stream, 1); > if (ret && ret != -ENOIOCTLCMD) > @@ -376,7 +426,8 @@ static int sun6i_csi_capture_start_streaming(struct > vb2_queue *queue, return 0; > > error_stream: > - sun6i_csi_set_stream(csi_dev, false); > + sun6i_csi_capture_disable(csi_dev); > + sun6i_csi_capture_irq_disable(csi_dev); > > error_media_pipeline: > media_pipeline_stop(&video_dev->entity); > @@ -397,7 +448,8 @@ static void sun6i_csi_capture_stop_streaming(struct > vb2_queue *queue) if (subdev) > v4l2_subdev_call(subdev, video, s_stream, 0); > > - sun6i_csi_set_stream(csi_dev, false); > + sun6i_csi_capture_disable(csi_dev); > + sun6i_csi_capture_irq_disable(csi_dev); > > media_pipeline_stop(&capture->video_dev.entity); _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel