Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp381845iog; Wed, 29 Jun 2022 02:07:06 -0700 (PDT) X-Google-Smtp-Source: AGRyM1ueLJzR7CsUpUQpUAisbMRMlcX4F4NxcGyGwTpEyxmUPHsfgwpcgQT7HBiez6l379B6iM/7 X-Received: by 2002:a17:906:2dd:b0:712:1293:3dd8 with SMTP id 29-20020a17090602dd00b0071212933dd8mr2249534ejk.448.1656493625936; Wed, 29 Jun 2022 02:07:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656493625; cv=none; d=google.com; s=arc-20160816; b=dku3tt3FnfZqOUO1BJR9g7nqkmRRNeEecZzjm2Q2dJAdmtRA7vxWFqoYC6eJnJbReE 9Sp25gp71XjU+0DK0US7XXEsS0RBpqiUAkxBJcV6v26vN4c2bbpZst053ylWFl72vxc/ 2YZLq8c/kJhnRxTOjVSqjLqR/3r3l2JSnnVZyhmhhFf+7730HDJgEK3Wr7+7CJ1t6+YU r7Kj1E4fNNpaG/bPk1iyJXuBmBQKAeOqKmpmQ4gRjQzIi40pgdp9qVlYS9zHC0t8HBaA RtkPjmJ3xAM3TzVez/GYcdRQAUIj9aF8OUpQlLVfyHKYvV0GmIXYMaMnkWuPU1A2kYIj XT3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=rzB08wF3B5Mi2H0Vp5UrrRy8lseaigONHZqHC+ul6qg=; b=bYs/UPRovNJ5Khh6chcy9NMKyHBnyzHNWaS1wPrvIc93JmkCMtS4uTLTvN4sUdqvlx Ck4rZESQwqB1oQHk/kvoQ9vIGkK4uukx6cJC5qLi2lehkfLabzJhb29X2EhTC+/b1HJg gviWhz3Fw1tPoxIFwlx8HJRDpUOH3AXCtfKYyOt4VhU2VhXPeiYfrjBwHZEFViXPJepU QXiNFHJLHB9fZfJPQ6XIw4M6Rboa/OBD39tyGCZFLHVAK+I6DFRtLbOMd/Wy9SMC4T1m 7I1fVqF9XV8rIoeecwSnABjR43pCDK+Dg2ip4FK4qWP2j6kCUk10Pm8qdhyADQaDqqmk pj5A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ec5-20020a170906b6c500b00711da98d1besi1571816ejb.251.2022.06.29.02.06.40; Wed, 29 Jun 2022 02:07:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232123AbiF2IQo (ORCPT + 99 others); Wed, 29 Jun 2022 04:16:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60340 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229772AbiF2IQm (ORCPT ); Wed, 29 Jun 2022 04:16:42 -0400 Received: from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net [217.70.183.196]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CAD293BA5D; Wed, 29 Jun 2022 01:16:40 -0700 (PDT) Received: (Authenticated sender: jacopo@jmondi.org) by mail.gandi.net (Postfix) with ESMTPSA id 732FFE000A; Wed, 29 Jun 2022 08:16:37 +0000 (UTC) Date: Wed, 29 Jun 2022 10:16:35 +0200 From: Jacopo Mondi To: Tommaso Merciai , Daniel Scally Cc: linuxfancy@googlegroups.com, linux-amarula@amarulasolutions.com, quentin.schulz@theobroma-systems.com, Daniel Scally , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 4/7] media: ov5693: move hw cfg functions into ov5693_check_hwcfg Message-ID: <20220629081635.zvdj6pzodg4rhrdf@uno.localdomain> References: <20220627150453.220292-1-tommaso.merciai@amarulasolutions.com> <20220627150453.220292-5-tommaso.merciai@amarulasolutions.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20220627150453.220292-5-tommaso.merciai@amarulasolutions.com> X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Tommaso, On Mon, Jun 27, 2022 at 05:04:50PM +0200, Tommaso Merciai wrote: > Move hw configuration functions into ov5693_check_hwcfg. This is done to > separe the code that handle the hw cfg from probe in a clean way s/separe/separate/ You also seem to change the logic of the clk handling, please mention this in the commit message, otherwise one could be fooled into thinking you're only moving code around with no functional changes... > > Signed-off-by: Tommaso Merciai > --- > drivers/media/i2c/ov5693.c | 53 +++++++++++++++++++++++--------------- > 1 file changed, 32 insertions(+), 21 deletions(-) > > diff --git a/drivers/media/i2c/ov5693.c b/drivers/media/i2c/ov5693.c > index d2adc5513a21..d5a934ace597 100644 > --- a/drivers/media/i2c/ov5693.c > +++ b/drivers/media/i2c/ov5693.c > @@ -1348,6 +1348,38 @@ static int ov5693_check_hwcfg(struct ov5693_device *ov5693) > struct fwnode_handle *endpoint; > unsigned int i; > int ret; > + u32 xvclk_rate; nit: move it up to maintain reverse-xmas-tree order (I know, it's an annoying comment, but since variables are already declared in this order..) > + > + ov5693->xvclk = devm_clk_get(ov5693->dev, "xvclk"); Isn't this broken ? if you use ov5693->xvclk to identify the ACPI vs OF use case shouldn't you use the get_optionl() version ? Otherwise in the ACPI case you will have -ENOENT if there's not 'xvclk' property and bail out. Unless my understanding is wrong on ACPI we have "clock-frequency" and on OF "xvclk" with an "assigned-clock-rates", Dan you upstreamed this driver and I assume it was tested on ACPI ? Can you clarify how this worked for you, as it seems the original code wanted a mandatory "xvclk" ? Are there ACPI tables with an actual 'xvclk' property ? > + if (IS_ERR(ov5693->xvclk)) > + return dev_err_probe(ov5693->dev, PTR_ERR(ov5693->xvclk), > + "failed to get xvclk: %ld\n", > + PTR_ERR(ov5693->xvclk)); > + > + if (ov5693->xvclk) { > + xvclk_rate = clk_get_rate(ov5693->xvclk); > + } else { > + ret = fwnode_property_read_u32(fwnode, "clock-frequency", > + &xvclk_rate); > + > + if (ret) { > + dev_err(ov5693->dev, "can't get clock frequency"); > + return ret; > + } > + } > + > + if (xvclk_rate != OV5693_XVCLK_FREQ) > + dev_warn(ov5693->dev, "Found clk freq %u, expected %u\n", > + xvclk_rate, OV5693_XVCLK_FREQ); > + > + ret = ov5693_configure_gpios(ov5693); > + if (ret) > + return ret; > + > + ret = ov5693_get_regulators(ov5693); > + if (ret) > + return dev_err_probe(ov5693->dev, ret, > + "Error fetching regulators\n"); > > endpoint = fwnode_graph_get_next_endpoint(fwnode, NULL); > if (!endpoint) > @@ -1390,7 +1422,6 @@ static int ov5693_check_hwcfg(struct ov5693_device *ov5693) > static int ov5693_probe(struct i2c_client *client) > { > struct ov5693_device *ov5693; > - u32 xvclk_rate; > int ret = 0; > > ov5693 = devm_kzalloc(&client->dev, sizeof(*ov5693), GFP_KERNEL); > @@ -1408,26 +1439,6 @@ static int ov5693_probe(struct i2c_client *client) > > v4l2_i2c_subdev_init(&ov5693->sd, client, &ov5693_ops); > > - ov5693->xvclk = devm_clk_get(&client->dev, "xvclk"); > - if (IS_ERR(ov5693->xvclk)) { > - dev_err(&client->dev, "Error getting clock\n"); > - return PTR_ERR(ov5693->xvclk); > - } > - > - xvclk_rate = clk_get_rate(ov5693->xvclk); > - if (xvclk_rate != OV5693_XVCLK_FREQ) > - dev_warn(&client->dev, "Found clk freq %u, expected %u\n", > - xvclk_rate, OV5693_XVCLK_FREQ); > - > - ret = ov5693_configure_gpios(ov5693); > - if (ret) > - return ret; > - > - ret = ov5693_get_regulators(ov5693); > - if (ret) > - return dev_err_probe(&client->dev, ret, > - "Error fetching regulators\n"); > - > ov5693->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; > ov5693->pad.flags = MEDIA_PAD_FL_SOURCE; > ov5693->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR; > -- > 2.25.1 >