Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2834447pxv; Mon, 12 Jul 2021 03:06:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzkVOtwLbgffjfpVwWTLctd6FUzA25QO3t/7x7dpDHMeEDBUNUQ+f9/u6xIzfMhQ+lxjUq8 X-Received: by 2002:a02:8184:: with SMTP id n4mr10159587jag.17.1626084383350; Mon, 12 Jul 2021 03:06:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626084383; cv=none; d=google.com; s=arc-20160816; b=nCEGLV1AxD01GbkZNtFekSiRvIyKpvD5IfrQEHxR/ydtCsMuXhXhtpS1N2OBuhXlWC OhaD4LD8bu0p3RbzjUByBw9CEoW04ajL7N6BHUlwoRW7aSFIQv8fvC/7lcAGSWbduHvq 7i8E8O56nlLdz1KRLnQi81aE+nEPxRiDcgHEJxfWPI4adLhWGrfLxOPZQcokMry9U72P mGReiRfXvfIAILxnzcxyTBmI2xtjBifpTpXrxstdT3opm+OYXI5fBF/KgkpWIkHpkquE j0+sTd+QhreMbMAIUAhO1S3MJ66iyfZl2v75HsLNRmBOE8G5/3wV1DC5FaemYugwOVc7 Oqgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=1sgnFiznSsVgmoms77A1qdsxmpgNqIo7RdQzS2/UZeU=; b=FxJLVban5jZJ8d8qyypg0R7ojx8REBT3/+b9OsY7sBf1+rWYhrGK75Fycaw0Ga0Abk 5Qr6HzG3YmxLBWZTHuqAbKzqtu7rhDiaIWia6Z8UYFiVqL0JAeXN3hNaiokiHgVf87rS 4gsNFkg2RjpZPbDHr8aikqV6OnrE0jPcebcUyLftaRadwrdAT5undbDXEoL+EGFnO07W pBa3/naynMLFcL55u0Ugmura4cXJTxwnBSgJcPqQXdTIyMW8BZAQqWTLb5cr2rLZRNXg 4QLwZY6GwoVfMNdRtXRODlW0BoydlwPKNlXOCUOH7HHN1pWoZ91HEF52hFUCwPTan6pK iXZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=BmQBCa8J; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y1si6714745jap.90.2021.07.12.03.06.11; Mon, 12 Jul 2021 03:06:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=BmQBCa8J; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348197AbhGLHkt (ORCPT + 99 others); Mon, 12 Jul 2021 03:40:49 -0400 Received: from mail.kernel.org ([198.145.29.99]:42548 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244140AbhGLHK1 (ORCPT ); Mon, 12 Jul 2021 03:10:27 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A53AF613B6; Mon, 12 Jul 2021 07:06:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626073591; bh=vdtF+omV7OLYAa/FCSoY7v45LfrG1AYg+8i89VthYI0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BmQBCa8JGFczB9oqelTmT6zkVt1X6pAjIwfk2Q0pfNqXuwwu/EpANScpwuOZUJ3I3 zwp+R4OjmLdq/zky60mS+ejWEo4uttpNLI/U6Dd/Hx/HjRc/FynbvJwS5wAreGGePU VENpFe/7J3UUqIz1T51d3imUP4YjniyhenQkKmQo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jacopo Mondi , Kieran Bingham , Laurent Pinchart , Hans Verkuil , Mauro Carvalho Chehab , Sasha Levin Subject: [PATCH 5.12 292/700] media: i2c: rdacm21: Fix OV10640 powerup Date: Mon, 12 Jul 2021 08:06:15 +0200 Message-Id: <20210712061007.313438248@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060924.797321836@linuxfoundation.org> References: <20210712060924.797321836@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jacopo Mondi [ Upstream commit ff75332b260cd33cc19000fdb5d256d9db4470d1 ] The OV10640 image sensor powerdown signal is controlled by the first line of the OV490 GPIO pad #1, but the pad #0 identifier OV490_GPIO_OUTPUT_VALUE0 was erroneously used. As a result the image sensor powerdown signal was never asserted but was left floating and kept high by an internal pull-up resistor, causing sporadic failures during the image sensor startup phase. Fix this by using the correct GPIO pad identifier and wait the mandatory 1.5 millisecond delay after the powerup lane is asserted. The reset delay is not characterized in the chip manual if not as "255 XVCLK + initialization". Wait for at least 3 milliseconds to guarantee the SCCB bus is available. While at it also fix the reset sequence, as the reset line was released before the powerdown one, and the line was not cycled. This commit fixes a sporadic start-up error triggered by a failure to read the OV10640 chip ID: rdacm21 8-0054: OV10640 ID mismatch: (0x01) Fixes: a59f853b3b4b ("media: i2c: Add driver for RDACM21 camera module") Signed-off-by: Jacopo Mondi Reviewed-by: Kieran Bingham Reviewed-by: Laurent Pinchart Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/i2c/rdacm21.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/rdacm21.c b/drivers/media/i2c/rdacm21.c index 179d107f494c..4b0dfd0a75e1 100644 --- a/drivers/media/i2c/rdacm21.c +++ b/drivers/media/i2c/rdacm21.c @@ -333,13 +333,19 @@ static int ov10640_initialize(struct rdacm21_device *dev) { u8 val; - /* Power-up OV10640 by setting RESETB and PWDNB pins high. */ + /* Enable GPIO0#0 (reset) and GPIO1#0 (pwdn) as output lines. */ ov490_write_reg(dev, OV490_GPIO_SEL0, OV490_GPIO0); ov490_write_reg(dev, OV490_GPIO_SEL1, OV490_SPWDN0); ov490_write_reg(dev, OV490_GPIO_DIRECTION0, OV490_GPIO0); ov490_write_reg(dev, OV490_GPIO_DIRECTION1, OV490_SPWDN0); + + /* Power up OV10640 and then reset it. */ + ov490_write_reg(dev, OV490_GPIO_OUTPUT_VALUE1, OV490_SPWDN0); + usleep_range(1500, 3000); + + ov490_write_reg(dev, OV490_GPIO_OUTPUT_VALUE0, 0x00); + usleep_range(1500, 3000); ov490_write_reg(dev, OV490_GPIO_OUTPUT_VALUE0, OV490_GPIO0); - ov490_write_reg(dev, OV490_GPIO_OUTPUT_VALUE0, OV490_SPWDN0); usleep_range(3000, 5000); /* Read OV10640 ID to test communications. */ -- 2.30.2