From nobody Sun Feb 8 04:57:38 2026 Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D46F8313E17; Wed, 31 Dec 2025 08:40:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.178.238 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767170439; cv=fail; b=SI8/inMS8xDEg7qeaIzgiVL/UyJCK3rs7holkgCtIQj+Nk9QDbOOWMJ92yKkxh7UG2lyDnPDQoFFuxpR5R0tW3RDReg+qhnf9AnDodXp9k0sfKl+tRCepEek5exWcCWeS4UXtqsGBlUHkfyLqMkVVquMHAaLi7Y0PnAmFUfi3Ho= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767170439; c=relaxed/simple; bh=5yxxgPAeXZ1E04TQue27FURhYNttyjrxK/3lWV1Fkw4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cURJXIvj7BPnUGvdDV6CZ4qRWm/TQssMHpp/IFs9O6bVpxJchwBsrCV7RWmUA43qo86JnF1LfPCFtb29eOgJZUWCsiztbASpjd6FfXd1KMd9YDptrrNhmStrk8mYVssGgw7+V3NY2sXtsF6pSKT7m/qlJ35nrpf13B3Y7sf0oxI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=windriver.com; spf=pass smtp.mailfrom=windriver.com; dkim=pass (2048-bit key) header.d=windriver.com header.i=@windriver.com header.b=dT2EdB63; arc=fail smtp.client-ip=205.220.178.238 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=windriver.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=windriver.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=windriver.com header.i=@windriver.com header.b="dT2EdB63" Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BV89iVF210755; Wed, 31 Dec 2025 08:40:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=4iuzLszjgoMEOTRj87tcHoYD732QLPd4XlRN9zJMvKU=; b= dT2EdB63BLXF0DK1u7cDDk6yr9Z1FIeG+PIIjAokA/2k6LQB64F67SieG9S+CFh2 MBXnySeU4pg2prHlKCOTavHpsh9ihw7Tp65UHCShv258qNP9cyxB/6nI+0JHk3yW 0JdVi14qPjyfNsWgsJby3evVBCCFAPEgNxaehB+B3j6DH5vX7eQ9eo7B93yC1pfB heUFNNymqRrvqgmeNN52EqkiSlBmj/9IUsrGzGF8DVQ1Yjwbhqi5xXDNacvkvadO KlPX38V5bYkcluLUqIdxl9F5Nzq1Ur4w0OZMjgT8EZcrAOwP3VRFOl1Z5x6lumkD pNZpsE5p6p4CcxUnh9PE5A== Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011030.outbound.protection.outlook.com [40.93.194.30]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4ba4nxur18-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Wed, 31 Dec 2025 08:40:13 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uN7q7QZ6k4IxouH01hiEzLyQWwBMo6AMcffpgo743LUN9y7EMkQwcB3pna6QJQOvxm8XXl6g+FT582ecW8orqaSbyv3e34EzH7UwKm0zTSDopFKznwuj8m6q4N8SAtOUqGTwye+f2XvD2eLDB3/xJySPidrB/uKeGCIM5GkxP5MSmENOWP280k8NCJQ2VjSV4+kVfglVbjBs4hL0awaGCHbT52xRTSqQ2c7PFgDURlifgUo9LFj6dK/8WoBz8mRtxKuN+2McW9IjOgbfbBDyC8PRMKuzTgRQWLrTDZ+1tLyrJjm4csMzoigqcMsfxTK0wxUzAcYw4jng9efVLaNESw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4iuzLszjgoMEOTRj87tcHoYD732QLPd4XlRN9zJMvKU=; b=FFtPMxYsZR7bBqsrREELaQ0ajOSeCqDy08qWBtW4m0LDjC+Lum82U0VraUSQyNVQiI2w5NkMmTEtococR8op//Ny0FKBBsMjcx2dWFf/pchbEFDBorEpmiWfqGsjDBdErfV4JeYSJxrsRTJpTZAmtI/GFgWwCpSTdDnygDYN1cE4swb0pdqMp4YuTuNqxj16jGGrKDOfKJv6kKr3NdyuIafR3TfbCj8Mc882QvVZ29qvHL0XxNngEWebB1zEHnXQh1b8jDUcBjUjkQDP8pV0ykB5+ArD6XfsjjyVa6CgnurlFuPDwGyJpTfB8OJiSaZuCzaBOQSy7MQptIJwv638LQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=windriver.com; dmarc=pass action=none header.from=windriver.com; dkim=pass header.d=windriver.com; arc=none Received: from DS4PPFD667CEBB6.namprd11.prod.outlook.com (2603:10b6:f:fc02::53) by BL4PR11MB8845.namprd11.prod.outlook.com (2603:10b6:208:5aa::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9456.14; Wed, 31 Dec 2025 08:40:11 +0000 Received: from DS4PPFD667CEBB6.namprd11.prod.outlook.com ([fe80::92d2:113:b2d3:1d3e]) by DS4PPFD667CEBB6.namprd11.prod.outlook.com ([fe80::92d2:113:b2d3:1d3e%6]) with mapi id 15.20.9478.004; Wed, 31 Dec 2025 08:40:11 +0000 From: Xiaolei Wang To: tarang.raval@siliconsignals.io, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, dave.stevenson@raspberrypi.com, jacopo@jmondi.org, mchehab@kernel.org, prabhakar.mahadev-lad.rj@bp.renesas.com, hverkuil+cisco@kernel.org, johannes.goede@oss.qualcomm.com, hverkuil-cisco@xs4all.nl, jai.luthra@ideasonboard.com, xiaolei.wang@windriver.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 1/3] media: i2c: ov5647: Convert to CCI register access helpers Date: Wed, 31 Dec 2025 16:39:22 +0800 Message-ID: <20251231083924.2657165-2-xiaolei.wang@windriver.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251231083924.2657165-1-xiaolei.wang@windriver.com> References: <20251231083924.2657165-1-xiaolei.wang@windriver.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR02CA0045.apcprd02.prod.outlook.com (2603:1096:4:196::21) To DS4PPFD667CEBB6.namprd11.prod.outlook.com (2603:10b6:f:fc02::53) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS4PPFD667CEBB6:EE_|BL4PR11MB8845:EE_ X-MS-Office365-Filtering-Correlation-Id: 9159c61c-21ef-4e02-0629-08de484835f8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|376014|1800799024|366016|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?LEsXMVXyQ2Xk+NxfDZEEfR+TPFqOMAU4nlH0KU0CSptXPMqlTnSSX28xITIX?= =?us-ascii?Q?Q6RdwAQH7r88Ooo4dbHS8b9Ucnm3Ejo6CXLv8NF0NjPMw8YXo9MN7a67IlCS?= =?us-ascii?Q?PuI5fNInXgZdmw7nGPZvL2JJxuTjStb/nZNZ+AsVmRUlnRF7OaJSZcqEAsvS?= =?us-ascii?Q?mdklwX47gWLQeFs5oHsLcafGTHdy4E9jvR8Cpdpu/aNa3xw7Sy351aPc0JN7?= =?us-ascii?Q?FSKgIRVlV6xcbC7WuUSqIoA8N+23ZWH47vC6Z9VzgiI85BbSW/opVMHvaPbe?= =?us-ascii?Q?NKYSV6hxZiHIP3vV4F67KEfgajtb1BGCOVxlIBG1rA1rfCl0QU09ErsL1TqM?= =?us-ascii?Q?cd+eGNTxQO8QmIWfoLOSIUIxLH/2LRAlHXdCmqdJBfSqd4lMcO0Bj00uLWVq?= =?us-ascii?Q?ahB0K1YHbUYPkDN/kKLwEw4Pyo/g38MnYgIaLiK2hrYo1sc6SIO03SvWHPQr?= =?us-ascii?Q?3OeXKAIvfTYsJKwxSXe0KpE/LeIgxUtVTdOZ/V79c8wks4tanYCgqvr1Enyr?= =?us-ascii?Q?G/Ux2Ndq+nXnH+sZn5BRoCU2KK5Y1OVDDzcdl03iseOGroTgNXxqW5FcvECA?= =?us-ascii?Q?kA/F+fVbUk++lhcDUj0bnu1s/824ORD+LroVD8UktVTDZ8IcWpama+IEPf44?= =?us-ascii?Q?HnAf12yCsBZG3YYKCRH0ARwYkkFautsrFRw2QVW8slqGnFCOcJ8dORADWZuM?= =?us-ascii?Q?SlGdXrpMNAgofdEIzUUfoVrhOaZCeiy1JruwZbNHbrEzFlCKplqHqPwN0aKL?= =?us-ascii?Q?E8W2ZoA3661BIbsQTsW7BU0rycTAGnYN13GxslBZbqQoJ5UmUQZJxN6IfXWi?= =?us-ascii?Q?BLoBJqbxbuLXiJ4iXQGB3IIKUJZX9m3veek5g358seNHRwMMheox5Dfq4mYN?= =?us-ascii?Q?09P3XrpMGgLw07q0bwOI0QUEUzCRuU/IrbiND1h084u0NauWPDcVBafFCrs7?= =?us-ascii?Q?9rAE/zvDsEyhN8T+W7sZj4AJtvl33IReSEJ4Uloi8apxte1z1mJ6cLNiU4nZ?= =?us-ascii?Q?WVXxBDczAys8gP8GbbAZaA+bGjZPnrQAf/aOZH3pt1XYWPby3GvnMJTYeaMJ?= =?us-ascii?Q?d2ow5wNkhHS3Sen0TWxD8MDJVodAWSfvpBR7f4PJEsvuXglznHwnWmr5JV6S?= =?us-ascii?Q?Gx8U0UWADnW6tOIilCECw/Hq3jseSBqyAL+VYq70XKB+73MKes6BzZVMsIbV?= =?us-ascii?Q?GXcnPjApwAIT0JaL/SFrwoYuC8wOTBmaN1sSdkD9eUWb+TesEuR8zoIes7nO?= =?us-ascii?Q?rlscsZpCRRI+VjN2K5L4YX6X8Yjoofu2psg2BEwG/rR+HQ10Ah5BdrixQHQ3?= =?us-ascii?Q?ryDjqRacOkamaRaTFAJrNaaQQtXwTetsCCFXNZykLBFJx9Gjf5nzVHZPalEh?= =?us-ascii?Q?1GNXaDJ+Lh5kZjBiiXWSu0NjVA8MgvKvIjJm+wS3Syp+M1XtBPuJ4k/EQqmR?= =?us-ascii?Q?BPcSbGYAyfxQVvBw/TnpYBrs6Bva2KYG5l0DriGHR+biOBXVPJrBTLBWkz94?= =?us-ascii?Q?8Ei8IHFMWxeBcfpVV7MPndXKuvc+6qfg9EpKLHKdiV+o82bkdHanGFn6rA?= =?us-ascii?Q?=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFD667CEBB6.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(376014)(1800799024)(366016)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RCYA+OtTUvbSrQf7ht77XRNdtKCJYOdsAA6vyFy5bttZf5+WrHCybX4Ivti8?= =?us-ascii?Q?BVQ4LvgvscKLgmj+yas+xhuPpaHU0XrsyaMMXRiIGH5CEOZsV/JqIPXyKhDj?= =?us-ascii?Q?Uyr8+5FU5v5pDHRJREPP48NxP/p1LYrCKes5Yr7LqSETIEqR7d16EUeyFUXM?= =?us-ascii?Q?7+NuIQ6b7GNv2BYhG/wmOh5r9XvorajsV84DWAxrJXO8IGhjBHSRdqYNzNNo?= =?us-ascii?Q?Ugw3LG6sga4APIlYbP9GxLDj9cl7bCiAeqk/TahcEDzxG3vcECy/Nw1n4ETY?= =?us-ascii?Q?PVpLYWM/SPyDP+a+cnB4GfaOdWHU3qy7fhZwsMIYbCcYlkHIXk8g4Xu8KwuY?= =?us-ascii?Q?E+N4p5HZKnrKUkeXMJIuSvvHrSqZKGwOTqfw9XiEtKRLMIbEjhJCyt/J+M3m?= =?us-ascii?Q?lQqwZ/zBA2RDgli+uQdrzniQjGWiR64EFLXLg1AtXh9OQPydxhlxEFxFxJBU?= =?us-ascii?Q?oLAd0g8VR4jBhYhF003ppuf+Z6edlbzvfffOyUOvlgMtEGlbbOp8BoNFaSiS?= =?us-ascii?Q?cqcj4jJ/lDZAuDjpu52H9cNQAc1GkPUB6Ba6Gd5fybUMFXU22igSZ7vk/nri?= =?us-ascii?Q?AKGPksc7rEWM+6Dg/ae4ToHhMOk2zBHfhMYBn4O5uZq7HyRki6oe/vdfzSZ2?= =?us-ascii?Q?x+SeAS5jmgJ4ZP9TzCZSU32rVoPHFHNFX6HOCLaL5bO7494nSCe5iu6HUIaj?= =?us-ascii?Q?kBXfnqutEgwZ4g5qTjielM/D+ErFi+zn+eAKPcPQHR+iwsnouFv/jdfKRL3H?= =?us-ascii?Q?puSjDOZmEbUq6fKWEYnIZyz7PMD+cQQAdQlvjDurP7SFx27AwGx3ZTtNnp11?= =?us-ascii?Q?9541BOeMqYFJb9GqsS5EQjgoaQm+0RjUXsJ3l3UxsVKJBntIprIRs5aQTfS9?= =?us-ascii?Q?BnL9EZo7VXbnZiX1t1KvKmjopluIt0IFLtuPoRZc95TptlkfVUnZQwJ38Rqr?= =?us-ascii?Q?XOXNmmN6p/Qxj7vHvGe0MZPMZ6ZjGVvdb1aqV3IuITysHYNK/0AyI1gTQvFR?= =?us-ascii?Q?w4opIlCfpebqD8bUebELnbb20BPJRfcNr+pTTHiaun5d8wtm2YRaE0jrbSqj?= =?us-ascii?Q?4Frneuu5uhqUsdkb7aGwANuzEqSPlMuXk/l7x1KI7qpPdeSb6Rn3LHy8i9W9?= =?us-ascii?Q?VGEKriu8XegVKNV3CEQ8g4Ecxr5YqTjAASnBArKNjtIDkUyILjz4B6dmoqWS?= =?us-ascii?Q?iSODcLOBJv3b9/u37Lnzfb/oIu1Qhrbg4Nd8+gOqUaf5YzDG37dqqQBTGa1Z?= =?us-ascii?Q?wZta181h/tTk95g+pjUQ5uNmsR4m6d8vDILLnHYxHK8qsSHM9Nn1H3arqtRU?= =?us-ascii?Q?k5vCrK4CGU4/tzZ2NL8NTKJr9n0eeQlh839VeQ/5CCHN+Qftbis+5ZGMpqzF?= =?us-ascii?Q?z+nvUmdUzu+ew0fwRh4rBOAkqRWb1DupDeLr3Xr6vCPVCryGUwgVXHKJPx2s?= =?us-ascii?Q?U/PsNXULUCqGUFd6Y1VaQwMUC54P+btJ7grT+iptN9msZ8nrP9Y+HJnFryhf?= =?us-ascii?Q?twwMJLqNZeNv0iBkA327nbx2ipIyznJL+CZDZVyfwd4XQW+r5j3vqWpSjQAv?= =?us-ascii?Q?7K2xKhNnX2y0qPGnZ3E1S57RaV8W2V8q1XxHCmZUCnUJIvzfOdXRUGx/xNCq?= =?us-ascii?Q?aDJOrygkoXfwxIkcA89GCvHYSRswpnsUtU2+hRCzpqnR9MbtUnPZrB13n3Je?= =?us-ascii?Q?pg17UDNNnrXZWEpu0W+griMH0OlgIouS5ccw2BRzww7ZZHSc3nDAr9z9KZ5T?= =?us-ascii?Q?sfogIxoiFgO+/SBGDgagLvEpOIqQXwM=3D?= X-OriginatorOrg: windriver.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9159c61c-21ef-4e02-0629-08de484835f8 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFD667CEBB6.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 08:40:11.5290 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ddb2873-a1ad-4a18-ae4e-4644631433be X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tdHRCtALCwOUH/2lYJWDmsTuqYQKg4Cl/pvUCb25hpyclKmMZijrVCdC/YIuYSKQsRHDOYsoIPBKDh5IU7W28flFGR+AvZOfGZIsZUT/2H0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR11MB8845 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjMxMDA3NCBTYWx0ZWRfXwl8veY3NxU+z k5WJJ2Os3VRd7pRZjB8jf0Pu59orxxHjxjSFYFp/8Gcfommi/axWpea958Dd3ZR/7CWjHUNZ5Ac eIOdS21J3nZzo36GdEVW/z1ntDPMNRb6yR2FUspgIfPwjVaoGLSbfusaOnoKd3bUrDncrH8VAuL frmVTZgPle8UaDrwEHIiig3BkYF7X07qNQyEmrftfocRVu8crS68J+gdhyRzmVMvgjPyFOlMYKJ h/+q5j4Gnn0xFa4SA1y0y6ntbhb4yGBYmVyEi2XWqZS+eWmYbvJqooUh2hOr6uwZWBHDKtZP5uB ZmqQ7od9gxT0vb+f05B+bLhUzvfKRbR/kLjZR9cdI7er+jbJVXMlA/Z3Vby4L57pkcVfWtTsuUO /5Q7RUV/6JFjlE5Sc4IOjodRuofQDrwjAKCy6kdbibJc1k6GU6n67XiwgYouDp5AxlTBzCg/2L9 3vNdpY6SlhFncPtaVAw== X-Proofpoint-GUID: PGjjunPWmJa6WUAUIuPOYES1_2RG4seP X-Authority-Analysis: v=2.4 cv=OO0qHCaB c=1 sm=1 tr=0 ts=6954e16d cx=c_pps a=e/sPstj0vE6DIEdYTBOJlw==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=t7CeM3EgAAAA:8 a=MXDipQL8urO0Dm17wfcA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: PGjjunPWmJa6WUAUIuPOYES1_2RG4seP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-31_02,2025-12-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 spamscore=0 priorityscore=1501 adultscore=0 impostorscore=0 bulkscore=0 lowpriorityscore=0 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512310074 Content-Type: text/plain; charset="utf-8" Use the new common CCI register access helpers to replace the private register access helpers in the ov5647 driver. This simplifies the driver by reducing the amount of code. Signed-off-by: Xiaolei Wang --- drivers/media/i2c/Kconfig | 1 + drivers/media/i2c/ov5647.c | 289 +++++++++++++------------------------ 2 files changed, 99 insertions(+), 191 deletions(-) diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 4b4db8c4f496..cce63349e71e 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -529,6 +529,7 @@ config VIDEO_OV5645 =20 config VIDEO_OV5647 tristate "OmniVision OV5647 sensor support" + select V4L2_CCI_I2C help This is a Video4Linux2 sensor driver for the OmniVision OV5647 camera. diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c index e193fef4fced..cbcb760ba5cd 100644 --- a/drivers/media/i2c/ov5647.c +++ b/drivers/media/i2c/ov5647.c @@ -20,8 +20,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -41,24 +43,19 @@ #define MIPI_CTRL00_BUS_IDLE BIT(2) #define MIPI_CTRL00_CLOCK_LANE_DISABLE BIT(0) =20 -#define OV5647_SW_STANDBY 0x0100 -#define OV5647_SW_RESET 0x0103 -#define OV5647_REG_CHIPID_H 0x300a -#define OV5647_REG_CHIPID_L 0x300b -#define OV5640_REG_PAD_OUT 0x300d -#define OV5647_REG_EXP_HI 0x3500 -#define OV5647_REG_EXP_MID 0x3501 -#define OV5647_REG_EXP_LO 0x3502 -#define OV5647_REG_AEC_AGC 0x3503 -#define OV5647_REG_GAIN_HI 0x350a -#define OV5647_REG_GAIN_LO 0x350b -#define OV5647_REG_VTS_HI 0x380e -#define OV5647_REG_VTS_LO 0x380f -#define OV5647_REG_FRAME_OFF_NUMBER 0x4202 -#define OV5647_REG_MIPI_CTRL00 0x4800 -#define OV5647_REG_MIPI_CTRL14 0x4814 -#define OV5647_REG_AWB 0x5001 -#define OV5647_REG_ISPCTRL3D 0x503d +#define OV5647_SW_STANDBY CCI_REG8(0x0100) +#define OV5647_SW_RESET CCI_REG8(0x0103) +#define OV5647_REG_CHIPID CCI_REG16(0x300a) +#define OV5640_REG_PAD_OUT CCI_REG8(0x300d) +#define OV5647_REG_EXPOSURE CCI_REG24(0x3500) +#define OV5647_REG_AEC_AGC CCI_REG8(0x3503) +#define OV5647_REG_GAIN CCI_REG16(0x350a) +#define OV5647_REG_VTS CCI_REG16(0x380e) +#define OV5647_REG_FRAME_OFF_NUMBER CCI_REG8(0x4202) +#define OV5647_REG_MIPI_CTRL00 CCI_REG8(0x4800) +#define OV5647_REG_MIPI_CTRL14 CCI_REG8(0x4814) +#define OV5647_REG_AWB CCI_REG8(0x5001) +#define OV5647_REG_ISPCTRL3D CCI_REG8(0x503d) =20 #define REG_TERM 0xfffe #define VAL_TERM 0xfe @@ -81,23 +78,19 @@ #define OV5647_EXPOSURE_DEFAULT 1000 #define OV5647_EXPOSURE_MAX 65535 =20 -struct regval_list { - u16 addr; - u8 data; -}; - struct ov5647_mode { struct v4l2_mbus_framefmt format; struct v4l2_rect crop; u64 pixel_rate; int hts; int vts; - const struct regval_list *reg_list; + const struct reg_sequence *reg_list; unsigned int num_regs; }; =20 struct ov5647 { struct v4l2_subdev sd; + struct regmap *regmap; struct media_pad pad; struct mutex lock; struct clk *xclk; @@ -130,19 +123,19 @@ static const u8 ov5647_test_pattern_val[] =3D { 0x81, /* Random Data */ }; =20 -static const struct regval_list sensor_oe_disable_regs[] =3D { +static const struct reg_sequence sensor_oe_disable_regs[] =3D { {0x3000, 0x00}, {0x3001, 0x00}, {0x3002, 0x00}, }; =20 -static const struct regval_list sensor_oe_enable_regs[] =3D { +static const struct reg_sequence sensor_oe_enable_regs[] =3D { {0x3000, 0x0f}, {0x3001, 0xff}, {0x3002, 0xe4}, }; =20 -static struct regval_list ov5647_2592x1944_10bpp[] =3D { +static const struct reg_sequence ov5647_2592x1944_10bpp[] =3D { {0x0100, 0x00}, {0x0103, 0x01}, {0x3034, 0x1a}, @@ -230,8 +223,7 @@ static struct regval_list ov5647_2592x1944_10bpp[] =3D { {0x3503, 0x03}, {0x0100, 0x01}, }; - -static struct regval_list ov5647_1080p30_10bpp[] =3D { +static const struct reg_sequence ov5647_1080p30_10bpp[] =3D { {0x0100, 0x00}, {0x0103, 0x01}, {0x3034, 0x1a}, @@ -320,7 +312,7 @@ static struct regval_list ov5647_1080p30_10bpp[] =3D { {0x0100, 0x01}, }; =20 -static struct regval_list ov5647_2x2binned_10bpp[] =3D { +static const struct reg_sequence ov5647_2x2binned_10bpp[] =3D { {0x0100, 0x00}, {0x0103, 0x01}, {0x3034, 0x1a}, @@ -413,7 +405,7 @@ static struct regval_list ov5647_2x2binned_10bpp[] =3D { {0x0100, 0x01}, }; =20 -static struct regval_list ov5647_640x480_10bpp[] =3D { +static const struct reg_sequence ov5647_640x480_10bpp[] =3D { {0x0100, 0x00}, {0x0103, 0x01}, {0x3035, 0x11}, @@ -594,109 +586,35 @@ static const struct ov5647_mode ov5647_modes[] =3D { #define OV5647_DEFAULT_MODE (&ov5647_modes[3]) #define OV5647_DEFAULT_FORMAT (ov5647_modes[3].format) =20 -static int ov5647_write16(struct v4l2_subdev *sd, u16 reg, u16 val) -{ - unsigned char data[4] =3D { reg >> 8, reg & 0xff, val >> 8, val & 0xff}; - struct i2c_client *client =3D v4l2_get_subdevdata(sd); - int ret; - - ret =3D i2c_master_send(client, data, 4); - if (ret < 0) { - dev_dbg(&client->dev, "%s: i2c write error, reg: %x\n", - __func__, reg); - return ret; - } - - return 0; -} - -static int ov5647_write(struct v4l2_subdev *sd, u16 reg, u8 val) -{ - unsigned char data[3] =3D { reg >> 8, reg & 0xff, val}; - struct i2c_client *client =3D v4l2_get_subdevdata(sd); - int ret; - - ret =3D i2c_master_send(client, data, 3); - if (ret < 0) { - dev_dbg(&client->dev, "%s: i2c write error, reg: %x\n", - __func__, reg); - return ret; - } - - return 0; -} - -static int ov5647_read(struct v4l2_subdev *sd, u16 reg, u8 *val) -{ - struct i2c_client *client =3D v4l2_get_subdevdata(sd); - u8 buf[2] =3D { reg >> 8, reg & 0xff }; - struct i2c_msg msg[2]; - int ret; - - msg[0].addr =3D client->addr; - msg[0].flags =3D client->flags; - msg[0].buf =3D buf; - msg[0].len =3D sizeof(buf); - - msg[1].addr =3D client->addr; - msg[1].flags =3D client->flags | I2C_M_RD; - msg[1].buf =3D buf; - msg[1].len =3D 1; - - ret =3D i2c_transfer(client->adapter, msg, 2); - if (ret !=3D 2) { - dev_err(&client->dev, "%s: i2c read error, reg: %x =3D %d\n", - __func__, reg, ret); - return ret >=3D 0 ? -EINVAL : ret; - } - - *val =3D buf[0]; - - return 0; -} - -static int ov5647_write_array(struct v4l2_subdev *sd, - const struct regval_list *regs, int array_size) -{ - int i, ret; - - for (i =3D 0; i < array_size; i++) { - ret =3D ov5647_write(sd, regs[i].addr, regs[i].data); - if (ret < 0) - return ret; - } - - return 0; -} - static int ov5647_set_virtual_channel(struct v4l2_subdev *sd, int channel) { - u8 channel_id; + struct ov5647 *sensor =3D to_sensor(sd); + u64 channel_id; int ret; =20 - ret =3D ov5647_read(sd, OV5647_REG_MIPI_CTRL14, &channel_id); + ret =3D cci_read(sensor->regmap, OV5647_REG_MIPI_CTRL14, &channel_id, NUL= L); if (ret < 0) return ret; =20 channel_id &=3D ~(3 << 6); =20 - return ov5647_write(sd, OV5647_REG_MIPI_CTRL14, - channel_id | (channel << 6)); + return cci_write(sensor->regmap, OV5647_REG_MIPI_CTRL14, + channel_id | (channel << 6), NULL); } =20 static int ov5647_set_mode(struct v4l2_subdev *sd) { struct i2c_client *client =3D v4l2_get_subdevdata(sd); struct ov5647 *sensor =3D to_sensor(sd); - u8 resetval, rdval; + u64 resetval, rdval; int ret; =20 - ret =3D ov5647_read(sd, OV5647_SW_STANDBY, &rdval); + ret =3D cci_read(sensor->regmap, OV5647_SW_STANDBY, &rdval, NULL); if (ret < 0) return ret; =20 - ret =3D ov5647_write_array(sd, sensor->mode->reg_list, - sensor->mode->num_regs); + ret =3D regmap_multi_reg_write(sensor->regmap, sensor->mode->reg_list, + sensor->mode->num_regs); if (ret < 0) { dev_err(&client->dev, "write sensor default regs error\n"); return ret; @@ -706,13 +624,13 @@ static int ov5647_set_mode(struct v4l2_subdev *sd) if (ret < 0) return ret; =20 - ret =3D ov5647_read(sd, OV5647_SW_STANDBY, &resetval); + ret =3D cci_read(sensor->regmap, OV5647_SW_STANDBY, &resetval, NULL); if (ret < 0) return ret; =20 if (!(resetval & 0x01)) { dev_err(&client->dev, "Device was in SW standby"); - ret =3D ov5647_write(sd, OV5647_SW_STANDBY, 0x01); + ret =3D cci_write(sensor->regmap, OV5647_SW_STANDBY, 0x01, NULL); if (ret < 0) return ret; } @@ -725,7 +643,7 @@ static int ov5647_stream_on(struct v4l2_subdev *sd) struct i2c_client *client =3D v4l2_get_subdevdata(sd); struct ov5647 *sensor =3D to_sensor(sd); u8 val =3D MIPI_CTRL00_BUS_IDLE; - int ret; + int ret =3D 0; =20 ret =3D ov5647_set_mode(sd); if (ret) { @@ -742,32 +660,25 @@ static int ov5647_stream_on(struct v4l2_subdev *sd) val |=3D MIPI_CTRL00_CLOCK_LANE_GATE | MIPI_CTRL00_LINE_SYNC_ENABLE; =20 - ret =3D ov5647_write(sd, OV5647_REG_MIPI_CTRL00, val); - if (ret < 0) - return ret; - - ret =3D ov5647_write(sd, OV5647_REG_FRAME_OFF_NUMBER, 0x00); - if (ret < 0) - return ret; + cci_write(sensor->regmap, OV5647_REG_MIPI_CTRL00, val, &ret); + cci_write(sensor->regmap, OV5647_REG_FRAME_OFF_NUMBER, 0x00, &ret); + cci_write(sensor->regmap, OV5640_REG_PAD_OUT, 0x00, &ret); =20 - return ov5647_write(sd, OV5640_REG_PAD_OUT, 0x00); + return ret; } =20 static int ov5647_stream_off(struct v4l2_subdev *sd) { - int ret; + struct ov5647 *sensor =3D to_sensor(sd); + int ret =3D 0; =20 - ret =3D ov5647_write(sd, OV5647_REG_MIPI_CTRL00, - MIPI_CTRL00_CLOCK_LANE_GATE | MIPI_CTRL00_BUS_IDLE | - MIPI_CTRL00_CLOCK_LANE_DISABLE); - if (ret < 0) - return ret; + cci_write(sensor->regmap, OV5647_REG_MIPI_CTRL00, + MIPI_CTRL00_CLOCK_LANE_GATE | MIPI_CTRL00_BUS_IDLE | + MIPI_CTRL00_CLOCK_LANE_DISABLE, &ret); + cci_write(sensor->regmap, OV5647_REG_FRAME_OFF_NUMBER, 0x0f, &ret); + cci_write(sensor->regmap, OV5640_REG_PAD_OUT, 0x01, &ret); =20 - ret =3D ov5647_write(sd, OV5647_REG_FRAME_OFF_NUMBER, 0x0f); - if (ret < 0) - return ret; - - return ov5647_write(sd, OV5640_REG_PAD_OUT, 0x01); + return ret; } =20 static int ov5647_power_on(struct device *dev) @@ -788,8 +699,8 @@ static int ov5647_power_on(struct device *dev) goto error_pwdn; } =20 - ret =3D ov5647_write_array(&sensor->sd, sensor_oe_enable_regs, - ARRAY_SIZE(sensor_oe_enable_regs)); + ret =3D regmap_multi_reg_write(sensor->regmap, sensor_oe_enable_regs, + ARRAY_SIZE(sensor_oe_enable_regs)); if (ret < 0) { dev_err(dev, "write sensor_oe_enable_regs error\n"); goto error_clk_disable; @@ -815,23 +726,23 @@ static int ov5647_power_on(struct device *dev) static int ov5647_power_off(struct device *dev) { struct ov5647 *sensor =3D dev_get_drvdata(dev); - u8 rdval; + u64 rdval; int ret; =20 dev_dbg(dev, "OV5647 power off\n"); =20 - ret =3D ov5647_write_array(&sensor->sd, sensor_oe_disable_regs, - ARRAY_SIZE(sensor_oe_disable_regs)); + ret =3D regmap_multi_reg_write(sensor->regmap, sensor_oe_disable_regs, + ARRAY_SIZE(sensor_oe_disable_regs)); if (ret < 0) dev_dbg(dev, "disable oe failed\n"); =20 /* Enter software standby */ - ret =3D ov5647_read(&sensor->sd, OV5647_SW_STANDBY, &rdval); + ret =3D cci_read(sensor->regmap, OV5647_SW_STANDBY, &rdval, NULL); if (ret < 0) dev_dbg(dev, "software standby failed\n"); =20 rdval &=3D ~0x01; - ret =3D ov5647_write(&sensor->sd, OV5647_SW_STANDBY, rdval); + ret =3D cci_write(sensor->regmap, OV5647_SW_STANDBY, rdval, NULL); if (ret < 0) dev_dbg(dev, "software standby failed\n"); =20 @@ -845,10 +756,11 @@ static int ov5647_power_off(struct device *dev) static int ov5647_sensor_get_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg) { + struct ov5647 *sensor =3D to_sensor(sd); int ret; - u8 val; + u64 val; =20 - ret =3D ov5647_read(sd, reg->reg & 0xff, &val); + ret =3D cci_read(sensor->regmap, reg->reg & 0xff, &val, NULL); if (ret < 0) return ret; =20 @@ -861,7 +773,9 @@ static int ov5647_sensor_get_register(struct v4l2_subde= v *sd, static int ov5647_sensor_set_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg) { - return ov5647_write(sd, reg->reg & 0xff, reg->val & 0xff); + struct ov5647 *sensor =3D to_sensor(sd); + + return cci_write(sensor->regmap, reg->reg & 0xff, reg->val & 0xff, NULL); } #endif =20 @@ -1089,33 +1003,27 @@ static const struct v4l2_subdev_ops ov5647_subdev_o= ps =3D { =20 static int ov5647_detect(struct v4l2_subdev *sd) { + struct ov5647 *sensor =3D to_sensor(sd); struct i2c_client *client =3D v4l2_get_subdevdata(sd); - u8 read; + u64 read; int ret; =20 - ret =3D ov5647_write(sd, OV5647_SW_RESET, 0x01); + ret =3D cci_write(sensor->regmap, OV5647_SW_RESET, 0x01, NULL); if (ret < 0) return ret; =20 - ret =3D ov5647_read(sd, OV5647_REG_CHIPID_H, &read); - if (ret < 0) - return ret; - - if (read !=3D 0x56) { - dev_err(&client->dev, "ID High expected 0x56 got %x", read); - return -ENODEV; - } - - ret =3D ov5647_read(sd, OV5647_REG_CHIPID_L, &read); + ret =3D cci_read(sensor->regmap, OV5647_REG_CHIPID, &read, NULL); if (ret < 0) - return ret; + return dev_err_probe(&client->dev, ret, + "failed to read chip id %x\n", + OV5647_REG_CHIPID); =20 - if (read !=3D 0x47) { - dev_err(&client->dev, "ID Low expected 0x47 got %x", read); + if (read !=3D 0x5647) { + dev_err(&client->dev, "Chip ID expected 0x5647 got 0x%llx", read); return -ENODEV; } =20 - return ov5647_write(sd, OV5647_SW_RESET, 0x00); + return cci_write(sensor->regmap, OV5647_SW_RESET, 0x00, NULL); } =20 static int ov5647_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) @@ -1140,70 +1048,62 @@ static const struct v4l2_subdev_internal_ops ov5647= _subdev_internal_ops =3D { =20 static int ov5647_s_auto_white_balance(struct v4l2_subdev *sd, u32 val) { - return ov5647_write(sd, OV5647_REG_AWB, val ? 1 : 0); + struct ov5647 *sensor =3D to_sensor(sd); + + return cci_write(sensor->regmap, OV5647_REG_AWB, val ? 1 : 0, NULL); } =20 static int ov5647_s_autogain(struct v4l2_subdev *sd, u32 val) { + struct ov5647 *sensor =3D to_sensor(sd); int ret; - u8 reg; + u64 reg; =20 /* Non-zero turns on AGC by clearing bit 1.*/ - ret =3D ov5647_read(sd, OV5647_REG_AEC_AGC, ®); + ret =3D cci_read(sensor->regmap, OV5647_REG_AEC_AGC, ®, NULL); if (ret) return ret; =20 - return ov5647_write(sd, OV5647_REG_AEC_AGC, val ? reg & ~BIT(1) - : reg | BIT(1)); + return cci_write(sensor->regmap, OV5647_REG_AEC_AGC, val ? reg & ~BIT(1) + : reg | BIT(1), NULL); } =20 static int ov5647_s_exposure_auto(struct v4l2_subdev *sd, u32 val) { + struct ov5647 *sensor =3D to_sensor(sd); int ret; - u8 reg; + u64 reg; =20 /* * Everything except V4L2_EXPOSURE_MANUAL turns on AEC by * clearing bit 0. */ - ret =3D ov5647_read(sd, OV5647_REG_AEC_AGC, ®); + ret =3D cci_read(sensor->regmap, OV5647_REG_AEC_AGC, ®, NULL); if (ret) return ret; =20 - return ov5647_write(sd, OV5647_REG_AEC_AGC, + return cci_write(sensor->regmap, OV5647_REG_AEC_AGC, val =3D=3D V4L2_EXPOSURE_MANUAL ? reg | BIT(0) - : reg & ~BIT(0)); + : reg & ~BIT(0), NULL); } =20 static int ov5647_s_analogue_gain(struct v4l2_subdev *sd, u32 val) { - int ret; + struct ov5647 *sensor =3D to_sensor(sd); =20 /* 10 bits of gain, 2 in the high register. */ - ret =3D ov5647_write(sd, OV5647_REG_GAIN_HI, (val >> 8) & 3); - if (ret) - return ret; - - return ov5647_write(sd, OV5647_REG_GAIN_LO, val & 0xff); + return cci_write(sensor->regmap, OV5647_REG_GAIN, val & 0x3ff, NULL); } =20 static int ov5647_s_exposure(struct v4l2_subdev *sd, u32 val) { - int ret; + struct ov5647 *sensor =3D to_sensor(sd); =20 /* * Sensor has 20 bits, but the bottom 4 bits are fractions of a line * which we leave as zero (and don't receive in "val"). */ - ret =3D ov5647_write(sd, OV5647_REG_EXP_HI, (val >> 12) & 0xf); - if (ret) - return ret; - - ret =3D ov5647_write(sd, OV5647_REG_EXP_MID, (val >> 4) & 0xff); - if (ret) - return ret; - - return ov5647_write(sd, OV5647_REG_EXP_LO, (val & 0xf) << 4); + return cci_write(sensor->regmap, OV5647_REG_EXPOSURE, val << 4, NULL); } =20 static int ov5647_s_ctrl(struct v4l2_ctrl *ctrl) @@ -1254,12 +1154,12 @@ static int ov5647_s_ctrl(struct v4l2_ctrl *ctrl) ret =3D ov5647_s_exposure(sd, ctrl->val); break; case V4L2_CID_VBLANK: - ret =3D ov5647_write16(sd, OV5647_REG_VTS_HI, - sensor->mode->format.height + ctrl->val); + ret =3D cci_write(sensor->regmap, OV5647_REG_VTS, + sensor->mode->format.height + ctrl->val, NULL); break; case V4L2_CID_TEST_PATTERN: - ret =3D ov5647_write(sd, OV5647_REG_ISPCTRL3D, - ov5647_test_pattern_val[ctrl->val]); + ret =3D cci_write(sensor->regmap, OV5647_REG_ISPCTRL3D, + ov5647_test_pattern_val[ctrl->val], NULL); break; =20 /* Read-only, but we adjust it based on mode. */ @@ -1435,6 +1335,13 @@ static int ov5647_probe(struct i2c_client *client) if (ret < 0) goto ctrl_handler_free; =20 + sensor->regmap =3D devm_cci_regmap_init_i2c(client, 16); + if (IS_ERR(sensor->regmap)) { + ret =3D dev_err_probe(dev, PTR_ERR(sensor->regmap), + "Failed to init CCI\n"); + goto entity_cleanup; + } + ret =3D ov5647_power_on(dev); if (ret) goto entity_cleanup; --=20 2.43.0 From nobody Sun Feb 8 04:57:38 2026 Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 028172E22BA; Wed, 31 Dec 2025 08:40:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.178.238 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767170447; cv=fail; b=TyHqqwmfqI6IB20nmoh3wfuTA/WYh25GnB+ku2WVD1fDy91Ll8Q18RJtsoQZnPZTSVpt9YdKvPXtQ/GGtI0PlhUFOP4LoH7e8YJ9nxeTu+RSqwMTCDPUW/Wl0iAgIGVNbU94NVxZq/0vKXGgNEVWhzEvg3Mij4ibOwXD4RoSFt4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767170447; c=relaxed/simple; bh=/N+FJnsQz29xjqeGWm5OBcsbo/uspi+6f+eA0a709Go=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=i/qPIzeVgYQ1MFuPKbPJ9SeFSygKm2GYygYcZRF2K5g591kxQCgBSiNtr18AQZX3etYTTpCU+2okkmX8E9ywogi9JRlum4S+McJeAdMfIpiMd5Wph3+UMDrB8UUmpIXZ99PuIe+TiotiRxEOwasHif1VGK/GkmOCCgFInTUwyjY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=windriver.com; spf=pass smtp.mailfrom=windriver.com; dkim=pass (2048-bit key) header.d=windriver.com header.i=@windriver.com header.b=OV3VfJ7/; arc=fail smtp.client-ip=205.220.178.238 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=windriver.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=windriver.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=windriver.com header.i=@windriver.com header.b="OV3VfJ7/" Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BV7TRiX145082; Wed, 31 Dec 2025 08:40:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=QnoeqJrH1CqLKv3/EeMkDzZYQVVIlg90dIX8FEhrv7s=; b= OV3VfJ7/6bnW9lvZ9SHE6HofpIKZOYh7WXo0jEU+/fTNtfY2hKk9MFNuG2cgndOZ 3Yq7HP6nxPZD6DPIOEYt4Eio/rDYnTFvFr5TvaUzyRCIAwFnVC9ui5+CwZgz3usc AyDXjOknx3+IVBhB4G2dM2nI90BBZ74rPXeVvUI3x2W02IDEnMUH2C6/OmispVFI ywoDLs14eWAk68Ha2lGwk2+gY53pWs/maBt+kMpDimjhx2JPjWUuA4/tVuSBCIST lIRPWCJcFgJu3/iiPj51rE72V6I4i6Ib6+U+rePr1Kn6i5SxNE+iBYANSBqJnqoN 6/pdhvi41xX3MYC8Fg2lEw== Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011049.outbound.protection.outlook.com [40.93.194.49]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4ba4nxur19-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Wed, 31 Dec 2025 08:40:18 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Xv2pF0WreUnsJS7i8QdhtuJ38rOi4bmEW4AXlT3gE+LiNO0gui1qAWl0qgDt3TVGOuv4JsSv9+H+I8VfyW/2ACEcSrf/7C4nw6mZHxK+M2Fd9KaGv3kAZcWlYeDXpk26TZxRDfgl84/3Jt/LN5kjkDcLshy/QiMVYSA9DonJByEZCo9taamvyjkJvB9+npRgDU5Nm7BFzS2L+iugae4yLCPoNiFd6Mutk1stSEdE36HZvDHULHXif1TUi9aw6Eh2/tr8EsgmHezM3wR9Pccz733J/lb0uyTunwOcAFoT1NqG/XOXEvAZtUdmASUYiUMnVi7RiTH6oED7lPOojeG98g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QnoeqJrH1CqLKv3/EeMkDzZYQVVIlg90dIX8FEhrv7s=; b=nx/BO/61N7ydkHhmZ8ihrcwlqLK38G7EzsqB8osxt2jfu2XHs/lGGYUTmOzngiBjp5LXx0UEWcoge98m7YCxM1kUw0KZPShHGBTsyEvGH90lsBslwRxSlRiJAaW4745ClyEbxsWapSozhF7oNyLEK5G9sTloxhaUZIfDV9VVeVzRIdT1N7Pm6URz9OnfzUkVPTqRatsY5S/ktFy3adwPp1NAwgvD0cO+U7qnQBnFuZ52+cPuRiDNctfqPbuC8yDTL40A7IsalIGpnEEV3hpJThj1AjWFAiShwTNiLIu0WEU794lWgLOGnWpLEWmTiUa4i7gSWu1G/EhqS0zQ1GOdfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=windriver.com; dmarc=pass action=none header.from=windriver.com; dkim=pass header.d=windriver.com; arc=none Received: from DS4PPFD667CEBB6.namprd11.prod.outlook.com (2603:10b6:f:fc02::53) by BL4PR11MB8845.namprd11.prod.outlook.com (2603:10b6:208:5aa::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9456.14; Wed, 31 Dec 2025 08:40:16 +0000 Received: from DS4PPFD667CEBB6.namprd11.prod.outlook.com ([fe80::92d2:113:b2d3:1d3e]) by DS4PPFD667CEBB6.namprd11.prod.outlook.com ([fe80::92d2:113:b2d3:1d3e%6]) with mapi id 15.20.9478.004; Wed, 31 Dec 2025 08:40:16 +0000 From: Xiaolei Wang To: tarang.raval@siliconsignals.io, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, dave.stevenson@raspberrypi.com, jacopo@jmondi.org, mchehab@kernel.org, prabhakar.mahadev-lad.rj@bp.renesas.com, hverkuil+cisco@kernel.org, johannes.goede@oss.qualcomm.com, hverkuil-cisco@xs4all.nl, jai.luthra@ideasonboard.com, xiaolei.wang@windriver.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 2/3] media: i2c: ov5647: Switch to using the sub-device state lock Date: Wed, 31 Dec 2025 16:39:23 +0800 Message-ID: <20251231083924.2657165-3-xiaolei.wang@windriver.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251231083924.2657165-1-xiaolei.wang@windriver.com> References: <20251231083924.2657165-1-xiaolei.wang@windriver.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR02CA0045.apcprd02.prod.outlook.com (2603:1096:4:196::21) To DS4PPFD667CEBB6.namprd11.prod.outlook.com (2603:10b6:f:fc02::53) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS4PPFD667CEBB6:EE_|BL4PR11MB8845:EE_ X-MS-Office365-Filtering-Correlation-Id: a8de321a-5e4e-4d16-4ddd-08de484838ea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|376014|1800799024|366016|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kc8myDJLhT7bZC6BVTQOoc2uFZp6xr1Pc8YfMEYt5+JZR4U5JS+P2PltSK4b?= =?us-ascii?Q?xv5fXkyEz4Of7FTSjA8QeLmQCnLlaz5wHQ6j++IF5wFOK6TLciSL3jayaC0T?= =?us-ascii?Q?UgeId1+6Rng6f7Fef+46m7nWWqk7n4ZrjMBBAtv/DuKsceBrG2HRc7jKGSdX?= =?us-ascii?Q?eSueVKs4l1U1jiNOFSJM3L3oQemHZnjUssDh/YSaALwOdYCtmwWa03cfCS2p?= =?us-ascii?Q?FzPi9FqQNKJMzDYRv9ZyeKC01TDca493LKJ7sRJsVEFge3GtUfBv/rsAMf91?= =?us-ascii?Q?e5J3ve5/sfLWkkd13L3mzS33xVdiTbtMbvZG6pie0uw3fdLaiBn435zAhRGG?= =?us-ascii?Q?48vWflhfIvTR3XPl47BL+IefdryyOWV3Xz57QqfzG9V4U/jLfZ20KJAM7YBa?= =?us-ascii?Q?f2mEkjH6BxGtSHVJ5ZEU0DTYpyvyJfFfnHgl9/63oRR3fPRsbMhlqZbidBDA?= =?us-ascii?Q?9r4TwaPcr/ad3OhLj+9K0+bk2szvsT1f3MsX2GhuTPg2QQpGU+D82ewzXlvv?= =?us-ascii?Q?dIZm1h2B+fpiQw61IZxx8/nvLDrO9TUg5JUrCBxOdakitab/wPGbh3USg4Qv?= =?us-ascii?Q?trNzxca0/h4Vm3QcO3rPZGiNdDw269U8eqahdAGq1bdnFI7Iistc81+TCIry?= =?us-ascii?Q?kZtS8yc+0RhYW5BRqnS2ZH0evwuccOmQcBl0B3a+TEt27KAZMCkVDlz0ArDd?= =?us-ascii?Q?857PmZPyR1J/Ywa3jrXvexTRqUwR32mHGtivbi9/ClFQqwBoi77YVx5LLNEE?= =?us-ascii?Q?ZcWMqKaHCfAeGGYaSQ6W70MQMVnNUO4/gwdVaHWyD9FXY6l6lRZ91jflWxHj?= =?us-ascii?Q?WGLCXCcRh9/QK6wEsiBbDuqhdb99ytXe4T2mP0DYuj3a1JYxqFL41ZV2WEx2?= =?us-ascii?Q?XlukQDvqK3iEEEnEp5EpI6n542i4Njj7u65RP0lXikstXVyl5HwJu1fWW5WM?= =?us-ascii?Q?CuDEoV474CyePYJltp438HpvA0wyldcfcVldtMljAZQJRS9xH9+Wat+yjjaX?= =?us-ascii?Q?Gd7oYqrxE9TkFyvU3hylx8R30YyBLmhkTAC6EgrHF9Yo5TNGkq6H+kfTyScm?= =?us-ascii?Q?020n55JFY5Qpmn3ZLebeUJDDzBVSpMpfHrhUbLwVYHv/gh45jMK4g7KLYQaE?= =?us-ascii?Q?f797LPhbDQEGe8vEAl3jLiR0yT6cXuwj0EByV/MkWyAuFM2KNk/AWpFBPSLp?= =?us-ascii?Q?6xcemKcb7Is7JI6XkVqKegTj2by8zHqM9ruj+DTUvKoi3Cc9SCclYoVh4GM3?= =?us-ascii?Q?iXZRmRsKDSOLFWljIKZBbTyGaffDhJlJxodQzGVpdRwoKbb95XcCjp+GSC9x?= =?us-ascii?Q?SGSpwrzUZXYL3hkMC9eCg+4NdO3J6UyqgA5+lSaZ4idQit/gfZ7xW+G+a056?= =?us-ascii?Q?RKIfy8FOSSo0v7nRKOwwjaq6tMjW7vV3ow665DxjKN+2+taD5mang1v93F4v?= =?us-ascii?Q?7Hqn7N1OVI5uGfbf6YvpXamATNRXphjk8a1Jb4enU0sqXBEGpCvMDgAKPrjd?= =?us-ascii?Q?E+FKXKJr5jIqovOq5yzzC1whfkaR8vE4JySYfFNde8j4WMIOvOtTdgtz5A?= =?us-ascii?Q?=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFD667CEBB6.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(376014)(1800799024)(366016)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?y5G5bav8OdJKPovznLVzbqrm1qxWQZ75CZjpFACRZacONK/bh50r5i+qFitU?= =?us-ascii?Q?KqdO61lT/0BEbZajFGkcnVqc6hYjaR0ng4S3mAXAFNM9QVNEgdfRa/ZdfLAB?= =?us-ascii?Q?qZKajCtpDh5GU0IruTpmQWOzcNg8oJJjSrj8E63xM+l4gRVxpcgQgJtD6grG?= =?us-ascii?Q?6MEaxEubxwu37wmxlNdtHXOy1jJ5QEVwDP9IJC55g27LfQSzWdlyKFgbi/jB?= =?us-ascii?Q?YMWPUK5sZNdrYsQNjyg2q1/+234AnfevVRwo9wZh9cov/3U9Sqa7gEnNoz6H?= =?us-ascii?Q?BB1fL37zcH7RNZMNE2VynqQjTM/wZj+ysCEy4K0wiDVcuuH0YOdahkBAfE7H?= =?us-ascii?Q?EBjLIUy5WmTEiKWDxA3q1AXk+vfIfBiC4Gx7I46W4lF77SYr/dlecKRWR/Dr?= =?us-ascii?Q?re131QJ9j4f+vjY0cKJ7wOlBPiQcUzI4c0COiBqoVT4t0q40n3Q6q7yWTRC1?= =?us-ascii?Q?AvnViR5yK/aA6s5h/96yJaxPVqnSfBM3z2cOIZ3P02yzoKuixaPSc7Gp/CpJ?= =?us-ascii?Q?yUXsxZkxF4RFDuzmF1kfiX4vcqRH2UYl7ynXDNhr+lZ9POXp4V9KUdQyRZsF?= =?us-ascii?Q?4LZKBlEWmpj4c25DeLxj+Wppky1ewpvxPXzHTMJWPwb+1DxNv7Aav+VwuF6Q?= =?us-ascii?Q?d+Ey37/sPUNU3kT9X1bU32ynaM71Dokfv8028DIde7yBIKlfAO2hUS4FZHd8?= =?us-ascii?Q?lEw70sFDnMeC9+1Ex1bjSEWX7zO49fYFmU7dWpncARcGMEUS2y424/30i4pk?= =?us-ascii?Q?GbCYQr4CLnO4MRg4ReIeUxBIrSaH65Fe/lMqeJg5edWTt7mPAarBZDmQc7l8?= =?us-ascii?Q?jBgKLZPIxEp1S1u36Bt1CrT0dgvAdcZywVSVg5Id8oLBO/PVh+9qw/3sEhgf?= =?us-ascii?Q?O14UQ5WK3CQWaOcQXzqHZNnK93X9dNkpAodBreilBDG8dI+KeBsGF/BPDUL6?= =?us-ascii?Q?kZl7tbQ8ypaJLCQwRedKmuELmxgld4XdfTijZzmrdjC8eiCe1RpVMlD8ktnX?= =?us-ascii?Q?6haBfT4b2ikSn2EIhVFaiEkVC+wMOKQuzCqoq4P/JXT02IoGPsdEnA/s8+yQ?= =?us-ascii?Q?j750hGUun/+eOb3ez3fkjDVSUgWl5qlWDzY3KN1MAXnUJM/SaiSgck2mngrd?= =?us-ascii?Q?79XeicWqktB56OVgltQalMqQ749L90krm6rUddSncrQidjiHV3Ts4hrkvXjO?= =?us-ascii?Q?RoFys2FFdLkYNYZhnOlKwgz44TCNiEbEk/7tRUk5T2W3LrqkszFfhXkucSZp?= =?us-ascii?Q?5d4bP25j3SEe4e02N+DXFbhGhleDs1ZhBikWlq6HbXOPmMaNfp/PgGgez9KS?= =?us-ascii?Q?d8fJHIisOUsHSIOjQEPCko5RN+xb3aXYi+6dpemZpHDyfGHLvzfglK5nDNrj?= =?us-ascii?Q?9CWGrJncisJ/05T5ycHT2YbA1NaaKeAm61gxz5gJCRXoSIRrIODpP3jr3Zpy?= =?us-ascii?Q?gGYIoXVZgqUxXP2s0y6fV37rPSHmmFQWu9LAWvaI3XTLNSJ6kqQ3D83LO/Os?= =?us-ascii?Q?UI/FIZiHqyfjjbQ7Xwm0ZGr6YeA/FDTfQ24F5zh0/Vi9dc0PLfHrzBtcGXN2?= =?us-ascii?Q?JYsqJZEwZt86iwREsoE2TmBPmR5E/E+xiT29nkvjF04Cgldx15RDEW4FHoGJ?= =?us-ascii?Q?OyZ4pCv+T2YMOTzyyTq93QHGsBhWv2Vyv4uo7io1EJTJ0P4A91hlTG62Akxw?= =?us-ascii?Q?gm4P7giGM0+DlE3fQ2M41+ZuL+H4yX1NkMp8cIXlwjW/KQiH/e551LeoHeyS?= =?us-ascii?Q?pU9VT105iLaG19WtVJ0JwGLnzT9bcVI=3D?= X-OriginatorOrg: windriver.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8de321a-5e4e-4d16-4ddd-08de484838ea X-MS-Exchange-CrossTenant-AuthSource: DS4PPFD667CEBB6.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 08:40:16.4751 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ddb2873-a1ad-4a18-ae4e-4644631433be X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: w5nWnmatsgrojliaFK8mflQvnh6IpNEZKR8F8d3JPNcAFDYX7aXCufPZASQAVTNEnK8idd9gTtjqtg29ugGuvgSf0FgRirPNXXSPk69e3e0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR11MB8845 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjMxMDA3NCBTYWx0ZWRfXy4d0uptUsYUL g19dl7Iah8DgPHsvHnjGipz2syNXwbOECAd7D+2tgNxC9LnSUTDPc5DDNT/MK0VBxmISWA+1aTO JhYrx44CcfbeedZTkzqgfX2js+CTOxJQsw/+ASJ2oq4aVzkVuB7l9BQuxe8vD3qEbYKidXQHXpX x6bidmWvkjssRT8GG+M1l93CG1TQsdVKI5rELbklw02P2o57gJ/jrE1/U2tvjuV6FNp6hCcaXU4 8Hj3xA9uu36k6e4taYrO0MgelRRFgHZkGuATDL6a4ZiCVyO8/8nAFp28y1WmQ6ax0odydOyb4H2 4xnEq/AZgPZ2Khuyjtad87rm1J/Qks465djUvH0YFzRBN288a/S0zIRoQR5V0oM+IjOGMP9tulY FL79CgdDkjRH9PTUdWCDq/Myq+w/UiOshrbz3TOT82Nx+/0oduYUdwD4zyXZtaNxITANAp1bm07 hSm2vvd7E7uDYA46qxA== X-Proofpoint-GUID: nCn8t9fIAjzGKLI_8VeO3jePT2uPoEM- X-Authority-Analysis: v=2.4 cv=OO0qHCaB c=1 sm=1 tr=0 ts=6954e172 cx=c_pps a=LWr4lAA3g636x20Wckjs+g==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=t7CeM3EgAAAA:8 a=Lc8NSlXapXXr_nlJwJIA:9 a=FdTzh2GWekK77mhwV6Dw:22 X-Proofpoint-ORIG-GUID: nCn8t9fIAjzGKLI_8VeO3jePT2uPoEM- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-31_02,2025-12-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 spamscore=0 priorityscore=1501 adultscore=0 impostorscore=0 bulkscore=0 lowpriorityscore=0 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512310074 Content-Type: text/plain; charset="utf-8" Switch to using the sub-device state lock and properly call v4l2_subdev_init_finalize() / v4l2_subdev_cleanup() on probe() / remove(). Signed-off-by: Xiaolei Wang --- drivers/media/i2c/ov5647.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c index cbcb760ba5cd..bc81f378436a 100644 --- a/drivers/media/i2c/ov5647.c +++ b/drivers/media/i2c/ov5647.c @@ -92,7 +92,6 @@ struct ov5647 { struct v4l2_subdev sd; struct regmap *regmap; struct media_pad pad; - struct mutex lock; struct clk *xclk; struct gpio_desc *pwdn; bool clock_ncont; @@ -807,10 +806,10 @@ __ov5647_get_pad_crop(struct ov5647 *ov5647, static int ov5647_s_stream(struct v4l2_subdev *sd, int enable) { struct i2c_client *client =3D v4l2_get_subdevdata(sd); - struct ov5647 *sensor =3D to_sensor(sd); + struct v4l2_subdev_state *state; int ret; =20 - mutex_lock(&sensor->lock); + state =3D v4l2_subdev_lock_and_get_active_state(sd); =20 if (enable) { ret =3D pm_runtime_resume_and_get(&client->dev); @@ -831,14 +830,14 @@ static int ov5647_s_stream(struct v4l2_subdev *sd, in= t enable) pm_runtime_put(&client->dev); } =20 - mutex_unlock(&sensor->lock); + v4l2_subdev_unlock_state(state); =20 return 0; =20 error_pm: pm_runtime_put(&client->dev); error_unlock: - mutex_unlock(&sensor->lock); + v4l2_subdev_unlock_state(state); =20 return ret; } @@ -886,7 +885,6 @@ static int ov5647_get_pad_fmt(struct v4l2_subdev *sd, const struct v4l2_mbus_framefmt *sensor_format; struct ov5647 *sensor =3D to_sensor(sd); =20 - mutex_lock(&sensor->lock); switch (format->which) { case V4L2_SUBDEV_FORMAT_TRY: sensor_format =3D v4l2_subdev_state_get_format(sd_state, @@ -898,7 +896,6 @@ static int ov5647_get_pad_fmt(struct v4l2_subdev *sd, } =20 *fmt =3D *sensor_format; - mutex_unlock(&sensor->lock); =20 return 0; } @@ -916,7 +913,6 @@ static int ov5647_set_pad_fmt(struct v4l2_subdev *sd, fmt->width, fmt->height); =20 /* Update the sensor mode and apply at it at streamon time. */ - mutex_lock(&sensor->lock); if (format->which =3D=3D V4L2_SUBDEV_FORMAT_TRY) { *v4l2_subdev_state_get_format(sd_state, format->pad) =3D mode->format; } else { @@ -945,7 +941,6 @@ static int ov5647_set_pad_fmt(struct v4l2_subdev *sd, exposure_def); } *fmt =3D mode->format; - mutex_unlock(&sensor->lock); =20 return 0; } @@ -958,10 +953,8 @@ static int ov5647_get_selection(struct v4l2_subdev *sd, case V4L2_SEL_TGT_CROP: { struct ov5647 *sensor =3D to_sensor(sd); =20 - mutex_lock(&sensor->lock); sel->r =3D *__ov5647_get_pad_crop(sensor, sd_state, sel->pad, sel->which); - mutex_unlock(&sensor->lock); =20 return 0; } @@ -1114,9 +1107,6 @@ static int ov5647_s_ctrl(struct v4l2_ctrl *ctrl) struct i2c_client *client =3D v4l2_get_subdevdata(sd); int ret =3D 0; =20 - - /* v4l2_ctrl_lock() locks our own mutex */ - if (ctrl->id =3D=3D V4L2_CID_VBLANK) { int exposure_max, exposure_def; =20 @@ -1316,13 +1306,11 @@ static int ov5647_probe(struct i2c_client *client) return -EINVAL; } =20 - mutex_init(&sensor->lock); - sensor->mode =3D OV5647_DEFAULT_MODE; =20 ret =3D ov5647_init_controls(sensor); if (ret) - goto mutex_destroy; + return ret; =20 sd =3D &sensor->sd; v4l2_i2c_subdev_init(sd, client, &ov5647_subdev_ops); @@ -1350,9 +1338,16 @@ static int ov5647_probe(struct i2c_client *client) if (ret < 0) goto power_off; =20 + sd->state_lock =3D sensor->ctrls.lock; + ret =3D v4l2_subdev_init_finalize(sd); + if (ret < 0) { + dev_err(&client->dev, "failed to init subdev: %d", ret); + goto power_off; + } + ret =3D v4l2_async_register_subdev(sd); if (ret < 0) - goto power_off; + goto v4l2_subdev_cleanup; =20 /* Enable runtime PM and turn off the device */ pm_runtime_set_active(dev); @@ -1363,14 +1358,14 @@ static int ov5647_probe(struct i2c_client *client) =20 return 0; =20 +v4l2_subdev_cleanup: + v4l2_subdev_cleanup(sd); power_off: ov5647_power_off(dev); entity_cleanup: media_entity_cleanup(&sd->entity); ctrl_handler_free: v4l2_ctrl_handler_free(&sensor->ctrls); -mutex_destroy: - mutex_destroy(&sensor->lock); =20 return ret; } @@ -1381,11 +1376,11 @@ static void ov5647_remove(struct i2c_client *client) struct ov5647 *sensor =3D to_sensor(sd); =20 v4l2_async_unregister_subdev(&sensor->sd); + v4l2_subdev_cleanup(sd); media_entity_cleanup(&sensor->sd.entity); v4l2_ctrl_handler_free(&sensor->ctrls); v4l2_device_unregister_subdev(sd); pm_runtime_disable(&client->dev); - mutex_destroy(&sensor->lock); } =20 static const struct dev_pm_ops ov5647_pm_ops =3D { --=20 2.43.0 From nobody Sun Feb 8 04:57:38 2026 Received: from mx0a-0064b401.pphosted.com (mx0a-0064b401.pphosted.com [205.220.166.238]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC36C313E21; Wed, 31 Dec 2025 08:40:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.166.238 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767170448; cv=fail; b=PJg/s8mPNlvxQR55+RUBgAA/OnGhtdk6puzMJqTxKtg8/UK62j418HTCw32FedeYU8CZ5KYzLJYdjzSyhI5U5237U9cPUbVo1tU/vw3ZXhPm4Q3NwModiVXzyI4PQvVfwYrTuo3yCnJLjqe679waobZhgpiork5+3Ibfqh9f3Rk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767170448; c=relaxed/simple; bh=3nZ7JO0P2sAWcRN+p1vN0TW0eAoK4k8zYkshOVfZOTY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=gLdlNoctzisE7SXsfMJ9Tu0p3WDF7HNWR8bN6LH+lIrmRWBs45byqxMEQsni4uob5McG1C30oWCRWnUkeepCuwXVS+v1iChQBfiUPLVYyk7fIpMIPLiBZ85+dYT+ZIqLHABwJrWOxsUFbmyWeYbnEFWex+oAB3OpZPfwxfl//n8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=windriver.com; spf=pass smtp.mailfrom=windriver.com; dkim=pass (2048-bit key) header.d=windriver.com header.i=@windriver.com header.b=NohljuRG; arc=fail smtp.client-ip=205.220.166.238 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=windriver.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=windriver.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=windriver.com header.i=@windriver.com header.b="NohljuRG" Received: from pps.filterd (m0250810.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BV6rDdb1524844; Wed, 31 Dec 2025 00:40:23 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=cc:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= PPS06212021; bh=TNVdZFFuH3CJyhSddAi6HDaBx/fUJ4zoLewcgV/kQi8=; b= NohljuRGnriiZXOSL60wEmgXY22KES7vKdtomnLF2i6Wkf9ZRrZG/Rv5pTEdHO7K gtD0FfDKXeUVLp/9YnqDG3+2/Dnz3v5+aCL+zArMJshAsKnRHzhjKRCH+Mq8TJj7 7e34s7GjJbXkIDPubZwx2U0FC9vnSSkMlNSTOdHlD9Fx2Sd/zd5NN3qcl8+AK161 kM23efTY0sSsw9E/IDe+zqkgdp6fSgJnedLv2NXE11imkHkf+z0J8xu3jg4RkcAU hlANE4Ps3SWRwR7HQ0dJNs7Uy5brMX9QBgRrdpgUVGrT87lQTTUxM3SrppAT8eut FW4uFPcPWEPQuLe6FQAE6g== Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazon11013052.outbound.protection.outlook.com [40.107.201.52]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4babm23kf4-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Wed, 31 Dec 2025 00:40:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ygV6V2lehHrnyVDmNclrVEOWOrkmAzc/zzSRIir/15HM5+cxQ+fX36IRVIrxw1UmDZehsdleZetKmFDbi6t0x32UdDDsM0jGW+is9O+N+/mzENMuavVA/jowQVOBCuaTee7ukhHXJJ5KE/vKe9zLqOnz6l//kS1MlUp/r/LrQnORfSJUAufFagcKG49TfPEn2b9nCGPfRXXpOfj4N2FYTpF3yeilGckHYKZ4wbvpSOCm8ptoNs0itmdpABahifZaBsj5qsO9azjys1XmvZUMoTtu9XSYoBOgbXnYV2OOd8XWceYcANogPNplwDcr7Ebc9AkMx0QDm6EnAapEwdbOFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=TNVdZFFuH3CJyhSddAi6HDaBx/fUJ4zoLewcgV/kQi8=; b=Ymw8jcRC+hbGWE3H+QYmIodWf2WvzLeEz6YP4/NynElovP68mDpqqxglHb/ZsbyUJPjff7NMqTNmHFcE4mDdCAgOTtVtV16BBgZWC/yFPa5ICHFZZg8Vae4xreeQ9KLpDCmQi5bTiZbYndWhq7jFmxJomBGmBBaM5+eH45o2EUv6+9J6KGiwzQmTayHsW+LEOWxeiBr4ztGWynlmB6rQgz/GkObxET3P1iuDDAmse7ynZRmsppxUWj3D6d23QwEXA/WpYtrfb5yWTm1RroN/sa+Eatv/2n9vhcBjoD2SBWZYx94M8spT64xVMfgAgrxDwQTD858SpG8njIv4XHh+8A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=windriver.com; dmarc=pass action=none header.from=windriver.com; dkim=pass header.d=windriver.com; arc=none Received: from DS4PPFD667CEBB6.namprd11.prod.outlook.com (2603:10b6:f:fc02::53) by BL4PR11MB8845.namprd11.prod.outlook.com (2603:10b6:208:5aa::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9456.14; Wed, 31 Dec 2025 08:40:21 +0000 Received: from DS4PPFD667CEBB6.namprd11.prod.outlook.com ([fe80::92d2:113:b2d3:1d3e]) by DS4PPFD667CEBB6.namprd11.prod.outlook.com ([fe80::92d2:113:b2d3:1d3e%6]) with mapi id 15.20.9478.004; Wed, 31 Dec 2025 08:40:21 +0000 From: Xiaolei Wang To: tarang.raval@siliconsignals.io, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, dave.stevenson@raspberrypi.com, jacopo@jmondi.org, mchehab@kernel.org, prabhakar.mahadev-lad.rj@bp.renesas.com, hverkuil+cisco@kernel.org, johannes.goede@oss.qualcomm.com, hverkuil-cisco@xs4all.nl, jai.luthra@ideasonboard.com, xiaolei.wang@windriver.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/3] media: i2c: ov5647: switch to {enable,disable}_streams Date: Wed, 31 Dec 2025 16:39:24 +0800 Message-ID: <20251231083924.2657165-4-xiaolei.wang@windriver.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251231083924.2657165-1-xiaolei.wang@windriver.com> References: <20251231083924.2657165-1-xiaolei.wang@windriver.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR02CA0045.apcprd02.prod.outlook.com (2603:1096:4:196::21) To DS4PPFD667CEBB6.namprd11.prod.outlook.com (2603:10b6:f:fc02::53) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS4PPFD667CEBB6:EE_|BL4PR11MB8845:EE_ X-MS-Office365-Filtering-Correlation-Id: ccdc6504-6f0a-4a1c-1476-08de48483bd4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|376014|1800799024|366016|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?sR1nfrxyAaiXw6m7CPTOSZHfaWjErEp+XTPhEfv+60bNuXf6L0/P92S4yXRV?= =?us-ascii?Q?2d3sbZf9FT9pQNqqzQ741ydy6a6Z+fwJjvFjRGVsp0W1pObHMCvGz6vIHO9N?= =?us-ascii?Q?HPVALJHevNz2S6XAg1s+LihjEPjdK7sVCco93COCyJeX6nzEgU1O2WatE6sl?= =?us-ascii?Q?a9LCZuJAbko7OvcsRHIDxr7rQZe7t9dIC+oFt5wbib5pOMMsnz8UHJOsLii1?= =?us-ascii?Q?zaCx9rxYi7u+TZTfPuoH4orExqHDruv6E/3YGPmynWFGTTq49tkx6fUs2dlL?= =?us-ascii?Q?AE4TQC6lXLXxH2RVvHqJDLGgpmPMGAwSrBvkop25m7Nfc2Nrs3EbQl9gxToM?= =?us-ascii?Q?DrmPXVEv2b+bvxpmIuCb6g5z/o4HfK8K5r684tNnczFkGtXHdBb27nLdVBW7?= =?us-ascii?Q?1zIMqNXKP6dgbtYSsr56fdevyDhsuNMnp4sNFdbgZVmgtlTmAFAGY2h9NNVl?= =?us-ascii?Q?VpYzLzQBJoZTJKKuJNDA4mV4kih5d6otfH4OxdKNM7XHItNrh7rCpokGEN4p?= =?us-ascii?Q?4L9O4bPDeHw0T2CEAQX4WzXVdvjM+g6gWQ932T0Q5jKMfARaFZS3l6K925cG?= =?us-ascii?Q?0M7cdEGVUS/NuNA8aj9lUEm9UXiVSVOOkT4tCrL7qxkl1yw8fiCYhUfGoWs8?= =?us-ascii?Q?7G7xilxzV8blhqLftTfUrzYbVsYM5igsT9k1CrMX32iPlg+2mXbbd2JMTkkt?= =?us-ascii?Q?ueA4usI/eXMhszKC9+bYQo7uH/By7zAWdHbOi2BJ7L4FX6o8GNgy9oEGkaYD?= =?us-ascii?Q?0gfNDesdBE6sLQu5d+jknL9APxpfnkqEDY0ykN3vNjs9nAfeX+KRFJeZ07JJ?= =?us-ascii?Q?+ofy6Yr/MtjiAQwihUKRiV5g24vAXa59RkflulxXAj78SBndQfcNqYSci4by?= =?us-ascii?Q?RaD0EgKER3DoHdOf4of1TFgIzG/9uWJ0DnDBfQ9fgztGsV9Mv2ehIlfsM2dc?= =?us-ascii?Q?fGhjMcQkPNCiJzRYCkxaxgBK3l5Y0y6Wqdka/0LErbR8gJg21ApGyYwsngLm?= =?us-ascii?Q?XIRduajWqZQhEQStix31+c5NWTQJsL/IQjVSxMTL5RjyqOOZ95u4736e3QZN?= =?us-ascii?Q?T2rzYqrrq4El6dskMmpOK56kRF+gIiN4Uk+y1Tf9g70BG2moNB2Oayh2isfJ?= =?us-ascii?Q?pK+BVb/SXX3w6hmx+jGcbNYZm4bS35co5oWrec6WRiXBl/ARvaQP+kiajtFq?= =?us-ascii?Q?J6sxP9kQCd8Erxhkkbery8qf77g4GiJ9zlpm9Xc/8jNn+80PeU0rwwVMmQqy?= =?us-ascii?Q?QTGhNFLpBxns69mhJXEsphYlE+M821Lr8C2e9BtuqAyIR8wxFu1wTFFzugP2?= =?us-ascii?Q?SDpVPdfMhjQGgdqqo9PBCpL3tRRmBCMzv0wApBmCv8jl6nkscBIibHe9LjfH?= =?us-ascii?Q?sQCvPvvI/ljYEqoWi/abPUC/+7UFG00UhMkgtD6m/xjvgMZPJ2z0bW/gWBmE?= =?us-ascii?Q?0J7WhVluAJmID+/NljQO7h8l43BTVY1VVhH4UVJrJd6+mXPHv/De5HXiw+Oj?= =?us-ascii?Q?Pn5fS5WIUn6MTCQPZEACKMj52qdLO9FNnGaKdu9pA4osjV6MCZ5uj6SFLw?= =?us-ascii?Q?=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS4PPFD667CEBB6.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(376014)(1800799024)(366016)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ciIs1UNqZIX8RmpVOy06XoPhJanMX7nz//W8WZtJBD3EfN0usJ4u5VrobJgr?= =?us-ascii?Q?+LXE8HhRaLtbBmP4BtdZ6swMi7hlUvjxUcZmif6Uukx3MJM5dS6jFAgxk2CO?= =?us-ascii?Q?f3zgFn3eOEp+u/HbDGScKZO3ACXSOBNxV7WyJYXd/2DZITY0giA0yOaFrfgc?= =?us-ascii?Q?460BFP/0WMZ7O3zruWORRNn7DshWZQeq2h0XyzhkNM+H8VsNrC0RnZDNDpX7?= =?us-ascii?Q?BGcplLhkrAjqfi1GmgvLBtff0dzT8W8H5evtISB4gINENq0U8MM0Jyx3LAYP?= =?us-ascii?Q?E+/aQ8xKkbJK7ElmQAJ6IrZ8d3UVpMYrMwcQ8fzM5XU5MH1KpCQVV5MDoJf8?= =?us-ascii?Q?H1p7Wyc4Oxv9ElIMhA8qdDYtEQhi4U0dUyLfmivm/JTaDq4czA3GQsJX13c/?= =?us-ascii?Q?wTr6cMTGBj4DJRw+XbBb3JJ33c2wt6QOykPL9ZX20YSwlu7uxY1yUWvm9XLr?= =?us-ascii?Q?YCufCBDd+9kRMAYhwW6Nufzm5SM769iv25XKL07SnKyvb6x6KPTlxIig4wBv?= =?us-ascii?Q?7UwsKQxGBSApvGLgor+ajBC/1oQBHXnriRXC+86MIjz7qwK4HkyTMpcbavs6?= =?us-ascii?Q?lfyOaybWAT8q+ude6A1cT4k9aZjr7KKh6LwOA9gYvcHV5FINkbwxKeqx22tr?= =?us-ascii?Q?RQDFfm7AeG3EtdmRSkCHkYK9H4mXQCM18aDRpyIzup+t4evqmzix8f9uqMXd?= =?us-ascii?Q?MqizzE3+bu9ck/Yq12eYjXGFHcX6DJfOkHv5/MOPE67b5Os+ToDcsNXU2KbX?= =?us-ascii?Q?s80+SbxalHy4e0HSpcp9Ze0DZLHHOtYFOaO520vA+KeL+V04xtIT430mIx8c?= =?us-ascii?Q?6SnMeN022DIBVADFxaVmyas1P6sKisjEFDnpE1jxMMihWEcopfbeyMrPYqqG?= =?us-ascii?Q?pqJ1IB/4yfOEU5lm6IAH7Ml2QCce08gV6iyXbVQwDnGd4HIBKrey+UZdqg6N?= =?us-ascii?Q?le97MFjasIzNp8mlqn97f4tW3b2KltRNn74LliR3N7XwzEAvv4m+C4epaEsd?= =?us-ascii?Q?i5bRFpVRgBLGYZoB8ZAkIY25UTmBiIyY0KG8gdsMChS/3g448AXqlkfhlFNq?= =?us-ascii?Q?pS7WHUFy2CPp/cpapTbojaEVhYEeAtOOcnMsLE+L1NvMrR2MLjGu/JQDwZHA?= =?us-ascii?Q?mpBzp133FQBke1b5fEulyVSZHX4xVHsAiFRQ8gcdEywapXEhUJXurnSuaSS7?= =?us-ascii?Q?rjCOq/pt6B1j2Z9ZmOQyMs2C6PtivIbXeCAZY4VhTB2oDGEouJ5IhAhOEjIb?= =?us-ascii?Q?exodI1ukLZJv9pxTdcWIWK7qu6hX/lwLrlduMRX9exMDIBuUbLCu/sDMwjmt?= =?us-ascii?Q?2YtrsQgi69dEiWGE8AryFu0s33+HmM/1v31gx8nV3jzQKd+nnJANWUaeFP4a?= =?us-ascii?Q?DZB1z/FtimUrya1OqGRubpHe3YeVtMcHNhRkXV/GX8ZOJ2C/E8GbHOaSVBoD?= =?us-ascii?Q?Gff+KOTeqaKOuKq6xF/iG2EzxQiHlHkA11HAD1CvUXLF5+BY8CbvthVW5Hve?= =?us-ascii?Q?ZqD+ObJWsKTKtSjfNCSs6k+XLaB2Ut1RECr8BbDC1CZSCC1My1sXLH9yaLfb?= =?us-ascii?Q?RYa8xuHhF4WiCQ0jWfdyfbsf5pDBP36XfzxEhdx6ewsEsraCsNPRKs+16Za6?= =?us-ascii?Q?LnEnAhwugwYF+dAVioFsOGLoxATj5QlaH6jTp2/zTRyyVWyr7NmvI6JhQTqg?= =?us-ascii?Q?sK7xGH/4X5Df85sXUvLglPaq2sE9S5EVaP+m+PY4OSx4OxfndKAq1FsLzOIr?= =?us-ascii?Q?y+U8X1JtERWUYAMh0dnDj6NPK2XSArs=3D?= X-OriginatorOrg: windriver.com X-MS-Exchange-CrossTenant-Network-Message-Id: ccdc6504-6f0a-4a1c-1476-08de48483bd4 X-MS-Exchange-CrossTenant-AuthSource: DS4PPFD667CEBB6.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 08:40:21.4251 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ddb2873-a1ad-4a18-ae4e-4644631433be X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VFZUPlhZyKvj5CFdGnFYAQgRTwfodgeSLje6zQL1wAWcr70NQFrvZDsA7chDZUnZ5IKX5QTWMggQIpyQwaGmmJdFhFy3QAn2rugUrDsftCg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR11MB8845 X-Proofpoint-ORIG-GUID: wEuhJVkqdI9f1s3SSHDKkS8qx6QDaaN9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjMxMDA3NCBTYWx0ZWRfX7X7EvhrHK6Pg LYwXnZxJCB6k2JMqBEBW+quNiCO+C5o14bEW9d/Y5KmUeHG3Zkb7/QNQiU/ipaqtK9YJHSxcY45 x7+voonwL8OSVh0s/oUxRTFXMqEmYV8j8Q3d6vISY7/EfMgACTSM/YLV1o8aoTS6ZkVavwKlDpL yqv16mN/CWQh3zZGmOQULgCb9Amt1CxaNnKkF8nhjxHd7MRrX/QvHqa2MUeqml6mqH2CtcDsJ9d kAOFY/vKF1Iuuc2C4bW8gOKEB3k28SzLsbJmlZsjywZCjVFUc2FhROAXP1j23ANKAX2hZWIfLUv no8SRKnb7yiWIqrCnufzFuvCAtXs6Y2Li1YWHYCO7bliie9YfEePq9dqUdeGeB+JGRnOMel5V+z m8YeZzoH93Y/FWZmWHvLCvVbbgrdFvyHSAiNTekLyiC6XJlaex8so8fTRq18Sn4CzM2q5b4BXYZ qseG13x0nVkLnJ+3J7A== X-Proofpoint-GUID: wEuhJVkqdI9f1s3SSHDKkS8qx6QDaaN9 X-Authority-Analysis: v=2.4 cv=bN0b4f+Z c=1 sm=1 tr=0 ts=6954e177 cx=c_pps a=VtjYC05bhoYYzE9JtrBllg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=t7CeM3EgAAAA:8 a=P1BnusSwAAAA:8 a=pG3TpReAhpfUgZjo6d8A:9 a=FdTzh2GWekK77mhwV6Dw:22 a=D0XLA9XvdZm18NrgonBM:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-31_02,2025-12-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 bulkscore=0 suspectscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512310074 Content-Type: text/plain; charset="utf-8" Switch from s_stream to enable_streams and disable_streams callbacks. Signed-off-by: Xiaolei Wang Reviewed-by: Laurent Pinchart --- drivers/media/i2c/ov5647.c | 89 ++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 51 deletions(-) diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c index bc81f378436a..7091081a0828 100644 --- a/drivers/media/i2c/ov5647.c +++ b/drivers/media/i2c/ov5647.c @@ -637,23 +637,42 @@ static int ov5647_set_mode(struct v4l2_subdev *sd) return 0; } =20 -static int ov5647_stream_on(struct v4l2_subdev *sd) +static int ov5647_stream_stop(struct ov5647 *sensor) +{ + int ret =3D 0; + + cci_write(sensor->regmap, OV5647_REG_MIPI_CTRL00, + MIPI_CTRL00_CLOCK_LANE_GATE | MIPI_CTRL00_BUS_IDLE | + MIPI_CTRL00_CLOCK_LANE_DISABLE, &ret); + cci_write(sensor->regmap, OV5647_REG_FRAME_OFF_NUMBER, 0x0f, &ret); + cci_write(sensor->regmap, OV5640_REG_PAD_OUT, 0x01, &ret); + + return ret; +} + +static int ov5647_enable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, u32 pad, + u64 streams_mask) { struct i2c_client *client =3D v4l2_get_subdevdata(sd); struct ov5647 *sensor =3D to_sensor(sd); u8 val =3D MIPI_CTRL00_BUS_IDLE; int ret =3D 0; =20 + ret =3D pm_runtime_resume_and_get(&client->dev); + if (ret < 0) + return ret; + ret =3D ov5647_set_mode(sd); if (ret) { dev_err(&client->dev, "Failed to program sensor mode: %d\n", ret); - return ret; + goto done; } =20 /* Apply customized values from user when stream starts. */ ret =3D __v4l2_ctrl_handler_setup(sd->ctrl_handler); if (ret) - return ret; + goto done; =20 if (sensor->clock_ncont) val |=3D MIPI_CTRL00_CLOCK_LANE_GATE | @@ -663,19 +682,24 @@ static int ov5647_stream_on(struct v4l2_subdev *sd) cci_write(sensor->regmap, OV5647_REG_FRAME_OFF_NUMBER, 0x00, &ret); cci_write(sensor->regmap, OV5640_REG_PAD_OUT, 0x00, &ret); =20 +done: + if (ret) + pm_runtime_put(&client->dev); + return ret; } =20 -static int ov5647_stream_off(struct v4l2_subdev *sd) +static int ov5647_disable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, u32 pad, + u64 streams_mask) { + struct i2c_client *client =3D v4l2_get_subdevdata(sd); struct ov5647 *sensor =3D to_sensor(sd); - int ret =3D 0; + int ret; =20 - cci_write(sensor->regmap, OV5647_REG_MIPI_CTRL00, - MIPI_CTRL00_CLOCK_LANE_GATE | MIPI_CTRL00_BUS_IDLE | - MIPI_CTRL00_CLOCK_LANE_DISABLE, &ret); - cci_write(sensor->regmap, OV5647_REG_FRAME_OFF_NUMBER, 0x0f, &ret); - cci_write(sensor->regmap, OV5640_REG_PAD_OUT, 0x01, &ret); + ret =3D ov5647_stream_stop(sensor); + + pm_runtime_put(&client->dev); =20 return ret; } @@ -706,7 +730,7 @@ static int ov5647_power_on(struct device *dev) } =20 /* Stream off to coax lanes into LP-11 state. */ - ret =3D ov5647_stream_off(&sensor->sd); + ret =3D ov5647_stream_stop(sensor); if (ret < 0) { dev_err(dev, "camera not available, check power\n"); goto error_clk_disable; @@ -803,47 +827,8 @@ __ov5647_get_pad_crop(struct ov5647 *ov5647, return NULL; } =20 -static int ov5647_s_stream(struct v4l2_subdev *sd, int enable) -{ - struct i2c_client *client =3D v4l2_get_subdevdata(sd); - struct v4l2_subdev_state *state; - int ret; - - state =3D v4l2_subdev_lock_and_get_active_state(sd); - - if (enable) { - ret =3D pm_runtime_resume_and_get(&client->dev); - if (ret < 0) - goto error_unlock; - - ret =3D ov5647_stream_on(sd); - if (ret < 0) { - dev_err(&client->dev, "stream start failed: %d\n", ret); - goto error_pm; - } - } else { - ret =3D ov5647_stream_off(sd); - if (ret < 0) { - dev_err(&client->dev, "stream stop failed: %d\n", ret); - goto error_pm; - } - pm_runtime_put(&client->dev); - } - - v4l2_subdev_unlock_state(state); - - return 0; - -error_pm: - pm_runtime_put(&client->dev); -error_unlock: - v4l2_subdev_unlock_state(state); - - return ret; -} - static const struct v4l2_subdev_video_ops ov5647_subdev_video_ops =3D { - .s_stream =3D ov5647_s_stream, + .s_stream =3D v4l2_subdev_s_stream_helper, }; =20 static int ov5647_enum_mbus_code(struct v4l2_subdev *sd, @@ -986,6 +971,8 @@ static const struct v4l2_subdev_pad_ops ov5647_subdev_p= ad_ops =3D { .set_fmt =3D ov5647_set_pad_fmt, .get_fmt =3D ov5647_get_pad_fmt, .get_selection =3D ov5647_get_selection, + .enable_streams =3D ov5647_enable_streams, + .disable_streams =3D ov5647_disable_streams, }; =20 static const struct v4l2_subdev_ops ov5647_subdev_ops =3D { --=20 2.43.0