From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B4B33016E0 for ; Sun, 9 Aug 2026 18:01:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786298478; cv=none; b=KKeY02td6wAIjvotaETA5XxU0JjcIGo7jx3QWrC1PM/fIUH4JOMGBwituGujsHdq6AkXl6+Mn9EyIMuDhIFqG4wVhZ+HYgBOstnBXKZ6D0kppCiaDivpxbN0u+loHnlXIYebdxT1w9VZbeU8Fbzi5+gNht+ZDa8/7q9RCUIodSc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786298478; c=relaxed/simple; bh=gzifpgE9ICFIAAZYvC8/pUI2qeWn+jZ0r69/l67bSCI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=f2N6TH81SEBa9ZRHtmAF6ncFpET0gG1pR+7mIcWxVn9sX/7rYQLBaQoRLpFNs60G2DIz/0MfkAGv+sNhdIaKo1q168xyw20PlrFCfCiHnchBCYwNBsGs/LWsJYeAHKctfG5CCviIZ3jrPHy9E0Js01lCg3uSETZh8jxzqCf/AEg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=N/QNOwaP; arc=none smtp.client-ip=209.85.216.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="N/QNOwaP" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-38e08baf860so1021319a91.2 for ; Sun, 09 Aug 2026 11:01:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786298476; x=1786903276; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=SufUvnVfKIwI4mamqZ79S0mhPSYgYY811KsbCw73B2k=; b=N/QNOwaPnquDk7kj4QhBvxWPo/B91DMhpS1Fv40BnePt/bJqfB/uJo9rNGl4Q1KeKi Df13IURqv1+GupxIiyJz90udIH5FxjCVuxoTs6rws9gEkmV+Xmk1ftw/V9TTxoxCHAFa C6GyBJtzWkxRtOZ1VnUUd9WRlHmUmXQH9Lc0j34YPMrnlZy0AE27y4znSb8inVm7bzzV P4hevld60FbwPoKvYpcHVIikFL4I8f5Eip6quJ2lesbSA9qDUtkYrAWBc0Rg2JVyCuFP iPyZaojj6/IJZIEh+EdHmztT4slhW+Cd5GtYJ+KpSPNnym9DIJVyQhpCZdEBTocVNSHz fxSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786298476; x=1786903276; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SufUvnVfKIwI4mamqZ79S0mhPSYgYY811KsbCw73B2k=; b=N0p2V8DqzHPFPGMtCkkSCjoZL30Mbv4tu6mEI8tXrZT8Vg5Ex4/xdmRZwGlNkikqXH kWI6zvBE3mz7PGavj/vILByTLNGz9PN5XTcPUu6bOIiVEgesT8dS4l9ixMoe3evMknJH yoJ5Uf9UiQdn8u1y8gEy4egtXKGw0/JzTPMUNCk0EQmZ1zCKmWwFcup88GOip112U6vd Mgr6LSoij535sVsK+qYcM6JkgNa423ci1jVwROmA8r4CGEQkvbN41al4+l+0x6xQvdzh G/9kXHR+i2U69hSti1PdqfXon5aM8YK2dmPwIETwBZcTpSRn4A2SNbfSOO7WRqQmQt6G NloQ== X-Forwarded-Encrypted: i=1; AHgh+RoPkn17kTP86tIwRgWC0AqEnKLTlWlXjpRNmZZ7LnkT1n5CxTpe5Bh9DWRmXy1Mcnr3Ieq6gW2mQrZiAl8=@vger.kernel.org X-Gm-Message-State: AOJu0YyMiOF3vYboWpbTmHZOFXK+INi6PuEpDOj2Z18yyBc/OPQbtt06 srMYFWq9q7/e2YlHUYo2G/iAJaLbpcjrUbis0Bf66lBD/dkk+BOkovG4 X-Gm-Gg: AR+sD12JIqTHBHGvC+XjoTIEVIOUNkOdFwwekNn0GUuvmMcUPIdkTjqRQ5gxWTNmwHY QKQaoKeMLH56M0so8RZyS03hYb0ctLX2iUue2/ALZ2MaPUP3p6vHJm8DxGHXxd4JzjgxAZgN5PM RqdJdD3f8dn2XfWf6RCLYNkMr2mIbWvYvtG3DkwObqs/2qfrtQ9XTF5Y9bJlNFsZeJkikQ+uHra Sir/0DTHKva5FXz7AkARe92E79+ljHBBnOKKX10suwzw2DspVc1Tila3Sk0pSzTilCtxYBn/TD0 M/2Z11GMFga9YayLYbAacXepyZtYR3JC4XZ181PEpliZtV9DV4VyMpQy2CfcVQb4mCzC2vVk6mw PrspOe80fR56dP2UcFm9OQk8dgXDO1F31S7aeeSbyl9+wRzerSrQSAfx9cW3i1Xlx7jt6xjMKvF V5hNxb4dNH6jOuvIwFQCJ2Qx/exeAc+3YpcPXFKR+TewL2NxPFo7YMJwc4vrc= X-Received: by 2002:a17:90b:540f:b0:38f:5801:dc0e with SMTP id 98e67ed59e1d1-3903c5b7247mr40709313a91.15.1786298476026; Sun, 09 Aug 2026 11:01:16 -0700 (PDT) Received: from PC.. ([103.172.209.59]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-315bebde353sm37111527eec.23.2026.08.09.11.01.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Aug 2026 11:01:15 -0700 (PDT) From: Mohit Mishra To: Hans de Goede , Mauro Carvalho Chehab Cc: Mohit Mishra , Sakari Ailus , Andy Shevchenko , Greg Kroah-Hartman , linux-media@vger.kernel.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH] [RFC PATCH] staging: media: atomisp: remove redundant ov2722_startup() helper Date: Sun, 9 Aug 2026 23:31:05 +0530 Message-ID: <20260809180105.58428-1-mishraloopmohit@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit In atomisp-ov2722.c, ov2722_startup() was invoked inside ov2722_set_fmt() to program sensor hardware registers during format negotiation, accompanied by a "TODO: remove it" comment. Standard V4L2 subdevice drivers do not program hardware registers during .set_fmt(), but defer hardware register configuration to stream start (.s_stream(1)). This patch: 1. Removes the ov2722_startup() helper function and its TODO comment. 2. Refactors register initialization into a static ov2722_startup_registers() helper. 3. Moves sensor software reset and resolution register array configuration into ov2722_s_stream() when enable == 1. 4. Preserves the PMIC power-cycle retry loop on startup failure inside ov2722_s_stream(1) to maintain hardware fault-tolerance for AtomISP tablets. 5. Updates ov2722_set_fmt() to purely update internal software state. BEHAVIORAL RISK & UNTESTED NOTICE: This is a functional timing change. Deferring hardware register writes to .s_stream(1) has not been tested on physical Intel AtomISP hardware. Submitted as RFC for review by AtomISP maintainers (Hans de Goede, Mauro Carvalho Chehab). Signed-off-by: Mohit Mishra --- .../media/atomisp/i2c/atomisp-ov2722.c | 109 +++++++++--------- 1 file changed, 53 insertions(+), 56 deletions(-) diff --git a/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c b/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c index 2c41c496daa6..5cbfbe5217a4 100644 --- a/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c +++ b/drivers/staging/media/atomisp/i2c/atomisp-ov2722.c @@ -599,39 +599,14 @@ static int ov2722_s_power(struct v4l2_subdev *sd, int on) return ret; } -/* TODO: remove it. */ -static int ov2722_startup(struct v4l2_subdev *sd) -{ - struct ov2722_device *dev = to_ov2722_sensor(sd); - struct i2c_client *client = v4l2_get_subdevdata(sd); - int ret = 0; - - ret = ov2722_write_reg(client, OV2722_8BIT, - OV2722_SW_RESET, 0x01); - if (ret) { - dev_err(&client->dev, "ov2722 reset err.\n"); - return ret; - } - - ret = ov2722_write_reg_array(client, dev->res->regs); - if (ret) { - dev_err(&client->dev, "ov2722 write register err.\n"); - return ret; - } - - return ret; -} - static int ov2722_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_state *sd_state, struct v4l2_subdev_format *format) { struct v4l2_mbus_framefmt *fmt = &format->format; struct ov2722_device *dev = to_ov2722_sensor(sd); - struct i2c_client *client = v4l2_get_subdevdata(sd); struct ov2722_resolution *res; struct camera_mipi_info *ov2722_info = NULL; - int ret = 0; if (format->pad) return -EINVAL; @@ -662,38 +637,8 @@ static int ov2722_set_fmt(struct v4l2_subdev *sd, dev->pixels_per_line = dev->res->pixels_per_line; dev->lines_per_frame = dev->res->lines_per_frame; - ret = ov2722_startup(sd); - if (ret) { - int i = 0; - - dev_err(&client->dev, "ov2722 startup err, retry to power up\n"); - for (i = 0; i < OV2722_POWER_UP_RETRY_NUM; i++) { - dev_err(&client->dev, - "ov2722 retry to power up %d/%d times, result: ", - i + 1, OV2722_POWER_UP_RETRY_NUM); - power_down(sd); - ret = power_up(sd); - if (ret) { - dev_err(&client->dev, "power up failed, continue\n"); - continue; - } - ret = ov2722_startup(sd); - if (ret) { - dev_err(&client->dev, " startup FAILED!\n"); - } else { - dev_err(&client->dev, " startup SUCCESS!\n"); - break; - } - } - if (ret) { - dev_err(&client->dev, "ov2722 startup err\n"); - goto err; - } - } - -err: mutex_unlock(&dev->input_lock); - return ret; + return 0; } static int ov2722_get_fmt(struct v4l2_subdev *sd, @@ -746,6 +691,26 @@ static int ov2722_detect(struct i2c_client *client) return 0; } +static int ov2722_startup_registers(struct v4l2_subdev *sd) +{ + struct ov2722_device *dev = to_ov2722_sensor(sd); + struct i2c_client *client = v4l2_get_subdevdata(sd); + int ret; + + ret = ov2722_write_reg(client, OV2722_8BIT, + OV2722_SW_RESET, 0x01); + if (ret) { + dev_err(&client->dev, "ov2722 reset err.\n"); + return ret; + } + + ret = ov2722_write_reg_array(client, dev->res->regs); + if (ret) + dev_err(&client->dev, "ov2722 write register err.\n"); + + return ret; +} + static int ov2722_s_stream(struct v4l2_subdev *sd, int enable) { struct ov2722_device *dev = to_ov2722_sensor(sd); @@ -754,10 +719,42 @@ static int ov2722_s_stream(struct v4l2_subdev *sd, int enable) mutex_lock(&dev->input_lock); + if (enable) { + ret = ov2722_startup_registers(sd); + if (ret) { + int i; + + dev_err(&client->dev, "ov2722 startup err, retry to power up\n"); + for (i = 0; i < OV2722_POWER_UP_RETRY_NUM; i++) { + dev_err(&client->dev, + "ov2722 retry to power up %d/%d times, result: ", + i + 1, OV2722_POWER_UP_RETRY_NUM); + power_down(sd); + ret = power_up(sd); + if (ret) { + dev_err(&client->dev, "power up failed, continue\n"); + continue; + } + ret = ov2722_startup_registers(sd); + if (ret) { + dev_err(&client->dev, " startup FAILED!\n"); + } else { + dev_err(&client->dev, " startup SUCCESS!\n"); + break; + } + } + if (ret) { + dev_err(&client->dev, "ov2722 startup err\n"); + goto unlock; + } + } + } + ret = ov2722_write_reg(client, OV2722_8BIT, OV2722_SW_STREAM, enable ? OV2722_START_STREAMING : OV2722_STOP_STREAMING); +unlock: mutex_unlock(&dev->input_lock); return ret; } -- 2.43.0