From patchwork Wed Sep 30 15:48:32 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nguyen Minh Tien X-Patchwork-Id: 411 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114]) by mxe881.netcup.net (Postfix) with ESMTPS id B71F61C0D4A for ; Wed, 30 Sep 2026 20:45:50 +0200 (CEST) Authentication-Results: mxe881; dkim=temperror header.d=embeddedlinux.blog; spf=pass (sender IP is 172.105.105.114) smtp.mailfrom=linux-sunxi+bounces-26430-noreply=patchwork.local@lists.linux.dev smtp.helo=tor.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.105.105.114 as permitted sender) client-ip=172.105.105.114; envelope-from=linux-sunxi+bounces-26430-noreply=patchwork.local@lists.linux.dev; helo=tor.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by tor.lore.kernel.org (Postfix) with ESMTP id F35E4145CAC for ; Wed, 30 Sep 2026 15:50:00 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CD8FA4F96CB; Wed, 30 Sep 2026 15:48:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=embeddedlinux.blog header.i=@embeddedlinux.blog header.b="BYF6Xe4v" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-pj2-f39.google.com (mail-pj2-f39.google.com [74.125.227.167]) (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 CA06F4EDCA2 for ; Wed, 30 Sep 2026 15:48:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.167 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790783328; cv=none; b=Wp9LvaxhLsKnMb4Dc/sGwOiEnCnhIWRjnhZx7p+ZyNzEWGOiyHEjiYQ8cACchfFnCvmB4WX8cD3mLfJAOybxUtMCul7/POnCm2QXxUxOm5VzH/drYeYEWBpm9ikuJ/p00zGxPBwM6Wk8xK9nETBDO7NBx2lsNmdn54KVZexbKzQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790783328; c=relaxed/simple; bh=dzcZghBPmnTB1zssneiqrhDsxLxLllhQZh0w3KCwek8=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=rECfj6//SjZnlu+X6JTsCsC+Fdt65zj6YIlndoC92SOLVbIXOJA6P4pfG27F6XPGVtIfB/iEqifT15lG4W/U0E0N+cPNHyn6OkdCEdqUxSBlxPy0+Kr+jFbbfXwlim6+vGVmvMQm2bqDfNklLxX0hybY/PzGv+D0Lvf5k5vLq0Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=embeddedlinux.blog; spf=pass smtp.mailfrom=embeddedlinux.blog; dkim=pass (2048-bit key) header.d=embeddedlinux.blog header.i=@embeddedlinux.blog header.b=BYF6Xe4v; arc=none smtp.client-ip=74.125.227.167 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=embeddedlinux.blog Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=embeddedlinux.blog Received: by mail-pj2-f39.google.com with SMTP id 98e67ed59e1d1-3a49b6bb21eso1680123a91.3 for ; Wed, 30 Sep 2026 08:48:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embeddedlinux.blog; s=google; t=1790783322; x=1791388122; darn=lists.linux.dev; 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=E8rVfIZm1UEZzV/AFm0LxYX2Nm7h6LK4rTf9eW5RPJY=; b=BYF6Xe4vdnoB+yL6GNCuPEiXf7r4VuqSVzfkwzYOVcdwNieelTpBg4g+morqQO/9aS l8C4ci2GcFsUM0yYsz1dG73Lbq4lLLs7CVgnrreFJM2MILan94v3reTcpsvwIwDhNngC 74V/FNjg5KHWE8LXp3FV+7d27tJPDFnryOgAY32UThMkU06kyXDdmsKi9MTB9c0y979r bAD8bOAvclMmUhKT70qZcdQAjvFjsMe76IPI8v0hCoRMj/NA8ong23vCQSCl/q2R7aXy bb92ebMrmWN9zHCbjaPrlu70ZxYAhQCW3l4fUmxRF5/yJul3Ak0LDD7EFVvHWUBbbw0a ctqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790783322; x=1791388122; 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=E8rVfIZm1UEZzV/AFm0LxYX2Nm7h6LK4rTf9eW5RPJY=; b=didP/XMTvhzBCFB7xBibzYhRtPG8KPCkrlEtUJBiSRuOLDHsU0K5Rfx1di4wc6fKHS uVQuZ09hv/jKvky3XaRwDuDSuRWWMBQ9GHXe4RqtkUYJ6b38Ez2dPutew/D4waxElb4y hw9yDOptJZmT3InGJuJjCZh6zBvoWP7lVdC2Ib7rN476QBy/2K4yhr5yG1FnOr0kbcCV QLwF7HFdNkw3QVy1s2X8GMezZk+O1mqJLKM00ypnomPMCV3siLx1lCRXV/LiLxQHeS4U 13YLH7+4ZkP93pkTo+uRV85OC3nXXJasgp7n/Pl63MmasPxYynO0tfUJWV1VZGtQHIHl Q1XQ== X-Forwarded-Encrypted: i=1; AKwUvBywH3lYSV2O/d3Ixz6VJExZMNlGu+PUNOC6bdxemzExMX4fh+RetgCybC0STN0hmvFqFnTy1QVLMkebYw==@lists.linux.dev X-Gm-Message-State: AFq9FYIf+iLxPbPXtxM7zqgus5ZmehQgC4hLNFfr1Lr94dzXdWGFPT5X 8s50/PRVIY/Dezr3g+zJ9dC3S9K336uO1qYmCZWNmQuOlnZk8Vbp8kNMZA5DgrDwasPd X-Gm-Gg: AYBFou3ySOuU0N0SdUpG2LiIfWTLMqD0deCfZEYxz377X12VQWaA4rXWGIcT1BuK5e1 dnh5GQiGCA7UB1VtT8GBR06vM4uLX7lHYr8FJUdE/snONCzyhjp60ucJG/Oxfseg7AelmOyrZQV fRfxmfFM5AMp5NOkY7FOKJbQAKjsW0Aih6lz/V3nApO79TwW6J3C2csSMVQ8VBHop9qHV7JDY+v RniXTSP6rt16iJXcrE1rFdFfLg7QbfBRZtiriR4CFySrheIIAgz6cnc1tRRMDSHyEby/8dqGoYJ rykMF/Uy0kItTePxE7fMBNCAZT6eS634Whs7rb+YOhAPHXRCERMrEyNzkp8MWyqrP+KfULva1u6 qJ2zO4clCW7VPDZ0D662czaWQHBl8HlEXe54J3ii3Y32cLxg20ATYT68b7QfY2c1FbFiHApGp1S ohNzFb1hdgdOl75WVDzLDOnhLGBuu9q5CpV3BIZ/kq/p+HYE7BhYUbhAz3LpcbSi89Yx+/hWgsx uZOGol7 X-Received: by 2002:a17:90b:4b11:b0:3a0:c85a:e602 with SMTP id 98e67ed59e1d1-3a4d14eee80mr1153811a91.9.1790783322165; Wed, 30 Sep 2026 08:48:42 -0700 (PDT) Received: from ltu.. ([171.245.4.151]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a4ee4d0af2sm308136a91.2.2026.09.30.08.48.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Sep 2026 08:48:41 -0700 (PDT) From: Nguyen Minh Tien To: Mauro Carvalho Chehab , Hans Verkuil Cc: Nguyen Minh Tien , Sakari Ailus , Laurent Pinchart , Paul Kocialkowski , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Philipp Zabel , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 0/3] media: sunxi: Add the Allwinner D1/T113 camera interface Date: Wed, 30 Sep 2026 22:48:32 +0700 Message-Id: <20260930154835.402684-1-tien.nguyenminh@embeddedlinux.blog> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [5.84 / 15.00]; RBL_SENDERSCORE(2.00)[172.105.105.114:from]; SUSPICIOUS_RECIPS(1.50)[]; DMARC_POLICY_SOFTFAIL(1.00)[embeddedlinux.blog : SPF not aligned (relaxed), No valid DKIM,none]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; MAILLIST(-0.15)[generic]; MIME_GOOD(-0.10)[text/plain]; BAD_REP_POLICIES(0.10)[]; HAS_LIST_UNSUB(-0.01)[]; TAGGED_RCPT(0.00)[dt]; RCVD_VIA_SMTP_AUTH(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[tor.lore.kernel.org:rdns,tor.lore.kernel.org:helo]; RCPT_COUNT_TWELVE(0.00)[23]; FORGED_SENDER_MAILLIST(0.00)[]; FREEMAIL_CC(0.00)[embeddedlinux.blog,linux.intel.com,ideasonboard.com,sys-base.io,kernel.org,gmail.com,sholland.org,dabbelt.com,eecs.berkeley.edu,ghiti.fr,pengutronix.de,vger.kernel.org,lists.infradead.org,lists.linux.dev]; PRECEDENCE_BULK(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_COUNT_FIVE(0.00)[6]; R_SPF_ALLOW(0.00)[+ip4:172.105.105.114]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; TO_DN_SOME(0.00)[]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[100.90.174.1:received,74.125.227.167:received,171.245.4.151:received]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc-20240116:i=1]; MIME_TRACE(0.00)[0:+]; FROM_NEQ_ENVFROM(0.00)[tien.nguyenminh@embeddedlinux.blog,linux-sunxi@lists.linux.dev]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:63949, ipnet:172.105.96.0/20, country:SG]; TAGGED_FROM(0.00)[bounces-26430-noreply=patchwork.local]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.105.105.114:from] X-Rspamd-Queue-Id: B71F61C0D4A X-MORS-Enabled: yes X-MORS-DOMAIN: patchwork.local X-MORS-HOSTING: hosting172546 X-MORS-USER: hosting172546 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= This series adds a driver for the camera interface of the Allwinner D1, D1s and T113, which the manual calls the CSIC. It is not the A31 CSI that sun6i-csi drives: the parser and the DMA engines are separate blocks with their own registers, so it gets a new driver. 1. The DT binding. 2. The driver: the parallel input and the first DMA engine, as a bridge subdev and a capture video device (media controller API). 3. The CSIC node in the dtsi shared by the D1, D1s and T113. I tested it on a MangoPi MQ-Dual (T113-S3) with an OV5640. With this series on top of media next, v4l2-compliance passes for the media device, the bridge and the video node (streaming output below; the two failures on the sensor's subdev are the OV5640 driver's frame size and interval enumeration). With the sensor's colour bars, every converted YUV format matches the raw capture byte for byte, and 640x480 and 1920x1080 run at 30 fps. On the board's 6.18 kernel with the driver backported (only the new set_fmt argument differs), 160x120, 176x144, 320x240, 640x480, 720x480, 720x576, 1280x720 and 1920x1080 all run at 30 fps. The OV5640's 1024x768 and 2592x1944 modes give no valid frames on this board, and I haven't found out why yet. I couldn't make the FIFO overflow, not even at 1920x1080 with both CPUs and the 2D engine keeping the DRAM busy, so the overflow path (the buffer is returned with an error and capture goes on) has never run. sun6i-csi restarts the block on an overflow instead; I left that out, as I can't test it. Not tested: a D1 board (build and dtbs_check only), BT.656 (not supported yet), other sensors, the second DMA engine, the IOMMU and system suspend while streaming. The series is based on the media tree's next branch. v4l2-compliance from v4l-utils git, on media next, with vivid as the DMABUF exporter (v4l2-compliance -d /dev/video4 -s -e /dev/video0): v4l2-compliance 1.33.0-5506, 32 bits, 64-bit time_t v4l2-compliance SHA: 91dda32e4cc9 2026-09-28 07:58:16 Compliance test for sun20i-csi device /dev/video4: Driver Info: Driver name : sun20i-csi Card type : Allwinner D1 CSIC Bus info : platform:5800000.csi Driver version : 7.3.0 Capabilities : 0xa4200001 Video Capture I/O MC Streaming Extended Pix Format Device Capabilities Device Caps : 0x24200001 Video Capture I/O MC Streaming Extended Pix Format Media Driver Info: Driver name : sun20i-csi Model : Allwinner D1 CSIC Serial : Bus info : platform:5800000.csi Media version : 7.3.0 Hardware revision: 0x00000000 (0) Driver version : 7.3.0 Interface Info: ID : 0x03000006 Type : V4L Video Entity Info: ID : 0x00000004 (4) Name : sun20i-csi-capture Function : V4L2 I/O Pad 0x01000005 : 0: Sink, Must Connect Link 0x02000008: from remote pad 0x1000003 of entity 'sun20i-csi-bridge' (Video Interface Bridge): Data, Enabled, Immutable Required ioctls: test MC information (see 'Media Driver Info' above): OK test VIDIOC_QUERYCAP: OK test invalid ioctls: OK Allow for multiple opens: test second /dev/video4 open: OK test VIDIOC_QUERYCAP: OK test VIDIOC_G/S_PRIORITY: OK test for unlimited opens: OK Debug ioctls: test VIDIOC_DBG_G/S_REGISTER: OK test VIDIOC_LOG_STATUS: OK (Not Supported) Input ioctls: test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) test VIDIOC_G/S_FREQUENCY: OK (Not Supported) test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) test VIDIOC_ENUMAUDIO: OK (Not Supported) test VIDIOC_G/S/ENUMINPUT: OK test VIDIOC_G/S_AUDIO: OK (Not Supported) Inputs: 1 Audio Inputs: 0 Tuners: 0 Output ioctls: test VIDIOC_G/S_MODULATOR: OK (Not Supported) test VIDIOC_G/S_FREQUENCY: OK (Not Supported) test VIDIOC_ENUMAUDOUT: OK (Not Supported) test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) test VIDIOC_G/S_AUDOUT: OK (Not Supported) Outputs: 0 Audio Outputs: 0 Modulators: 0 Input/Output configuration ioctls: test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) test VIDIOC_G/S_EDID: OK (Not Supported) Control ioctls (Input 0): test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported) test VIDIOC_QUERYCTRL: OK (Not Supported) test VIDIOC_G/S_CTRL: OK (Not Supported) test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported) test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported) test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) Standard Controls: 0 Private Controls: 0 Format ioctls (Input 0): test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK test VIDIOC_G/S_PARM: OK (Not Supported) test VIDIOC_G_FBUF: OK (Not Supported) test VIDIOC_G_FMT: OK test VIDIOC_TRY_FMT: OK test VIDIOC_S_FMT: OK test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) test Cropping: OK (Not Supported) test Composing: OK (Not Supported) test Scaling: OK Codec ioctls (Input 0): test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) test VIDIOC_G_ENC_INDEX: OK (Not Supported) test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) Buffer ioctls (Input 0): test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK test CREATE_BUFS maximum buffers: OK test VIDIOC_REMOVE_BUFS: OK test VIDIOC_EXPBUF: OK test Requests: OK (Not Supported) test TIME32/64: OK test blocking wait: OK Test input 0: Streaming ioctls: test read/write: OK (Not Supported) test MMAP (no poll, REQBUFS): OK test MMAP (select, REQBUFS): OK test MMAP (epoll, REQBUFS): OK test MMAP (no poll, CREATE_BUFS): OK test MMAP (select, CREATE_BUFS): OK test MMAP (epoll, CREATE_BUFS): OK test USERPTR (no poll): OK (Not Supported) test USERPTR (select): OK (Not Supported) test DMABUF (no poll): OK test DMABUF (select): OK Total for sun20i-csi device /dev/video4: 61, Succeeded: 61, Failed: 0, Warnings: 0 Nguyen Minh Tien (3): dt-bindings: media: Add Allwinner D1 CSIC media: sunxi: Add support for the D1 CSIC riscv: dts: allwinner: d1s-t113: Add the CSIC node .../media/allwinner,sun20i-d1-csi.yaml | 111 ++ MAINTAINERS | 8 + .../boot/dts/allwinner/sunxi-d1s-t113.dtsi | 31 + drivers/media/platform/sunxi/Kconfig | 1 + drivers/media/platform/sunxi/Makefile | 1 + .../media/platform/sunxi/sun20i-csi/Kconfig | 17 + .../media/platform/sunxi/sun20i-csi/Makefile | 4 + .../platform/sunxi/sun20i-csi/sun20i_csi.c | 1357 +++++++++++++++++ 8 files changed, 1530 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/allwinner,sun20i-d1-csi.yaml create mode 100644 drivers/media/platform/sunxi/sun20i-csi/Kconfig create mode 100644 drivers/media/platform/sunxi/sun20i-csi/Makefile create mode 100644 drivers/media/platform/sunxi/sun20i-csi/sun20i_csi.c base-commit: 5f21cd9a4ae4a891b273178b40e0e9eb5b9ac650