From patchwork Sun Mar 9 08:47:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 872045 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (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 59DCA192B8C; Sun, 9 Mar 2025 08:48:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510111; cv=none; b=WtvmYFNyU++UNGkYM6GtPYVQBLGjGN/xYd/9wDc/C2BuUXazWNTILvW7dwZH7EeC2jtasOaj/WRFpTBjXv4hTF/rD0pDwSbeVoGl374tHveAokUIj0N0wXniTlw2x6qIzO63ZdIbhPuanRJ+TF3//8OA+2qSjJ62b+SGK6FkYqE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510111; c=relaxed/simple; bh=7z6smvZGWZK5IVexMzCPUepQOMHvMOYKwZikRSdeV8w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MfItMhIKGsr6bbDcx4OZLGn5Ys+jhtcwcWs93Ou61LrHRby0cOJFoac8TKGRXDNIBFm0TLpBb7p4ztHQfSQEBZIJGkk0PZKyYw0ljtqTmIoWE+GaPISP/YFGjplWJFuK9Mv0gYy7AAZKyLyCvD3cEXhitd6bVy0Gf/wVtkGTpro= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Tq9X/0LM; arc=none smtp.client-ip=209.85.208.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Tq9X/0LM" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-5e5e63162a0so3012040a12.3; Sun, 09 Mar 2025 00:48:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741510108; x=1742114908; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jLwWoHn8W9MlyVlWzzyNuJFztVqL0l+N+say9TiSqnw=; b=Tq9X/0LMAlF1/KScfHuRJzof0aQMZui6Vk7V62o+YSlOXg6V+LsfWvv1+J1gcnPbAd NwDVLfTMuR2JLX50FQ0paomFBcFwoHyK4c7rc+vxgwkRjUihV4kFpY+vS8IvXYMkjDw8 O970azxtj/e35OftSfxlYKREHqa4qAND8ClhzzWwbBMk0LU9JiSUwY4ApNCj3Unw0Uyx 6QHqaeZPzlbuWjxCa9MRn6KiKTHXxi5zzc8yLnHRSnzBhXh7mfB7qpCqqOepdQyix8pf tUIpgOO9dYYKSayUukRhHCOWRgX/ccGLu7j2iloOuQZM2zVLXoDyoyof5MIKgOycs+8b zzBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741510108; x=1742114908; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jLwWoHn8W9MlyVlWzzyNuJFztVqL0l+N+say9TiSqnw=; b=j8Bf5nhXy09hnGhw36uMOnxEeDCL13aCvvgzdQNtQplApK0iD71VjxbCyHRM3n+zX0 ZH2ARt12IH88moJsib9Ctuj0ERQT2vj+uixKlFlUosv9PZKd+aI7c07xHV6sjkpLKZsd 1SRPOWazv3tYLAwOYCN3/I4g8VpwhC0wGX0Aw5PsZ1VWIC5yknVKllVCTx8NRueSckZA jSH1YAB9p9r0zmd6QXJ5QG4EnbS9yiMgfWTv4v6rkjOrKev5UaQqT5tHQlpiniLT6GXI dqBsmO9Bs/Yg76F+K4lTLVD2Q7o/8nq0h9P7OX1Eg4z0zoqt0bxXCM3Lgoi/R1omDaLf JCwg== X-Forwarded-Encrypted: i=1; AJvYcCW7g+pFwU5QGkV/k0okl7SukzDpePgab2pLkG0lFtyg8Y1X6nUoCt7mFRopGDmeZgz8njcb8BrRCAT7@vger.kernel.org, AJvYcCW8rHKaVg/65lBGbU9xVFlosVnqP6dLtmv65hWJOmbZCoy1K11tV9trmKAoV23HbnZtaeySI81jX43VzsI=@vger.kernel.org, AJvYcCWdB55KtWsGqXCk+io3MJRrVfFZLa0VRRv1Pvl29l3Bfr7+9mQZM+iwwSefam3Q7XznDkx9rw+gSbyHsg==@vger.kernel.org, AJvYcCXP1+cm3gbZJ9M6XyaJ9a9wDQwQJOahBOXXh473pt7+XylenmVFHQvTok/vJ4UK53Av6+ggWLxpnHWGOIL5@vger.kernel.org X-Gm-Message-State: AOJu0Yyi8QP6i7nsuLX+yrQeex90Z8LDfA/gSeGfxvW9DfQqYHCS32ci WXoKZ5o3htjAvn7mxH5YF4dJFKq/j03ZCRhQ0vf7VgheNWp/IPfX X-Gm-Gg: ASbGnctV2g1hPYLq+vqPLw791si25O56Pz5gHNtu8CaqST2uSwRb1x2t/uqKmNFLNTA XGdW6pf5wJYAwsINUj/UGxI1myyfD4ZqtHhUJd7TUCZ043A9m0n8ZcH6cVQy62Xp+x6XCIDJi2R KV5ZXhYE5SvN9pAvuG9z5tdjQZDBGd/ZUlkpmuuLt4lQ8rUNHwXjBvrS+snJK4wnJnfogCiTy8a +kuo3tC9rrbWyDK1MLD5SKhFfeRfLiDcXJVV9VBeau1z56CwvO4fAlX18IAP12QY22Yc/mlCQLw 6aSnbomRU0+ScwV7NU7mqBTOFZEHyOhOp4sqbHwt4rUbCw7hA76gvjjrDQ== X-Google-Smtp-Source: AGHT+IGVFkKRzT6+IwXblZWULuiCcIjFTpIaLv4LnJDpvJxC9xj4WrXnY/iTgXKB48kvflgou5SSnw== X-Received: by 2002:a17:907:7255:b0:abf:51b7:608a with SMTP id a640c23a62f3a-ac252738131mr996109666b.5.1741510107207; Sun, 09 Mar 2025 00:48:27 -0800 (PST) Received: from demon-pc.localdomain ([188.27.130.21]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac239736153sm566347466b.108.2025.03.09.00.48.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 00:48:26 -0800 (PST) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Cosmin Tanislav , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Niklas_S=C3=B6derlund?= , Julien Massot , Catalin Marinas , Will Deacon , Greg Kroah-Hartman , Liam Girdwood , Mark Brown , Linus Walleij , Bartosz Golaszewski , Bjorn Andersson , Geert Uytterhoeven , Dmitry Baryshkov , Arnd Bergmann , Taniya Das , Biju Das , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Eric Biggers , Javier Carrasco , Ross Burton , Hans Verkuil , Sakari Ailus , Laurent Pinchart , Zhi Mao , Kieran Bingham , Dongcheng Yan , AngeloGioacchino Del Regno , Benjamin Mugnier , Tommaso Merciai , Dan Carpenter , Ihor Matushchak , Laurentiu Palcu , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, linux-gpio@vger.kernel.org, Cosmin Tanislav Subject: [RFC PATCH v2 01/16] dt-bindings: media: i2c: max96717: add myself as maintainer Date: Sun, 9 Mar 2025 10:47:53 +0200 Message-ID: <20250309084814.3114794-2-demonsingur@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309084814.3114794-1-demonsingur@gmail.com> References: <20250309084814.3114794-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Analog Devices is taking responsability for the maintenance of the Maxim GMSL2/3 devices. Add myself to the maintainers list and to the device tree bindings. Signed-off-by: Cosmin Tanislav --- Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml | 1 + MAINTAINERS | 1 + 2 files changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml index d1e8ba6e368e..15ab37702a92 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml @@ -9,6 +9,7 @@ title: MAX96717 CSI-2 to GMSL2 Serializer maintainers: - Julien Massot + - Cosmin Tanislav description: The MAX96717 serializer converts MIPI CSI-2 D-PHY formatted input diff --git a/MAINTAINERS b/MAINTAINERS index 1916d0636408..8f463ebca056 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14198,6 +14198,7 @@ F: drivers/media/i2c/max96714.c MAX96717 GMSL2 SERIALIZER DRIVER M: Julien Massot +M: Cosmin Tanislav L: linux-media@vger.kernel.org S: Maintained F: Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml From patchwork Sun Mar 9 08:47:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 872044 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (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 635D81A83F4; Sun, 9 Mar 2025 08:48:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510117; cv=none; b=d6R2Hkf/u9koqNAu8p/0+p27KBc4m1+ogmef68kwoXIF4/Y0bX3SSvXcxx9ua7YssHEjVvjxLDgEabqlTNvQ/Kqpc3xJIZJw8Fw4E6U07baWxIPTmqrQEAD4lK9AeHgPjljsZJm3WuUNLLNWOv1XrsDWerGtdUs6dxX1lO4NTt0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510117; c=relaxed/simple; bh=OhQYB9SpCW5H9sXdAUEdJKF1vtNpU1SdEIqDFNjZy/Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oVq17moMnJg4Imkclk0IT8ouOTQuUp3Bi5NYewvoeFk1YN3H4F3xSJIsol+fv3DPEkHEAYLKEjN9NmYoR4YD5YIw+9ZIw9rYNwcX22p+ZkQUjn2qb8vzpGkS5/N2DIFzBesdwb370Yp63ixHqTgi9WhPNGEmR+ptwir6MM/dFrc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=D9DbCEd2; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="D9DbCEd2" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-abf3d64849dso380915766b.3; Sun, 09 Mar 2025 00:48:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741510114; x=1742114914; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kj7QL9uAss+Ow9zk6InOH2HUb1Xra8s/78xy7RSYR54=; b=D9DbCEd2alvytap+8a+S2zyJeJ9ILzzPQWUmzI6o0W2HbJUHtdMeuP/lFRdIOMy1Nn fw1ODFeqgYRlGc/Ye1N8VujclQCqQIRX32ELpgQiwB4vZblzFfFiv2TMhH/cw5JT8MDI rGQDw3ViEMaS+25vBLMTVXRZdvCRrpEjHL+AOZ+MWVdiD141FcjP7YICl7uuAlkmE5P3 ODdeoN2adSJaJic0EkVF06ifSth1escPcIwLpVLaVomonY2t+g4Rv97S6o+aLOoqeljE /rO+EUsuKj44gkZEWAEIJeCccyFuTDnFKz+WcR1bCmE8s7pwPl7w8ql9N704avvi3y6H eV1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741510114; x=1742114914; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kj7QL9uAss+Ow9zk6InOH2HUb1Xra8s/78xy7RSYR54=; b=ArBU5HGsXzwLLnZQFo6LTN1bjf7EStWX/NEZSxnU9p1H2EtvUHNY69xtTJ3BlBiP73 e0xEXO6hObviv3gxCp+sc/CoKpC/RE1iBqIb5wZmDIy859TYhSJe/SqIPOsH7qaiADpw ZwASJ5Jre9xvC3KGr33C4aAzGfstZdvY/Lje7UF6deQVaSFxOpSD+AZSmEy6ELw/iUeS 2C0yOUk5teGTI/ug/bNIi3i+37jUxmi6JTjTzonIbGB2Mti9XeP9RvGLwSWcviD14vvL P5RYHvUzsXCiEuLC2AMY+eqqdW57KhT1h9WrluTR36hWsUkgPmu3G+QD4EXYV365payi BOmg== X-Forwarded-Encrypted: i=1; AJvYcCUswVsoM0BsHXqEbcQxpZpN998ET23H9ITqdAEbh5Ekl+URRBd8UNfTr8a5qo73FQL2u5OQW8Vcbb4NWoYt@vger.kernel.org, AJvYcCV67KfmnGkUGmdaqVBatQJ4eP41AVXHvreLOWRZigAbUzbEGAA0g6VbLWP0FhCP9uwMtTkNOstJsuPO2h4=@vger.kernel.org, AJvYcCVzE7AzIzWQHsdXA9LaHUvYh3FnkL4QmfLR179P471cYrZD79+iAVfbEdgRLhUBgS3sFIJfkgvISuo7@vger.kernel.org, AJvYcCW6ey2JVyQY8+VpN/Znus75jbK6QGSUisXZ9M5IXxbjZ6MABDB3aB3d502lzmyJsnpM5OGQOayY4Hp69w==@vger.kernel.org X-Gm-Message-State: AOJu0YyWBWVh7YaiJ5pWkyQbvUfJij3EsSwp3NQrtw1YHmVAEz7Pq1HT vjw75o/aostogC2C3rGmo/sp8Vn2YDYamkHH6DNTOYrOefJPptEN X-Gm-Gg: ASbGncu/AEczpXUJPvC9aCu6G0vMCJNsALzpBwXUkLzGAVxX3M5gwIV3D4vi8endvWp zf0OtH0C/t1zyVn2lLGenvrQOWBzT3x11k8BhdWutlVU00UsMCiAVuNUdkVxK0/cvFZ3yGBI8mJ XQY0Z05C4BD0RWGKW0cdV9oo6fSY0adGyqi9PJPAFH7BuNvQqvIngVvUiZKAW/TK19fiuq0nziL WMB9VYGcl73wlP52jjjNxfOJbac+SzoIkKvOw3dYsJ7bVShH7+CnBQVUroCFrwzRLQ0j30tPfTx w1F3VlbxhhTYr2QMJ8Cu4t2DR+5XD7RojqDLbbnYGMrgND1rprmo1Q/wqg== X-Google-Smtp-Source: AGHT+IFm2koHNN7A12mxTDrUb8gVHG703Y2Y9Icivhx2dsCJHeZ/vLMfvZOA/IpeXYW5hItMXuZP+w== X-Received: by 2002:a05:6402:268a:b0:5e0:49e4:2180 with SMTP id 4fb4d7f45d1cf-5e5e24688d1mr25168696a12.25.1741510113522; Sun, 09 Mar 2025 00:48:33 -0800 (PST) Received: from demon-pc.localdomain ([188.27.130.21]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac239736153sm566347466b.108.2025.03.09.00.48.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 00:48:32 -0800 (PST) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Cosmin Tanislav , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Niklas_S=C3=B6derlund?= , Julien Massot , Catalin Marinas , Will Deacon , Greg Kroah-Hartman , Liam Girdwood , Mark Brown , Linus Walleij , Bartosz Golaszewski , Bjorn Andersson , Geert Uytterhoeven , Dmitry Baryshkov , Arnd Bergmann , Taniya Das , Biju Das , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Eric Biggers , Javier Carrasco , Ross Burton , Hans Verkuil , Sakari Ailus , Laurent Pinchart , Zhi Mao , Kieran Bingham , Dongcheng Yan , AngeloGioacchino Del Regno , Benjamin Mugnier , Tommaso Merciai , Dan Carpenter , Ihor Matushchak , Laurentiu Palcu , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, linux-gpio@vger.kernel.org, Cosmin Tanislav Subject: [RFC PATCH v2 03/16] dt-bindings: media: i2c: max96717: add support for I2C ATR Date: Sun, 9 Mar 2025 10:47:55 +0200 Message-ID: <20250309084814.3114794-4-demonsingur@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309084814.3114794-1-demonsingur@gmail.com> References: <20250309084814.3114794-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 MAX96717 is capable of address translation for the connected I2C slaves. Add support for I2C ATR while keeping I2C gate for compatibility to support this usecase. Signed-off-by: Cosmin Tanislav --- .../bindings/media/i2c/maxim,max96717.yaml | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml index 1026678a17a7..dd28cc397674 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml @@ -91,6 +91,30 @@ properties: incoming GMSL2 link. Therefore, it supports an i2c-gate subnode to configure a sensor. + i2c-alias-pool: + maxItems: 2 + + i2c-atr: + type: object + additionalProperties: false + + properties: + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + patternProperties: + '^i2c@0': + $ref: /schemas/i2c/i2c-controller.yaml# + unevaluatedProperties: false + properties: + reg: + items: + minimum: 0 + maximum: 1 + required: - compatible - reg @@ -98,6 +122,21 @@ required: additionalProperties: false +allOf: + - $ref: /schemas/i2c/i2c-atr.yaml# + + - anyOf: + - oneOf: + - required: [i2c-atr] + - required: [i2c-gate] + + - not: + required: [i2c-atr, i2c-gate] + +dependentRequired: + i2c-atr: [i2c-alias-pool] + i2c-alias-pool: [i2c-atr] + examples: - | #include From patchwork Sun Mar 9 08:47:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 872043 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (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 EF5831AE863; Sun, 9 Mar 2025 08:48:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510123; cv=none; b=HpbLbAR7XnsWAwQPSmTYZqm+pveTSnCa8yuJyqKqYIkNQ/tuSQQ5P7TnxIz0W67S8M/SkUPOzDUt8k4nbVeK171QRc/YP0JrNKjMGQNyE1mCdGXrW+MHzJmHFt/juFjqSVlmUHNolPTkxD0PPqg3PV3+emkFGLX2mBU7rLrulbI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510123; c=relaxed/simple; bh=ANWQWoRfpwfrNfunB2uoB5OyyjdD2i2V6N7Y100R4W4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YSRMIMBqMb9AGHfpgmZGQnY0RKXZ24pkRYrXyEC1cgtm2eVACgrFK7WvSe87lzW8XhGnCMTnqi5uOTtDSYwrlpCRy9Dozf/lWe0zcjQYPU4BwwI+oK0KZod2kPKWsMm4amFjSPE9OpkRgeXl4LaW8Prw0uUorGG1f4zGzt2gU1A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=aVLzi7PK; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aVLzi7PK" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-ac298c8fa50so17063766b.1; Sun, 09 Mar 2025 00:48:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741510120; x=1742114920; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=77ZQnV/idoKQSJwHe+JyKu0EB24gfw5+CVNFL3AarEo=; b=aVLzi7PKa7WsAG5bonIWEigUqClPt3WdVjTSDYO6yWpVg7sEciqfoswNR/hFTwzqL8 pUONbCv+LC5chyIrmTzc7c441gNW4DSIwbC6F27jtZwNVXFkg039596g019at2/xwIGR tCj85Jyr0rVlcnZkJu04Vmb2f9ACc3C12pJcyIudtA9UeaYyjDY4gmzxyqxBOmN/+AI+ ck/wqXNHW3033blmFIyhHbD/EIhcsWwkAN7hcD5Z3J/dN3lbITMe+ZaSuEJYH4XRaWGA MZy4Vvjm66te1M1zr/YPZNXjarGDMQzQwrRWcmsH+htG2AUQPLxToUElSLkkiqurxRFB wOwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741510120; x=1742114920; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=77ZQnV/idoKQSJwHe+JyKu0EB24gfw5+CVNFL3AarEo=; b=we5y3xB54o3zPsIvo17GOOTRKz3DWnjJXb9lMB50GXsaejL1Je43ZLOWjOfPJ58zyl 96OGbCJPHOIoFawGoO+mPDOe5HA9PiuRErkixevK89VdDguhnoqoqiPpsuD7e98wMREm rTJ24LepjHJOWAhBZfB2ug4zg0DqhzWirH5ZZmDYyEwmnzSMoVT6SZKcD79XjIWqhfYC 89XoQ00Dd46SmyxJNF1oXQQX0Odh+1JSlVHDtmCpq1XagmwTBkzJiIrG/CNG4YAfQ1Ma /ZJ5aM2KTouTj3A2wuVRiNcB0Jj2f9Fd2wvOwPMbW3K693q52rGxenihnBJ3yiN9vQKS ihuw== X-Forwarded-Encrypted: i=1; AJvYcCVZLGlD4bpN145+bhCtg5rsBfqJXhQy+WIZwdiAO6qWJEqUq8sXlaHyABFnaHDWWCDcLXfZATHs138ahw0=@vger.kernel.org, AJvYcCWowP7THiefV5ZxSWVvYfm0sdvfMHMVHYFBQsmIDaUmChP035hL7T/EINdOrSH4G75jY48/Qa8yjPbj@vger.kernel.org, AJvYcCX5s1qBMAVbd6QF1cqg8Hq6dWn+KPbFjCL+MHc651qUpwtG9EgEU9oe6fnJ84xH44FbhCcCuff7VqI0sSvb@vger.kernel.org, AJvYcCXiSeyVVb/fhnihWo4NWBejQqcTQg+Lef8M5JagXomBH2jOp8lXHRg0J/ojXXf4KaEonC45L5oR5UnPIw==@vger.kernel.org X-Gm-Message-State: AOJu0YwkBCMJowAqHqT7S4a38Pgt9s6Xln3WwycAB0yq0x3lRt0Q99Kq HwNaK8/OV2S3wcGH+E2qrW//qvIoNP+DssjrIXBzYAcL3su3f/M2 X-Gm-Gg: ASbGncuE7HmjIkZszqv5WOB4AlC5am51ww3kzDNXFYi3YReHfboAE3lFoYr2t3OsWvV aDKfzHT9NB+U63Xck9/c4hUP7xZaOcySwAo1vrJzoWeUO7C9nDHFYDJmXiLXlXBPkYlmjVXpz3m l3OrlA1823Wzyr3+6nlsZ+LWL3kPamiJ5XVyPuHACIIU8wjBOBW/JKe19Udfgdoz7zCI7U4Ardj 2COCZAaE41PIAs9WE19Nsd8Oc8Pj1fQwBRCq4IeV53aeI43RSXjSAsCdSRtNCeHm8851VNJyHkx lRWP1b6FWV3mgrRcZP2dLTk/bojmvZAl8x4AyXwz6+yfwHUe92ICVPbfei1M1CKDxrP5 X-Google-Smtp-Source: AGHT+IG0K1+lHlFBOdHDt8tr0ZKEi9pxD/wAXNM/pWihzP5DjPiNDmSdaUAc5wV4ZJZ+UdarW2Vo1Q== X-Received: by 2002:a05:6402:35c7:b0:5e5:c010:e67e with SMTP id 4fb4d7f45d1cf-5e5e24bd6bemr20287512a12.31.1741510119914; Sun, 09 Mar 2025 00:48:39 -0800 (PST) Received: from demon-pc.localdomain ([188.27.130.21]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac239736153sm566347466b.108.2025.03.09.00.48.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 00:48:38 -0800 (PST) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Cosmin Tanislav , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Niklas_S=C3=B6derlund?= , Julien Massot , Catalin Marinas , Will Deacon , Greg Kroah-Hartman , Liam Girdwood , Mark Brown , Linus Walleij , Bartosz Golaszewski , Bjorn Andersson , Geert Uytterhoeven , Dmitry Baryshkov , Arnd Bergmann , Taniya Das , Biju Das , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Eric Biggers , Javier Carrasco , Ross Burton , Hans Verkuil , Sakari Ailus , Laurent Pinchart , Zhi Mao , Kieran Bingham , Dongcheng Yan , AngeloGioacchino Del Regno , Benjamin Mugnier , Tommaso Merciai , Dan Carpenter , Ihor Matushchak , Laurentiu Palcu , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, linux-gpio@vger.kernel.org, Cosmin Tanislav Subject: [RFC PATCH v2 05/16] dt-bindings: media: i2c: max96717: add support for MAX9295A Date: Sun, 9 Mar 2025 10:47:57 +0200 Message-ID: <20250309084814.3114794-6-demonsingur@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309084814.3114794-1-demonsingur@gmail.com> References: <20250309084814.3114794-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 MAX9295A is an older variant of the MAX96717 which does not support tunnel mode. Document the compatibility. Signed-off-by: Cosmin Tanislav --- .../devicetree/bindings/media/i2c/maxim,max96717.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml index 0a43582168a8..31fb62debdc7 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml @@ -24,11 +24,14 @@ description: The GMSL2 serial link operates at a fixed rate of 3Gbps or 6Gbps in the forward direction and 187.5Mbps in the reverse direction. + MAX96717F only supports a fixed rate of 3Gbps in the forward direction. + MAX9295A only supports pixel mode. properties: compatible: oneOf: + - const: maxim,max9295a - const: maxim,max96717f - items: - enum: From patchwork Sun Mar 9 08:47:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 872042 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (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 2DA321B4226; Sun, 9 Mar 2025 08:48:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510130; cv=none; b=DgrHJTnUp/tclg8fVQUj7QxTzmNcTTFLOvfFy5YEwJRJRlB+2hQl5xyFddEmvdUr24ysVlbKeTrtIDwKuJSAbIPzCsZoS0H04ZTJ5xYR08IPwqP20D9umBPZ50Xl99LsBPGHuaorHtX/Z7HFu7pSRIfVeJHcnw00kRoEbt0ast8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510130; c=relaxed/simple; bh=AzgRF+jbMhC+vfx7CPem6eqzqNZ3Z2lH4KyJ+16TxOw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FAvF3kk7ap+UDUyBbP5BJHvH/YxxRH7uWXVXgQcTUAv24YQ9wGDeDLXSdQmvVKFx92LK9qVwL20sYrRGpmHpeZbJUgORz9QzcjTiE6aL6JbmlxFA0EQ4jSu+JogOOTLR6kfchlM7ZZVRXXMVegyEV+qmam63/8pGeEPvf1m5x40= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OsB1+eXn; arc=none smtp.client-ip=209.85.208.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OsB1+eXn" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-5e5c9662131so5060860a12.3; Sun, 09 Mar 2025 00:48:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741510126; x=1742114926; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MNEKDUXXNxdZ3aoZYUXXrkyQwTuziw3tR5vOmFxFPD8=; b=OsB1+eXnMcc9lHnQWWG48ZjBf+VwdMYhhcthxbhhncm6I7y+x+i/Tv1scR8rXVNZzP R9sziJIMqVxqjo2E2d03oqhOYqIYlSHtP6X1Potc4Fb3XK3l0vldfEJ46FktZcVcN2SP oHJRS1NfQn7gh2XpfGxh7v3ecBrfAT3RLRcjWEKn4aSHlpmBlRYtBJOSRmUquZYkYAA7 XazFlQK0v1sX8M2YxONnbaUIwplqIGrupvUYp3SaJWRhjbFEO4AjaKKPyF+lpatIb9jf 5ijvl5syRA2QpfQ4HGDFXYmEHK/UcVcYWARDQAswxsK+PlyrGiaa3+qOtD8hP0q9pq55 +tBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741510126; x=1742114926; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MNEKDUXXNxdZ3aoZYUXXrkyQwTuziw3tR5vOmFxFPD8=; b=mud/ELQUQ+7A0wZ3LMBQCcVRk96/X7NRoUfRFUcWEv6cFGVsrVFCNc2HXEZtHouHXp BWclgmz7KMkYTTKXJo2hxI4ujD2eCb+8KCwxZO3GzllB3xddDMtFP5kYC5ujw4G1fl1P YOwuYKHYhLFEMRQq4C682eeUA33En8pLhRFYWQOAyKTWsq1u4zc3nf2o94fNRnPlypb6 A8Xx0jJvovdyztzPUekPoHHmJHolvqWtcKtq56/ZM5BNpEcQrXO6zWP/eKBapr0QpFqU Nqn1z2Qscg6qetFCVkZBBc16AVHVSFKf/EYMyASKvh6tIFyQM9/TMr2qCLp2kuWY3Ch0 lKjA== X-Forwarded-Encrypted: i=1; AJvYcCUNiN/bXBsDeFjCSTFnXFpSk6Jo9LLoH9AWgmwrX3JgdMIcerrGiAWuVISX5ME5URtJz8KXnpa79Jwi@vger.kernel.org, AJvYcCV64bxt6OyIO11FFNZd6QvQWu7aHiKyWvNA1Tknrq+yxuhC775INVymMrmfap331Zkq2/rsPIYyWDdxMA==@vger.kernel.org, AJvYcCWBB+MH9rIrO56DowGEPQrpuGIExLp2hzLB3DDMcxKF4CfKZG/UvQss9qZg3HIZEgFtczjrCt7WmV0nLuP7@vger.kernel.org, AJvYcCXykyaIlkg28tFAMv5TegP775ro+wakvfjRRiuIb/RuBb7BS5C32ClANewVRnebEUWKsX0FlzsDVBalCWY=@vger.kernel.org X-Gm-Message-State: AOJu0Yzak9RSuoUvwclBZ9sw3pUMlBeJJt7wAs3oDKA/1lEzNfIkbTln 1G1usKguBX+2FGp6qP3iJoDcq60kK7DHlHat/TcWREg2GJCE1SWb X-Gm-Gg: ASbGnctkldI3S+JAqCoZYeEJhdCrppXqA8fD+YfLhEzAyiHYumPekOoxu4oncBPcVIP 4vS1iadafR+cQfmQZiLGLtE1Gele3jhvUmbnWdA3Jhh2szfqQrTopv7JQZbqpS0b+CpDwFg7Alw /Yy06fqzMRSOmvhF8f6M8P+vgE6icu1qCqK3/gh8UDcpPjt3o+Z5piKCHxg9R1yywNWuzEq5EZL 8gYCVtwKZZyxdE0qlYIVm8gq5dMOLzX5H1BQF/zovxcS+gSWBM81VqwZJinuXh5LBbpLm37EiL2 yXOLYRPeLiZdu8QuvlDq9n/b7lzfQcq344n7h/8ZxskSWsIGd3L0wnVmxA== X-Google-Smtp-Source: AGHT+IFd4OXwST2S8J6EVuRFcvfp8HeWmw8/swAHhqOkgPPhysWXT9icPKoNrSp/fqbd/dZ8XFRNhw== X-Received: by 2002:a17:907:9719:b0:abf:46cd:5e3f with SMTP id a640c23a62f3a-ac252a9d6acmr1037408766b.16.1741510126320; Sun, 09 Mar 2025 00:48:46 -0800 (PST) Received: from demon-pc.localdomain ([188.27.130.21]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac239736153sm566347466b.108.2025.03.09.00.48.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 00:48:45 -0800 (PST) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Cosmin Tanislav , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Niklas_S=C3=B6derlund?= , Julien Massot , Catalin Marinas , Will Deacon , Greg Kroah-Hartman , Liam Girdwood , Mark Brown , Linus Walleij , Bartosz Golaszewski , Bjorn Andersson , Geert Uytterhoeven , Dmitry Baryshkov , Arnd Bergmann , Taniya Das , Biju Das , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Eric Biggers , Javier Carrasco , Ross Burton , Hans Verkuil , Sakari Ailus , Laurent Pinchart , Zhi Mao , Kieran Bingham , Dongcheng Yan , AngeloGioacchino Del Regno , Benjamin Mugnier , Tommaso Merciai , Dan Carpenter , Ihor Matushchak , Laurentiu Palcu , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, linux-gpio@vger.kernel.org, Cosmin Tanislav Subject: [RFC PATCH v2 07/16] dt-bindings: media: i2c: max96712: add myself as maintainer Date: Sun, 9 Mar 2025 10:47:59 +0200 Message-ID: <20250309084814.3114794-8-demonsingur@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309084814.3114794-1-demonsingur@gmail.com> References: <20250309084814.3114794-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Analog Devices is taking responsability for the maintenance of the Maxim GMSL2/3 devices. Add myself to the maintainers list and to the device tree bindings. Signed-off-by: Cosmin Tanislav --- Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml | 1 + MAINTAINERS | 1 + 2 files changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml index 26f85151afbd..efdece2b33b9 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml @@ -9,6 +9,7 @@ title: Quad GMSL2 to CSI-2 Deserializer with GMSL1 Compatibility maintainers: - Niklas Söderlund + - Cosmin Tanislav description: | The MAX96712 deserializer converts GMSL2 or GMSL1 serial inputs into MIPI diff --git a/MAINTAINERS b/MAINTAINERS index f8ffb7cff9c5..abf3afc95fc9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14184,6 +14184,7 @@ F: drivers/media/i2c/max9286.c MAX96712 QUAD GMSL2 DESERIALIZER DRIVER M: Niklas Söderlund +M: Cosmin Tanislav L: linux-media@vger.kernel.org S: Maintained F: Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml From patchwork Sun Mar 9 08:48:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 872041 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 759771C07D5; Sun, 9 Mar 2025 08:48:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510136; cv=none; b=iI3Jh3PlvC6qOaT8UllVnfR3rCCebybUeO9sQJAN5rgeyOF/Clz5saNAIzHthlWce7T0IUOrGwIq7QggjL1DNGyAgMb+61xeCZzdR/nFlfVOIGG3TNU5bmx4wEmp1/c4v83JSJ60dAv+GPZWJfWC/9cfgJHNpfheRC+lNH8RdC0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510136; c=relaxed/simple; bh=NhRGOmX9/MaUTOS5b0eo/6ObEFwyCEmjAFZ2amwfknM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mDtMxZvIMKLbyrmqB8lmuTq7kQzYdNUe7JZVs79XXSb8XNeqYdFO8Rk+87JNQEtpsALj9ie3RplR1UXZnyneVCqKw3fvuP2R+ZW2kv9252QOmJOH1SF8VO21NHUP8WxfGXECfzAjyHeqlnUjMGnJ8Gzdz8O3PfSpjnd7YM4yJ1k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=d9Q7/RdA; arc=none smtp.client-ip=209.85.218.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="d9Q7/RdA" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-abfe7b5fbe8so470421566b.0; Sun, 09 Mar 2025 00:48:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741510133; x=1742114933; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2/XMiQrVzYH+TzZJLylgzzmMHkdleZU+slDLqGTb2MY=; b=d9Q7/RdAFcwJ56xDwcGje5w79+sQ3MjQiGUvBBM8tLWynn67qo4WTvXlWASc5Jij1T Q6RHvqJAusPgUBZ9EJbjaH8R5+GEXT++hWZ+Aq8qntLfGMGjDenZ+HS0KuBEGnXWxR+O 7Z4rgKyZ5eLZGzZlpYRD8qBlK5Aw+bKQ0gzguOvHXY7bbPulbrtLHGN+POYy2TI8IlI3 QmzBtKuBvqbk0BpBrdBVt3j8g6gWMOlpLnr4VNoaQFNgO0gqJZJlqqQLq6J7FPkDBkc8 tjDC7m1biXswGMKvI9uDpZbnkm3FVXFNvd2Shz111yh79/exN978sx1SjYJDMPnT0IDq 4nDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741510133; x=1742114933; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2/XMiQrVzYH+TzZJLylgzzmMHkdleZU+slDLqGTb2MY=; b=sNujEva54RZN9Jei4a5iocWGM9KowIRhlsaL45OwoVAaPB4ecjs1xrtD+Gld7ZY12q OG//I6Tnv87l5AUV6Gl8wtLqU4HNKYKP/n5gZKnnSdWZaVufaVNpqzg7DtP9Y4G+LKV7 Pj0Z0P1Dgj9G3pBBUaehPEWRkqtNonwuQ5eZw6jeWe5OY4GwHBb1CDiUAz/9yOv1KVXr HIFF6Dp/AkuZDU7gWjhkD+SUAoMLa2Kf/eBy+aNhRbyyavXL0367YC+zeFcBH5d4Kywv EE8w52U8MtEbdm8J/Ga5xA6ewUfldL+ua75FcszE6vUzXF5HiJD3bL9kNOZZkrh0b6Se b9dw== X-Forwarded-Encrypted: i=1; AJvYcCUYMIj4vJBlsVsgBKdm3IIly/aGidehxIBr2JDkE2E2kPeH469QA8V9/iFETwxsEZsuSIXeL2RYuNVNzg==@vger.kernel.org, AJvYcCVLLQBdOegXmozdO6ijMECPDBD8DNC5apNQEklZ1zB+8hSPNq+mug/0emSo7NAJMDIvYh3G4gk5kDMj@vger.kernel.org, AJvYcCWc0bLHsXFBh+4RU6IfWS1B2RysGYSfV8//kByoY6Qn3ZWDs9jDlHvXJNhUuN9iir25dvYGABHwxSURvcQ=@vger.kernel.org, AJvYcCXpww/E0jNEvmb1gKEBU6kxnsqqzcUhO0lcbz8p2SkeK54AY4zZVN7LxXbXOvMxdBkImbtACwiko3AbyIXP@vger.kernel.org X-Gm-Message-State: AOJu0YwSOUoGAFyPeKCwjzBGG0n4EYSKZsmOi2qhI1DPr2QhjhuphggQ 9xXeDteQOnUuE1O0n6j6WzczUDqIdE8bPuTtGQezXEqEiTowVKsl X-Gm-Gg: ASbGncudvfCm0xQUbfz/sgyBOOmf2nGrLtYWBLmpvhdTCKu+WUu5lQ/atpf0ReNyYmu hk5PafUPxHqnoR56estgOaVw/jYI3BrtWcBlit0K13BS5yioXu+bzM10Q87t8kAKme0xsXY3bS1 m2hvHJjtItOCMvRCcuQXheBOiMkd36/9QUMx9OntfxxKJ8nec924NYeDHPtngREDNWZRGIr2RIp xrJUvPIQf9ZksyKd6sJLnIE9aM9QQ6+kQ68kjHFGY3BjKl+nGzKulDBWC/7U0XcvxNI0ZTrVCBJ EfEOfo4Eew/bsqlji88BZaIDXKOn0/hy2abRA1ZGIaNdI7u0k8oWzbdm8odnPzZ7OI3x X-Google-Smtp-Source: AGHT+IEEWfGQxkuZd8tf5P3vShYuUP5N/11BTkYFYFiWpUuAwDxrOihccUqBS80lDlE4wNLi4HgKYA== X-Received: by 2002:a05:6402:280d:b0:5d0:bf5e:eb8 with SMTP id 4fb4d7f45d1cf-5e5e2468800mr24297960a12.23.1741510132648; Sun, 09 Mar 2025 00:48:52 -0800 (PST) Received: from demon-pc.localdomain ([188.27.130.21]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac239736153sm566347466b.108.2025.03.09.00.48.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 00:48:52 -0800 (PST) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Cosmin Tanislav , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Niklas_S=C3=B6derlund?= , Julien Massot , Catalin Marinas , Will Deacon , Greg Kroah-Hartman , Liam Girdwood , Mark Brown , Linus Walleij , Bartosz Golaszewski , Bjorn Andersson , Geert Uytterhoeven , Dmitry Baryshkov , Arnd Bergmann , Taniya Das , Biju Das , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Eric Biggers , Javier Carrasco , Ross Burton , Hans Verkuil , Sakari Ailus , Laurent Pinchart , Zhi Mao , Kieran Bingham , Dongcheng Yan , AngeloGioacchino Del Regno , Benjamin Mugnier , Tommaso Merciai , Dan Carpenter , Ihor Matushchak , Laurentiu Palcu , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, linux-gpio@vger.kernel.org, Cosmin Tanislav Subject: [RFC PATCH v2 09/16] dt-bindings: media: i2c: max96712: add support for I2C MUX Date: Sun, 9 Mar 2025 10:48:01 +0200 Message-ID: <20250309084814.3114794-10-demonsingur@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309084814.3114794-1-demonsingur@gmail.com> References: <20250309084814.3114794-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 MAX96712 and MAX96724 have more than one GMSL2 link, and each link is capable of connecting to a separate serializer. If these serializers have the same CFG pins configuration, they will also have the same I2C address, causing conflicts unless the deserializer muxes the I2C channels. Moreover, the serializers can have the same hardware attached to their respective I2C bus. The MAX96712 and MAX96724 suppot I2C channel muxing via the GMSL2 link to facilitate communication to each of the connected serializers. Document this capability. Signed-off-by: Cosmin Tanislav --- .../bindings/media/i2c/maxim,max96712.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml index bf8c861c836b..9e27568e0105 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml @@ -37,6 +37,19 @@ properties: enable-gpios: true + i2c-mux: + $ref: /schemas/i2c/i2c-mux.yaml# + unevaluatedProperties: false + patternProperties: + '^i2c@[0-3]$': + $ref: /schemas/i2c/i2c-controller.yaml# + unevaluatedProperties: false + properties: + reg: + items: + minimum: 0 + maximum: 3 + ports: $ref: /schemas/graph.yaml#/properties/ports From patchwork Sun Mar 9 08:48:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 872040 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (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 BC9CA1C4A13; Sun, 9 Mar 2025 08:49:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510142; cv=none; b=gxrSU72da3z9mpN7pKy6qj33Xtv4vfNxMX47bFNazg1AHGConyUQkCCvE+850xJOSZG0C7UGzeqa27HeV4zifXL79MUA809ET9Ds5sLyhQzYVTjlo55T8JOwHZPKRHvYhizpJhXJ+JFMineHBqn4JTNBsI2ARiOyJ8/KDXdhNds= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510142; c=relaxed/simple; bh=7bnorJ4fpE94sViDVYGcFVnqKXVcodBOXO9JcwOeacU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HAegke1JFY4ciu2TW8Gso0uboZyWXtwrcqx5TCt9S2yg5is970D+EhmNwO5dvn1clyXZJQ56FWswACQnhjjqRPaSAw7A5q4AOaIIJGkhwgQUw7Sc6wqzK3CFW9TJ2s/WQjjBs6fV+IHRBGYcssx38yZ+bJkU3Q6CZuh+Xmn+4fc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=iLBeJCXg; arc=none smtp.client-ip=209.85.218.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iLBeJCXg" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-ac25d2b2354so299563266b.1; Sun, 09 Mar 2025 00:49:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741510139; x=1742114939; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OO5bhUSug85JnTxop3j0N4R2QYNXLJGDFenf8aqUDuQ=; b=iLBeJCXgSjREpFQ2iOUB0LQR/hLVUIl2FjKokaTxmCm52YZqul7/zEO8qvc//Tts20 aOsIDWppSpO4w+mgCD7TjklM/SQxezmoZlmGCTa5p0DkFKV3+vxpGqIhMkdE8aIR1kGz P1TtKl5vr6vlgWZY7BlMuwaCU+f3WL9XB29jalQNrXmigDs7ve+nVZVnykDz0vBnyaQa kve1KbsX9PHne4vZsczXby5suObft1Qkhi9SXwe0WM78dbXpudDKgdBKiod1aluXT3QP oC80sUZk4SF1B4ukeuiufs17fYZnqGXm8K7KoosbeHenfza0H/jV55K+/cr8PzlvptCX sItg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741510139; x=1742114939; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OO5bhUSug85JnTxop3j0N4R2QYNXLJGDFenf8aqUDuQ=; b=hdkDxl0nHdpQDC42f4bPS+aEQca8DKdA4sg4WG/xWdmULJNYdp0J5h10ZNcCv9DJvA LLUkN8aawux2AOn5cRanK00GfrIKqZ6ccZFKJJg2myV2u4cZyYGIU9Bg/QBAaxLzPq0d dkhB3qF0MmrQG2eq1gjBQzqo01p/anQAKVjS+iSaMTIYBx4zEQW8RKFUGPc1qQFyMn1p wS9OjkZpQnSxf0V/ZMib74PTDFG9fzIQeeBPVR3uISoDbjSogN7O6LdZjh4MRYWNzPsW R6Q3Ot9zfqs2s0cpCIjsRAfU1X1e12wVQbe1FtFEpNu6/C0zlm9doMlXokibXWpvyt0G Hr/A== X-Forwarded-Encrypted: i=1; AJvYcCVQq5b8aWmR6ASvcui0QLkrcTUt0MQVrBPcmd2+IJGRWxz/IBjGs/Q0I79PgK2rbWqx3mIWaWi/DtAD@vger.kernel.org, AJvYcCWUM1F/bSo1etQa1TJy6HgnaKMS0E5weiPzXb1q6AgGh/3cLpwioyKp7AkWsJpy0OvW2dj4nRsM2H0i0dk=@vger.kernel.org, AJvYcCXPWAL3CUxWdB8zBtO3PbAHa/KzVY6xkEwxLBcQhIuqRSNP/NGPzjwTHcutw7JRRJqnO9unhV95DfHGs1/f@vger.kernel.org, AJvYcCXeMLS/16sGnUsv9F/bNFWxCR/NNQeBtNzEKr1hZNNZO2qpmTof8/Jb7OAqRxEyZFmygTnzcquI6F9JhQ==@vger.kernel.org X-Gm-Message-State: AOJu0Yyivwz9RzixrKhgdSx9av8IAcuf+DgdxIobdx5pP8cTq2AFYsyD aeXtZg/7cP5PkE123zLncaoUY7OuL9Ot10Zc2LciKD/5DWE5iJj2 X-Gm-Gg: ASbGncuhhabv91121ah0aBvvgujrzYzu4NZzpPw8RfVZuhoq2Y6t7SiooKFN6Y2OGy1 5qIoP7e6dfsJq/h59n8cit1uQJRQxzwG/reA4R05tCpzCA2PGbMoL4EGbz/IUz1rbWOph7sUFzR EDQGJQqPSAeFAdlIlHgeJH5wZ2AcK7pbvUOMHczwSfSKPPLLvI4OgqinJbAu8Au+hTzRDvN5Sw9 IRm2P1sHkEQhjzlUzhRgYnYXWdqmj2ZxGUIOUxsb6tav8Hgf4KfAtHmv1XRX3jclVqv4Jv6PK6g HrqqzzHy8X8OnU6snfcCbEHcOn4GB95sc0Vscmlv3DCh5ZQ3ddtz9tn3ew== X-Google-Smtp-Source: AGHT+IHy+LzMc71mwJVmeE3VhZ+U7VNFDB59nt4xluoaJbc4P+gscKNqhjrxEMwyTZ4CTBs88BRRQQ== X-Received: by 2002:a17:907:3f1e:b0:abf:4d97:9ec3 with SMTP id a640c23a62f3a-ac2526434f1mr1147304166b.13.1741510138833; Sun, 09 Mar 2025 00:48:58 -0800 (PST) Received: from demon-pc.localdomain ([188.27.130.21]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac239736153sm566347466b.108.2025.03.09.00.48.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 00:48:57 -0800 (PST) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Cosmin Tanislav , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Niklas_S=C3=B6derlund?= , Julien Massot , Catalin Marinas , Will Deacon , Greg Kroah-Hartman , Liam Girdwood , Mark Brown , Linus Walleij , Bartosz Golaszewski , Bjorn Andersson , Geert Uytterhoeven , Dmitry Baryshkov , Arnd Bergmann , Taniya Das , Biju Das , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Eric Biggers , Javier Carrasco , Ross Burton , Hans Verkuil , Sakari Ailus , Laurent Pinchart , Zhi Mao , Kieran Bingham , Dongcheng Yan , AngeloGioacchino Del Regno , Benjamin Mugnier , Tommaso Merciai , Dan Carpenter , Ihor Matushchak , Laurentiu Palcu , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, linux-gpio@vger.kernel.org, Cosmin Tanislav Subject: [RFC PATCH v2 11/16] dt-bindings: media: i2c: add MAX9296A, MAX96716A, MAX96792A Date: Sun, 9 Mar 2025 10:48:03 +0200 Message-ID: <20250309084814.3114794-12-demonsingur@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309084814.3114794-1-demonsingur@gmail.com> References: <20250309084814.3114794-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The MAX9296A deserializer converts single or dual serial inputs to MIPI CSI-2 outputs. The GMSL2 links operate at a fixed rate of 3Gbps or 6Gbps in the forward direction and 187.5Mbps in the reverse direction. In GMSL1 mode, each serial link can be paired with 3.12Gbps or 1.5Gbps GMSL1 serializers or operate up to 4.5Gbps with GMSL2 serializers with GMSL1 backward compatibility. The MAX9296A supports mixed GMSL2 and GMSL1 links. The serial inputs operate independently, allowing videos with different timings and resolutions to be received on each input. MAX96716A supports both tunnel and pixel mode. MAX96792A supports both tunnel and pixel mode, and has two GMSL3 links. Signed-off-by: Cosmin Tanislav --- .../bindings/media/i2c/maxim,max9296a.yaml | 281 ++++++++++++++++++ MAINTAINERS | 6 + 2 files changed, 287 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/maxim,max9296a.yaml diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max9296a.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max9296a.yaml new file mode 100644 index 000000000000..97731549d161 --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max9296a.yaml @@ -0,0 +1,281 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2024 Collabora Ltd. +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/media/i2c/maxim,max9296a.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Maxim MAX9296A GMSL2 to CSI-2 Deserializer + +maintainers: + - Cosmin Tanislav + +description: + The MAX9296A deserializer converts single or dual serial inputs to + MIPI CSI-2 outputs. The GMSL2 links operate at a fixed rate of 3Gbps + or 6Gbps in the forward direction and 187.5Mbps in the reverse + direction. In GMSL1 mode, each serial link can be paired with 3.12Gbps + or 1.5Gbps GMSL1 serializers or operate up to 4.5Gbps with GMSL2 + serializers with GMSL1 backward compatibility. The MAX9296A supports + mixed GMSL2 and GMSL1 links. The serial inputs operate independently, + allowing videos with different timings and resolutions to be received + on each input. + + MAX96716A supports both tunnel and pixel mode. + MAX96792A supports both tunnel and pixel mode, and has two GMSL3 links. + +properties: + compatible: + enum: + - maxim,max9296a + - maxim,max96716a + - maxim,max96792a + + reg: + maxItems: 1 + + powerdown-gpios: + maxItems: 1 + description: Specifier for the GPIO connected to the PWDNB pin. + + port0-poc-supply: + description: Regulator providing Power over Coax for GMSL port 0 + + port1-poc-supply: + description: Regulator providing Power over Coax for GMSL port 1 + + i2c-mux: + $ref: /schemas/i2c/i2c-mux.yaml# + unevaluatedProperties: false + patternProperties: + '^i2c@[0-1]$': + $ref: /schemas/i2c/i2c-controller.yaml# + unevaluatedProperties: false + properties: + reg: + items: + minimum: 0 + maximum: 1 + + i2c-alias-pool: + maxItems: 2 + + i2c-atr: + type: object + additionalProperties: false + + properties: + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + patternProperties: + '^i2c@[0-1]$': + $ref: /schemas/i2c/i2c-controller.yaml# + unevaluatedProperties: false + properties: + reg: + items: + minimum: 0 + maximum: 1 + + ports: + $ref: /schemas/graph.yaml#/properties/ports + + patternProperties: + '^port@[0-1]$': + $ref: /schemas/graph.yaml#/properties/port + unevaluatedProperties: false + description: GMSL Input + properties: + endpoint: + $ref: /schemas/media/video-interfaces.yaml# + unevaluatedProperties: false + description: Endpoint for GMSL2-Link port. + + '^port@[2-3]$': + $ref: /schemas/graph.yaml#/$defs/port-base + unevaluatedProperties: false + description: CSI-2 Output port + properties: + endpoint: + $ref: /schemas/media/video-interfaces.yaml# + unevaluatedProperties: false + + properties: + data-lanes: + minItems: 1 + maxItems: 4 + + lane-polarities: + minItems: 1 + maxItems: 5 + + link-frequencies: + maxItems: 1 + + required: + - data-lanes + + anyOf: + - required: + - port@2 + - required: + - port@3 + +required: + - compatible + - reg + - ports + +additionalProperties: false + +allOf: + - $ref: /schemas/i2c/i2c-atr.yaml# + + - if: + properties: + compatible: + contains: + enum: + - maxim,max9296a + - maxim,max96792a + then: + not: + required: [i2c-mux] + + - if: + properties: + compatible: + contains: + enum: + - maxim,max96716a + then: + not: + required: [i2c-atr] + +dependentRequired: + i2c-atr: [i2c-alias-pool] + i2c-alias-pool: [i2c-atr] + +examples: + - | + #include + #include + + i2c { + #address-cells = <1>; + #size-cells = <0>; + + deserializer@28 { + compatible = "maxim,max9296a"; + reg = <0x28>; + powerdown-gpios = <&main_gpio0 37 GPIO_ACTIVE_LOW>; + + i2c-alias-pool = <0x40 0x41>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + des_gmsl_in_0: endpoint { + remote-endpoint = <&ser_0_gmsl_out>; + }; + }; + + port@1 { + reg = <1>; + des_gmsl_in_1: endpoint { + remote-endpoint = <&ser_1_gmsl_out>; + }; + }; + + port@2 { + reg = <2>; + des_csi_out: endpoint { + data-lanes = <1 2 3 4>; + link-frequencies = /bits/ 64 <400000000>; + remote-endpoint = <&csi_in>; + }; + }; + }; + + i2c-atr { + #address-cells = <1>; + #size-cells = <0>; + + i2c@0 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0>; + + serializer@40 { + compatible = "maxim,max96717"; + reg = <0x40>; + gpio-controller; + #gpio-cells = <2>; + #clock-cells = <0>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ser_0_csi_in: endpoint { + data-lanes = <1 2>; + remote-endpoint = <&sensor_0_out>; + }; + }; + + port@1 { + reg = <1>; + ser_0_gmsl_out: endpoint { + remote-endpoint = <&des_gmsl_in_0>; + }; + }; + }; + }; + }; + + i2c@1 { + #address-cells = <1>; + #size-cells = <0>; + reg = <1>; + + serializer@40 { + compatible = "maxim,max96717"; + reg = <0x40>; + gpio-controller; + #gpio-cells = <2>; + #clock-cells = <0>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ser_1_csi_in: endpoint { + data-lanes = <1 2>; + remote-endpoint = <&sensor_1_out>; + }; + }; + + port@1 { + reg = <1>; + ser_1_gmsl_out: endpoint { + remote-endpoint = <&des_gmsl_in_1>; + }; + }; + }; + }; + }; + }; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index abf3afc95fc9..c1e01668e81a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14220,6 +14220,12 @@ S: Maintained F: Documentation/devicetree/bindings/iio/proximity/maxbotix,mb1232.yaml F: drivers/iio/proximity/mb1232.c +MAXIM GMSL2 SERIALIZERS AND DESERIALIZERS +M: Cosmin Tanislav +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/i2c/maxim,max9296a.yaml + MAXIM MAX11205 DRIVER M: Ramona Bolboaca L: linux-iio@vger.kernel.org From patchwork Sun Mar 9 08:48:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 872039 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (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 449641C68A6; Sun, 9 Mar 2025 08:49:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510155; cv=none; b=WWI/iDXONghiYXXd5GACzpR1VDTfRvy2WTedWr4eB9WtiNswxK1Zvtf+KdhpDplJn2ICgGpy3Gao7na1KLuXJA6/8KKfNUno52o3npwYqrJm8lzKU3OrqyCbfFEO50IZsGWZWJyinzGLT1P272IQY+zPE8aUd6M8mK3BSX/2leI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510155; c=relaxed/simple; bh=tdjX23tk9lH28Ykqu5e2KJyDlENL06Re5A+rtR4FjFU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ZgrNcyu5Hdi6WKRJ69wPQdWj5IJ0h9zKq6qtNEdgBXujAsM6JBlbr1x4POHXQepHPLWn0cVg4mHBH/sGedGqgo50DL3IrlPRrQpnS2f/OtCu0RBVkqcPOy08ssh1d3QnPnFra3iMXz2io5DFtNfyZ/QjqtrhKPI28KOa2hCf1ys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hqaoCTil; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hqaoCTil" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-ac25520a289so349343766b.3; Sun, 09 Mar 2025 00:49:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741510151; x=1742114951; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VPS780SayGSHm9kNBST+ZxPY6YLGXo006BdoT29u6n0=; b=hqaoCTil+Fdl/1nV6Uq6dyl6TKJAxEu9Kd7t6aAoqS19qwb1P3MsSJlz2oy2BpnPpR 28SgwsxNHhViGZK3MJftwRrhyTjfsKz9AVLlMWAjGOibUqL1G0yusfswYIGNJZhA93nC RbFEsLgAUrYGmZbxnYJ+OOcR5W+OJ3bVJSBHIgbCv9n3si1c3mUAFNHTwtGwPGbLstfc ileRAzBeIV7Pbu/fD2aGpCRKZpi4WJohUxzgMFd1NEA7QJFNJJogFxnRi1Uut66N0s4c 3rwJ+sy/BibOTOE4dRZ2tQx9UIrq3niZkfAdBReBoKzT0X4V/VTknC64TQJfAWUwnJQ0 Lnwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741510151; x=1742114951; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VPS780SayGSHm9kNBST+ZxPY6YLGXo006BdoT29u6n0=; b=DcO4nRbFX5yZhPNxrI0TjCzQe/XWvnsj90u6UP3R7PTncLau9BIkbQ+1WAXmrgOaAC R2rR0mq4ZwH9uyOc8Xl3D5phhG+01oD3HOcED985p0rlbLk1Bj25p5B9RsGTiOpKUWvH 132M2e/MxBT4nBoxdlBcPHvwBXKjhCt/CtkszoW2aOZ/ll78PeSxhc6XBaOb9OObVENi oPFYLjquIux/WbVrKH28lkMlLpc2LJUX+vkYIrBXftpOnMdHlJBRfa/3oCvFAdlm8cQP qQmvfaITx0qaTr8Dp1HRQRgtCRcE1wYHZCFKsKpy4jx7LsyOOE0A6NJFKq2fwt/q54vR T65A== X-Forwarded-Encrypted: i=1; AJvYcCUcFhiMQikOv4IkoKrR14cIX6Bv+YC/9+fe0oMa7suErxFl0kNAmBtlQhng8Opnfc74qj06HPKt3+UAUo+/@vger.kernel.org, AJvYcCVXewn643WQApvQTG9H0iCVP6lCe85Y934YYg8oEHmVFGje8X4eeLYO+HHni3WIPRnczD4tkG/M5OmK@vger.kernel.org, AJvYcCXgssF2+vNOYEW658lTZlPM4gASoaTnmtb/DLcChRVPO0hIFJrZRwPeWjDX5U1a/ef86CM735X+YkvCAQ==@vger.kernel.org, AJvYcCXtm0WpDN13L1v4jAVhInlyEpq/dkHcsiQVyGIx/ZV+nkUNENWjz4THlJCvPf3SCT1IRCiINYd7g7LujTo=@vger.kernel.org X-Gm-Message-State: AOJu0Ywv+V+HobN/lJK0qKQj0f2VN8KHhdg4dkAR6AqJhesRVEkB0qfT G++FLgEJNMTTjSopfbLdkyy2HbQ1+GZ8RnMEbwJ6maXyQHLvFWvQ X-Gm-Gg: ASbGnct52iNFIDGBHVn9IuqKX8spMVUEcS8smvrMqbIWW3PIGehsbBfrDQbE+fLzaoV liyYjJUZuOp5fkbPhyYC+SiJ9CuLruHh9BrsxwRw4fJVGYtUyBX8Q83tAAg8YLKQdQxRxO7dLN9 X4Ui4VfEO1p+uyklzIg4FLtIlt0oS5eRZoaQ+mBvWO22SXmN5x37nSxmOwwwJtdnGsm1dKbuMsN eaFbQmi7OWBo9DzdDqKtIh/DSqoScBgjUW4WRUUHfgHXIErZGen16X3lsyl0f5lwt105svMbMWA TY3zJ6Qp7GbpAJPLiBC9TEO1+vXAKxEDuDSZxwPTNtH8oRc1KtGCD/JJCw== X-Google-Smtp-Source: AGHT+IFML1o8IvzsWXDvr6CIfM0JN2c1NYi7UOvnH7m3w6OC0G54Ayh6K59YSd4Yc5Go79k20XyV/Q== X-Received: by 2002:a17:907:9703:b0:ac2:ad1:221b with SMTP id a640c23a62f3a-ac2525de582mr895741766b.6.1741510151122; Sun, 09 Mar 2025 00:49:11 -0800 (PST) Received: from demon-pc.localdomain ([188.27.130.21]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac239736153sm566347466b.108.2025.03.09.00.49.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 00:49:10 -0800 (PST) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Cosmin Tanislav , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Niklas_S=C3=B6derlund?= , Julien Massot , Catalin Marinas , Will Deacon , Greg Kroah-Hartman , Liam Girdwood , Mark Brown , Linus Walleij , Bartosz Golaszewski , Bjorn Andersson , Geert Uytterhoeven , Dmitry Baryshkov , Arnd Bergmann , Taniya Das , Biju Das , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Eric Biggers , Javier Carrasco , Ross Burton , Hans Verkuil , Sakari Ailus , Laurent Pinchart , Zhi Mao , Kieran Bingham , Dongcheng Yan , AngeloGioacchino Del Regno , Benjamin Mugnier , Tommaso Merciai , Dan Carpenter , Ihor Matushchak , Laurentiu Palcu , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, linux-gpio@vger.kernel.org, Cosmin Tanislav Subject: [RFC PATCH v2 14/16] staging: media: remove MAX96712 driver Date: Sun, 9 Mar 2025 10:48:06 +0200 Message-ID: <20250309084814.3114794-15-demonsingur@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309084814.3114794-1-demonsingur@gmail.com> References: <20250309084814.3114794-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Remove the staging MAX96712 driver. Its functionality has been moved to the MAX96724 driver which makes use of the Maxim GMSL2/3 deserializer framework. Signed-off-by: Cosmin Tanislav --- MAINTAINERS | 1 - drivers/staging/media/Kconfig | 2 - drivers/staging/media/Makefile | 1 - drivers/staging/media/max96712/Kconfig | 14 - drivers/staging/media/max96712/Makefile | 2 - drivers/staging/media/max96712/max96712.c | 487 ---------------------- 6 files changed, 507 deletions(-) delete mode 100644 drivers/staging/media/max96712/Kconfig delete mode 100644 drivers/staging/media/max96712/Makefile delete mode 100644 drivers/staging/media/max96712/max96712.c diff --git a/MAINTAINERS b/MAINTAINERS index e97c4f55bc2f..4d1ff8cf537b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14188,7 +14188,6 @@ M: Cosmin Tanislav L: linux-media@vger.kernel.org S: Maintained F: Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml -F: drivers/staging/media/max96712/max96712.c MAX96714 GMSL2 DESERIALIZER DRIVER M: Julien Massot diff --git a/drivers/staging/media/Kconfig b/drivers/staging/media/Kconfig index b44214854399..fe29821f64a3 100644 --- a/drivers/staging/media/Kconfig +++ b/drivers/staging/media/Kconfig @@ -28,8 +28,6 @@ source "drivers/staging/media/imx/Kconfig" source "drivers/staging/media/ipu3/Kconfig" -source "drivers/staging/media/max96712/Kconfig" - source "drivers/staging/media/meson/vdec/Kconfig" source "drivers/staging/media/rkvdec/Kconfig" diff --git a/drivers/staging/media/Makefile b/drivers/staging/media/Makefile index ad4e9619a9e0..1a562b3b6881 100644 --- a/drivers/staging/media/Makefile +++ b/drivers/staging/media/Makefile @@ -2,7 +2,6 @@ obj-$(CONFIG_VIDEO_ATMEL_ISC_BASE) += deprecated/atmel/ obj-$(CONFIG_INTEL_ATOMISP) += atomisp/ obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx/ -obj-$(CONFIG_VIDEO_MAX96712) += max96712/ obj-$(CONFIG_VIDEO_MESON_VDEC) += meson/vdec/ obj-$(CONFIG_VIDEO_ROCKCHIP_VDEC) += rkvdec/ obj-$(CONFIG_VIDEO_STARFIVE_CAMSS) += starfive/ diff --git a/drivers/staging/media/max96712/Kconfig b/drivers/staging/media/max96712/Kconfig deleted file mode 100644 index 117fadf81bd0..000000000000 --- a/drivers/staging/media/max96712/Kconfig +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -config VIDEO_MAX96712 - tristate "Maxim MAX96712 Quad GMSL2 Deserializer support" - depends on I2C - depends on OF_GPIO - depends on VIDEO_DEV - select V4L2_FWNODE - select VIDEO_V4L2_SUBDEV_API - select MEDIA_CONTROLLER - help - This driver supports the Maxim MAX96712 Quad GMSL2 Deserializer. - - To compile this driver as a module, choose M here: the - module will be called max96712. diff --git a/drivers/staging/media/max96712/Makefile b/drivers/staging/media/max96712/Makefile deleted file mode 100644 index 70c1974ce3f0..000000000000 --- a/drivers/staging/media/max96712/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -obj-$(CONFIG_VIDEO_MAX96712) += max96712.o diff --git a/drivers/staging/media/max96712/max96712.c b/drivers/staging/media/max96712/max96712.c deleted file mode 100644 index 0751b2e04895..000000000000 --- a/drivers/staging/media/max96712/max96712.c +++ /dev/null @@ -1,487 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Maxim MAX96712 Quad GMSL2 Deserializer Driver - * - * Copyright (C) 2021 Renesas Electronics Corporation - * Copyright (C) 2021 Niklas Söderlund - */ - -#include -#include -#include -#include -#include - -#include -#include -#include - -#define DEBUG_EXTRA_REG 0x09 -#define DEBUG_EXTRA_PCLK_25MHZ 0x00 -#define DEBUG_EXTRA_PCLK_75MHZ 0x01 - -enum max96712_pattern { - MAX96712_PATTERN_CHECKERBOARD = 0, - MAX96712_PATTERN_GRADIENT, -}; - -struct max96712_info { - unsigned int dpllfreq; - bool have_debug_extra; -}; - -struct max96712_priv { - struct i2c_client *client; - struct regmap *regmap; - struct gpio_desc *gpiod_pwdn; - - const struct max96712_info *info; - - bool cphy; - struct v4l2_mbus_config_mipi_csi2 mipi; - - struct v4l2_subdev sd; - struct v4l2_ctrl_handler ctrl_handler; - struct media_pad pads[1]; - - enum max96712_pattern pattern; -}; - -static int max96712_write(struct max96712_priv *priv, unsigned int reg, u8 val) -{ - int ret; - - ret = regmap_write(priv->regmap, reg, val); - if (ret) - dev_err(&priv->client->dev, "write 0x%04x failed\n", reg); - - return ret; -} - -static int max96712_update_bits(struct max96712_priv *priv, unsigned int reg, - u8 mask, u8 val) -{ - int ret; - - ret = regmap_update_bits(priv->regmap, reg, mask, val); - if (ret) - dev_err(&priv->client->dev, "update 0x%04x failed\n", reg); - - return ret; -} - -static int max96712_write_bulk(struct max96712_priv *priv, unsigned int reg, - const void *val, size_t val_count) -{ - int ret; - - ret = regmap_bulk_write(priv->regmap, reg, val, val_count); - if (ret) - dev_err(&priv->client->dev, "bulk write 0x%04x failed\n", reg); - - return ret; -} - -static int max96712_write_bulk_value(struct max96712_priv *priv, - unsigned int reg, unsigned int val, - size_t val_count) -{ - unsigned int i; - u8 values[4]; - - for (i = 1; i <= val_count; i++) - values[i - 1] = (val >> ((val_count - i) * 8)) & 0xff; - - return max96712_write_bulk(priv, reg, &values, val_count); -} - -static void max96712_reset(struct max96712_priv *priv) -{ - max96712_update_bits(priv, 0x13, 0x40, 0x40); - msleep(20); -} - -static void max96712_mipi_enable(struct max96712_priv *priv, bool enable) -{ - if (enable) { - max96712_update_bits(priv, 0x40b, 0x02, 0x02); - max96712_update_bits(priv, 0x8a0, 0x80, 0x80); - } else { - max96712_update_bits(priv, 0x8a0, 0x80, 0x00); - max96712_update_bits(priv, 0x40b, 0x02, 0x00); - } -} - -static void max96712_mipi_configure(struct max96712_priv *priv) -{ - unsigned int i; - u8 phy5 = 0; - - max96712_mipi_enable(priv, false); - - /* Select 2x4 mode. */ - max96712_write(priv, 0x8a0, 0x04); - - /* TODO: Add support for 2-lane and 1-lane configurations. */ - if (priv->cphy) { - /* Configure a 3-lane C-PHY using PHY0 and PHY1. */ - max96712_write(priv, 0x94a, 0xa0); - - /* Configure C-PHY timings. */ - max96712_write(priv, 0x8ad, 0x3f); - max96712_write(priv, 0x8ae, 0x7d); - } else { - /* Configure a 4-lane D-PHY using PHY0 and PHY1. */ - max96712_write(priv, 0x94a, 0xc0); - } - - /* Configure lane mapping for PHY0 and PHY1. */ - /* TODO: Add support for lane swapping. */ - max96712_write(priv, 0x8a3, 0xe4); - - /* Configure lane polarity for PHY0 and PHY1. */ - for (i = 0; i < priv->mipi.num_data_lanes + 1; i++) - if (priv->mipi.lane_polarities[i]) - phy5 |= BIT(i == 0 ? 5 : i < 3 ? i - 1 : i); - max96712_write(priv, 0x8a5, phy5); - - /* Set link frequency for PHY0 and PHY1. */ - max96712_update_bits(priv, 0x415, 0x3f, - ((priv->info->dpllfreq / 100) & 0x1f) | BIT(5)); - max96712_update_bits(priv, 0x418, 0x3f, - ((priv->info->dpllfreq / 100) & 0x1f) | BIT(5)); - - /* Enable PHY0 and PHY1 */ - max96712_update_bits(priv, 0x8a2, 0xf0, 0x30); -} - -static void max96712_pattern_enable(struct max96712_priv *priv, bool enable) -{ - const u32 h_active = 1920; - const u32 h_fp = 88; - const u32 h_sw = 44; - const u32 h_bp = 148; - const u32 h_tot = h_active + h_fp + h_sw + h_bp; - - const u32 v_active = 1080; - const u32 v_fp = 4; - const u32 v_sw = 5; - const u32 v_bp = 36; - const u32 v_tot = v_active + v_fp + v_sw + v_bp; - - if (!enable) { - max96712_write(priv, 0x1051, 0x00); - return; - } - - /* Set PCLK to 75MHz if device have DEBUG_EXTRA register. */ - if (priv->info->have_debug_extra) - max96712_write(priv, DEBUG_EXTRA_REG, DEBUG_EXTRA_PCLK_75MHZ); - - /* Configure Video Timing Generator for 1920x1080 @ 30 fps. */ - max96712_write_bulk_value(priv, 0x1052, 0, 3); - max96712_write_bulk_value(priv, 0x1055, v_sw * h_tot, 3); - max96712_write_bulk_value(priv, 0x1058, - (v_active + v_fp + + v_bp) * h_tot, 3); - max96712_write_bulk_value(priv, 0x105b, 0, 3); - max96712_write_bulk_value(priv, 0x105e, h_sw, 2); - max96712_write_bulk_value(priv, 0x1060, h_active + h_fp + h_bp, 2); - max96712_write_bulk_value(priv, 0x1062, v_tot, 2); - max96712_write_bulk_value(priv, 0x1064, - h_tot * (v_sw + v_bp) + (h_sw + h_bp), 3); - max96712_write_bulk_value(priv, 0x1067, h_active, 2); - max96712_write_bulk_value(priv, 0x1069, h_fp + h_sw + h_bp, 2); - max96712_write_bulk_value(priv, 0x106b, v_active, 2); - - /* Generate VS, HS and DE in free-running mode. */ - max96712_write(priv, 0x1050, 0xfb); - - /* Configure Video Pattern Generator. */ - if (priv->pattern == MAX96712_PATTERN_CHECKERBOARD) { - /* Set checkerboard pattern size. */ - max96712_write(priv, 0x1074, 0x3c); - max96712_write(priv, 0x1075, 0x3c); - max96712_write(priv, 0x1076, 0x3c); - - /* Set checkerboard pattern colors. */ - max96712_write_bulk_value(priv, 0x106e, 0xfecc00, 3); - max96712_write_bulk_value(priv, 0x1071, 0x006aa7, 3); - - /* Generate checkerboard pattern. */ - max96712_write(priv, 0x1051, 0x10); - } else { - /* Set gradient increment. */ - max96712_write(priv, 0x106d, 0x10); - - /* Generate gradient pattern. */ - max96712_write(priv, 0x1051, 0x20); - } -} - -static int max96712_s_stream(struct v4l2_subdev *sd, int enable) -{ - struct max96712_priv *priv = v4l2_get_subdevdata(sd); - - if (enable) { - max96712_pattern_enable(priv, true); - max96712_mipi_enable(priv, true); - } else { - max96712_mipi_enable(priv, false); - max96712_pattern_enable(priv, false); - } - - return 0; -} - -static const struct v4l2_subdev_video_ops max96712_video_ops = { - .s_stream = max96712_s_stream, -}; - -static int max96712_init_state(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state) -{ - static const struct v4l2_mbus_framefmt default_fmt = { - .width = 1920, - .height = 1080, - .code = MEDIA_BUS_FMT_RGB888_1X24, - .colorspace = V4L2_COLORSPACE_SRGB, - .field = V4L2_FIELD_NONE, - .ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT, - .quantization = V4L2_QUANTIZATION_DEFAULT, - .xfer_func = V4L2_XFER_FUNC_DEFAULT, - }; - struct v4l2_mbus_framefmt *fmt; - - fmt = v4l2_subdev_state_get_format(state, 0); - *fmt = default_fmt; - - return 0; -} - -static const struct v4l2_subdev_internal_ops max96712_internal_ops = { - .init_state = max96712_init_state, -}; - -static const struct v4l2_subdev_pad_ops max96712_pad_ops = { - .get_fmt = v4l2_subdev_get_fmt, - .set_fmt = v4l2_subdev_get_fmt, -}; - -static const struct v4l2_subdev_ops max96712_subdev_ops = { - .video = &max96712_video_ops, - .pad = &max96712_pad_ops, -}; - -static const char * const max96712_test_pattern[] = { - "Checkerboard", - "Gradient", -}; - -static int max96712_s_ctrl(struct v4l2_ctrl *ctrl) -{ - struct max96712_priv *priv = - container_of(ctrl->handler, struct max96712_priv, ctrl_handler); - - switch (ctrl->id) { - case V4L2_CID_TEST_PATTERN: - priv->pattern = ctrl->val ? - MAX96712_PATTERN_GRADIENT : - MAX96712_PATTERN_CHECKERBOARD; - break; - } - return 0; -} - -static const struct v4l2_ctrl_ops max96712_ctrl_ops = { - .s_ctrl = max96712_s_ctrl, -}; - -static int max96712_v4l2_register(struct max96712_priv *priv) -{ - long pixel_rate; - int ret; - - priv->sd.internal_ops = &max96712_internal_ops; - v4l2_i2c_subdev_init(&priv->sd, priv->client, &max96712_subdev_ops); - priv->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; - priv->sd.entity.function = MEDIA_ENT_F_VID_IF_BRIDGE; - - v4l2_ctrl_handler_init(&priv->ctrl_handler, 2); - - /* - * TODO: Once V4L2_CID_LINK_FREQ is changed from a menu control to an - * INT64 control it should be used here instead of V4L2_CID_PIXEL_RATE. - */ - pixel_rate = priv->info->dpllfreq / priv->mipi.num_data_lanes * 1000000; - v4l2_ctrl_new_std(&priv->ctrl_handler, NULL, V4L2_CID_PIXEL_RATE, - pixel_rate, pixel_rate, 1, pixel_rate); - - v4l2_ctrl_new_std_menu_items(&priv->ctrl_handler, &max96712_ctrl_ops, - V4L2_CID_TEST_PATTERN, - ARRAY_SIZE(max96712_test_pattern) - 1, - 0, 0, max96712_test_pattern); - - priv->sd.ctrl_handler = &priv->ctrl_handler; - ret = priv->ctrl_handler.error; - if (ret) - goto error; - - priv->pads[0].flags = MEDIA_PAD_FL_SOURCE; - ret = media_entity_pads_init(&priv->sd.entity, 1, priv->pads); - if (ret) - goto error; - - v4l2_set_subdevdata(&priv->sd, priv); - - priv->sd.state_lock = priv->ctrl_handler.lock; - ret = v4l2_subdev_init_finalize(&priv->sd); - if (ret) - goto error; - - ret = v4l2_async_register_subdev(&priv->sd); - if (ret < 0) { - dev_err(&priv->client->dev, "Unable to register subdevice\n"); - goto error; - } - - return 0; -error: - v4l2_ctrl_handler_free(&priv->ctrl_handler); - - return ret; -} - -static int max96712_parse_dt(struct max96712_priv *priv) -{ - struct fwnode_handle *ep; - struct v4l2_fwnode_endpoint v4l2_ep = { - .bus_type = V4L2_MBUS_UNKNOWN, - }; - unsigned int supported_lanes; - int ret; - - ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(&priv->client->dev), 4, - 0, 0); - if (!ep) { - dev_err(&priv->client->dev, "Not connected to subdevice\n"); - return -EINVAL; - } - - ret = v4l2_fwnode_endpoint_parse(ep, &v4l2_ep); - fwnode_handle_put(ep); - if (ret) { - dev_err(&priv->client->dev, "Could not parse v4l2 endpoint\n"); - return -EINVAL; - } - - switch (v4l2_ep.bus_type) { - case V4L2_MBUS_CSI2_DPHY: - supported_lanes = 4; - priv->cphy = false; - break; - case V4L2_MBUS_CSI2_CPHY: - supported_lanes = 3; - priv->cphy = true; - break; - default: - dev_err(&priv->client->dev, "Unsupported bus-type %u\n", - v4l2_ep.bus_type); - return -EINVAL; - } - - if (v4l2_ep.bus.mipi_csi2.num_data_lanes != supported_lanes) { - dev_err(&priv->client->dev, "Only %u data lanes supported\n", - supported_lanes); - return -EINVAL; - } - - priv->mipi = v4l2_ep.bus.mipi_csi2; - - return 0; -} - -static const struct regmap_config max96712_i2c_regmap = { - .reg_bits = 16, - .val_bits = 8, - .max_register = 0x1f00, -}; - -static int max96712_probe(struct i2c_client *client) -{ - struct max96712_priv *priv; - int ret; - - priv = devm_kzalloc(&client->dev, sizeof(*priv), GFP_KERNEL); - if (!priv) - return -ENOMEM; - - priv->info = of_device_get_match_data(&client->dev); - - priv->client = client; - - priv->regmap = devm_regmap_init_i2c(client, &max96712_i2c_regmap); - if (IS_ERR(priv->regmap)) - return PTR_ERR(priv->regmap); - - priv->gpiod_pwdn = devm_gpiod_get_optional(&client->dev, "enable", - GPIOD_OUT_HIGH); - if (IS_ERR(priv->gpiod_pwdn)) - return PTR_ERR(priv->gpiod_pwdn); - - gpiod_set_consumer_name(priv->gpiod_pwdn, "max96712-pwdn"); - gpiod_set_value_cansleep(priv->gpiod_pwdn, 1); - - if (priv->gpiod_pwdn) - usleep_range(4000, 5000); - - max96712_reset(priv); - - ret = max96712_parse_dt(priv); - if (ret) - return ret; - - max96712_mipi_configure(priv); - - return max96712_v4l2_register(priv); -} - -static void max96712_remove(struct i2c_client *client) -{ - struct v4l2_subdev *sd = i2c_get_clientdata(client); - struct max96712_priv *priv = container_of(sd, struct max96712_priv, sd); - - v4l2_async_unregister_subdev(&priv->sd); - - gpiod_set_value_cansleep(priv->gpiod_pwdn, 0); -} - -static const struct max96712_info max96712_info_max96712 = { - .dpllfreq = 1000, - .have_debug_extra = true, -}; - -static const struct max96712_info max96712_info_max96724 = { - .dpllfreq = 1200, -}; - -static const struct of_device_id max96712_of_table[] = { - { .compatible = "maxim,max96712", .data = &max96712_info_max96712 }, - { .compatible = "maxim,max96724", .data = &max96712_info_max96724 }, - { /* sentinel */ } -}; -MODULE_DEVICE_TABLE(of, max96712_of_table); - -static struct i2c_driver max96712_i2c_driver = { - .driver = { - .name = "max96712", - .of_match_table = of_match_ptr(max96712_of_table), - }, - .probe = max96712_probe, - .remove = max96712_remove, -}; - -module_i2c_driver(max96712_i2c_driver); - -MODULE_DESCRIPTION("Maxim MAX96712 Quad GMSL2 Deserializer Driver"); -MODULE_AUTHOR("Niklas Söderlund "); -MODULE_LICENSE("GPL"); From patchwork Sun Mar 9 08:48:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 872038 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 CA40E1C878A; Sun, 9 Mar 2025 08:49:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510161; cv=none; b=NzVlRQZRhTlNHBbdOxkXgwCTePz5yB5H5ceYYKMQzyex2bxf7vhmUsmZF/BWkK9sg4Hq06BGGdWONaXY+/Hn3UavS9B5u25QfM6uhqHr9j3Oq5K89weay7EI+ANv6U5EoVYIA/KJyQP4lLxmV4UKgB2eLcNBfE8nlibwljnD4Qs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741510161; c=relaxed/simple; bh=hupeH6BR/vGlUe2feXdGdEHD7g33RqpRu9C4k5YHhJE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eStzhh4y9Rprdduk/TYt/6VnjPRWW4IAYCIDv0cPpHNPudkgJ25IEefbd+E6b4p4LklpbpKfTznUaSOGq9WyhuEh7yrg94mppUfEEtBaVqLhzdVh/zucSB80a9Tb4Gr9HbFITvhpDul3Rm2lSK0UQFpXyQ/qKxxLWubdTlP2pI0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=STH2+Nn0; arc=none smtp.client-ip=209.85.218.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="STH2+Nn0" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-ac298c8fa50so17117766b.1; Sun, 09 Mar 2025 00:49:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741510156; x=1742114956; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eJxqrKzhFr3RiWED6bWo37Q79I9LlI8HJIe6clOFVdw=; b=STH2+Nn0M0xiXeXPffGmf248s1/pxED1Xn/9Kji+vHGRmcchpf9pZCj7JKckO2Q08A t3oj1GW1mCjXEtJLTu+fZ0ffS+CLIQHXFUn84v9dqF4xf93EciZFUbGRs8EMaHztg05N JDRkO3nsTm1yGiEEV/r5ilYE9vSX1trKo1HkrAvBjlQI3n8IAyy3fJEm07Fi0DPEc2yQ jg77FZj1mw678/qzLPfJcptJ7MGEI789tIXmtATxlPG94sTkxAR1mrtcNQlzqSxJS9qb j2jVdGfDRjycLPWL0ba7YjljIT5TLH77FXz9M+poqxgcS4mzw7buwbxzh8X2PGFTdUhg Z8sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741510156; x=1742114956; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eJxqrKzhFr3RiWED6bWo37Q79I9LlI8HJIe6clOFVdw=; b=D9RqCXCUUmwBo5A57gx5um/2sGKIw2BiW0NxruDPKoYKSCKhH4p71WMz2oKOy4QUmW D5R/bHCR+XXPcJN49KUkSGD/2f3Mhs7Ohm10E7kddyEaRGyqS1c2swEZxdYm1fV+TCgu EZBI6iTj9fBTEccbT/mpB7OWgUmENiKCqa1/n2R9rhOX1YZmzomArw/t2oKp/cJ7HdpT o3RgGkLfkRIgpoN8bS4U/AIn5+9ZeL83tnm09XRx2c4SsECHmgJIza6MnJaCs7JGbBHY 1/EndNINsogzj4BgU/V+TZWywSxJEsWKpG1KmEahbxUZVbScfp1MWkrRh0uinTe3PLCw Q6YQ== X-Forwarded-Encrypted: i=1; AJvYcCVEvsnuCVY7wRHsW2XYddfqYi981hjTSKF8uQpWbiQ/v+ciSme9KuhkFghZFkZK+EKRTBPMsa+JJ8BF0p0=@vger.kernel.org, AJvYcCVLbnDcXivE6DJYRWuv1myZiI1IHjXF0TFzVfGcRi54TU/iAyFn/FAxhBXnoz/SkKevCCbfI48sEB9/+A==@vger.kernel.org, AJvYcCVa/im5JCY+cmerwDZyTKMUmEQVVisIfUmMUytnQEDRTfJ5eWaeNlEdPnW5Z3dmBYE1g6nU+VWY9uaq62ix@vger.kernel.org, AJvYcCVesp855KocX1PTgUEnBK4PnUdY+0PFjWs3cqG0NexdwuYini9Q4e8Yh843OILiB+jIkg/fgdaeo99o@vger.kernel.org X-Gm-Message-State: AOJu0YzDXmGv0C4M4pBbfOls6AEZTn5E+OvceJ3FV7wHVTBWKXLCmAxe 5/y+4/Edsx9I4BHuqWwEt8y5uq4xT1qaPECvREs0LmL+4zyglGVW X-Gm-Gg: ASbGncs0domiyEkKJEZgnqruSSkhahISxAPvXpZYV3ouod52j6mjmKT6RT/ZV/bAwKM zwJ7b/6mgeRbE/ca4Bys0jj5atMr0dZ+mZ2A6Vp3GbZmuZwR+Itw67GjJCJ9ivDpnR43+uz/j0a X6yeQ8/AcL2LKHcun1qxZ5TiGEC40CsR0eu/sEh7s5FyziaedXGJqTZqD03o9nTVQHZbBYrD6yM /krTHdzcEPhTfyFVFUQmR0QcYCcU62WLw+XXfu0tsH7hO9q67+TWunXUDv84O1oBNNGA0W1nu1x 4p7GaRPCY8IbbJhTKV8fhwqOuE3efgBWXjhr5wpBKw2WHMvqA957EsnFmA== X-Google-Smtp-Source: AGHT+IECTvJGvhv5Xrkwh1jenIxC3ztyp7dEFyxDkADpGD0yV7AgjVGVv3Ic7PUl/Rdp9hx4kSfy7Q== X-Received: by 2002:a05:6402:35c7:b0:5e5:c010:e67e with SMTP id 4fb4d7f45d1cf-5e5e24bd6bemr20290661a12.31.1741510155793; Sun, 09 Mar 2025 00:49:15 -0800 (PST) Received: from demon-pc.localdomain ([188.27.130.21]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac239736153sm566347466b.108.2025.03.09.00.49.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 00:49:15 -0800 (PST) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Cosmin Tanislav , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Niklas_S=C3=B6derlund?= , Julien Massot , Catalin Marinas , Will Deacon , Greg Kroah-Hartman , Liam Girdwood , Mark Brown , Linus Walleij , Bartosz Golaszewski , Bjorn Andersson , Geert Uytterhoeven , Dmitry Baryshkov , Arnd Bergmann , Taniya Das , Biju Das , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Eric Biggers , Javier Carrasco , Ross Burton , Hans Verkuil , Sakari Ailus , Laurent Pinchart , Zhi Mao , Kieran Bingham , Dongcheng Yan , AngeloGioacchino Del Regno , Benjamin Mugnier , Tommaso Merciai , Dan Carpenter , Ihor Matushchak , Laurentiu Palcu , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-staging@lists.linux.dev, linux-gpio@vger.kernel.org, Cosmin Tanislav Subject: [RFC PATCH v2 15/16] media: i2c: remove MAX96717 driver Date: Sun, 9 Mar 2025 10:48:07 +0200 Message-ID: <20250309084814.3114794-16-demonsingur@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309084814.3114794-1-demonsingur@gmail.com> References: <20250309084814.3114794-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The previous MAX96717 driver has been removed and its functionality has been moved to a MAX96717 driver which makes use of the Maxim GMSL2/3 serializer framework. Signed-off-by: Cosmin Tanislav --- MAINTAINERS | 1 - drivers/media/i2c/Kconfig | 17 - drivers/media/i2c/Makefile | 1 - drivers/media/i2c/max96717.c | 1103 ---------------------------------- 4 files changed, 1122 deletions(-) delete mode 100644 drivers/media/i2c/max96717.c diff --git a/MAINTAINERS b/MAINTAINERS index 4d1ff8cf537b..e9fe6e9856d8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14203,7 +14203,6 @@ L: linux-media@vger.kernel.org S: Maintained F: Documentation/devicetree/bindings/media/i2c/maxim,max96717-pinctrl.yaml F: Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml -F: drivers/media/i2c/max96717.c MAX9860 MONO AUDIO VOICE CODEC DRIVER M: Peter Rosin diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index e24c84962c92..6c595dffb280 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -1636,23 +1636,6 @@ config VIDEO_MAX96714 To compile this driver as a module, choose M here: the module will be called max96714. -config VIDEO_MAX96717 - tristate "Maxim MAX96717 GMSL2 Serializer support" - depends on OF && I2C && VIDEO_DEV && COMMON_CLK - select I2C_MUX - select MEDIA_CONTROLLER - select GPIOLIB - select V4L2_CCI_I2C - select V4L2_FWNODE - select VIDEO_V4L2_SUBDEV_API - help - Device driver for the Maxim MAX96717 GMSL2 Serializer. - MAX96717 serializers convert video on a MIPI CSI-2 - input to a GMSL2 output. - - To compile this driver as a module, choose M here: the - module will be called max96717. - source "drivers/media/i2c/maxim-serdes/Kconfig" endmenu diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index b24e7cf7bb2f..de0680ebf190 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -69,7 +69,6 @@ obj-$(CONFIG_VIDEO_M52790) += m52790.o obj-$(CONFIG_VIDEO_MAX9271_LIB) += max9271.o obj-$(CONFIG_VIDEO_MAX9286) += max9286.o obj-$(CONFIG_VIDEO_MAX96714) += max96714.o -obj-$(CONFIG_VIDEO_MAX96717) += max96717.o obj-$(CONFIG_VIDEO_MAXIM_SERDES) += maxim-serdes/ obj-$(CONFIG_VIDEO_ML86V7667) += ml86v7667.o obj-$(CONFIG_VIDEO_MSP3400) += msp3400.o diff --git a/drivers/media/i2c/max96717.c b/drivers/media/i2c/max96717.c deleted file mode 100644 index 9259d58ba734..000000000000 --- a/drivers/media/i2c/max96717.c +++ /dev/null @@ -1,1103 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Maxim GMSL2 Serializer Driver - * - * Copyright (C) 2024 Collabora Ltd. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#define MAX96717_DEVICE_ID 0xbf -#define MAX96717F_DEVICE_ID 0xc8 -#define MAX96717_PORTS 2 -#define MAX96717_PAD_SINK 0 -#define MAX96717_PAD_SOURCE 1 -#define MAX96717_CSI_NLANES 4 - -#define MAX96717_DEFAULT_CLKOUT_RATE 24000000UL - -/* DEV */ -#define MAX96717_REG3 CCI_REG8(0x3) -#define MAX96717_RCLKSEL GENMASK(1, 0) -#define RCLKSEL_REF_PLL CCI_REG8(0x3) -#define MAX96717_REG6 CCI_REG8(0x6) -#define RCLKEN BIT(5) -#define MAX96717_DEV_ID CCI_REG8(0xd) -#define MAX96717_DEV_REV CCI_REG8(0xe) -#define MAX96717_DEV_REV_MASK GENMASK(3, 0) - -/* VID_TX Z */ -#define MAX96717_VIDEO_TX0 CCI_REG8(0x110) -#define MAX96717_VIDEO_AUTO_BPP BIT(3) -#define MAX96717_VIDEO_TX2 CCI_REG8(0x112) -#define MAX96717_VIDEO_PCLKDET BIT(7) - -/* VTX_Z */ -#define MAX96717_VTX0 CCI_REG8(0x24e) -#define MAX96717_VTX1 CCI_REG8(0x24f) -#define MAX96717_PATTERN_CLK_FREQ GENMASK(3, 1) -#define MAX96717_VTX_VS_DLY CCI_REG24(0x250) -#define MAX96717_VTX_VS_HIGH CCI_REG24(0x253) -#define MAX96717_VTX_VS_LOW CCI_REG24(0x256) -#define MAX96717_VTX_V2H CCI_REG24(0x259) -#define MAX96717_VTX_HS_HIGH CCI_REG16(0x25c) -#define MAX96717_VTX_HS_LOW CCI_REG16(0x25e) -#define MAX96717_VTX_HS_CNT CCI_REG16(0x260) -#define MAX96717_VTX_V2D CCI_REG24(0x262) -#define MAX96717_VTX_DE_HIGH CCI_REG16(0x265) -#define MAX96717_VTX_DE_LOW CCI_REG16(0x267) -#define MAX96717_VTX_DE_CNT CCI_REG16(0x269) -#define MAX96717_VTX29 CCI_REG8(0x26b) -#define MAX96717_VTX_MODE GENMASK(1, 0) -#define MAX96717_VTX_GRAD_INC CCI_REG8(0x26c) -#define MAX96717_VTX_CHKB_COLOR_A CCI_REG24(0x26d) -#define MAX96717_VTX_CHKB_COLOR_B CCI_REG24(0x270) -#define MAX96717_VTX_CHKB_RPT_CNT_A CCI_REG8(0x273) -#define MAX96717_VTX_CHKB_RPT_CNT_B CCI_REG8(0x274) -#define MAX96717_VTX_CHKB_ALT CCI_REG8(0x275) - -/* GPIO */ -#define MAX96717_NUM_GPIO 11 -#define MAX96717_GPIO_REG_A(gpio) CCI_REG8(0x2be + (gpio) * 3) -#define MAX96717_GPIO_OUT BIT(4) -#define MAX96717_GPIO_IN BIT(3) -#define MAX96717_GPIO_RX_EN BIT(2) -#define MAX96717_GPIO_TX_EN BIT(1) -#define MAX96717_GPIO_OUT_DIS BIT(0) - -/* FRONTTOP */ -/* MAX96717 only have CSI port 'B' */ -#define MAX96717_FRONTOP0 CCI_REG8(0x308) -#define MAX96717_START_PORT_B BIT(5) - -/* MIPI_RX */ -#define MAX96717_MIPI_RX1 CCI_REG8(0x331) -#define MAX96717_MIPI_LANES_CNT GENMASK(5, 4) -#define MAX96717_MIPI_RX2 CCI_REG8(0x332) /* phy1 Lanes map */ -#define MAX96717_PHY2_LANES_MAP GENMASK(7, 4) -#define MAX96717_MIPI_RX3 CCI_REG8(0x333) /* phy2 Lanes map */ -#define MAX96717_PHY1_LANES_MAP GENMASK(3, 0) -#define MAX96717_MIPI_RX4 CCI_REG8(0x334) /* phy1 lane polarities */ -#define MAX96717_PHY1_LANES_POL GENMASK(6, 4) -#define MAX96717_MIPI_RX5 CCI_REG8(0x335) /* phy2 lane polarities */ -#define MAX96717_PHY2_LANES_POL GENMASK(2, 0) - -/* MIPI_RX_EXT */ -#define MAX96717_MIPI_RX_EXT11 CCI_REG8(0x383) -#define MAX96717_TUN_MODE BIT(7) - -/* REF_VTG */ -#define REF_VTG0 CCI_REG8(0x3f0) -#define REFGEN_PREDEF_EN BIT(6) -#define REFGEN_PREDEF_FREQ_MASK GENMASK(5, 4) -#define REFGEN_PREDEF_FREQ_ALT BIT(3) -#define REFGEN_RST BIT(1) -#define REFGEN_EN BIT(0) - -/* MISC */ -#define PIO_SLEW_1 CCI_REG8(0x570) - -enum max96717_vpg_mode { - MAX96717_VPG_DISABLED = 0, - MAX96717_VPG_CHECKERBOARD = 1, - MAX96717_VPG_GRADIENT = 2, -}; - -struct max96717_priv { - struct i2c_client *client; - struct regmap *regmap; - struct i2c_mux_core *mux; - struct v4l2_mbus_config_mipi_csi2 mipi_csi2; - struct v4l2_subdev sd; - struct media_pad pads[MAX96717_PORTS]; - struct v4l2_ctrl_handler ctrl_handler; - struct v4l2_async_notifier notifier; - struct v4l2_subdev *source_sd; - u16 source_sd_pad; - u64 enabled_source_streams; - u8 pll_predef_index; - struct clk_hw clk_hw; - struct gpio_chip gpio_chip; - enum max96717_vpg_mode pattern; -}; - -static inline struct max96717_priv *sd_to_max96717(struct v4l2_subdev *sd) -{ - return container_of(sd, struct max96717_priv, sd); -} - -static inline struct max96717_priv *clk_hw_to_max96717(struct clk_hw *hw) -{ - return container_of(hw, struct max96717_priv, clk_hw); -} - -static int max96717_i2c_mux_select(struct i2c_mux_core *mux, u32 chan) -{ - return 0; -} - -static int max96717_i2c_mux_init(struct max96717_priv *priv) -{ - priv->mux = i2c_mux_alloc(priv->client->adapter, &priv->client->dev, - 1, 0, I2C_MUX_LOCKED | I2C_MUX_GATE, - max96717_i2c_mux_select, NULL); - if (!priv->mux) - return -ENOMEM; - - return i2c_mux_add_adapter(priv->mux, 0, 0); -} - -static inline int max96717_start_csi(struct max96717_priv *priv, bool start) -{ - return cci_update_bits(priv->regmap, MAX96717_FRONTOP0, - MAX96717_START_PORT_B, - start ? MAX96717_START_PORT_B : 0, NULL); -} - -static int max96717_apply_patgen_timing(struct max96717_priv *priv, - struct v4l2_subdev_state *state) -{ - struct v4l2_mbus_framefmt *fmt = - v4l2_subdev_state_get_format(state, MAX96717_PAD_SOURCE); - const u32 h_active = fmt->width; - const u32 h_fp = 88; - const u32 h_sw = 44; - const u32 h_bp = 148; - u32 h_tot; - const u32 v_active = fmt->height; - const u32 v_fp = 4; - const u32 v_sw = 5; - const u32 v_bp = 36; - u32 v_tot; - int ret = 0; - - h_tot = h_active + h_fp + h_sw + h_bp; - v_tot = v_active + v_fp + v_sw + v_bp; - - /* 75 Mhz pixel clock */ - cci_update_bits(priv->regmap, MAX96717_VTX1, - MAX96717_PATTERN_CLK_FREQ, 0xa, &ret); - - dev_info(&priv->client->dev, "height: %d width: %d\n", fmt->height, - fmt->width); - - cci_write(priv->regmap, MAX96717_VTX_VS_DLY, 0, &ret); - cci_write(priv->regmap, MAX96717_VTX_VS_HIGH, v_sw * h_tot, &ret); - cci_write(priv->regmap, MAX96717_VTX_VS_LOW, - (v_active + v_fp + v_bp) * h_tot, &ret); - cci_write(priv->regmap, MAX96717_VTX_HS_HIGH, h_sw, &ret); - cci_write(priv->regmap, MAX96717_VTX_HS_LOW, h_active + h_fp + h_bp, - &ret); - cci_write(priv->regmap, MAX96717_VTX_V2D, - h_tot * (v_sw + v_bp) + (h_sw + h_bp), &ret); - cci_write(priv->regmap, MAX96717_VTX_HS_CNT, v_tot, &ret); - cci_write(priv->regmap, MAX96717_VTX_DE_HIGH, h_active, &ret); - cci_write(priv->regmap, MAX96717_VTX_DE_LOW, h_fp + h_sw + h_bp, - &ret); - cci_write(priv->regmap, MAX96717_VTX_DE_CNT, v_active, &ret); - /* B G R */ - cci_write(priv->regmap, MAX96717_VTX_CHKB_COLOR_A, 0xfecc00, &ret); - /* B G R */ - cci_write(priv->regmap, MAX96717_VTX_CHKB_COLOR_B, 0x006aa7, &ret); - cci_write(priv->regmap, MAX96717_VTX_CHKB_RPT_CNT_A, 0x3c, &ret); - cci_write(priv->regmap, MAX96717_VTX_CHKB_RPT_CNT_B, 0x3c, &ret); - cci_write(priv->regmap, MAX96717_VTX_CHKB_ALT, 0x3c, &ret); - cci_write(priv->regmap, MAX96717_VTX_GRAD_INC, 0x10, &ret); - - return ret; -} - -static int max96717_apply_patgen(struct max96717_priv *priv, - struct v4l2_subdev_state *state) -{ - unsigned int val; - int ret = 0; - - if (priv->pattern) - ret = max96717_apply_patgen_timing(priv, state); - - cci_write(priv->regmap, MAX96717_VTX0, priv->pattern ? 0xfb : 0, - &ret); - - val = FIELD_PREP(MAX96717_VTX_MODE, priv->pattern); - cci_update_bits(priv->regmap, MAX96717_VTX29, MAX96717_VTX_MODE, - val, &ret); - return ret; -} - -static int max96717_s_ctrl(struct v4l2_ctrl *ctrl) -{ - struct max96717_priv *priv = - container_of(ctrl->handler, struct max96717_priv, ctrl_handler); - int ret; - - switch (ctrl->id) { - case V4L2_CID_TEST_PATTERN: - if (priv->enabled_source_streams) - return -EBUSY; - priv->pattern = ctrl->val; - break; - default: - return -EINVAL; - } - - /* Use bpp from bpp register */ - ret = cci_update_bits(priv->regmap, MAX96717_VIDEO_TX0, - MAX96717_VIDEO_AUTO_BPP, - priv->pattern ? 0 : MAX96717_VIDEO_AUTO_BPP, - NULL); - - /* - * Pattern generator doesn't work with tunnel mode. - * Needs RGB color format and deserializer tunnel mode must be disabled. - */ - return cci_update_bits(priv->regmap, MAX96717_MIPI_RX_EXT11, - MAX96717_TUN_MODE, - priv->pattern ? 0 : MAX96717_TUN_MODE, &ret); -} - -static const char * const max96717_test_pattern[] = { - "Disabled", - "Checkerboard", - "Gradient" -}; - -static const struct v4l2_ctrl_ops max96717_ctrl_ops = { - .s_ctrl = max96717_s_ctrl, -}; - -static int max96717_gpiochip_get(struct gpio_chip *gpiochip, - unsigned int offset) -{ - struct max96717_priv *priv = gpiochip_get_data(gpiochip); - u64 val; - int ret; - - ret = cci_read(priv->regmap, MAX96717_GPIO_REG_A(offset), - &val, NULL); - if (ret) - return ret; - - if (val & MAX96717_GPIO_OUT_DIS) - return !!(val & MAX96717_GPIO_IN); - else - return !!(val & MAX96717_GPIO_OUT); -} - -static void max96717_gpiochip_set(struct gpio_chip *gpiochip, - unsigned int offset, int value) -{ - struct max96717_priv *priv = gpiochip_get_data(gpiochip); - - cci_update_bits(priv->regmap, MAX96717_GPIO_REG_A(offset), - MAX96717_GPIO_OUT, MAX96717_GPIO_OUT, NULL); -} - -static int max96717_gpio_get_direction(struct gpio_chip *gpiochip, - unsigned int offset) -{ - struct max96717_priv *priv = gpiochip_get_data(gpiochip); - u64 val; - int ret; - - ret = cci_read(priv->regmap, MAX96717_GPIO_REG_A(offset), &val, NULL); - if (ret < 0) - return ret; - - return !!(val & MAX96717_GPIO_OUT_DIS); -} - -static int max96717_gpio_direction_out(struct gpio_chip *gpiochip, - unsigned int offset, int value) -{ - struct max96717_priv *priv = gpiochip_get_data(gpiochip); - - return cci_update_bits(priv->regmap, MAX96717_GPIO_REG_A(offset), - MAX96717_GPIO_OUT_DIS | MAX96717_GPIO_OUT, - value ? MAX96717_GPIO_OUT : 0, NULL); -} - -static int max96717_gpio_direction_in(struct gpio_chip *gpiochip, - unsigned int offset) -{ - struct max96717_priv *priv = gpiochip_get_data(gpiochip); - - return cci_update_bits(priv->regmap, MAX96717_GPIO_REG_A(offset), - MAX96717_GPIO_OUT_DIS, MAX96717_GPIO_OUT_DIS, - NULL); -} - -static int max96717_gpiochip_probe(struct max96717_priv *priv) -{ - struct device *dev = &priv->client->dev; - struct gpio_chip *gc = &priv->gpio_chip; - int i, ret = 0; - - gc->label = dev_name(dev); - gc->parent = dev; - gc->owner = THIS_MODULE; - gc->ngpio = MAX96717_NUM_GPIO; - gc->base = -1; - gc->can_sleep = true; - gc->get_direction = max96717_gpio_get_direction; - gc->direction_input = max96717_gpio_direction_in; - gc->direction_output = max96717_gpio_direction_out; - gc->set = max96717_gpiochip_set; - gc->get = max96717_gpiochip_get; - gc->of_gpio_n_cells = 2; - - /* Disable GPIO forwarding */ - for (i = 0; i < gc->ngpio; i++) - cci_update_bits(priv->regmap, MAX96717_GPIO_REG_A(i), - MAX96717_GPIO_RX_EN | MAX96717_GPIO_TX_EN, - 0, &ret); - - if (ret) - return ret; - - ret = devm_gpiochip_add_data(dev, gc, priv); - if (ret) { - dev_err(dev, "Unable to create gpio_chip\n"); - return ret; - } - - return 0; -} - -static int _max96717_set_routing(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state, - struct v4l2_subdev_krouting *routing) -{ - static const struct v4l2_mbus_framefmt format = { - .width = 1280, - .height = 1080, - .code = MEDIA_BUS_FMT_Y8_1X8, - .field = V4L2_FIELD_NONE, - }; - int ret; - - ret = v4l2_subdev_routing_validate(sd, routing, - V4L2_SUBDEV_ROUTING_ONLY_1_TO_1); - if (ret) - return ret; - - ret = v4l2_subdev_set_routing_with_fmt(sd, state, routing, &format); - if (ret) - return ret; - - return 0; -} - -static int max96717_set_routing(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state, - enum v4l2_subdev_format_whence which, - struct v4l2_subdev_krouting *routing) -{ - struct max96717_priv *priv = sd_to_max96717(sd); - - if (which == V4L2_SUBDEV_FORMAT_ACTIVE && priv->enabled_source_streams) - return -EBUSY; - - return _max96717_set_routing(sd, state, routing); -} - -static int max96717_set_fmt(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state, - struct v4l2_subdev_format *format) -{ - struct max96717_priv *priv = sd_to_max96717(sd); - struct v4l2_mbus_framefmt *fmt; - u64 stream_source_mask; - - if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE && - priv->enabled_source_streams) - return -EBUSY; - - /* No transcoding, source and sink formats must match. */ - if (format->pad == MAX96717_PAD_SOURCE) - return v4l2_subdev_get_fmt(sd, state, format); - - /* Set sink format */ - fmt = v4l2_subdev_state_get_format(state, format->pad, format->stream); - if (!fmt) - return -EINVAL; - - *fmt = format->format; - - /* Propagate to source format */ - fmt = v4l2_subdev_state_get_opposite_stream_format(state, format->pad, - format->stream); - if (!fmt) - return -EINVAL; - *fmt = format->format; - - stream_source_mask = BIT(format->stream); - - return v4l2_subdev_state_xlate_streams(state, MAX96717_PAD_SOURCE, - MAX96717_PAD_SINK, - &stream_source_mask); -} - -static int max96717_init_state(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state) -{ - struct v4l2_subdev_route routes[] = { - { - .sink_pad = MAX96717_PAD_SINK, - .sink_stream = 0, - .source_pad = MAX96717_PAD_SOURCE, - .source_stream = 0, - .flags = V4L2_SUBDEV_ROUTE_FL_ACTIVE, - }, - }; - struct v4l2_subdev_krouting routing = { - .num_routes = ARRAY_SIZE(routes), - .routes = routes, - }; - - return _max96717_set_routing(sd, state, &routing); -} - -static bool max96717_pipe_pclkdet(struct max96717_priv *priv) -{ - u64 val = 0; - - cci_read(priv->regmap, MAX96717_VIDEO_TX2, &val, NULL); - - return val & MAX96717_VIDEO_PCLKDET; -} - -static int max96717_log_status(struct v4l2_subdev *sd) -{ - struct max96717_priv *priv = sd_to_max96717(sd); - struct device *dev = &priv->client->dev; - - dev_info(dev, "Serializer: max96717\n"); - dev_info(dev, "Pipe: pclkdet:%d\n", max96717_pipe_pclkdet(priv)); - - return 0; -} - -static int max96717_enable_streams(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state, u32 pad, - u64 streams_mask) -{ - struct max96717_priv *priv = sd_to_max96717(sd); - u64 sink_streams; - int ret; - - if (!priv->enabled_source_streams) - max96717_start_csi(priv, true); - - ret = max96717_apply_patgen(priv, state); - if (ret) - goto stop_csi; - - if (!priv->pattern) { - sink_streams = - v4l2_subdev_state_xlate_streams(state, - MAX96717_PAD_SOURCE, - MAX96717_PAD_SINK, - &streams_mask); - - ret = v4l2_subdev_enable_streams(priv->source_sd, - priv->source_sd_pad, - sink_streams); - if (ret) - goto stop_csi; - } - - priv->enabled_source_streams |= streams_mask; - - return 0; - -stop_csi: - if (!priv->enabled_source_streams) - max96717_start_csi(priv, false); - - return ret; -} - -static int max96717_disable_streams(struct v4l2_subdev *sd, - struct v4l2_subdev_state *state, u32 pad, - u64 streams_mask) -{ - struct max96717_priv *priv = sd_to_max96717(sd); - u64 sink_streams; - - /* - * Stop the CSI receiver first then the source, - * otherwise the device may become unresponsive - * while holding the I2C bus low. - */ - priv->enabled_source_streams &= ~streams_mask; - if (!priv->enabled_source_streams) - max96717_start_csi(priv, false); - - if (!priv->pattern) { - int ret; - - sink_streams = - v4l2_subdev_state_xlate_streams(state, - MAX96717_PAD_SOURCE, - MAX96717_PAD_SINK, - &streams_mask); - - ret = v4l2_subdev_disable_streams(priv->source_sd, - priv->source_sd_pad, - sink_streams); - if (ret) - return ret; - } - - return 0; -} - -static const struct v4l2_subdev_pad_ops max96717_pad_ops = { - .enable_streams = max96717_enable_streams, - .disable_streams = max96717_disable_streams, - .set_routing = max96717_set_routing, - .get_fmt = v4l2_subdev_get_fmt, - .set_fmt = max96717_set_fmt, -}; - -static const struct v4l2_subdev_core_ops max96717_subdev_core_ops = { - .log_status = max96717_log_status, -}; - -static const struct v4l2_subdev_internal_ops max96717_internal_ops = { - .init_state = max96717_init_state, -}; - -static const struct v4l2_subdev_ops max96717_subdev_ops = { - .core = &max96717_subdev_core_ops, - .pad = &max96717_pad_ops, -}; - -static const struct media_entity_operations max96717_entity_ops = { - .link_validate = v4l2_subdev_link_validate, -}; - -static int max96717_notify_bound(struct v4l2_async_notifier *notifier, - struct v4l2_subdev *source_subdev, - struct v4l2_async_connection *asd) -{ - struct max96717_priv *priv = sd_to_max96717(notifier->sd); - struct device *dev = &priv->client->dev; - int ret; - - ret = media_entity_get_fwnode_pad(&source_subdev->entity, - source_subdev->fwnode, - MEDIA_PAD_FL_SOURCE); - if (ret < 0) { - dev_err(dev, "Failed to find pad for %s\n", - source_subdev->name); - return ret; - } - - priv->source_sd = source_subdev; - priv->source_sd_pad = ret; - - ret = media_create_pad_link(&source_subdev->entity, priv->source_sd_pad, - &priv->sd.entity, 0, - MEDIA_LNK_FL_ENABLED | - MEDIA_LNK_FL_IMMUTABLE); - if (ret) { - dev_err(dev, "Unable to link %s:%u -> %s:0\n", - source_subdev->name, priv->source_sd_pad, - priv->sd.name); - return ret; - } - - return 0; -} - -static const struct v4l2_async_notifier_operations max96717_notify_ops = { - .bound = max96717_notify_bound, -}; - -static int max96717_v4l2_notifier_register(struct max96717_priv *priv) -{ - struct device *dev = &priv->client->dev; - struct v4l2_async_connection *asd; - struct fwnode_handle *ep_fwnode; - int ret; - - ep_fwnode = fwnode_graph_get_endpoint_by_id(dev_fwnode(dev), - MAX96717_PAD_SINK, 0, 0); - if (!ep_fwnode) { - dev_err(dev, "No graph endpoint\n"); - return -ENODEV; - } - - v4l2_async_subdev_nf_init(&priv->notifier, &priv->sd); - - asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode, - struct v4l2_async_connection); - - fwnode_handle_put(ep_fwnode); - - if (IS_ERR(asd)) { - dev_err(dev, "Failed to add subdev: %ld", PTR_ERR(asd)); - v4l2_async_nf_cleanup(&priv->notifier); - return PTR_ERR(asd); - } - - priv->notifier.ops = &max96717_notify_ops; - - ret = v4l2_async_nf_register(&priv->notifier); - if (ret) { - dev_err(dev, "Failed to register subdev_notifier"); - v4l2_async_nf_cleanup(&priv->notifier); - return ret; - } - - return 0; -} - -static int max96717_subdev_init(struct max96717_priv *priv) -{ - struct device *dev = &priv->client->dev; - int ret; - - v4l2_i2c_subdev_init(&priv->sd, priv->client, &max96717_subdev_ops); - priv->sd.internal_ops = &max96717_internal_ops; - - v4l2_ctrl_handler_init(&priv->ctrl_handler, 1); - priv->sd.ctrl_handler = &priv->ctrl_handler; - - v4l2_ctrl_new_std_menu_items(&priv->ctrl_handler, - &max96717_ctrl_ops, - V4L2_CID_TEST_PATTERN, - ARRAY_SIZE(max96717_test_pattern) - 1, - 0, 0, max96717_test_pattern); - if (priv->ctrl_handler.error) { - ret = priv->ctrl_handler.error; - goto err_free_ctrl; - } - - priv->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_STREAMS; - priv->sd.entity.function = MEDIA_ENT_F_VID_IF_BRIDGE; - priv->sd.entity.ops = &max96717_entity_ops; - - priv->pads[MAX96717_PAD_SINK].flags = MEDIA_PAD_FL_SINK; - priv->pads[MAX96717_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE; - - ret = media_entity_pads_init(&priv->sd.entity, 2, priv->pads); - if (ret) { - dev_err_probe(dev, ret, "Failed to init pads\n"); - goto err_free_ctrl; - } - - ret = v4l2_subdev_init_finalize(&priv->sd); - if (ret) { - dev_err_probe(dev, ret, - "v4l2 subdev init finalized failed\n"); - goto err_entity_cleanup; - } - ret = max96717_v4l2_notifier_register(priv); - if (ret) { - dev_err_probe(dev, ret, - "v4l2 subdev notifier register failed\n"); - goto err_free_state; - } - - ret = v4l2_async_register_subdev(&priv->sd); - if (ret) { - dev_err_probe(dev, ret, "v4l2_async_register_subdev error\n"); - goto err_unreg_notif; - } - - return 0; - -err_unreg_notif: - v4l2_async_nf_unregister(&priv->notifier); - v4l2_async_nf_cleanup(&priv->notifier); -err_free_state: - v4l2_subdev_cleanup(&priv->sd); -err_entity_cleanup: - media_entity_cleanup(&priv->sd.entity); -err_free_ctrl: - v4l2_ctrl_handler_free(&priv->ctrl_handler); - - return ret; -} - -static void max96717_subdev_uninit(struct max96717_priv *priv) -{ - v4l2_async_unregister_subdev(&priv->sd); - v4l2_async_nf_unregister(&priv->notifier); - v4l2_async_nf_cleanup(&priv->notifier); - v4l2_subdev_cleanup(&priv->sd); - media_entity_cleanup(&priv->sd.entity); - v4l2_ctrl_handler_free(&priv->ctrl_handler); -} - -struct max96717_pll_predef_freq { - unsigned long freq; - bool is_alt; - u8 val; -}; - -static const struct max96717_pll_predef_freq max96717_predef_freqs[] = { - { 13500000, true, 0 }, { 19200000, false, 0 }, - { 24000000, true, 1 }, { 27000000, false, 1 }, - { 37125000, false, 2 }, { 74250000, false, 3 }, -}; - -static unsigned long -max96717_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) -{ - struct max96717_priv *priv = clk_hw_to_max96717(hw); - - return max96717_predef_freqs[priv->pll_predef_index].freq; -} - -static unsigned int max96717_clk_find_best_index(struct max96717_priv *priv, - unsigned long rate) -{ - unsigned int i, idx = 0; - unsigned long diff_new, diff_old = U32_MAX; - - for (i = 0; i < ARRAY_SIZE(max96717_predef_freqs); i++) { - diff_new = abs(rate - max96717_predef_freqs[i].freq); - if (diff_new < diff_old) { - diff_old = diff_new; - idx = i; - } - } - - return idx; -} - -static long max96717_clk_round_rate(struct clk_hw *hw, unsigned long rate, - unsigned long *parent_rate) -{ - struct max96717_priv *priv = clk_hw_to_max96717(hw); - struct device *dev = &priv->client->dev; - unsigned int idx; - - idx = max96717_clk_find_best_index(priv, rate); - - if (rate != max96717_predef_freqs[idx].freq) { - dev_warn(dev, "Request CLK freq:%lu, found CLK freq:%lu\n", - rate, max96717_predef_freqs[idx].freq); - } - - return max96717_predef_freqs[idx].freq; -} - -static int max96717_clk_set_rate(struct clk_hw *hw, unsigned long rate, - unsigned long parent_rate) -{ - struct max96717_priv *priv = clk_hw_to_max96717(hw); - unsigned int val, idx; - int ret = 0; - - idx = max96717_clk_find_best_index(priv, rate); - - val = FIELD_PREP(REFGEN_PREDEF_FREQ_MASK, - max96717_predef_freqs[idx].val); - - if (max96717_predef_freqs[idx].is_alt) - val |= REFGEN_PREDEF_FREQ_ALT; - - val |= REFGEN_RST | REFGEN_PREDEF_EN; - - cci_write(priv->regmap, REF_VTG0, val, &ret); - cci_update_bits(priv->regmap, REF_VTG0, REFGEN_RST | REFGEN_EN, - REFGEN_EN, &ret); - if (ret) - return ret; - - priv->pll_predef_index = idx; - - return 0; -} - -static int max96717_clk_prepare(struct clk_hw *hw) -{ - struct max96717_priv *priv = clk_hw_to_max96717(hw); - - return cci_update_bits(priv->regmap, MAX96717_REG6, RCLKEN, - RCLKEN, NULL); -} - -static void max96717_clk_unprepare(struct clk_hw *hw) -{ - struct max96717_priv *priv = clk_hw_to_max96717(hw); - - cci_update_bits(priv->regmap, MAX96717_REG6, RCLKEN, 0, NULL); -} - -static const struct clk_ops max96717_clk_ops = { - .prepare = max96717_clk_prepare, - .unprepare = max96717_clk_unprepare, - .set_rate = max96717_clk_set_rate, - .recalc_rate = max96717_clk_recalc_rate, - .round_rate = max96717_clk_round_rate, -}; - -static int max96717_register_clkout(struct max96717_priv *priv) -{ - struct device *dev = &priv->client->dev; - struct clk_init_data init = { .ops = &max96717_clk_ops }; - int ret; - - init.name = kasprintf(GFP_KERNEL, "max96717.%s.clk_out", dev_name(dev)); - if (!init.name) - return -ENOMEM; - - /* RCLKSEL Reference PLL output */ - ret = cci_update_bits(priv->regmap, MAX96717_REG3, MAX96717_RCLKSEL, - MAX96717_RCLKSEL, NULL); - /* MFP4 fastest slew rate */ - cci_update_bits(priv->regmap, PIO_SLEW_1, BIT(5) | BIT(4), 0, &ret); - if (ret) - goto free_init_name; - - priv->clk_hw.init = &init; - - /* Initialize to 24 MHz */ - ret = max96717_clk_set_rate(&priv->clk_hw, - MAX96717_DEFAULT_CLKOUT_RATE, 0); - if (ret < 0) - goto free_init_name; - - ret = devm_clk_hw_register(dev, &priv->clk_hw); - kfree(init.name); - if (ret) - return dev_err_probe(dev, ret, "Cannot register clock HW\n"); - - ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get, - &priv->clk_hw); - if (ret) - return dev_err_probe(dev, ret, - "Cannot add OF clock provider\n"); - - return 0; - -free_init_name: - kfree(init.name); - return ret; -} - -static int max96717_init_csi_lanes(struct max96717_priv *priv) -{ - struct v4l2_mbus_config_mipi_csi2 *mipi = &priv->mipi_csi2; - unsigned long lanes_used = 0; - unsigned int nlanes, lane, val = 0; - int ret; - - nlanes = mipi->num_data_lanes; - - ret = cci_update_bits(priv->regmap, MAX96717_MIPI_RX1, - MAX96717_MIPI_LANES_CNT, - FIELD_PREP(MAX96717_MIPI_LANES_CNT, - nlanes - 1), NULL); - - /* lanes polarity */ - for (lane = 0; lane < nlanes + 1; lane++) { - if (!mipi->lane_polarities[lane]) - continue; - /* Clock lane */ - if (lane == 0) - val |= BIT(2); - else if (lane < 3) - val |= BIT(lane - 1); - else - val |= BIT(lane); - } - - cci_update_bits(priv->regmap, MAX96717_MIPI_RX5, - MAX96717_PHY2_LANES_POL, - FIELD_PREP(MAX96717_PHY2_LANES_POL, val), &ret); - - cci_update_bits(priv->regmap, MAX96717_MIPI_RX4, - MAX96717_PHY1_LANES_POL, - FIELD_PREP(MAX96717_PHY1_LANES_POL, - val >> 3), &ret); - /* lanes mapping */ - for (lane = 0, val = 0; lane < nlanes; lane++) { - val |= (mipi->data_lanes[lane] - 1) << (lane * 2); - lanes_used |= BIT(mipi->data_lanes[lane] - 1); - } - - /* - * Unused lanes need to be mapped as well to not have - * the same lanes mapped twice. - */ - for (; lane < MAX96717_CSI_NLANES; lane++) { - unsigned int idx = find_first_zero_bit(&lanes_used, - MAX96717_CSI_NLANES); - - val |= idx << (lane * 2); - lanes_used |= BIT(idx); - } - - cci_update_bits(priv->regmap, MAX96717_MIPI_RX3, - MAX96717_PHY1_LANES_MAP, - FIELD_PREP(MAX96717_PHY1_LANES_MAP, val), &ret); - - return cci_update_bits(priv->regmap, MAX96717_MIPI_RX2, - MAX96717_PHY2_LANES_MAP, - FIELD_PREP(MAX96717_PHY2_LANES_MAP, val >> 4), - &ret); -} - -static int max96717_hw_init(struct max96717_priv *priv) -{ - struct device *dev = &priv->client->dev; - u64 dev_id, val; - int ret; - - ret = cci_read(priv->regmap, MAX96717_DEV_ID, &dev_id, NULL); - if (ret) - return dev_err_probe(dev, ret, - "Fail to read the device id\n"); - - if (dev_id != MAX96717_DEVICE_ID && dev_id != MAX96717F_DEVICE_ID) - return dev_err_probe(dev, -EOPNOTSUPP, - "Unsupported device id got %x\n", (u8)dev_id); - - ret = cci_read(priv->regmap, MAX96717_DEV_REV, &val, NULL); - if (ret) - return dev_err_probe(dev, ret, - "Fail to read device revision"); - - dev_dbg(dev, "Found %x (rev %lx)\n", (u8)dev_id, - (u8)val & MAX96717_DEV_REV_MASK); - - ret = cci_read(priv->regmap, MAX96717_MIPI_RX_EXT11, &val, NULL); - if (ret) - return dev_err_probe(dev, ret, - "Fail to read mipi rx extension"); - - if (!(val & MAX96717_TUN_MODE)) - return dev_err_probe(dev, -EOPNOTSUPP, - "Only supporting tunnel mode"); - - return max96717_init_csi_lanes(priv); -} - -static int max96717_parse_dt(struct max96717_priv *priv) -{ - struct device *dev = &priv->client->dev; - struct v4l2_fwnode_endpoint vep = { .bus_type = V4L2_MBUS_CSI2_DPHY }; - struct fwnode_handle *ep_fwnode; - unsigned char num_data_lanes; - int ret; - - ep_fwnode = fwnode_graph_get_endpoint_by_id(dev_fwnode(dev), - MAX96717_PAD_SINK, 0, 0); - if (!ep_fwnode) - return dev_err_probe(dev, -ENOENT, "no endpoint found\n"); - - ret = v4l2_fwnode_endpoint_parse(ep_fwnode, &vep); - - fwnode_handle_put(ep_fwnode); - - if (ret < 0) - return dev_err_probe(dev, ret, "Failed to parse sink endpoint"); - - num_data_lanes = vep.bus.mipi_csi2.num_data_lanes; - if (num_data_lanes < 1 || num_data_lanes > MAX96717_CSI_NLANES) - return dev_err_probe(dev, -EINVAL, - "Invalid data lanes must be 1 to 4\n"); - - priv->mipi_csi2 = vep.bus.mipi_csi2; - - return 0; -} - -static int max96717_probe(struct i2c_client *client) -{ - struct device *dev = &client->dev; - struct max96717_priv *priv; - int ret; - - priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); - if (!priv) - return -ENOMEM; - - priv->client = client; - priv->regmap = devm_cci_regmap_init_i2c(client, 16); - if (IS_ERR(priv->regmap)) { - ret = PTR_ERR(priv->regmap); - return dev_err_probe(dev, ret, "Failed to init regmap\n"); - } - - ret = max96717_parse_dt(priv); - if (ret) - return dev_err_probe(dev, ret, "Failed to parse the dt\n"); - - ret = max96717_hw_init(priv); - if (ret) - return dev_err_probe(dev, ret, - "Failed to initialize the hardware\n"); - - ret = max96717_gpiochip_probe(priv); - if (ret) - return dev_err_probe(&client->dev, ret, - "Failed to init gpiochip\n"); - - ret = max96717_register_clkout(priv); - if (ret) - return dev_err_probe(dev, ret, "Failed to register clkout\n"); - - ret = max96717_subdev_init(priv); - if (ret) - return dev_err_probe(dev, ret, - "Failed to initialize v4l2 subdev\n"); - - ret = max96717_i2c_mux_init(priv); - if (ret) { - dev_err_probe(dev, ret, "failed to add remote i2c adapter\n"); - max96717_subdev_uninit(priv); - } - - return ret; -} - -static void max96717_remove(struct i2c_client *client) -{ - struct v4l2_subdev *sd = i2c_get_clientdata(client); - struct max96717_priv *priv = sd_to_max96717(sd); - - max96717_subdev_uninit(priv); - i2c_mux_del_adapters(priv->mux); -} - -static const struct of_device_id max96717_of_ids[] = { - { .compatible = "maxim,max96717f" }, - { } -}; -MODULE_DEVICE_TABLE(of, max96717_of_ids); - -static struct i2c_driver max96717_i2c_driver = { - .driver = { - .name = "max96717", - .of_match_table = max96717_of_ids, - }, - .probe = max96717_probe, - .remove = max96717_remove, -}; - -module_i2c_driver(max96717_i2c_driver); - -MODULE_DESCRIPTION("Maxim GMSL2 MAX96717 Serializer Driver"); -MODULE_AUTHOR("Julien Massot "); -MODULE_LICENSE("GPL");