From patchwork Mon May 12 21:28:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889574 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 98274299955; Mon, 12 May 2025 21:28:50 +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=1747085332; cv=none; b=JaLCx4yBYoDdooOY5tAHjKgH0qnq02e0LQ9bJwW0YUZ36IDPd72aQUJaENDPJcAr6D5LBk0ZTcr0B4UylaWeIV2Vlz/xXZRIOdVflImVJ0Vreo6UPVb1g+4CvcYXSiUjuxwCn5ovFdcLKWM9Tkfu8l1T82b9LAElpl9pTwn4hUs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085332; c=relaxed/simple; bh=BbfNlYyIq6bfD8iWwyjMF+VezLL/5HH50K5s2pADmws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XopIa4Yen6Rp3mXEtGW/t0uqvZZ1OUlTvvF28cSYjSWM2oNH52IkGqlkrtPRsrKo9z8CfLDxRwQNjf62hfYbM8zbCG78e/ip4l+0Sy/vnMfcaX8HciRHKm5ssehYsPuDGQjGKs7oHuUvS5gP6eKyRQpoATrkzoo+dk7dOBUz0j8= 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=f2Qt1VOc; 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="f2Qt1VOc" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-ad1d1f57a01so935523766b.2; Mon, 12 May 2025 14:28:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085329; x=1747690129; 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=EKrPGYo6r8jTfHw6fTsyOidOITDoSW91H73atx2WSvo=; b=f2Qt1VOcxsY2xew31S6M5OSUnxSoyHTBZYoGIZz/4lbqo5JdUebUSOphZV0wwvuHoW pNZMZ53btz1CbmUjfbgFsGVqztac/qgZ9ksJIrsI0DDTRkUuznq9NZjVmrwD7cc3NYOh hPYxTnbfuRyEwHPpr33OkvKltEBe3zsAE84VJHLgXrd7sR/mjr3U1HzfZkOISQZrGKdD DFJzyKIUaLnUHFi5nDYxaoRc6n1+9G/C8OM5RiqT502FbU8a1D4UNONHvXspv+87kVyx 24/xlQBBhbWZQMG+ztJ72VdSRQeh8eZmTvt2ivPaFytw04t88UKWnm4qmP1sAMtDkwo+ 5EvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085329; x=1747690129; 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=EKrPGYo6r8jTfHw6fTsyOidOITDoSW91H73atx2WSvo=; b=xUtEInpz1007xpC/YQ5MbN1vQbRmcVmyRZLU5CMMYp17REVeu4It+t4tsPSkM9j5jh uvNzuO0Ju1pk0JZJvKjyXnNy79wyefS1IXH2qsIG2NIygojEoDsRCQlP4x6QQ+RhzDKW seBSKNhShN0g9EUv7f19Xw8jwuwpPf7WHNxFVuYu3YjLDLYBSOib18sUuJOBVz59TkYF UsAQPBi3HTQL9JX1zqe8maHXplbQCi3AJJfWjEZJhJWEnfPlo8Ht7+s81yz+V/LmSekv OWA69cjQ72ysLrnGZf/fTpfaI6VzQ0uQ4u/YaJK5dGRhz+pQxJfJOpyEaIdtcmdqAUu2 V6Tg== X-Forwarded-Encrypted: i=1; AJvYcCVR0KZd71R4EPAMSQH/8mIBbWChqxzLo8cl72l5RhgaS2e8rLLxz0ReKMyDMFkQL93o5JFmY+uED2QN@vger.kernel.org, AJvYcCWyr6HoQ10NUrG+KEFSNtBW45WupEuAn1ZTul+Kb/9AcsONz/Ce9/yDpfmjfwsw9TIzmg99FTGFDlA+Cw==@vger.kernel.org, AJvYcCXF4fU+KLzKJDNbm+UQPc9C5hWbOgiKVfcjsnaIvbdQtZsiQKOuVNhNnFLnzaxNP4gM2BINcrEo/tsPC54=@vger.kernel.org, AJvYcCXQWDIOYVXkeW4IcvbDVwk4wUOxoGlD+ESSizolnwd6D9HKm+U7YReJTb2e3xeGUSArFSVCRgGsLfX6dekw@vger.kernel.org X-Gm-Message-State: AOJu0YwKPH8s83WmXIqm/5FC7q00vgNVrtfxLXZcak1GBQivS/hhJqzA 5PfKfKmtw61yafoWy5qB+vqfPHmbUd0PqSVqW0IPkxGPZaXkmZH2 X-Gm-Gg: ASbGnctu/vVYyG6ZI/lOcg37XZ6JT7fu+kb7uH21RGkB/3hyzjn1uAAjcfaKd3uVquR wd+IOxVQ4JHAx6gWjQAeeTr2RUxuCqj8tvKwoRoadk/SCPOhIKB93VuxfWMv3gErmzQQ9aeiMSE PqeK2MUS1t6sqOX7qVOcdmkqV0kRZxL1bXPMix4/ch9qGrQ5JMZ1lXR23xcc9qSLnRVdzeQce9q ie0j4CkrTWConVVdl2uWz/xAdhtUMwdEEvV8sEPmYKjh2F5CNwVGDYVSP9nBO4JnwB30HN9/Nmi G8XbimQf7bRYcbGBTwJm3QwwTrJDOjMrqQLtyl5rkytBXYEdEqzovGC3Bnuqmq/5z+nG97M0aw= = X-Google-Smtp-Source: AGHT+IFpt22qZHel8pg/VMN2FxBOpRn/l+5KBVuDEFumIWkq54C5p/vidB0Hx0vw1cOpJ8lTlDD8Pg== X-Received: by 2002:a17:907:7f05:b0:ad4:d069:324b with SMTP id a640c23a62f3a-ad4d06934ebmr188335466b.10.1747085328447; Mon, 12 May 2025 14:28:48 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.28.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:28:48 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 01/19] dt-bindings: media: i2c: max96717: add myself as maintainer Date: Tue, 13 May 2025 00:28:10 +0300 Message-ID: <20250512212832.3674722-2-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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 Mon May 12 21:28:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889573 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 349EE29A31E; Mon, 12 May 2025 21:28:56 +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=1747085339; cv=none; b=fXpVEj2PZArYRM36cPTVWv3vk5+fABQW47LR9enmNE5dtsRjeJFyOvdNCSKqM2YkaIXhPXfo7WVDUgMQGc7BbWEv6nj32o9kv3/TXCx3AsD2M3gFGnDP5m+551EDlOoJ3gtKRDL2mU3mDvZzxncF2xjcEMpLG6VSUqLZJut1/HI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085339; c=relaxed/simple; bh=TVTa1or90A2EcNKApNpwgoujqc65zgifofFMkE9RT6g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V28bKHbwSQxxz2M8Odp9LyBGWCtwftSQZ/aqEpWDNka54q6eSSz+8Clu1NKN2dtHqepf3nXXmu+fz+MCq/rFxRz/1/w0QU997/oec9REAjJN6cEUbqbZOkgXVnjaADpZnTQJdF0ybSSbG5T1WFiz7ICkNPAnO1z7/v5mo/TUPcE= 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=BHzSV7+r; 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="BHzSV7+r" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-ad220f139adso607423066b.1; Mon, 12 May 2025 14:28:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085335; x=1747690135; 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=USSVmmnFJdOcJq4DaZtsKaThQaquXKB2SbmZfhpsh4g=; b=BHzSV7+ra2+HrAq1Ac56v5bLxAYHm+PzbWq5ikv6ZBfnM1sfEjqd5tqhtwdvXNoNvV GfA3iospfalrgaJKNb7iacIFsU9q9314V9Dzv0csA2gc1v9UktgiIb5QsS6zTfPncO/E R4F1DSFDnAFCf34LzstI7c5ULi97PIkne2QOl6t443LK/hx1apyYFUS/aLJoJY/rK+jX JIuvAYvpJ/gSbUzXK9P/IKq+4nr1S96Ska5MvF3V7xBD1RgCl6fdKFQc6P/xdlB86eHL GT66Lh1iixgrrXhup7euSsQxL8ryNK/vkoG+LswrTqKc1Nx9qdkxuskajxL6NzFu7cmB 32Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085335; x=1747690135; 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=USSVmmnFJdOcJq4DaZtsKaThQaquXKB2SbmZfhpsh4g=; b=wXVe0G6veAhC2oLkiTUls4Y7wz6d7qOQiCYEUd39y1LmAWRdDOE6fgBOMf3RVxb7kQ 6hqCgLGKeLfx/4RXAVcOnTxwv+Lu6stJbEI64OGn1BYqYqAvkIdpNl092iOjymW5npMq PD+InzZW7lfBj4tJxh1IDcQN7J3eNp2YWNg+fMx+6BwHnyTEANAVlg8VXjDSS4yTe4Q8 BqJmelJtvFLjgE+WVV1dggcqUFh3vLxalSeXUm8fDPxbNaxEWQ15sX408nZ7VOEmadu3 gb47NLkIORnqei7Kd5QXtd4FEMT/oPjlwdhbotJPLzRQFIsX3s48UYdW7MEA/PA9kunX q2OA== X-Forwarded-Encrypted: i=1; AJvYcCUknmWt2NDrFLT/EarA+oiUMlDAJlUjifLH8PEmSLxL8YmmWCtBPeDVjRA9MfkOrYy1lyTEvBWk3i2BNg==@vger.kernel.org, AJvYcCV4RLndD6RO5gIHY/tnmgJq4NHieVz04VCMhN/782e2Cas7o4mC3hu+mXLPyTV/v/biKPBBZNfsZ0+v@vger.kernel.org, AJvYcCWIl87X6VbBKMg1/4tvFwDVbfWrcwluvpoghURLfKsH7I+Ex8a27WJxqI+Sfik4nan3aa15OL20mqCk4h4U@vger.kernel.org, AJvYcCWUM0yfh/xZCTG0Ssx2vAsvglhQMTP3EOHn55FZwX4Ai1GdKTyEGYpzWWbpzF/ftbVeuUYqsTVefx4Aefs=@vger.kernel.org X-Gm-Message-State: AOJu0YxAQX+mWSqyWdLiNLBpgMcXNJZOv3VzL4gvjgekZ+XkbEdGK8w4 BtW3I3UaRTPL7OcUxyuTvfvoEn4SjT1THulp65AK7hKEoIcAu38b X-Gm-Gg: ASbGncumVIU/lIPJfp7DmcVnaw0R/B9Mqr3939DFliiDcQOX8Nk3VkBGZnxl+JPrHlc w50S1R11Z698PlAbGT6Tng6ZlIQG2u27UE5RV5DKZ1jlx9Z8mhniM/YTI66PGYonS83rukTHBjJ sk02nC7qetDPGN7//QL2R574jurlHFSZNC9sNSH7LFRkiGosMaByK66lcJgIr+rd3LG7dBTLZkS Eq9oOixLn+ZR8VPvik9Zdt09WBDFbHVI1502w34SZvjP0rROSFCtJstLwVwcPaGhEeZ6BDpKyPZ 7ssUZ7Ai9qHiBkjY4DnrwxyjlcQIlyVrUNOtVwE0WwsOqo4XxSgcMjXeciEuZBSdJYIrSkBJmw= = X-Google-Smtp-Source: AGHT+IGZYGO25xeU+0WuvzEPqbhgDfa90J56T8yELtvmAfLXs700qoIgre4bbS1rcOkKIGUXxI87lA== X-Received: by 2002:a17:907:c316:b0:ad2:52c3:2088 with SMTP id a640c23a62f3a-ad252c322f8mr489370366b.25.1747085335042; Mon, 12 May 2025 14:28:55 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.28.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:28:54 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 03/19] dt-bindings: media: i2c: max96717: add support for pinctrl/pinconf Date: Tue, 13 May 2025 00:28:12 +0300 Message-ID: <20250512212832.3674722-4-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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 configuring various pin properties. Add pinctrl/pinconf properties to support this usecase. Signed-off-by: Cosmin Tanislav --- .../bindings/media/i2c/maxim,max96717.yaml | 110 ++++++++++++++++++ MAINTAINERS | 1 + 2 files changed, 111 insertions(+) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml index 167c3dd50683..5998e2518be9 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml @@ -121,6 +121,116 @@ required: - reg - ports +patternProperties: + '-pins$': + type: object + additionalProperties: false + + properties: + function: + enum: [gpio, rclkout] + + pins: true + drive-open-drain: true + drive-push-pull: true + bias-disable: true + output-disable: true + output-enable: true + output-low: true + output-high: true + input-enable: true + + slew-rate: + description: | + Slew rate. + 0 - Fastest + 1 - Fast + 2 - Slow + 3 - Slowest + maximum: 3 + + bias-pull-up: + oneOf: + - type: boolean + description: Enable regular 40kOhm pull-up + - enum: [ 40000, 1000000 ] + description: Enable either the 40kOhm or the 1MOhm pull-up + + bias-pull-down: + oneOf: + - type: boolean + description: Enable regular 40kOhm pull-down + - enum: [ 40000, 1000000 ] + description: Enable either the 40kOhm or the 1MOhm pull-down + + maxim,jitter-compensation: + type: boolean + description: Enables jitter compensation. + + maxim,gmsl-tx: + type: boolean + description: Enable transmitting pin value to GMSL link. + + maxim,gmsl-rx: + type: boolean + description: Enable receiving pin value from GMSL link. + + maxim,gmsl-tx-id: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + Identifier used while transmitting value to GMSL link. + Default value matches the pin number. + minimum: 0 + maximum: 31 + + maxim,gmsl-rx-id: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + Identifier used while receiving value from GMSL link. + Default value matches the pin number. + minimum: 0 + maximum: 31 + + maxim,rclkout-clock: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + Clock value. + 0 - XTAL / 1 = 25MHz + 1 - XTAL / 2 = 12.5MHz + 2 - XTAL / 4 = 6.25MHz + 3 - Reference PLL output + minimum: 0 + maximum: 3 + + required: + - pins + - function + + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml# + - $ref: /schemas/pinctrl/pinmux-node.yaml# + + - if: + properties: + function: + const: gpio + then: + properties: + pins: + items: + enum: [mfp0, mfp1, mfp2, mfp3, mfp4, mfp5, mfp6, mfp7, + mfp8, mfp9, mfp10] + + - if: + properties: + function: + const: rclkout + then: + properties: + pins: + items: + enum: [mfp0, mfp1, mfp2, mfp3, mfp4, mfp7, mfp8] + additionalProperties: false allOf: diff --git a/MAINTAINERS b/MAINTAINERS index 8f463ebca056..f8ffb7cff9c5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14201,6 +14201,7 @@ M: Julien Massot M: Cosmin Tanislav 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 From patchwork Mon May 12 21:28:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889572 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 EC6AD29A9C2; Mon, 12 May 2025 21:28:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085341; cv=none; b=pZJdNQWnJfCLp4Z8sZTmY/olDJ+JzU9zsozqRUcZidQFDlJs48TEVUN1gMPX+yyzHtSi64Zp8oiRnffn/6dnfg9zM9xAGH9TMsVQJBhXO8uKzC2rT4ZICin3Dr3MNJnks+zncfv0nyDVAHmQsjV3R+OmNZ2KU1hpHNKl1kj7VhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085341; c=relaxed/simple; bh=v8JZPPCmGx4DwUJ2EJxFmzLgmKrI+p/Zffgpv0LqZdU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m9OvQwL3WTOPoV+TNKGEIOtNS87TsApBvgbXIw4H6Bg3M2woeEnSdH3i4iz/XLlS42S7hNI6SyxKaGheE29k0G1bn5cOlbPHGTDuXMVjNTzoo1jNHvbA0S29j6QzqHa7ZwFmBOlzc1CfR1yF3+H98hKTL/JSZEEAsd/jt1MwSuE= 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=AyJ5DGVA; arc=none smtp.client-ip=209.85.218.54 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="AyJ5DGVA" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-acbb85ce788so898041566b.3; Mon, 12 May 2025 14:28:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085338; x=1747690138; 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=8kUjFgmSm1aq3i57OyhvioiCKoKiPrbZ5ktvNV9Nzik=; b=AyJ5DGVA8Pyphb0szW5WryqcVGY9cZtVjRNAsXOZB0ZqDHEqJK8yiIKfM1zFvGE3L8 ef/JP4U4LtoaMwPR/x7vGU9AZfcnAEURviT7PDWkDlvdTG/BnFgjeiorfQWlkUzw0cQr UgsdWwkaCziaexq61MaOnqEWh3l4gHrCzgL2FbLz1IRGFWsp8NvB38VOiKV7efwRZz4/ znhdWC2LENZZEQ8uA/o6I0e/LGZtwyCuEZYIou9mN6YFOUgB2C8Nc+anyLQ5PtLWptT0 j5A97dzYbeGulvWP86kUZCg8QzGYGbePCqDGZ7Gs4ZQVGUoiWzJdFfCBA7F2hPRnN7SO B1RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085338; x=1747690138; 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=8kUjFgmSm1aq3i57OyhvioiCKoKiPrbZ5ktvNV9Nzik=; b=pLgPu2Hknedn3Uz1Q3IDGqOg/hd9dJrxcRslHXuHf7YGXXR+VpJaWvmedNwmQ21KFU Y5oLcynmb3hHlkvJryWdNCtqPTtwReeeBOywvcAh46DhaF8TebxRfbKaL1HeEhN1lNx/ qgpUuXB5iJpCZzFmn27c+EcvkekCwTVT00R8/PWg0lJx5CPe9zw8FlJ3ckU3p0GjJynx hE8+6nl+SYjYbjxAkoJkKqVGng7xK9xh9j1EbbSSS5DDyYwYnrq6XVULcC2EosCMU4Vm McSpUsmT/fR6cLtog4sEbQXklTsSuZcgdYeYMg8/cVbgeGIgHxdYa6ev6Q4OQD4eQwk/ +5NQ== X-Forwarded-Encrypted: i=1; AJvYcCU07UpnWu0f4kE2MBfarkJqCYeKylLhQ9KCsSRBkj50KUIMJ6HJZLyzTrbvPiCa7Is8NW2ppEYBl8Oq@vger.kernel.org, AJvYcCUKydM/e4fkhV2hWP5irHcHtpEbb7cd2bmtR6eeiRUjY/SpuUxKsNYG+qg9qrtJBH308VrKPQdpAbhA9MjK@vger.kernel.org, AJvYcCUSQ2FYv10B/puKsvMzzwAAYw5KpQBfjxImO+I2xAp0jRMgDSck9XKTBmFooK2LeGu+KRIF4gNkkTuDOw==@vger.kernel.org, AJvYcCWpIbLFke5D3vwCuG5v4A8GiL4XIhY1/PsTYQOSeO0ZE8hD7dK6VtEKaWMClDVCNvAMQLhuYMMf4N7EF44=@vger.kernel.org X-Gm-Message-State: AOJu0YyGio4kn0u1NWYatlmKKp6dzyMWaPc8AKRDR/6jxlKhXiDps1u/ tRUtENOeCz4FKfPPgHrPRIBdFdNrEd/RE40u+UZfFbb++2k8TUAJ X-Gm-Gg: ASbGncuxgE6EilcCVp8yC5i+dokzt0UeDWbmv9M0z20smNiMAN484zrYi0b++J/WyXx 4XkhkYW3Vq8spuUzyBBanzoseBNMiEc9ZaVZfFCoznYiVBv1XUYNNW1+MRxNNNBe3DLBTQbhHNq Dx7z69rzd9lbqRilKLEMw6egXd06sQlaUfI66DzOGYM/3dsnbpbbTAY8iHmK9f9m6bWjl85eWNY m5aIjjifAR69mH0WcLJ4NMGV216fPhJ+zQ8SVcKqqUqq0nVigfiX+wAdidzuNhymQG7kWLV5+zp rtqYi1CaqLAf1yzW11Lsu+4mPl/B3V6FxzQQgO/Lq7sM7CIZ3M9iilcv6iBtSG8= X-Google-Smtp-Source: AGHT+IEAPVafudDeKA7IZ+hp3781+KmAJJInbgDkuJoHFCm7mtISYKOW0uPGJOyF57LmU+R37Wj7OQ== X-Received: by 2002:a17:906:4796:b0:acb:b1be:4873 with SMTP id a640c23a62f3a-ad218e54d32mr1432739566b.2.1747085338068; Mon, 12 May 2025 14:28:58 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.28.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:28:57 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 04/19] dt-bindings: media: i2c: max96717: add support for MAX9295A Date: Tue, 13 May 2025 00:28:13 +0300 Message-ID: <20250512212832.3674722-5-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml index 5998e2518be9..ab46a5f0bd7e 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96717.yaml @@ -25,12 +25,17 @@ 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,max96717f + - enum: + - maxim,max9295a + - maxim,max96717f - items: - enum: - maxim,max96717 From patchwork Mon May 12 21:28:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889571 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 0398129ACC4; Mon, 12 May 2025 21:29:05 +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=1747085348; cv=none; b=iRHMKmmIz5Q6a0NFbju5q9JwzEVb7u6CU29v3t9Yzh/gAI6A4L/yiaY2oedAyR09QyQnja4iiknyPqTNvhCJ/Dnu40Cks+I0FUm4gEptM9WTAUYP71tUPz8PxVfMdbHwnrwIE7W5nH3bKb43zvEC53QZ+T779NVBqQL7/IhPEm4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085348; c=relaxed/simple; bh=WOZHxr1JPl5MhxAXvir0pT2I7EGKgta9DVSDIll+ckc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jHyG/qZNRWhUuttLAhzvGmRzATCCAmC+9ydaNsnzorKr7RKdVbi9z/zjtugT0bxYxzYIhNDLGSiIOf4lDSyZR9jdgacUJPsRGTfpPC7mTNNoQioTe2LSUDvrkYTmVJqeuGF9XKnmGJz1Mizr1kh7hbadhtIXZQ6DexioZfdLNLw= 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=mdpPK9/C; 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="mdpPK9/C" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-5efe8d9ebdfso9141710a12.3; Mon, 12 May 2025 14:29:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085344; x=1747690144; 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=bAz48FYkFVpYXUdYC+Su9R3w9TkApJmckQAewQrh2nQ=; b=mdpPK9/C2GY1itkarOpauV9cQ+fW6ac1D5z1YhduVudClwf/7btB49taPHat0eJ3ca +6Cly5MIrK5hCwJIgf6AVI+xYQIssclaU4+1bMU0mTZ9VeoQB52Mmhi3MpCrzVEAcPEo 3LjZW6Nl9m1p0CipzXonPXhGfPrGKQYfHxGM1sDr5Ri+XsHW2ERRnFdjm8BzymIqFFYf c+Gmb6EW/vuAej/mgBFmjkTf/ClWYwB1afglkjoM/22fPdJxsY23A59ly/I8CxUdENZz K8WnWjm6fUqXCN7Q9dlQh7dsBviL98Cj6Ty8Ydvp4HZZNs1UKBABZtOzumkBSypV7Dp/ 7p5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085344; x=1747690144; 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=bAz48FYkFVpYXUdYC+Su9R3w9TkApJmckQAewQrh2nQ=; b=ZRlujF3FigYTS3yMhnCndqB4VM7HSJCt6q5p4ZziNGKZqUksJfyu7GTCMtEQbRsjSr OG3H7WS4hNsVAMSIDZDck3SKVXWP9tBM34MMLfCEwsptxPR63VtalBXC0Rb2HXeFwiic JNTF4I10AeFzSz50t0E1zPfsJRNOM/aiwlMBqifIWqtaNZbAgh0h6dYDnQ+4zYB64vrV eavRhaw9yE/3BAmXqMZj69UEZEn3iKBo5iSAlK9E5MRElYzRkhJQkvIyyRzoCQfvlALi JYfcuYI6akKgOsphU0jVLTL77ylmncxnQ+Gg9TxTzRYGSmh7byVuFKWJTAy7X34nFwSz 1LSw== X-Forwarded-Encrypted: i=1; AJvYcCU7R/bhAcyWtTD0xaivW0eBtv/vnx3BOIPSnxZ3Cs/cx5DJrvBwmeTV8d63B9fCowxc9Ixm2XjqwUs/F9s=@vger.kernel.org, AJvYcCUoXUoV0WpU+ESSmvm/iYRN5uXLU/xr5WNi+yhkY/0ZjqgDnQ33lEp+nYuUtoZkTl8M5xug89AfwacEHjoa@vger.kernel.org, AJvYcCVPBeRcSn1tXHoH4p1UnnLJJLccayxjkpl4Zi6Oippqts0fc9Hrz16ZLA+sFq9+MQPzy+xu2MV5n5I2aw==@vger.kernel.org, AJvYcCVgTSEs32zRHzY4cN1ZKdZ6B0ibE61aC8hlaoaRzuUameXpxstIzHuqwVkVkta+58SJSFspR+pe5coY@vger.kernel.org X-Gm-Message-State: AOJu0YyuVAaju2xDKfb146POeOytueGkA5eug+ixVi+na1GVmTBWt9Tz iwspryJB5D8rv6x6oa3nukvNfuoCcFHPuUN2alCA88b1Aoq302vG X-Gm-Gg: ASbGncuRQR7jNLQAVkOLlFMu0gAQJGMqeH0Hun0GUcXMrV/Uc/Ugls0KT7itpUN9J+z ifMLPg71o9i4e2Bi0dSYcvnlLsg/eB/53Jre+rd6YB20S5+XZ0ZA2AaFtCQ89DxEjl9jJfqY3St +KLml4GBPsWuzDWB6BnsVJSEPcBtycJ+WOUj0r1cbeZzx5uI2L5oUtcHqbByit1pEz+eMChiJsA FySkrYzXHvYBZK5a7YoHCz1sV6yRnpDaRy7N75NRjIbpKzBHh/fzu86LFu7xAjqnnQ3Xx1qQN/J hoxC7isVMkYpEkn16ddupXRoROTgFiaBAQDFaPuIPlfV942YBWPCSacqlA5rzy7+U+mr3A5CFg= = X-Google-Smtp-Source: AGHT+IF3wDuYJ+g7Mgxi4N3TDw1mN1R3uL1whx6mbYJx3067WhAjCO2lvksHmND2LByrVN06I2Xi0Q== X-Received: by 2002:a17:907:1c91:b0:ad2:3eab:4998 with SMTP id a640c23a62f3a-ad23eab4c5cmr884411566b.32.1747085344105; Mon, 12 May 2025 14:29:04 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.29.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:29:03 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 06/19] dt-bindings: media: i2c: max96712: add myself as maintainer Date: Tue, 13 May 2025 00:28:15 +0300 Message-ID: <20250512212832.3674722-7-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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 Mon May 12 21:28:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889570 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.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 E7C9129B215; Mon, 12 May 2025 21:29:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085353; cv=none; b=JQOXpWxH/yZ4BTiVphuQiRy/0iTcLhebWEbYUSyVjKt6sYXfp3OmX/IiDqZ/0UghHCAW6kUcNanoNvgw2tOXZmM/0Xgr3H8y+0TiaINzTLe8aE3T90eSbhT6kvGee5njzbHX0SujSRDJCMG3xLny6kMAoRoEdTXrnREB8ackYus= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085353; c=relaxed/simple; bh=5+JO0vRYD+fNefwX+fbceUZ0uXE+29KVob5wwF7490I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=thZvLMixpfgP48vngyGY+Bunn3mm2TKxbb/EMH/vyDULBx5bbEIPqm1ZxfyFKRe71NricvDr4kqDNldkajLz0dxBykEKXjR6t393O9n9azBa4v0rL5qnEFxh0LeesK9Uglz/h/hx2kKI1uSc9nTL04CtcyKYoQwF0Ya2ur36q5k= 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=SxOeJ/XM; arc=none smtp.client-ip=209.85.208.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="SxOeJ/XM" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5fcac09313cso5655216a12.2; Mon, 12 May 2025 14:29:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085350; x=1747690150; 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=rwu29EMYbHZnZ2ingPRlXQV8GOHy8olFZlFGRco0m+E=; b=SxOeJ/XMd7B6IOBPic9BAoT1du2eLFe3NslZ8xYixXg4LE4AoFPbnpfvQG9JTiPXf7 7X4M2vcMf+zBT2/kzUn2qg/5gwEDxiDYmXT8wKq3gLLf+UY0CEOVp+dWJmF8vE/T8pcW wkL0JXituh2544M3V0Ulkx7ewxyfBJPYi7zKpa6rv9KPvAATprUAcwcxKhRvcuE29/PB ebbH0Ogs2DRBSQ8KOuacWDfUKcMTC9oyuqzJ2ZNCAdgwnaDfY43Zphkg3IBWzUCsSSt7 +GNmQUkUJM+xFHl08W/08vxg6Q7RS+6J9yguujKq2A8Kkgpn6xC44/KyhE3z484XqqdI FMAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085350; x=1747690150; 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=rwu29EMYbHZnZ2ingPRlXQV8GOHy8olFZlFGRco0m+E=; b=skZMfFqVnS4KmF1QKfZybZn49B8Omm/ZE2IxEICmWaH+n2rYVHcpDUOb6RtaoAe6T0 QZfKo1zTrOvvZBUIpXMV0sV/qLUfzEP2mxIMc2tUMdkHf87tI5dFjEwXRK+pVTg4yyPc e2GT8ciaGqDRTsfU4JSloep9Bpjta4SgqrgvI4CEkEkZVB4BErQNeN30DgTypu0p2Pid NUX6w2S9aCkyj1N9BVDXpUkM9TLkR+suIJs1t3vZ2pQBjG2GR9bjmmB2YnC8ZaOJm78k UYFxR1j8JUu+dtBUDdXu7eg9k9FkQeYueDzLPyT43aaMhZ5I7dGuweu8R23DDmcz/NM9 HrwQ== X-Forwarded-Encrypted: i=1; AJvYcCUK71/s1YvFX8fR/DqeCjAodNsULxLh7t2z0TO3BNr7pEoOUh2uXabFXZJMaDFkDTA0bZUvkKfYX0UV3qI=@vger.kernel.org, AJvYcCUnIYHRp8JOBFVaYUlmWJj+91AYnZ0+BsJfIHlL5iNgAAVN1BfIWrhH25Fod+aLM+FtI+YQDTjgxksa@vger.kernel.org, AJvYcCX32XXTyKecgq/xPaBRgjWecyAMQvwDxk0jWfsIo80AjOeSQPiphfmFmFIPTdllAW0jpMsRRveW7KWie68d@vger.kernel.org, AJvYcCXNyy2WDjvXT+LSkid3I3OOmimLszjGZo2Fyeqkkdy790iXcxfWzAzEyZAhFkDB7a6Rmc4ydLyl7SeRNA==@vger.kernel.org X-Gm-Message-State: AOJu0YxGtArkPQC3UqNTTJ2LPzrrSuCuZK32nlfKj7euLo0Te04kRH5o OpHOnZhv+hW13JPCSHi8J2a2amZ9TqWWizvjJSjaUi5C/1aBJ/DO X-Gm-Gg: ASbGnctNsun5wbaEN3KzZcE8x3fGbH6T60S2mhLjRKDqU0ya/AO2kA9KF1nsNEOKFc/ klWBjYk7xSf3VejMBZV6mq3jqZmjL3SRMZnJa1iiIqed/MuSV02OKcD4yGgchywwQMz1dFGrByW EViZS7lvbP9ZlKu29XOoDHKHmD/xPwctJUm1aWKRBIex/kebGr4OseJwmb4EP/Mi9KSgx/jFUqP AwyHb9m4+pkN2WZTc9W7dlUXWiiFWG+PbX1ElIMUEAN4IwAQb2rD+yawqaf8ND/9kAC0LO5N2ab 6Lpgxm8bw9bGC9hVhzX27mu1Ntm4ZDrKYW6M5eY/JDZq3X8mxWQ+BPxaJvaqyuY= X-Google-Smtp-Source: AGHT+IFh9UpWB73Gif9/RG0hEasXz8yA7Q30IuXmnkfuwvL7LMAjJqRJGSW/yg1R6sWeJzfxK/H2Rg== X-Received: by 2002:a17:907:1c17:b0:ad2:455e:6ec0 with SMTP id a640c23a62f3a-ad2455e72bdmr811477866b.20.1747085349950; Mon, 12 May 2025 14:29:09 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.29.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:29:09 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 08/19] dt-bindings: media: i2c: max96712: add support for I2C ATR Date: Tue, 13 May 2025 00:28:17 +0300 Message-ID: <20250512212832.3674722-9-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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 changes the address of the connected serializers. The MAX96712 and MAX96724 support changing the I2C address of the connected serializers. Document this capability. Signed-off-by: Cosmin Tanislav --- .../bindings/media/i2c/maxim,max96712.yaml | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml index f712d7cfc35f..758c0223977d 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml @@ -37,6 +37,30 @@ properties: enable-gpios: true + i2c-alias-pool: + maxItems: 4 + + i2c-atr: + type: object + additionalProperties: false + + properties: + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + 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 @@ -79,6 +103,13 @@ required: additionalProperties: false +allOf: + - $ref: /schemas/i2c/i2c-atr.yaml# + +dependentRequired: + i2c-atr: [i2c-alias-pool] + i2c-alias-pool: [i2c-atr] + examples: - | #include From patchwork Mon May 12 21:28:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889569 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (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 C357429B79F; Mon, 12 May 2025 21:29:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085360; cv=none; b=JWrvE7mSiEaWEM780mio9l3N39mZCrcpm6dQPBIZYGojhFVO4DSDzf3J9L0IywPfLyuWGAvR4j+GhgoHBTB2khzKVEAPpq6YvB5Mz0QdLadJA50s0fV9aTnVN3k5hvtTRbNpaOiAPcYd95AVnXluOwIxX5TR37XuicjtwX6Ntzw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085360; c=relaxed/simple; bh=zfg+RJSUYWmDFrYgKmNlgJ0fy4URxTXC0G5qvYz8Cek=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ly7LZFEhrJ6yyrHsIZpfsDEF/nguJH8OCTG7pdtxrPgrO4+QtsUZdV0rvX561SuqfVlFsHGGU3zArUdRPqN46gCpfLTRc4zQFZBrPXe99HkMtI8XipqayVm27NbAncVX5SIpkESPQ7EZE79BG3YYFXtdT5tEwLfmcllyOHWZuos= 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=gDzRysbx; arc=none smtp.client-ip=209.85.208.45 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="gDzRysbx" Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-5f7ec0e4978so1480612a12.1; Mon, 12 May 2025 14:29:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085356; x=1747690156; 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=+Az28+HlcLM0sL1av0MSi/fM4ZT2oYYKjFc0IsJNfl4=; b=gDzRysbxxGXlon18IN69U7WW3oAK6jaHU9UHwE4zgbWRDm/I5I9OIxhCp7RyqEakmH bxSjV0KUr5Nv1zTwbvlaGjYCW5f7L37G82t8ts+YTie9Fs6pJ6bCAZhT+J5pU7wAQT5F zjxIYtZv7cF4aFn7opRGelcalJTcKKRytWEb8CPDXudz2KEIh4JLLOfVyAJCG8hLy2wr 0bacewdBpmfpYurdKo8ahItG3lc9ucxsvfXOhQ34Y6Rh7mompj7beWTRx4ifpFVhE32i RX2P9BxmVjoUojV7mF9jFn6xp8Rs5xcmEKfHT+/V72cx2p9v+h0U6WK1dvdJGM9SmG/x i/VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085356; x=1747690156; 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=+Az28+HlcLM0sL1av0MSi/fM4ZT2oYYKjFc0IsJNfl4=; b=uELKjpVlitQ9WUhVPzEMrn89CfBfGc5Ru1zwadO/ezjnVP2sB76GAGskjnSen9nc12 rWfEu/buTfcLg3onYhE+98fZOQ5VM1LSSnnmX+zE/vQ6k8sgUTQ2Ci26c//mhkdIfTWw UlDPAn5ksgZgfPRRo/KlZOdZuEvNV3Fzly4yq4hllZuqK8ocPxorwp6IwZAq0WlY9f3B 7oHzrIOVUCysl5KG0RUbIpaDlbqXiOAoH3FBdi4otMmaUZZUNaYHQqsyfyAyk1PS8BKh nDXNXYVV/Xj1m3+1A7skset9+pLf1rXRe76f1lqwsz/jcgXqFwUAuwE48to35gc/QSvK 0/WA== X-Forwarded-Encrypted: i=1; AJvYcCV8QI4w0tcwaBehF9VL3tlv5EAf++Ea8XLQPRSzXDjfHP0gpk/i4d5vC/yL7qGqKITx4Z0P68Mw+jGuV1g=@vger.kernel.org, AJvYcCWn63l24ZrBDcvqZhkM5502iEuJVHNCPCTrQNq1dpxb5faFWijjZ+XOjjdtpgy+Q3Drb/+SddAnOIXHAg==@vger.kernel.org, AJvYcCXsdMAeWZhsi2vqZFX0XbEQjTwj3FUaQi3YyQ1Y0vc6PdSSwcJbfHj+77EfPUjhpwJg5tDn1j1VJfTJ@vger.kernel.org, AJvYcCXuDtGSLbbLas929UtQtBvegCWdCX+/NGQs3aor9vwgzMUOK54hUR00r3YKcCgQHKejrxeLXsV0p+xge80H@vger.kernel.org X-Gm-Message-State: AOJu0YzzxyYEMT+9e1/4Yv3ZG8gu4uVw0VWdu1spd52u1kWlZbIESRpk IvF8PqKfk0/MdJTalMsbViXoy1/khuJ/W+NAwlN1ARh4X0V8ru8d X-Gm-Gg: ASbGncsLH8YDk+A0Q+Lv/cHrHq2tLDhOP951XCeJGtHnRDNIFeVnDUpr+fuaJWKMDJJ uwxYPGpLQOvhLQRKAIZcWg8pjDPzVyITg30ZDRVdxCSn1obfLWkbLZHKpdACdNWRMR7qoRlwee6 VCw13+DqmMn3yk9FKBF/++9BWZmvLtuqWxBsj3OY9tF4F8hjIieNNIS0ICfMMhP5g47U5xYMe3V KdJQjTMhrpqvdn/P81PMmTrbpk3m3ECugxZep2IymP0SMKo4zSS4RzQXwc0P6UafvqAhcpoLRBe YuxvLcw+byL8fET4O1kJudBWdJFS9zkWButdAHqNfCiOvenfSZQ8dZyxDjHkMnY= X-Google-Smtp-Source: AGHT+IHxZimkUK3H+FypaTOTN70zLrjfhJRz1zTX6CpTIj/ujzs/pJwUigs4Bc+mQ5Ey6V2j7ED66A== X-Received: by 2002:a05:6402:40d6:b0:5fe:e999:e553 with SMTP id 4fb4d7f45d1cf-5fee999e5b8mr1117281a12.23.1747085355831; Mon, 12 May 2025 14:29:15 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.29.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:29:15 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 10/19] dt-bindings: media: i2c: max96712: deprecate enable-gpios Date: Tue, 13 May 2025 00:28:19 +0300 Message-ID: <20250512212832.3674722-11-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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 MAX96712 actually has a GPIO named PWDNB, which will put the chip in reset state when held low. Esentially, it works as an enable GPIO, but the naming is different. Deprecate the enable-gpios property, and add powerdown-gpios as the rest of the GMSL chips. Change the example to use powerdown-gpios. Signed-off-by: Cosmin Tanislav --- .../devicetree/bindings/media/i2c/maxim,max96712.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml index b345305acc4c..e38213209973 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml @@ -35,7 +35,13 @@ properties: description: I2C device address maxItems: 1 - enable-gpios: true + enable-gpios: + maxItems: 1 + deprecated: true + + powerdown-gpios: + maxItems: 1 + description: Specifier for the GPIO connected to the PWDNB pin. i2c-alias-pool: maxItems: 4 @@ -128,7 +134,7 @@ examples: gmsl0: gmsl-deserializer@49 { compatible = "maxim,max96712"; reg = <0x49>; - enable-gpios = <&pca9654_a 0 GPIO_ACTIVE_HIGH>; + powerdown-gpios = <&pca9654_a 0 GPIO_ACTIVE_LOW>; ports { #address-cells = <1>; From patchwork Mon May 12 21:28:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889568 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.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 5DE9929C33D; Mon, 12 May 2025 21:29:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085365; cv=none; b=ZTXjltuKD0wzt+d/Nk7tn8FXtDFQXKMLtrqoM2oNeV9hDacv5RUQoUrXsfisDnq3xk741uYNEn3y5BiXYUf8fBDpVzaeRcc4nCPANLJeNnIobT2dFImd1lJJj5MSsXJ6KoKcjLgrU6NTrDzcnnawrxyDcyQPtMnf31lj9uNt18M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085365; c=relaxed/simple; bh=aYTVAl9tpCjpSvYuv5h7flPjDKRvDIanTk0kRi3jRK4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WaHoNzyF0yTe4NRzC0EP4Re2O4Ar8/VmkLlmTXuayioOw/7gbAsF0awJUdRfhLr8L346ff3IgK2fOAutXM+JQL9aCC7XpSJtgrYVbnvt0QWr3kk7CMy55Gp8cEvq/rJxGhG1024QHM7EqhGL/2PP5XOoAHWcbKsYIURftzt9DAU= 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=ijkHU/ZO; arc=none smtp.client-ip=209.85.208.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="ijkHU/ZO" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-5f3f04b5dbcso7961626a12.1; Mon, 12 May 2025 14:29:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085362; x=1747690162; 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=szzST2rS84bZDMOoZWhP4HXje/44DCg2dZeaKbDsRF8=; b=ijkHU/ZOndqJYi7EjNAvuMqlNyuCQDrDBMTKDhc5vQMOR9TtoLAwLTBK2ZV9FTO+Bm cU1AXoaYC9PLhWBhwSm8BPq8ZxG7TGJNZP9EH+uOqfwjYXcJNUGLDwL4bsfvgakAUHCY cgHPQtYVXKndvZlT4hUX8N0C0fCQRbd7uDaeqLtmee2CZdzoxWk4v+LAHYEzvRwsCdcJ v1UMa/8A0nf9EIlmsbaislJNCnh3nckLIamTTpg+oe+2K+95XxlQ9Rbd5KHJ9ormIoY8 qRRLNiS4F01TrAP0qlidScckOOOkloGQk7xQQZl0kueXthvir9FSg6E9oTg/g/fY2kKY boyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085362; x=1747690162; 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=szzST2rS84bZDMOoZWhP4HXje/44DCg2dZeaKbDsRF8=; b=WrJeiZsc3XVcqJDK3sl+lD0BZV4IsRPINkscyCvjiHKPgVbOTm2qGk9TmJyIoZkm15 Lsl10I4Iau9VaYWQBs+8RqPSWGz5CaK3dKX+jRj8xft17vOT6Z/0HC6GA9ndNPiym0aj SMgSMN6HbjZ1PCCqTXop3sg4fmfWGwdnucNWVkatDkmWRDYDX6hyGp9P+aPKMmEA9Hdl C1bUisxTS0ExwIJEWWAjluNy/ynNOcoNsu9wzEfQnc0VQ2zotH03U0e1UzySjhU8Xq/D B4Io74yF8c1r1lHvhd8trJEvxaMx+FT53dr8XyUEEBb+N4mZN4Ha3NyZc6DwfYvZWl0U t9UA== X-Forwarded-Encrypted: i=1; AJvYcCUOS1OVGEVr2jHvhLoVvy/JDAsPO0NOchvy0nXrZrE1couk48L6pcPGTKza3zfNOjpGQ6ErUwjFFH5d/g==@vger.kernel.org, AJvYcCUo34Py33qWGzGahVwXmUbMEs6xqyuaKvOKGdOp6QjjAbVbSsT9xOtc0fyFWOThmidEQy29sLMG21a0Y1k=@vger.kernel.org, AJvYcCWHwrW5fikVyVtenIViW/GGildeS04gca2qLTIfDu0xX08zx4jctDmIbGiKqBPPBPzEwB5jn8P9zdqZ@vger.kernel.org, AJvYcCXKp3oyHgYDXzOqv7R16h9+TPEULvROzWiHgkFmAjU1DP8bEx92M1W1KQgacP3B3qNJ5Q0CnPWjAWPxJMcj@vger.kernel.org X-Gm-Message-State: AOJu0Yz56ZNPc7nrsS7+1nxlIo3KCENcEpr+tgLkatDbD+8qkzkO6S6A b+T0lXp6wdqkbzrL3pnDcVUmoqykGYuKPInsIrfKSSiCKgmkQYUk X-Gm-Gg: ASbGncuJX5HaEzY+l0Wu0Lk9FKb740yOeeZz/llmitLEbXMoOo0bhSSjPs0DUHhBgu2 wEO3UDqZgNZGCpvnur8W6/JWUYndxjy6eu2+aH6l5/zWk7A5FaheGDskD7Fcfm9cPQzv0NCO0BH If64cZxj2dxYgCA1VPZxEN3BDQtwWUsyyaU2ZuPZ6n4KEwZ0h2HIqbehF1AkBhOHfLrR5Dq8XII 5X9V/YnlAb3yytApC9uG0OEPkpSS7CbLON2xBKUqgjbtfeoSQR+2i37uUScDsFkhFs0f9Koidnp W48z0Hoh1a3XhCoAtgOpUIRzBeQKSIcwUDBR8q1G5rChGwXxrjcYAqq9vqJBwtk= X-Google-Smtp-Source: AGHT+IE7dmBvMO5cOOE3urg5qMwIbc7AnYZ1lfFEOfBXmNO7HW+iI3VfDlJjIZrjIU5AhUfuiiplGw== X-Received: by 2002:a17:907:1b05:b0:ac3:3e40:e183 with SMTP id a640c23a62f3a-ad218e48fe4mr1549312566b.3.1747085361713; Mon, 12 May 2025 14:29:21 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.29.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:29:21 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 12/19] dt-bindings: media: i2c: max96714: add myself as maintainer Date: Tue, 13 May 2025 00:28:21 +0300 Message-ID: <20250512212832.3674722-13-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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,max96714.yaml | 1 + MAINTAINERS | 1 + 2 files changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96714.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96714.yaml index 3ace50e11921..f53c72e5c572 100644 --- a/Documentation/devicetree/bindings/media/i2c/maxim,max96714.yaml +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96714.yaml @@ -8,6 +8,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# title: Maxim MAX96714 GMSL2 to CSI-2 Deserializer maintainers: + - Cosmin Tanislav - Julien Massot description: diff --git a/MAINTAINERS b/MAINTAINERS index abf3afc95fc9..84078626ed5a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14192,6 +14192,7 @@ F: drivers/staging/media/max96712/max96712.c MAX96714 GMSL2 DESERIALIZER DRIVER M: Julien Massot +M: Cosmin Tanislav L: linux-media@vger.kernel.org S: Maintained F: Documentation/devicetree/bindings/media/i2c/maxim,max96714.yaml From patchwork Mon May 12 21:28:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889567 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (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 96BD729CB5E; Mon, 12 May 2025 21:29:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085372; cv=none; b=LHqIvvV9wZWgiK/nEG5PK7vIqJRd6YumujoH/a++wLkc54aSwpGNgW4eDjchv07IFGu0fgeYWhHPThpuLr44uDR1GQf55ODex2VgI2T1cNb9AJ787ytgqAo57TM1Nmw+hoVYWcx6czcIytwOBB2TnlUqxb/89M6yuxoZDYS9WUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085372; c=relaxed/simple; bh=o5byaMlhHGlMSCIpoXrG+qxfLcbYJDS79tKWslRns5I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kARN7j6+mfMTHgNzF7EAx4KVpBqnl7+jljvGIQrjxWxprrB8Eex1BwHyyJV6d4//taYUuLjfRgZpsXPxMzTdWWM+03C36sQy0jdvpkRuGnVqOQunDAiqBYq/BbamYvqc1uUF69kYzSEjCGXgySMSkf7YjyYbFzmR1AzHoAA6n9Y= 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=lr2A+VUC; arc=none smtp.client-ip=209.85.218.53 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="lr2A+VUC" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-acae7e7587dso777002366b.2; Mon, 12 May 2025 14:29:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085368; x=1747690168; 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=yUjExWpqnqkhaHqTwS5d6A/KmbwfR5xvqQ+EyLJUmUg=; b=lr2A+VUCvkmR65WzalKEPeTk+xKAsxVIr1fVChouCZpAvCkMX+QlYo2Medf8G5cXts LdywmyOhwdxKH3AWfWF0pyG8GWU/gLPWZx3yTRLcWptUVqagBr6lw7eMyZIvRm0tq9+j eTAAuYNGKsvU2tf8CBP6CIqpM07CmPqf8ruvojBJwmSF8cGykty+xOkzqQofZmaLkPn9 7BDcDj3kQAJlEvOfRp89UzvCk1ts0BN0JMegYjWvnwWI+QBYeQlC7RF36ZctkqUvVHLz Lk8+VAgRas9SQDJ7jr3QBh3bHuZ3BRk7aPUG/N5UZ0MXDBefcey5PCwAcJs9ck5m08r9 R0Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085368; x=1747690168; 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=yUjExWpqnqkhaHqTwS5d6A/KmbwfR5xvqQ+EyLJUmUg=; b=taSwJ9lXwB6igfOy+Q4kbQWzXZR5i7VGLwHi3RnxrNE7JggK4bdyfb97+0eN5v3LYN 6aHRWI7zi1Jc6gaz3lW2hnf6OLwcktErtpnaHvWDTLnawJLWXICgDKadbxeJxY6o9+ob MvfJvvkHgPui+RoBqRwbLFGUOxrY/eE/PVwq1xVmtc6CZg2KnIlBVnrpSMdiTMiD7Yuc 8dxTs1nImUw0mRAWnOKxYC8eOwpjUScpjjox3QmuiyIt9toijWExDxO67BuHGf+j0yxn 5BUge7wlzGwF7u2buqID18DMsdKqbWAVGFcOo7laMtc2XD2lyfkULUaLXOkRGAO6V8qy wU6w== X-Forwarded-Encrypted: i=1; AJvYcCURsSg6SMPlzuJFFNQpa6mSX1VGPIkIdIPLsnTgYG/Ov7mOFMo5Nnem18SSlWDPGfQBJIQoN/7QJzSPdDAN@vger.kernel.org, AJvYcCUo5+w8kZHs7OXuDAFxw/7tMYP3VJDzqKykaGZJTi/si1IB1aBFC0ojHy9LjY4bA5W76kKhnIgPuWdA@vger.kernel.org, AJvYcCVZ60sIxSbHwXxf5T/t2uwrTdYqFKX0jq6CX/vqhMJuaqRaNuyS05gn33uXcEWqoOWMO5iweE5Rtcsfzg==@vger.kernel.org, AJvYcCWEbK8cq/kvARxEogLx6OcaHDt7chMl3LlNQr7z0rGOTo1tS+GuxvoKCPOtBqYnmPql2SRQf1OIDiq1IQM=@vger.kernel.org X-Gm-Message-State: AOJu0YyHgHI/jOmyJlx/EbakWSs1rSidkdi6swVWq+QbaAy5luOYtws2 mbFK7YzDm/uApiLaM3k5w7ohQMjvtY0ykpTNw2rr06Cj0ODUeF8c X-Gm-Gg: ASbGncu3YyfcWKcRjlHSIcf1ZdkbVgtRvsGzk/IenbhxfDImD2vaZ9UcXWMGXxSPrKH 5GLaRvo2XtvqbToaZuw9ACDaYNc+IP22BwRCkKEhET+NHy3qCqJrQoGdjYFtSORVMicHY4O4EtB zTW5VEdxv3mcu4rynmTi0ttpgOcqCwPIxQcBP0MNa645hHTT31CZbnOTsFu7PEN4tA9qgVwFm9f S+Ax5XBUY5nG4HbqI/q5ZEs2zeTjUc1gRpT9zriEVKI+oKP1NQHd93bHpf/NZ0mxO4UiFqT9L91 scMBMJGhxfsljOHvuFDiL5phWPB/P1vxZ0bj6CRNZOGVJwtOrgx5DjxZ/OMeEyo= X-Google-Smtp-Source: AGHT+IFWlFaVbHuY1kbGRQBtbtAtGG8JV9Z3i/CvcDuNM+94mHSkI0CB6R6fEpp/a99+Nh9qqkSRZg== X-Received: by 2002:a17:907:3f03:b0:ad2:1262:3019 with SMTP id a640c23a62f3a-ad218fa54a1mr1544992266b.21.1747085367590; Mon, 12 May 2025 14:29:27 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.29.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:29:27 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 14/19] dt-bindings: media: i2c: add MAX9296A, MAX96716A, MAX96792A Date: Tue, 13 May 2025 00:28:23 +0300 Message-ID: <20250512212832.3674722-15-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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 | 242 ++++++++++++++++++ MAINTAINERS | 6 + 2 files changed, 248 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..c0a8916353f6 --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/maxim,max9296a.yaml @@ -0,0 +1,242 @@ +# 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-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 + description: GMSL Input ports 0-1 + + '^port@[2-3]$': + $ref: /schemas/graph.yaml#/$defs/port-base + unevaluatedProperties: false + description: CSI-2 Output ports 0-1 + 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# + +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 84078626ed5a..af17147238cb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14221,6 +14221,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 Mon May 12 21:28:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889566 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 57F0D29E064; Mon, 12 May 2025 21:29:39 +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=1747085381; cv=none; b=mmsD7woxhQLlLNnxv7+mpXbR6XnpcYwwV0FN4D4Oz1AMgg9rAEMvbcmWvTJnMuoNbyxMyrbn4R8WZzkKMTMMOdBzmx+YoizreoevMQkarPphP5eZP0AAvTKnTiD4OqUII+yfd4vjSGzK/OnaTXyMy0J3JsHpBRP/ec99CyCk/Go= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085381; c=relaxed/simple; bh=PsaLQ5XoFD8eMHqArCsLcz7yX8ekdkunzslvj58D+to=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=YkEMZqK+N/aHDxiA1+5KVPhxYOASnKq4hHDcSj5ZYNneQ7gVu0EesBHDh1g6RKkhESCNkMcBI1HoqFENtiYSRBcgxmWFyQajtljKTPaUDrZDs+GgFZCje6DVg90R6c25RHcr+m0kIJvmK8vhqXlETKq+OXnKv1bpOE28QGBtEwI= 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=esVzKCMU; 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="esVzKCMU" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-ad2452e877aso340277066b.3; Mon, 12 May 2025 14:29:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085378; x=1747690178; 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=hGShyzJETmq9IMn4E9ry/F1B3MBKcWb83MINZrSYwR8=; b=esVzKCMUZ8wgQdfAK2Nn3x8aknVx+MVGjAr2kEPILzYmCFm4U/mQXKcSloWRvFayWN Ai64a83DROtvFjjyw6cVS79S4bLQ/bBX2EJxse6aVeJ2VzniSlnoMQ388HasAqSzjuw1 3bwDa9rGT6THGfE+H5XtFcsKRh1vFYEWoWEKI/XzZV9scgbVSpuwznw0sYNAoHGL8hGU 8r+p+6evuAVShKbmHWYqrTeUuSUHa5zLp2foRWgoSACEBtxe4ZDeN9SLqPLUv5cbpdB1 HDbCyyPkmnksmCe9Q/4DjYB+V0Gzv2HwTfeLSIxqueYVZSjLc+7ZLmhFbR1maZQ5ISnH +saA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085378; x=1747690178; 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=hGShyzJETmq9IMn4E9ry/F1B3MBKcWb83MINZrSYwR8=; b=YXB+I3SAYolg86z54NxKsHYEoWwf6i8WGxGya6cfZUIJHDjGJa3VbqbTahh5CZjVjZ O9sd7A85oTT5clg59ljEdqFq34or3+vArWh3cqOzjpHVc2knYNt4COVlz7/hIMZdRUUb lAny+xSUceA5F71wUlDZDNSW1rLbf7hSgBOrnQB5/K0R5UJh2/SU8grV8wRD01UiZ34l B5E8NYNqF1hb4WXYdZgMMMzPGujOs1jOhwDJxu3rzwn2S2C/B6NwXxtK7iCajomlg+gZ jSzT185c6k1yr/alb6YJIJvZronJc8Fd8Alu4XHL25dY4x2c5899VT6YB4VZG45ZSdy7 /OIQ== X-Forwarded-Encrypted: i=1; AJvYcCVT2YdN1BLWTd7tpG7DSrwDrBcJscS/o0UN+ISYAXAa+ltKFIoeVlaHNKtOjBzGSLxkGGO9tx57OPSMamE=@vger.kernel.org, AJvYcCXD2lXRI0/QXPOJGE1C+PkJcAPFrLFQbDRp8OMbhDz3DUPONDau8HHUexYK2gSK3WQDKeZrir/snPd4tZUK@vger.kernel.org, AJvYcCXSC9U0DxkyrC52GEGR8fTfSww05kpHqRNt6OozBYzOKQBkPeZ3twuZlmHecJOkjb3FgQeYBLPRC2gT@vger.kernel.org, AJvYcCXs+MejM7XxXQXzq/UBYsgRYX/Yqpx5kQGEhbmkDXX/raUPi9qP0MggkGkYr9v7KApz1zLTfvE3utV00w==@vger.kernel.org X-Gm-Message-State: AOJu0YzgHXfY84OmXXPNiP0WWh6S37LWEP8RS/h+J3uXvAlNwQPQJSWr N3ek5IZuY0AWXY1He62Q7Nj6Bfdimpm8//EPAxpUep+UVPxJBqm+kzWVkg== X-Gm-Gg: ASbGncsFI2SgRU/RYPQAqfGO5Z7v4EYz7xIAkGjQbTdcWvXMS5cW/59iHrt5jgqebVz DsbfHV8owN241t1S9fKufDdVTF/Ortw+74LqL5jdD4wsQTRZBPXsVJukarmCFdWZi9CuOsmwjaO 6nQT5dkGu7S7y5PQELuk++z99gJ/133SmD7+BQMzV0HL4pfKyEhRCXEHA4aNx2rMYPR/jK/wfJs iTKSs3ASsJpJXqvVvL9G9SVkfkQQpk6SH2PJ4H7QJH3PrdUqh7iMAhQqBRSa3vOBMquwmlvEXc0 HE0lZNradMVMzKu2KAR6ePSInLhg1Z0rfcvdmj15mj3BlpZB5/CBkAdKvLssDRcD/y3J3kkJYg= = X-Google-Smtp-Source: AGHT+IFsmfz+fLTF0W8yC64/kUpm53MNyFPldna4t+3fdVpinVwzO9S38y4Mg0nmo+C6Xzqs+70Cbw== X-Received: by 2002:a17:907:9444:b0:ad2:532e:abde with SMTP id a640c23a62f3a-ad2532eafffmr622596366b.1.1747085377493; Mon, 12 May 2025 14:29:37 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.29.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:29:37 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 17/19] staging: media: remove MAX96712 driver Date: Tue, 13 May 2025 00:28:26 +0300 Message-ID: <20250512212832.3674722-18-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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 c94bab91688f..df8f8fb22d39 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 Mon May 12 21:28:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889565 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.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 3E4D62BCF49; Mon, 12 May 2025 21:29:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085386; cv=none; b=VDMGIicIgp8Osu77J5NZuMsAQ3E+lIuT+E4qIuu/CnLFVNrw+XxmJdMJg31PilORpE56svPR7OQ0vRIObghL8x3ZqWEzZVS2raIUZTFKkbU5MNVwgpVazNBqQ5CJoobDMYqFmYI3MB5LqhH3KCjeA7Y2qmoo4zaZKF5HD6l+MOE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747085386; c=relaxed/simple; bh=6udR6RdiPtTO8zGpBlkWFSMtPL6Ypn8KnnF0zsbWptw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dOtkdGNFOLQIQQrogKt1mAbbeZNXw7xpmlc0epBiAov7id/w6wc8MVUuk2TbMreXx6+6JUCfe8L+UxYAIuHZkS+SWqTnv2QUbM6Gzp8oLC2mEyp8Avdd+Rng6uZYUgYj+7mdC+7Sooway6wr92y5ytisvsDfp/z43/CzNYXhQjM= 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=heVYRxd9; arc=none smtp.client-ip=209.85.208.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="heVYRxd9" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5fbeadf2275so8604882a12.2; Mon, 12 May 2025 14:29:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747085381; x=1747690181; 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=gA+vz2qxMj59IHDd4tJPDe1ia9lweSvojUFBU5ojTaw=; b=heVYRxd9V97oQGXTuxB6kl+d7VXIQCEPhPjV4J/ZJODbCAG4lC3YPt1vxhC4h1i31j Zb2d4a1/NxIau2pSe6pyhVDAO1LW+Tyq6WV32a1b4mLiXugSQTn/k0zCdL2Es0sMWTOG T1079OGZICeLFjRcJG0ml5GaZ2KjeutilrFF3JE7iYTN/pxsFkF8dAMD84Nqp9oChrHX T9eqjPIiPkSuS4wIF91AvNRchvdeAb+NerTCpVG0QKw1hD8gh/g/cMgQ0eK/vsmoVS7g F4Np2K2J7IvyeCATpIOaC6Rqmyb/QO7dToDgEeQpRJCX5Z1fCdc4ntC332jCV4Vb7M9V VItg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747085381; x=1747690181; 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=gA+vz2qxMj59IHDd4tJPDe1ia9lweSvojUFBU5ojTaw=; b=AeyED8Huy41fBFNgXfwgwv1da0/b+7fIM+0COVbaOBLIWxvF0K5laspbRJpFYH85uU Wc96hdYXaADxFN7hb1SxqPgliPDZEHLf+VTO+piMiuj59DEXIIS3jTS+d2lbwrBmfnQB 1p9uat4wCgLRIXN2ZrRAz4S66bukZMSWX4sWrAc2XEy+ynqLigzEl5tpnhdf4sTVb31K DfwJvDpsalkAPuQHqQKkOViZtCBbDCo5hyj6IqQxtf+BKekytcrSsVlH13U0a9/gBkL/ 50/+sFbJuEvZzXmI15ZGGJWfw49Bnb+8Wc6ACc4C53/0nyiPGS+LUHiGkhegH5pIDr+E Aj9Q== X-Forwarded-Encrypted: i=1; AJvYcCVIsCL7nGdZvahS/1E1pi6zy2C0iUZSfnh992urGOpPaj5AM8EBgywdQocaLnXj+plamdTCa0m4Or96nvsT@vger.kernel.org, AJvYcCWdO/ulLrce9TBb29GO8msqf3prDX3s5ai7XMk5JcUvulxg3At7O5eT7D75Ubf0qeFinsU4IsRHIw2KEt4=@vger.kernel.org, AJvYcCXchuhhKZxVGQ8oo3MkmYgGGRXJaJMLYkEu+/d0en/dFfm9e9EGwozaa3QYZM086ACoajdPGJmuK9it@vger.kernel.org, AJvYcCXyAjAvIhofxO/awLEa6LA/dCeZco9DCnpQ3Qh5kasNBWZWWA92TcaLJYXEFpkeaB1AgktaWXAx6OuCzw==@vger.kernel.org X-Gm-Message-State: AOJu0YzHUGdR9sdgiQwIcqPN2T2e7lKB/40urgnAJ3HLEWLKAvxCtmO0 9sANnzfR5mken88YCyeBlBjbJB9Hgb5cP28jypcLBE14P8d4W159 X-Gm-Gg: ASbGncv7sw6E8lmHbFPIl5qRxS99OXSAleVl0QMfar0oTR3lyQsItsMAfotr/02Z6/T c4nEcxPEANCs0tTjchpjp3KaC/6xD9v4FeiQXLfljxyoUYM6clTGegg9zkZaBlQE+lH0ZxI/NCF 8MFRYGN7neik2ikkPlZ7PyeWk3IRNKqFr8YhLe+yir4XiO+19tNnn/SuL/wAzXrgwzspoGus7yL MQ9zehFpWksB8w4iYD5QDzoW8AU/Fap+qferAnmjIlCXtqbHfLvuIvsQgUXWb1xFBeH+9fwieqM NCnVV1hU4nh686dBggc9tD78Ad+qMQmczYzh9ED40HtfVcppW0G5x4jOoMCsVAE= X-Google-Smtp-Source: AGHT+IHbaLOrDU2TIX4HSJUM+e/EuuF/UjxJQckbd12EGJU1kGaOXp3X2xca/YQlIp1GMjqS/jxKZg== X-Received: by 2002:a17:906:6a09:b0:ad2:4a32:f173 with SMTP id a640c23a62f3a-ad24a32f30emr748727866b.14.1747085381239; Mon, 12 May 2025 14:29:41 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad23a5552a6sm472861466b.30.2025.05.12.14.29.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 14:29:40 -0700 (PDT) From: Cosmin Tanislav To: Cc: 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 , Vignesh Raghavendra , =?utf-8?q?N=C3=ADcolas_F_=2E_R_=2E_A?= =?utf-8?q?_=2E_Prado?= , Taniya Das , Liu Ying , Ross Burton , Elinor Montmasson , Eric Biggers , Hans Verkuil , Sakari Ailus , AngeloGioacchino Del Regno , Zhi Mao , Dongcheng Yan , Benjamin Mugnier , Kieran Bingham , Tommaso Merciai , Dan Carpenter , Ricardo Ribalda , 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: [PATCH v3 18/19] media: i2c: remove MAX96717 driver Date: Tue, 13 May 2025 00:28:27 +0300 Message-ID: <20250512212832.3674722-19-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250512212832.3674722-1-demonsingur@gmail.com> References: <20250512212832.3674722-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 df8f8fb22d39..3a34acbfd4a5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14204,7 +14204,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");