From patchwork Mon Aug 30 11:00:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 504826 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5948CC43214 for ; Mon, 30 Aug 2021 11:02:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3AE486112D for ; Mon, 30 Aug 2021 11:02:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236415AbhH3LDI (ORCPT ); Mon, 30 Aug 2021 07:03:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56096 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235818AbhH3LDH (ORCPT ); Mon, 30 Aug 2021 07:03:07 -0400 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3301AC061575 for ; Mon, 30 Aug 2021 04:02:14 -0700 (PDT) Received: from deskari.lan (91-158-153-130.elisa-laajakaista.fi [91.158.153.130]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 807C9B7E; Mon, 30 Aug 2021 13:02:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1630321332; bh=TqC8KE4m6EQXQb81jhWD4hKKuzOiVDbnOxQvEHkZcXI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vgIJnoBbQhY53dML8E+kTEvVsbXnYuUB8lPXdxQVVqeL97ZdNsYsdPPleyGQqdZdk 9+RJcuxUCRpk58epvUk0ImyvSTKRw93FT1GJE/lQVPnkpo8IjBqcoC/kFr1ztkY4Wf KF2iKobkWNO20JkNfLjfVKeZWR11rKAZquDEPl1U= From: Tomi Valkeinen To: linux-media@vger.kernel.org, sakari.ailus@linux.intel.com, Jacopo Mondi , Laurent Pinchart , niklas.soderlund+renesas@ragnatech.se Cc: Mauro Carvalho Chehab , Hans Verkuil , Tomi Valkeinen , Pratyush Yadav , Lokesh Vutla Subject: [PATCH v8 02/36] media: subdev: add active state to struct v4l2_subdev Date: Mon, 30 Aug 2021 14:00:42 +0300 Message-Id: <20210830110116.488338-3-tomi.valkeinen@ideasonboard.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830110116.488338-1-tomi.valkeinen@ideasonboard.com> References: <20210830110116.488338-1-tomi.valkeinen@ideasonboard.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Add a new 'state' field to struct v4l2_subdev to which we can store the active state of a subdev. This will place the subdev configuration into a known place, allowing us to use the state directly from the v4l2 framework, thus simplifying the drivers. We also add v4l2_subdev_alloc_state() and v4l2_subdev_free_state(), which need to be used by the drivers that support subdev state in struct v4l2_subdev. Signed-off-by: Tomi Valkeinen --- drivers/media/v4l2-core/v4l2-subdev.c | 21 ++++++++++++++++ include/media/v4l2-subdev.h | 36 +++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c index 26a34a8e3d37..e1a794f69815 100644 --- a/drivers/media/v4l2-core/v4l2-subdev.c +++ b/drivers/media/v4l2-core/v4l2-subdev.c @@ -943,3 +943,24 @@ void v4l2_subdev_notify_event(struct v4l2_subdev *sd, v4l2_subdev_notify(sd, V4L2_DEVICE_NOTIFY_EVENT, (void *)ev); } EXPORT_SYMBOL_GPL(v4l2_subdev_notify_event); + +int v4l2_subdev_alloc_state(struct v4l2_subdev *sd) +{ + struct v4l2_subdev_state *state; + + state = v4l2_alloc_subdev_state(sd); + if (IS_ERR(state)) + return PTR_ERR(state); + + sd->state = state; + + return 0; +} +EXPORT_SYMBOL_GPL(v4l2_subdev_alloc_state); + +void v4l2_subdev_free_state(struct v4l2_subdev *sd) +{ + v4l2_free_subdev_state(sd->state); + sd->state = NULL; +} +EXPORT_SYMBOL_GPL(v4l2_subdev_free_state); diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index 8701d2e7d893..ecaf040ead57 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h @@ -898,6 +898,8 @@ struct v4l2_subdev_platform_data { * @subdev_notifier: A sub-device notifier implicitly registered for the sub- * device using v4l2_async_register_subdev_sensor(). * @pdata: common part of subdevice platform data + * @state: active state for the subdev (NULL for subdevs tracking the state + * internally) * * Each instance of a subdev driver should create this struct, either * stand-alone or embedded in a larger struct. @@ -929,6 +931,7 @@ struct v4l2_subdev { struct v4l2_async_notifier *notifier; struct v4l2_async_notifier *subdev_notifier; struct v4l2_subdev_platform_data *pdata; + struct v4l2_subdev_state *state; }; @@ -1217,4 +1220,37 @@ extern const struct v4l2_subdev_ops v4l2_subdev_call_wrappers; void v4l2_subdev_notify_event(struct v4l2_subdev *sd, const struct v4l2_event *ev); +/** + * v4l2_subdev_alloc_state() - Allocate active subdev state for subdevice + * @sd: The subdev for which the state is allocated + * + * This will allocate a subdev state and store it to + * &struct v4l2_subdev->state. + * + * Must call v4l2_subdev_free_state() when the state is no longer needed. + */ +int v4l2_subdev_alloc_state(struct v4l2_subdev *sd); + +/** + * v4l2_subdev_free_state() - Free the active subdev state for subdevice + * @sd: The subdevice + * + * This will free the subdev's state and set + * &struct v4l2_subdev->state to NULL. + */ +void v4l2_subdev_free_state(struct v4l2_subdev *sd); + +/** + * v4l2_subdev_get_active_state() - Return the active subdev state for subdevice + * @sd: The subdevice + * + * Return the active state for the subdevice, or NULL if the subdev does not + * support active state. + */ +static inline struct v4l2_subdev_state * +v4l2_subdev_get_active_state(struct v4l2_subdev *sd) +{ + return sd->state; +} + #endif