From patchwork Tue Jun 28 00:53:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yunke Cao X-Patchwork-Id: 84371 X-Patchwork-Delegate: hverkuil@xs4all.nl Received: from vger.kernel.org ([23.128.96.18]) by www.linuxtv.org with esmtp (Exim 4.92) (envelope-from ) id 1o5zUZ-0052Js-5Q; Tue, 28 Jun 2022 00:54:11 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240361AbiF1AyJ (ORCPT + 1 other); Mon, 27 Jun 2022 20:54:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240230AbiF1AyI (ORCPT ); Mon, 27 Jun 2022 20:54:08 -0400 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0F61B1D0D8 for ; Mon, 27 Jun 2022 17:54:07 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id d2-20020aa78142000000b0051c394e5226so4490079pfn.19 for ; Mon, 27 Jun 2022 17:54:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=SU0n7bqVUddHuVe8oUuy+C72vb4K9+ZlwQmDrxkPWzY=; b=T7qY8kpDIA9HPWd6oTxFT0WqUt4uWLS6VSUXuFpF5VRTbOtFTrOqrd2CmF3nxnRXLx kRjXpf9lT2wDmK7rSDQIQNi/pyR2Xw0TmkrJk7DKKBSHGn4RvhRLtz8ZrEoVuzrUDOdF 2+ZbQSK8dvnB/RJFng0g7AT8v51AIQ91g/hN2beLXL1R9n80RP321NfrNTQeVkGeiws0 NK57ISEmupQnA/oJ3wnjmU9SXktaVFKoPrnL+FepUwO/ae9cGew0Iy6yO+KfU7QIFIix YVpphkFMPHe85j644PbNyxVlbABKXbIZB6/NS0sfrgWR0+VYPo/0LpFdgV8k4e02iWld ttrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=SU0n7bqVUddHuVe8oUuy+C72vb4K9+ZlwQmDrxkPWzY=; b=4OTONH9Rz03xnsc1oIaMmZu4a6y+ALcNdpdtHhXRmsGYAoOrFmKS9TWDWW+SqdQ1eg OcgUQq73u9As23KLC1M3wRRXXn3q5PSxFmg4O1G+XOywMlvxI0RdvEdQpjLxfl/rt4RN UnU7XcXp3dBBI9JlRmQE0JAVcfYj+VTiM+g0muYHbdYd3yUVwvKNk02rrU7NSvmu/DZ8 meRQ+TWw2t1q7qrkHZNCIV5/7FdVwMp/j8GUEpilJs4+J02pD4LZroDB32rPFSGYysvR aJSTpbabWLnK5OsFWaKLQRVbOt+44qpKrGuwSwiYSA/EdFwdXzxhGF4GhlVGOeJObAoy fQgw== X-Gm-Message-State: AJIora8Mjv4tidwwN7zd5fta134jZOXg1CtMHMeUz22GcOy17EgaO29L VbwbBjn1JhyguIIIGpikVHUUhM9wxPs= X-Google-Smtp-Source: AGRyM1suR5F+yCjJ74pr/xEfVLb/MwAsSYAPutMQDt74n8AXaddxC1ZdC3JIBbnXDWAygYJTWU+JxcUjwsg= X-Received: from yunkec1.tok.corp.google.com ([2401:fa00:8f:203:9c62:6600:c258:f14]) (user=yunkec job=sendgmr) by 2002:a17:903:2447:b0:16a:3b58:48c1 with SMTP id l7-20020a170903244700b0016a3b5848c1mr2318810pls.44.1656377646555; Mon, 27 Jun 2022 17:54:06 -0700 (PDT) Date: Tue, 28 Jun 2022 09:53:52 +0900 In-Reply-To: <20220628005353.1719403-1-yunkec@google.com> Message-Id: <20220628005353.1719403-2-yunkec@google.com> Mime-Version: 1.0 References: <20220628005353.1719403-1-yunkec@google.com> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog Subject: [PATCH v3 1/2] media: vimc: add ancillary lens From: Yunke Cao To: Mauro Carvalho Chehab , Shuah Khan , Kieran Bingham Cc: Tomasz Figa , linux-media@vger.kernel.org, Yunke Cao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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-media@vger.kernel.org X-LSpam-Score: -10.0 (----------) X-LSpam-Report: No, score=-10.0 required=5.0 tests=BAYES_00=-1.9,DKIMWL_WL_MED=0.001,DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1,HEADER_FROM_DIFFERENT_DOMAINS=0.5,MAILING_LIST_MULTI=-1,USER_IN_DEF_DKIM_WL=-7.5 autolearn=ham autolearn_force=no Add lens to vimc driver and link them with sensors using ancillary links. Provides an example of ancillary link usage.The lens supports FOCUS_ABSOLUTE control. Test example: With default vimc topology > media-ctl -p Media controller API version 5.18.0 ... - entity 28: Lens A (0 pad, 0 link) type V4L2 subdev subtype Lens flags 0 device node name /dev/v4l-subdev6 - entity 29: Lens B (0 pad, 0 link) type V4L2 subdev subtype Lens flags 0 device node name /dev/v4l-subdev7 > v4l2-ctl -d /dev/v4l-subdev7 -C focus_absolute focus_absolute: 0 Reviewed-by: Shuah Khan Reviewed-by: Kieran Bingham Signed-off-by: Yunke Cao --- drivers/media/test-drivers/vimc/Makefile | 2 +- drivers/media/test-drivers/vimc/vimc-common.h | 1 + drivers/media/test-drivers/vimc/vimc-core.c | 86 +++++++++++---- drivers/media/test-drivers/vimc/vimc-lens.c | 102 ++++++++++++++++++ 4 files changed, 170 insertions(+), 21 deletions(-) create mode 100644 drivers/media/test-drivers/vimc/vimc-lens.c diff --git a/drivers/media/test-drivers/vimc/Makefile b/drivers/media/test-drivers/vimc/Makefile index a53b2b532e9f..9b9631562473 100644 --- a/drivers/media/test-drivers/vimc/Makefile +++ b/drivers/media/test-drivers/vimc/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 vimc-y := vimc-core.o vimc-common.o vimc-streamer.o vimc-capture.o \ - vimc-debayer.o vimc-scaler.o vimc-sensor.o + vimc-debayer.o vimc-scaler.o vimc-sensor.o vimc-lens.o obj-$(CONFIG_VIDEO_VIMC) += vimc.o diff --git a/drivers/media/test-drivers/vimc/vimc-common.h b/drivers/media/test-drivers/vimc/vimc-common.h index ba1930772589..37f6b687ce10 100644 --- a/drivers/media/test-drivers/vimc/vimc-common.h +++ b/drivers/media/test-drivers/vimc/vimc-common.h @@ -171,6 +171,7 @@ extern struct vimc_ent_type vimc_sen_type; extern struct vimc_ent_type vimc_deb_type; extern struct vimc_ent_type vimc_sca_type; extern struct vimc_ent_type vimc_cap_type; +extern struct vimc_ent_type vimc_len_type; /** * vimc_pix_map_by_index - get vimc_pix_map struct by its index diff --git a/drivers/media/test-drivers/vimc/vimc-core.c b/drivers/media/test-drivers/vimc/vimc-core.c index 06edf9d4d92c..166323406c6b 100644 --- a/drivers/media/test-drivers/vimc/vimc-core.c +++ b/drivers/media/test-drivers/vimc/vimc-core.c @@ -24,7 +24,7 @@ MODULE_PARM_DESC(allocator, " memory allocator selection, default is 0.\n" #define VIMC_MDEV_MODEL_NAME "VIMC MDEV" -#define VIMC_ENT_LINK(src, srcpad, sink, sinkpad, link_flags) { \ +#define VIMC_DATA_LINK(src, srcpad, sink, sinkpad, link_flags) { \ .src_ent = src, \ .src_pad = srcpad, \ .sink_ent = sink, \ @@ -32,8 +32,13 @@ MODULE_PARM_DESC(allocator, " memory allocator selection, default is 0.\n" .flags = link_flags, \ } -/* Structure which describes links between entities */ -struct vimc_ent_link { +#define VIMC_ANCILLARY_LINK(primary, ancillary) { \ + .primary_ent = primary, \ + .ancillary_ent = ancillary \ +} + +/* Structure which describes data links between entities */ +struct vimc_data_link { unsigned int src_ent; u16 src_pad; unsigned int sink_ent; @@ -41,12 +46,20 @@ struct vimc_ent_link { u32 flags; }; +/* Structure which describes ancillary links between entities */ +struct vimc_ancillary_link { + unsigned int primary_ent; + unsigned int ancillary_ent; +}; + /* Structure which describes the whole topology */ struct vimc_pipeline_config { const struct vimc_ent_config *ents; size_t num_ents; - const struct vimc_ent_link *links; - size_t num_links; + const struct vimc_data_link *data_links; + size_t num_data_links; + const struct vimc_ancillary_link *ancillary_links; + size_t num_ancillary_links; }; /* -------------------------------------------------------------------------- @@ -91,32 +104,49 @@ static struct vimc_ent_config ent_config[] = { .name = "RGB/YUV Capture", .type = &vimc_cap_type }, + { + .name = "Lens A", + .type = &vimc_len_type + }, + { + .name = "Lens B", + .type = &vimc_len_type + }, }; -static const struct vimc_ent_link ent_links[] = { +static const struct vimc_data_link data_links[] = { /* Link: Sensor A (Pad 0)->(Pad 0) Debayer A */ - VIMC_ENT_LINK(0, 0, 2, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), + VIMC_DATA_LINK(0, 0, 2, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), /* Link: Sensor A (Pad 0)->(Pad 0) Raw Capture 0 */ - VIMC_ENT_LINK(0, 0, 4, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), + VIMC_DATA_LINK(0, 0, 4, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), /* Link: Sensor B (Pad 0)->(Pad 0) Debayer B */ - VIMC_ENT_LINK(1, 0, 3, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), + VIMC_DATA_LINK(1, 0, 3, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), /* Link: Sensor B (Pad 0)->(Pad 0) Raw Capture 1 */ - VIMC_ENT_LINK(1, 0, 5, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), + VIMC_DATA_LINK(1, 0, 5, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), /* Link: Debayer A (Pad 1)->(Pad 0) Scaler */ - VIMC_ENT_LINK(2, 1, 7, 0, MEDIA_LNK_FL_ENABLED), + VIMC_DATA_LINK(2, 1, 7, 0, MEDIA_LNK_FL_ENABLED), /* Link: Debayer B (Pad 1)->(Pad 0) Scaler */ - VIMC_ENT_LINK(3, 1, 7, 0, 0), + VIMC_DATA_LINK(3, 1, 7, 0, 0), /* Link: RGB/YUV Input (Pad 0)->(Pad 0) Scaler */ - VIMC_ENT_LINK(6, 0, 7, 0, 0), + VIMC_DATA_LINK(6, 0, 7, 0, 0), /* Link: Scaler (Pad 1)->(Pad 0) RGB/YUV Capture */ - VIMC_ENT_LINK(7, 1, 8, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), + VIMC_DATA_LINK(7, 1, 8, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), +}; + +static const struct vimc_ancillary_link ancillary_links[] = { + /* Link: Sensor A -> Lens A */ + VIMC_ANCILLARY_LINK(0, 9), + /* Link: Sensor B -> Lens B */ + VIMC_ANCILLARY_LINK(1, 10), }; static struct vimc_pipeline_config pipe_cfg = { - .ents = ent_config, - .num_ents = ARRAY_SIZE(ent_config), - .links = ent_links, - .num_links = ARRAY_SIZE(ent_links) + .ents = ent_config, + .num_ents = ARRAY_SIZE(ent_config), + .data_links = data_links, + .num_data_links = ARRAY_SIZE(data_links), + .ancillary_links = ancillary_links, + .num_ancillary_links = ARRAY_SIZE(ancillary_links), }; /* -------------------------------------------------------------------------- */ @@ -135,8 +165,8 @@ static int vimc_create_links(struct vimc_device *vimc) int ret; /* Initialize the links between entities */ - for (i = 0; i < vimc->pipe_cfg->num_links; i++) { - const struct vimc_ent_link *link = &vimc->pipe_cfg->links[i]; + for (i = 0; i < vimc->pipe_cfg->num_data_links; i++) { + const struct vimc_data_link *link = &vimc->pipe_cfg->data_links[i]; struct vimc_ent_device *ved_src = vimc->ent_devs[link->src_ent]; @@ -150,6 +180,22 @@ static int vimc_create_links(struct vimc_device *vimc) goto err_rm_links; } + for (i = 0; i < vimc->pipe_cfg->num_ancillary_links; i++) { + const struct vimc_ancillary_link *link = &vimc->pipe_cfg->ancillary_links[i]; + + struct vimc_ent_device *ved_primary = + vimc->ent_devs[link->primary_ent]; + struct vimc_ent_device *ved_ancillary = + vimc->ent_devs[link->ancillary_ent]; + struct media_link *ret_link = + media_create_ancillary_link(ved_primary->ent, ved_ancillary->ent); + + if (IS_ERR(ret_link)) { + ret = PTR_ERR(link); + goto err_rm_links; + } + } + return 0; err_rm_links: diff --git a/drivers/media/test-drivers/vimc/vimc-lens.c b/drivers/media/test-drivers/vimc/vimc-lens.c new file mode 100644 index 000000000000..dfe824d3addb --- /dev/null +++ b/drivers/media/test-drivers/vimc/vimc-lens.c @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * vimc-lens.c Virtual Media Controller Driver + * Copyright (C) 2022 Google, Inc + * Author: yunkec@google.com (Yunke Cao) + */ + +#include +#include +#include + +#include "vimc-common.h" + +#define VIMC_LEN_MAX_FOCUS_POS 1023 +#define VIMC_LEN_MAX_FOCUS_STEP 1 + +struct vimc_len_device { + struct vimc_ent_device ved; + struct v4l2_subdev sd; + struct v4l2_ctrl_handler hdl; + u32 focus_absolute; +}; + +static const struct v4l2_subdev_core_ops vimc_len_core_ops = { + .log_status = v4l2_ctrl_subdev_log_status, + .subscribe_event = v4l2_ctrl_subdev_subscribe_event, + .unsubscribe_event = v4l2_event_subdev_unsubscribe, +}; + +static const struct v4l2_subdev_ops vimc_len_ops = { + .core = &vimc_len_core_ops +}; + +static int vimc_len_s_ctrl(struct v4l2_ctrl *ctrl) +{ + struct vimc_len_device *vlen = + container_of(ctrl->handler, struct vimc_len_device, hdl); + if (ctrl->id == V4L2_CID_FOCUS_ABSOLUTE) { + vlen->focus_absolute = ctrl->val; + return 0; + } + return -EINVAL; +} + +static const struct v4l2_ctrl_ops vimc_len_ctrl_ops = { + .s_ctrl = vimc_len_s_ctrl, +}; + +static struct vimc_ent_device *vimc_len_add(struct vimc_device *vimc, + const char *vcfg_name) +{ + struct v4l2_device *v4l2_dev = &vimc->v4l2_dev; + struct vimc_len_device *vlen; + int ret; + + /* Allocate the vlen struct */ + vlen = kzalloc(sizeof(*vlen), GFP_KERNEL); + if (!vlen) + return ERR_PTR(-ENOMEM); + + v4l2_ctrl_handler_init(&vlen->hdl, 1); + + v4l2_ctrl_new_std(&vlen->hdl, &vimc_len_ctrl_ops, + V4L2_CID_FOCUS_ABSOLUTE, 0, + VIMC_LEN_MAX_FOCUS_POS, VIMC_LEN_MAX_FOCUS_STEP, 0); + vlen->sd.ctrl_handler = &vlen->hdl; + if (vlen->hdl.error) { + ret = vlen->hdl.error; + goto err_free_vlen; + } + vlen->ved.dev = vimc->mdev.dev; + + ret = vimc_ent_sd_register(&vlen->ved, &vlen->sd, v4l2_dev, + vcfg_name, MEDIA_ENT_F_LENS, 0, + NULL, &vimc_len_ops); + if (ret) + goto err_free_hdl; + + return &vlen->ved; + +err_free_hdl: + v4l2_ctrl_handler_free(&vlen->hdl); +err_free_vlen: + kfree(vlen); + + return ERR_PTR(ret); +} + +static void vimc_len_release(struct vimc_ent_device *ved) +{ + struct vimc_len_device *vlen = + container_of(ved, struct vimc_len_device, ved); + + v4l2_ctrl_handler_free(&vlen->hdl); + media_entity_cleanup(vlen->ved.ent); + kfree(vlen); +} + +struct vimc_ent_type vimc_len_type = { + .add = vimc_len_add, + .release = vimc_len_release +}; From patchwork Tue Jun 28 00:53:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yunke Cao X-Patchwork-Id: 84372 X-Patchwork-Delegate: hverkuil@xs4all.nl Received: from vger.kernel.org ([23.128.96.18]) by www.linuxtv.org with esmtp (Exim 4.92) (envelope-from ) id 1o5zUc-0052Js-Rk; Tue, 28 Jun 2022 00:54:15 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241681AbiF1AyN (ORCPT + 1 other); Mon, 27 Jun 2022 20:54:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48696 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240230AbiF1AyN (ORCPT ); Mon, 27 Jun 2022 20:54:13 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A03B61D0D8 for ; Mon, 27 Jun 2022 17:54:12 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-3178a95ec78so90617367b3.4 for ; Mon, 27 Jun 2022 17:54:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=N6v6hvJXGvZe/Kt+JRvjGrtiFAwl4ZGvLB+BNaErPxc=; b=Oz3XkmgBvclpIBSyTIotgKYzJIQjkPKBSYdhtd6nnmJ3uz9SHDqBrhbhlZJBTEvAZ4 PVw6elMtFSAKQmqH7MxEkcDiu2YLm3ohlcskUcoPDOjRVnGbVdCP+TYqDaTeOfMju0ml smrN4C4FsYXx6BUSXPnfNYt6u8YZs0/HFUxq8TgUTX4Xq+l1RVsmXVFQB3xvOhdFs7gz RI23z7DEc4+ETWMSfA7cXl4gYFJ1CNhIBdZCRM7z+SfO3os+mIGdiGJR86/Wd7ddVroA 96cIJPK5jDUdMVYWz5TiGoH0mZmLIRuPOG/z7FrMJml6IIZNuD5IDllIMauGoNwpctsA UVDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=N6v6hvJXGvZe/Kt+JRvjGrtiFAwl4ZGvLB+BNaErPxc=; b=1ySDCL+hGaWwHAkv82mNP/xs+h5EQyhHgQOcFvGk9mmiJWzif8aik0TZCMEHdqRfHM dEWrNQOGbJaY7oqxUFEowMdTTbuopcQUawYms2+KKx7iDNVn88qTwaW2v6ZXupjdz+71 33djIs3d9PT21wERlF67IzgU59oaMx7P1B7lmW8zKMofrQToPm/ub9oVlpSH81yRWIE+ qKtSpqrMYzOcnsvjpn+OKKd376qXGYYxLbxcnSFGzV/IOnaN7wMXSHTAiujToLsDNM79 QIl62z3xe3Iq8X42aGluX3PRmgW2Q6c9wfw386HufKf2ScOPNfotsgcDAC8l460VbCUU /1eg== X-Gm-Message-State: AJIora/z6NjMmPzD65HUOIwAmGkSQnKJaaLWGWeSD3dd5iuvrzr7WoLZ s3F3OCKc0lz2xY9tQ0QDiBwB0zkQK78= X-Google-Smtp-Source: AGRyM1vam7NFUqkuWNsq87U8jpNnfWkxCtr3IOx5RAi5FrCI0QMsB8zlEdq8k48/YJ0LSl7kbLULqB05hhc= X-Received: from yunkec1.tok.corp.google.com ([2401:fa00:8f:203:9c62:6600:c258:f14]) (user=yunkec job=sendgmr) by 2002:a0d:ea87:0:b0:317:8993:9f06 with SMTP id t129-20020a0dea87000000b0031789939f06mr17916566ywe.152.1656377651742; Mon, 27 Jun 2022 17:54:11 -0700 (PDT) Date: Tue, 28 Jun 2022 09:53:53 +0900 In-Reply-To: <20220628005353.1719403-1-yunkec@google.com> Message-Id: <20220628005353.1719403-3-yunkec@google.com> Mime-Version: 1.0 References: <20220628005353.1719403-1-yunkec@google.com> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog Subject: [PATCH v3 2/2] media: vimc: documentation for lens From: Yunke Cao To: Mauro Carvalho Chehab , Shuah Khan , Kieran Bingham Cc: Tomasz Figa , linux-media@vger.kernel.org, Yunke Cao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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-media@vger.kernel.org X-LSpam-Score: -10.0 (----------) X-LSpam-Report: No, score=-10.0 required=5.0 tests=BAYES_00=-1.9,DKIMWL_WL_MED=0.001,DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1,HEADER_FROM_DIFFERENT_DOMAINS=0.5,MAILING_LIST_MULTI=-1,USER_IN_DEF_DKIM_WL=-7.5 autolearn=ham autolearn_force=no Add documentation for vimc-lens. Add a lens into the vimc topology graph. Reviewed-by: Shuah Khan Signed-off-by: Yunke Cao --- Documentation/admin-guide/media/vimc.dot | 4 ++++ Documentation/admin-guide/media/vimc.rst | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/Documentation/admin-guide/media/vimc.dot b/Documentation/admin-guide/media/vimc.dot index 57863a13fa39..5a6e231c3d21 100644 --- a/Documentation/admin-guide/media/vimc.dot +++ b/Documentation/admin-guide/media/vimc.dot @@ -5,9 +5,13 @@ digraph board { n00000001 [label="{{} | Sensor A\n/dev/v4l-subdev0 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] n00000001:port0 -> n00000005:port0 [style=bold] n00000001:port0 -> n0000000b [style=bold] + n00000001 -> n00000002 + n00000002 [label="{{} | Lens A\n/dev/v4l-subdev5 | {}}", shape=Mrecord, style=filled, fillcolor=green] n00000003 [label="{{} | Sensor B\n/dev/v4l-subdev1 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] n00000003:port0 -> n00000008:port0 [style=bold] n00000003:port0 -> n0000000f [style=bold] + n00000003 -> n00000004 + n00000004 [label="{{} | Lens B\n/dev/v4l-subdev6 | {}}", shape=Mrecord, style=filled, fillcolor=green] n00000005 [label="{{ 0} | Debayer A\n/dev/v4l-subdev2 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] n00000005:port1 -> n00000017:port0 n00000008 [label="{{ 0} | Debayer B\n/dev/v4l-subdev3 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] diff --git a/Documentation/admin-guide/media/vimc.rst b/Documentation/admin-guide/media/vimc.rst index 0b07f05dde25..3b4d2b36b4f3 100644 --- a/Documentation/admin-guide/media/vimc.rst +++ b/Documentation/admin-guide/media/vimc.rst @@ -53,6 +53,25 @@ vimc-sensor: * 1 Pad source +vimc-lens: + Ancillary lens for a sensor. Supports auto focus control. Linked to + a vimc-sensor using an ancillary link. The lens supports FOCUS_ABSOLUTE + control. + +.. code-block:: bash + + media-ctl -p + ... + - entity 28: Lens A (0 pad, 0 link) + type V4L2 subdev subtype Lens flags 0 + device node name /dev/v4l-subdev6 + - entity 29: Lens B (0 pad, 0 link) + type V4L2 subdev subtype Lens flags 0 + device node name /dev/v4l-subdev7 + v4l2-ctl -d /dev/v4l-subdev7 -C focus_absolute + focus_absolute: 0 + + vimc-debayer: Transforms images in bayer format into a non-bayer format. Exposes: