From nobody Sat Jun 13 02:04:57 2026 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.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 E1C093FAE04 for ; Mon, 11 May 2026 13:57:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507852; cv=none; b=OuWK87+Vm0wJJ9yD7YZ6nhhPxC9Gk7+njBh+FEI5eAylvU6/0U7BKk5upwJ34eXayMDkk0LRTgKsRuZPDChX3orewENWKyqJpuOWWwMf3vPWpgvgM1tgEeHgrrMfivPd54Zn6aprPesQsIJzQjspaOQOpAZseJDvK0MPzmNBnTM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507852; c=relaxed/simple; bh=ibm/ZDHMWfIYB/a+JVogHL3zgQTqT1cxj2txge0qJK4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U8K/ogJPzEnIN9/XhQMrIvZ4tp4x3HlGWXKZWinOqbIz0cJROsYyoCkFqeahTEZ8m2GgoDry2Ea1eh1WeikHArqf0aKUZBXVqwVfWts5AYBHnoXwbdWOwhGw30k7TEbs6mYQOBzNStLahxo8T78dNMDuUNzLFsp7GgGw7ZAujZw= 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=Oqztsxt0; arc=none smtp.client-ip=209.85.208.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="Oqztsxt0" Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-6746d0b2b4aso6544801a12.3 for ; Mon, 11 May 2026 06:57:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778507844; x=1779112644; 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=+yZ2RV9klSfc79KrOIT+9nKykbDSPRLRaZkXlnlwwJM=; b=Oqztsxt08VSED0yBq9y7gCvbNeIQsWzh6qCP6bEWpOdaH42iP9LOw/D6fGAQi8O7pP 8+T/5rP9lXkGXz2utuy3yO0zDbfmXhzJypfb6BgwM6PSQX0GCpNEM14v5BFNjmOov3Gn vxaPdFefs6gvL0p3aCWOocLQqQo5BTYQrDwktwEq8VWzDpzN8toh2+prb+Ng2NNrP0xz XhX00H0+39dIbVI/dH+NyThiFKEqNozZZR3B+4A0iu+cG+u6cxhhiHfjz21bwZ3E+ghv 4ZmQ7dgxb+4CkXeqhSUYaY50vct0v3vg3gyhxjPtxPBDVISq/a2x1EKKCpekXefD/C50 KmJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778507844; x=1779112644; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+yZ2RV9klSfc79KrOIT+9nKykbDSPRLRaZkXlnlwwJM=; b=ooCAzqC0vaVqCIhop2XoCPzDJbSrKhfFP8y60LiArffdZTMTY/PP2wui+VveLvk+4+ NkI3O+prJIdiCDu7DUE7VIuJGj6BS4yYSYnl3KqwYQLylR92tbLvLlpqIyPuatdjk4FE C6F+L8fisjPf2+Anxz8utSF4hfSTerFWKAeoKUfOaSRl1bwoDcuBNAxFgQmYNK7YLsBV 9PSoIwe22JYpEda/4HUSeTykOXwit36EsKylu3la9L4q8iact0V+3G7CqTayN1uYdlL6 gIEEldEE9zBbxXZ0VB1RkUOtzUmom+EHesJtfvdWKiNtpLmjJfShS+58XArc/1m6h5by SEyQ== X-Forwarded-Encrypted: i=1; AFNElJ+Y23Egboq36KkWrFRhoTbabvB0jgKqEQWIoGVhGAh9CFJxA1fZk5XV/398XAYyAYWAzzYY8fziYm2gkIk=@vger.kernel.org X-Gm-Message-State: AOJu0YwgC8oo8PO9hp/SfWjUql/t03xW6S0RYUf1kH6/BkKEbYaCPE6Z 9N+Em/d3aMeD7BuF0hF+u71FgenDeroj/IflRAk0LQcPoxTEWxu+pLX4 X-Gm-Gg: Acq92OG18BwT8yQWMbfCuVP03l2ZZ14rzWDIhNw/t7ewgkyW2LV7WP03cN/evefwnCU e5owum9nLIbZtmo3DHOaiezU8cpOV+OpDy9iNqLB2ilf1QG+T8XFA1daZEXqRJegWQ+7NEAWjD8 oUWegjM5/h19sz5bgdBObz4z2XRtTp9XAin3reZ0tPPpySjZFo0tpFAIOG8EPOSuqzvEtnMeBwd 3iVoDoOBHk/IsxlyazURnGtvYdYXbEIe7O0MxWN8n2C/DKWnnisjkNT7uE45jyamhclYp838I0X NYDFIOSpCejYST1zXfVdXKuq3H4od+kVbO7/1sOql4/IOrJml6aqFE/7fGQodlxbEqrgFo7ua5n o9AyY09nspDcMHCJEiDJ7L8M6ffuBvMSlm404a2yXiLVJU0H6x0ICbXn53oZUONIVvhT1wsr7qI FKfcmhq0gi0LIN X-Received: by 2002:a05:6402:5297:b0:67e:2498:dc7e with SMTP id 4fb4d7f45d1cf-67e2498ddc9mr9228829a12.11.1778507844261; Mon, 11 May 2026 06:57:24 -0700 (PDT) Received: from xeon ([188.163.112.56]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-67ef0b3b904sm3685357a12.1.2026.05.11.06.57.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 06:57:23 -0700 (PDT) From: Svyatoslav Ryhel To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Neil Armstrong , Thierry Reding , Jonathan Hunter , Greg Kroah-Hartman , Peter Chen , Svyatoslav Ryhel Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org Subject: [PATCH v1 1/6] dt-bindings: usb: ci-hdrc-usb2: Document nvidia,external-control property Date: Mon, 11 May 2026 16:56:56 +0300 Message-ID: <20260511135703.62470-2-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260511135703.62470-1-clamor95@gmail.com> References: <20260511135703.62470-1-clamor95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Document the nvidia,external-control property required, for example, for USB lines in HSIC mode connected to a modem, where the modem requires precise control over the USB bus to properly enumerate all its stages and intermediate devices. Signed-off-by: Svyatoslav Ryhel --- Documentation/devicetree/bindings/usb/ci-hdrc-usb2.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/usb/ci-hdrc-usb2.yaml b/Docu= mentation/devicetree/bindings/usb/ci-hdrc-usb2.yaml index 691d6cf02c27..a13c1ef49a57 100644 --- a/Documentation/devicetree/bindings/usb/ci-hdrc-usb2.yaml +++ b/Documentation/devicetree/bindings/usb/ci-hdrc-usb2.yaml @@ -75,6 +75,13 @@ properties: type: boolean deprecated: true =20 + nvidia,external-control: + description: + Indicates that the controller is configured externally and that the = host + should not attempt to touch it. Usually used by a modem which requir= es + precise bus configuration. + type: boolean + ulpi: type: object additionalProperties: false --=20 2.51.0 From nobody Sat Jun 13 02:04:57 2026 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 751BA3FA5F8 for ; Mon, 11 May 2026 13:57:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507855; cv=none; b=CYFJMjmJTqRvNPrL/Ox5i74AKKP0VSH+EQMXAAP2LN6YPQ5IKhFKl6ecG8LpYOblvtcOjh4ShXzF/3NemeLlPIOkoF/a6wbfAzZ2yMQ7G24IB4/tzKbUD4xdtwD8OnQgCVhSc9d0ceLL+TNMlwgn8FlpWuyAjkuCzNs8+YOd4bM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507855; c=relaxed/simple; bh=E1H1+nd/RwnK9LuWJGKbmqe8Wgfvhjt2SMIIonrseao=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bGU3lqNwXmBDsMT3KqmJQtE7hAV8vQ6Jvp/d2X1Zvn4CXgELVj9AAHEpFL4K+beHLEVj+J292JiGEd8WAx5UrTuVfOPt53AqOXVf7C/3qbAw+iimTyGOptK/qYKoa4jtgrYsE0SZC/2nN6u6g8ezCDXMlT8aeH6VFD8m90FTDlE= 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=EZxQ5kuP; arc=none smtp.client-ip=209.85.218.47 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="EZxQ5kuP" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-bd124546379so94046266b.3 for ; Mon, 11 May 2026 06:57:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778507847; x=1779112647; 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=BY8lqIlaX558zAJe1pNahwarYdn7KKAgYehteYdm61E=; b=EZxQ5kuPJDd822ELEn5XyU1VzeTw1w+Mjno0plhe6QQMrVl4pJkiu9MJGF7kX8Xo4l gvM7IsTcSy+siGPSHFUR3253RsEOXHUFH+obV8+28ygPaOsSLAnxoqts3fG168PMYZCS ALmmejwb4IxfNAMVXGTTK0UHND39pxpuqwy67e6qFOMIwDEhmvVYmI3gzBOXbL+okxDE SvHv1ML8ayH1IPCCpJZuTAzu2+FS2xu7RQ0KsGgAbHcX9vDjEesCGTtqIQRzhN5dXlEI 6apD2MAkvfWbtQlWVHMWPJ9SNcVinNv0amZ6p8f0RGdzZaLGPT1Jq+6mmhQ1S1ayOtVZ 2VjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778507847; x=1779112647; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BY8lqIlaX558zAJe1pNahwarYdn7KKAgYehteYdm61E=; b=pgSRsGhk/KJhgLGgRPu06hYii4BFBfBCNSaosxEWpPmKSKUx4AO1oDSGDHP/YM+vLI aGrqBthT56c7atMijiYeKpG4xD1UC4YxINokfc1+uXkcPzSMETDia25I+RGRtsL1srpI p1xFPQO2nE+i4EZ94+dBOmRgJ/rWyZbCMIyAXbavC7C/dcrp2FvOcYxnI6mTSnwiV0z/ hznDu0Id1zZf2Y40qHVbkHO2EZ2T0hVuwW+Ef474RC+gWQd9F+M1IGRMmjj9466S9qhc 47/SYOqWz+4+HNBkXOSmr7eWdYK9Odq0dENcHEiqmPXi59Y1sj2GVzL12j3aVgnNgK6Q 20uA== X-Forwarded-Encrypted: i=1; AFNElJ+AZXn3p+TRYL7+7F7xleeKAzdeYEBFztXduk73nes9fyooQjloaoJYRGUxOkEv82iVr0XOSdjigEGuQn4=@vger.kernel.org X-Gm-Message-State: AOJu0YxRU43KGt2EgSf7U710tIfYtPsyvvBPN7kuyJpLflDUgpHSio04 mA51Y+JMgoNxILg4TNVARuiEWpNaxnbM2YphkYrk+JT5zEzrS6KwkdP1 X-Gm-Gg: Acq92OGLBioIzei1hOkzmLjc1oVrqdsUXSH3O63K3i3xPg4xLSYSt9EG9vPnw9mnClF LnMeDev88aBWwHQA0D6bLbEDWfvc6iH4i0aPcfKsL2C30uvXkcxyqJZrTD3BPghzRYoECTlJmLO A6m6rRbmjYp437Ts065uR1MwqoMxQVJdAiApaW9XFj2KRsO1dsCOceORrCb1r6eZbJFLkUWg229 yCLiISLwpdHFxXiUhLAo+rycFkJj7Bk2h9Eo82GRqaaQqU4mDCTlAO+FINPKvg2HNrxegLbIhk7 83OPI1LaW16seZ0/GMe1dGk0qAcOCkgclJUJY2GioM0bTUYH0R2V6yWyFb0OWgn2X2THNdbR3ZB SomqZ/Urb4i1EgSk03oZM3SPtPFdntSrU01VS4kjPnzXGKMzPBt63g9cxA0AKvtzEGjwdqlYbo7 fh6wJYe7wmEJeP X-Received: by 2002:a17:907:fdcb:b0:b9d:3e5e:fd32 with SMTP id a640c23a62f3a-bc56a6498c3mr1324021866b.8.1778507846254; Mon, 11 May 2026 06:57:26 -0700 (PDT) Received: from xeon ([188.163.112.56]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-67ef0b3b904sm3685357a12.1.2026.05.11.06.57.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 06:57:25 -0700 (PDT) From: Svyatoslav Ryhel To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Neil Armstrong , Thierry Reding , Jonathan Hunter , Greg Kroah-Hartman , Peter Chen , Svyatoslav Ryhel Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org Subject: [PATCH v1 2/6] usb: chipidea: tegra: Avoid controller/PHY init if bus is externally controlled Date: Mon, 11 May 2026 16:56:57 +0300 Message-ID: <20260511135703.62470-3-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260511135703.62470-1-clamor95@gmail.com> References: <20260511135703.62470-1-clamor95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If the USB controller and PHY are externally controlled, then the registration of the controller and the PHY initialization should be skipped, since these configurations must be done by the device that controls the bus to work correctly. Signed-off-by: Svyatoslav Ryhel --- drivers/usb/chipidea/ci_hdrc_tegra.c | 36 +++++++++++++++++----------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/drivers/usb/chipidea/ci_hdrc_tegra.c b/drivers/usb/chipidea/ci= _hdrc_tegra.c index 372788f0f970..593390a818d1 100644 --- a/drivers/usb/chipidea/ci_hdrc_tegra.c +++ b/drivers/usb/chipidea/ci_hdrc_tegra.c @@ -32,6 +32,7 @@ struct tegra_usb { struct clk *clk; =20 bool needs_double_reset; + bool externally_controlled; }; =20 struct tegra_usb_soc_info { @@ -312,20 +313,25 @@ static int tegra_usb_probe(struct platform_device *pd= ev) if (device_property_present(&pdev->dev, "nvidia,needs-double-reset")) usb->needs_double_reset =3D true; =20 + if (device_property_present(&pdev->dev, "nvidia,external-control")) + usb->externally_controlled =3D true; + err =3D tegra_usb_reset_controller(&pdev->dev); if (err) { dev_err_probe(&pdev->dev, err, "failed to reset controller"); goto fail_power_off; } =20 - /* - * USB controller registers shouldn't be touched before PHY is - * initialized, otherwise CPU will hang because clocks are gated. - * PHY driver controls gating of internal USB clocks on Tegra. - */ - err =3D usb_phy_init(usb->phy); - if (err) - goto fail_power_off; + if (!usb->externally_controlled) { + /* + * USB controller registers shouldn't be touched before PHY is + * initialized, otherwise CPU will hang because clocks are gated. + * PHY driver controls gating of internal USB clocks on Tegra. + */ + err =3D usb_phy_init(usb->phy); + if (err) + goto fail_power_off; + } =20 /* setup and register ChipIdea HDRC device */ usb->soc =3D soc; @@ -342,12 +348,14 @@ static int tegra_usb_probe(struct platform_device *pd= ev) if (of_usb_get_phy_mode(pdev->dev.of_node) =3D=3D USBPHY_INTERFACE_MODE_U= LPI) usb->data.flags &=3D ~CI_HDRC_SUPPORTS_RUNTIME_PM; =20 - usb->dev =3D ci_hdrc_add_device(&pdev->dev, pdev->resource, - pdev->num_resources, &usb->data); - if (IS_ERR(usb->dev)) { - err =3D dev_err_probe(&pdev->dev, PTR_ERR(usb->dev), - "failed to add HDRC device"); - goto phy_shutdown; + if (!usb->externally_controlled) { + usb->dev =3D ci_hdrc_add_device(&pdev->dev, pdev->resource, + pdev->num_resources, &usb->data); + if (IS_ERR(usb->dev)) { + err =3D dev_err_probe(&pdev->dev, PTR_ERR(usb->dev), + "failed to add HDRC device"); + goto phy_shutdown; + } } =20 return 0; --=20 2.51.0 From nobody Sat Jun 13 02:04:57 2026 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.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 0EED93FA5FC for ; Mon, 11 May 2026 13:57:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507856; cv=none; b=T+5YvwxPtTqn2njRwD1MjfkpfVAdksc75zuXuO347EOo9NuykQscgVpvBpi/nD0/MYEC3UABy3ZcAOUOgmVwI/ugnxdGXOUbT/wtSrcsTxUALj81FJeWQYqFZWrgvbhw9gjxCpWqaKs5F8lsOY/vHMREompqLJ1lwrlos/siI7o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507856; c=relaxed/simple; bh=UGnwnynsk6MCY6H8VDntAGqr8yOAgR5+RJ5mxZdLHZM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tmlNzCAoRR0cBWFCm7WQDYpLzGHdClW3YRXTKCUGSVEDEJurlsItL9yTZmcNZscxudfoBOgoCf3PomMEkW03KsgnFc9l4a5yx2hXD+WLOBWRaIs4pziUi6aFlUOLndV+Fb8Vs1SY1UEj+FVqW9kV0ur5NkjXB012N9nVzfgQfMo= 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=R9/+y0hs; arc=none smtp.client-ip=209.85.208.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="R9/+y0hs" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-678a16429c6so6652943a12.1 for ; Mon, 11 May 2026 06:57:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778507849; x=1779112649; 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=WdX1Hn1whpHFxpnqtCP4cLwf/y3NxkK7GqmkakB9h2s=; b=R9/+y0hsEtFzQUpXgRzvAmmYxgz7ExkZm8O+9rT+NpyAQ+/o3KRP0XrYpX2R1BaRiD dCsIcCGAD2D5hCQtE8KM9A/7Gt+9IGEXFkHeOUdWfAEYp/pQR4+rSDaaE4FUMuFxQ+8h J600jYbyV3MjK/A5N53AEdRGi78N+3Z/KdK05SqBtl0gEnxxeVEQb7vX1y+9qI8w705L j+333xmAqAkVuIziNy4BOtLC+ykB50F9jwqVWcuxUa6Ua/HUBKL4yygjUJPUekW5esJS 3haLAUCso3T0lB21StROK8z7cdSHI1Fd+lGnLQXbuA3RuBXWggRxuaSz3K7cCz7V5lFh SoxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778507849; x=1779112649; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=WdX1Hn1whpHFxpnqtCP4cLwf/y3NxkK7GqmkakB9h2s=; b=Ojd38Sz3Nb5liOHGO1C0q961hUCPLEN8G1hSLr07doQuonMWSUpC14vicGFwyayg1K zrWCRu2fsWndlir1bUVW4Q2+OzT2sJiJ8BF2QnE/w3lpWGZW5UvjQefJe19SRonrZkju 4GCae4ADkLVOnULodBAmyO3dpMzNSpaZSHWs8NIaxhlnDbEkoqNB1anWAFLs6S/nuotA U7PV+N7iFwQgbNpoW4AxiMsU7JC/BUteJKfD2X818jtjRFse+PREbc2gTu1V99kBoHF1 CEz0MFP6rC13uK9gMEcASxtUjTTyWGf5VY0Od8istrPjtSr53z1BUEGRnp4qLOXPWg+9 /zuA== X-Forwarded-Encrypted: i=1; AFNElJ+223zY+tcCyJCPOQDfasq3TQ/AW/KiJXVxF0VxDZijX7lr27JjpMNElOqnPUtjtidur/E4jxgtQ2UkoDc=@vger.kernel.org X-Gm-Message-State: AOJu0YxlpVROPNUBrgHJeXAUFWnUbCzMZ0CJWXVTPZ0T8unwb5hz8Svm m6UTR2inQXaE712d+SYKih7Wr3Bx3iT2D7D2oyzRpZTJGpuTBaqXKQnj X-Gm-Gg: Acq92OEN6NtmTrfJMDNkAfNeXMmbVrkP13CUNX2UatXE/hyt0l5ZomrqJvrQRrwQxeY RY3qe3civSWQMcXWYwTI+X1d98e4LNHoTEGLwdW+FvKpxYqk8wxwgRiFu5ENkAQ8C05c/fpy2Xf xIYtapNZm3Q6JQ0QP0zJDp4YTj7zZca1rwhSnRbg+MNAhIb7Dy8Uo5aILCuOGxvNaJcfVXy++b5 /8OdxWsXZwTpxq1Rjh/bY2SxgIOF9/+bl8GJrcWyBXHIBICvRPrjXyio76rlBXk3a/kvjkQj4Rm GPmPOGdIGkSjZ04/uKD25Du2GbYDLhW31ue/SUz2P1eQ3XTZwBAISWsRekF06tkiytdhaWq6U8F cHV3xWhzymn04Uxqwop7k3z/+P14JT8GihxeCV/drBK7U5qXX2CQy5sS6zGbVv8psRX49sG7eNb QzesziKXQHZIniUXTPxAyR19k= X-Received: by 2002:a05:6402:4506:b0:670:d548:62a1 with SMTP id 4fb4d7f45d1cf-67e0ddef87amr8352750a12.3.1778507849153; Mon, 11 May 2026 06:57:29 -0700 (PDT) Received: from xeon ([188.163.112.56]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-67ef0b3b904sm3685357a12.1.2026.05.11.06.57.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 06:57:27 -0700 (PDT) From: Svyatoslav Ryhel To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Neil Armstrong , Thierry Reding , Jonathan Hunter , Greg Kroah-Hartman , Peter Chen , Svyatoslav Ryhel Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org Subject: [PATCH v1 3/6] dt-bindings: net: Document Infineon/Intel XMM6260 modem Date: Mon, 11 May 2026 16:56:58 +0300 Message-ID: <20260511135703.62470-4-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260511135703.62470-1-clamor95@gmail.com> References: <20260511135703.62470-1-clamor95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Describe the Infineon/Intel XMM6260, a 3G-focused, slim modem platform designed for smartphones, data cards, and Machine-to-Machine (M2M) applications. Signed-off-by: Svyatoslav Ryhel Reviewed-by: Krzysztof Kozlowski --- .../bindings/net/infineon,xmm6260.yaml | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/infineon,xmm6260.= yaml diff --git a/Documentation/devicetree/bindings/net/infineon,xmm6260.yaml b/= Documentation/devicetree/bindings/net/infineon,xmm6260.yaml new file mode 100644 index 000000000000..d34d7125274f --- /dev/null +++ b/Documentation/devicetree/bindings/net/infineon,xmm6260.yaml @@ -0,0 +1,72 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/infineon,xmm6260.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Infineon/Intel XMM6260 embedded USB modem + +description: + The Infineon/Intel XMM6260 is a 3G-focused, slim modem platform designed + for smartphones, data cards, and Machine-to-Machine (M2M) applications. + The modem is usually connected via the application processor's USB line + in HSIC mode; however, to work properly, the modem must control this line + +maintainers: + - Svyatoslav Ryhel + +properties: + compatible: + const: infineon,xmm6260 + + interrupts: + maxItems: 1 + + enable-gpios: + description: GPIO connected to the ON1 pin + maxItems: 1 + + reset-gpios: + description: GPIO connected to the RESET_PWRDWN_N pin + maxItems: 1 + + ap-wake-gpios: + description: GPIO connected to the EINT3 pin + maxItems: 1 + + cp-wake-gpios: + description: GPIO connected to the EINT2 pin + maxItems: 1 + + phys: + maxItems: 1 + + vbat-supply: + description: Supply connected to the VBAT lines. + +required: + - compatible + - interrupts + +additionalProperties: false + +examples: + - | + #include + #include + + modem { + compatible =3D "infineon,xmm6260"; + + interrupt-parent =3D <&gpio>; + interrupts =3D <168 IRQ_TYPE_EDGE_BOTH>; + + enable-gpios =3D <&gpio 112 GPIO_ACTIVE_HIGH>; + reset-gpios =3D <&gpio 169 GPIO_ACTIVE_LOW>; + + cp-wake-gpios =3D <&gpio 151 GPIO_ACTIVE_HIGH>; + ap-wake-gpios =3D <&gpio 168 GPIO_ACTIVE_HIGH>; + + phys =3D <&xmm6260_phy>; + vbat-supply =3D <&vdd_3v3_vbat>; + }; --=20 2.51.0 From nobody Sat Jun 13 02:04:57 2026 Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) (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 AD4AC3FBEBD for ; Mon, 11 May 2026 13:57:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507866; cv=none; b=I4bvfr0zlYAx6D5IX33wQdT16LY+odcl3EAGLei7TVGdarqrD2XdVyH5ee264WTEk0MNVcpyiY8CzSZlP6N6u9AkzEPKnyGXHKA/s6M2OOq/cJHncLHk8nD9rytRC1RLZiAFCgHSq+1GRDJkFRL0pEUx1wU0h3k9CxbkfKwoeGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507866; c=relaxed/simple; bh=DQcI0kwaHzVx7Qs6ED7T70odRLTczs+nCkruvRLsQN0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c6SPhzPeH2516H2iqhPJzWAoBKHmDboA6WP8HuHGgT7myrK3ZWLIwyc81VW0qyylqRGFM5WfBKskeYomaVlht7vGNlg99+26Xczq9op3gmK8wjZMtWH4/9ZNajmok3QF/OAqJjuXYPffqFGeSLGQJCyy/V0A8mptYpeiVTDCAJg= 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=MzkNX5Qe; arc=none smtp.client-ip=209.85.208.46 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="MzkNX5Qe" Received: by mail-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-6804e24803bso1271142a12.1 for ; Mon, 11 May 2026 06:57:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778507852; x=1779112652; 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=rESskTJRprzdwEOE8g7SuHaYWt4FLnX54fziSgA+Tro=; b=MzkNX5QeTKOBfizYW6LUoupYsvm+tm+79R2q9zn/BWeZGhieb33g4NSTpKXH6zl6MY qezJp57iRz9YJtYwQ96WdoSp/1xGLk3/3HgEBkIPWf0KaqxJ+ILQuLYu0AF33enorKQP lUzqVI6fQFpr1fEjP4TnfpuW4RLG38QxSxFpkx86k+Vf88p4kCLe8maW2z2ZMdeX9Qku r09Hu56Q6Y8GBkyF7ymRsYJLVjLMKNp1zX42McX4l88P5w3TvYSWL9BKHqidEj59cfhe lIKMQjXWy3XrFHAhTXShnfOWACh/Rm8CsQh/Xhxr7XMrhR0dHeKHv7YEbZHRrQI91O3L 2W5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778507852; x=1779112652; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=rESskTJRprzdwEOE8g7SuHaYWt4FLnX54fziSgA+Tro=; b=SQoir/CArILvpQNw5n+8R/mKLNEaZ3kuGu0qbOuonLyrAGyNUQPAgNaYbKjpM6PVIA 7+aPtlVLuAsNJRn5McopzLXZz86rCMtc34e6FobwCPzl8hJJm60j0j0X3N8WvKNAZ92h RYkv0LyKxJ4x+wE2xqA9ffUbIakVDD5xlC2zdlkz8VILtMaj56ciNVsu3vYYHaJMggzQ FJL9s31cdG5J6lxwqEwuhffhUIOFe/k1J2/+YiPZ8HP/00wS34FdbP362Z4Iuy/h7TnZ d99iOP3gpWl5i5sJrc+RrYdM6VK84eHSDTo18e8AXpR3+ur5ESw2fxjpFs/MS4PleAy6 d6ow== X-Forwarded-Encrypted: i=1; AFNElJ+l9beS3Lq51iEVWglwMSM8ZuBIrgcuH5LE0GFuyqpqXfVzwiPJWJ33qK6xVNpc/9ztlQZcCGU1xgvPOuk=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7s4AhFZDWGLc8uCT/RSmSeg7sUgoqpjcaag1OZc9rSXzvCdak Fj+GJXM7Y+xBqzkKK2ikAn6/axAZ8LfSH5eJyhniVwdpRxI7FB19vFKR X-Gm-Gg: Acq92OFCK1w8TmedFczcN7cKZ6mLTIABmUDyLl6mgPF0xdegdpm2WNbXOgbxbKNuwY+ /xYMA05kmayoVSbyZ2yB+Fbifep3jG440jhbghXLfgVL7c8NvFvEfP5m2xI1BILlHOABN6dkMER tix4WiPnCvUfzQLCk328qTwcAD9vKcqm9+hzJEfLso/v4aZkYcFt0kSrd3NHDPwPScnd3Acg+ee hga2Wt5T9Pkmwq+fZn6YLMXBmEHXF9NHZFMt5yQ09irrkeVJb5P9XxOZ67BAfrokbAz4C+0Q7i+ FM9lU6wLFt1tm5dra/Od7hmiJilbIGepJp6NH2Y23f8YuKPIiD4qc5qIVlS/z6u3Gki63h1AP55 tKUbBdVUSMzU5K2SnZ7vexgxKhD+s9qS2PiUpyE+xvk6KX6quZYx57Vf+O0PO6o7XllThiQsvBN yeeF10VNDz7o68 X-Received: by 2002:a05:6402:455a:b0:66a:8002:fe17 with SMTP id 4fb4d7f45d1cf-67ef09a34a1mr5628664a12.13.1778507852037; Mon, 11 May 2026 06:57:32 -0700 (PDT) Received: from xeon ([188.163.112.56]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-67ef0b3b904sm3685357a12.1.2026.05.11.06.57.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 06:57:31 -0700 (PDT) From: Svyatoslav Ryhel To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Neil Armstrong , Thierry Reding , Jonathan Hunter , Greg Kroah-Hartman , Peter Chen , Svyatoslav Ryhel Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org Subject: [PATCH v1 4/6] net: usb: Add Infineon XMM6260 Baseband modem support Date: Mon, 11 May 2026 16:56:59 +0300 Message-ID: <20260511135703.62470-5-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260511135703.62470-1-clamor95@gmail.com> References: <20260511135703.62470-1-clamor95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Infineon/Intel XMM6260 is a 3G-focused, slim modem platform designed for smartphones, data cards, and Machine-to-Machine (M2M) applications. The modem is usually connected via the application processor's USB line in HSIC mode; however, to work properly, the modem must control this line Dmesg with modem appearing on LG Optimus Vu (P895): [ 9.427014] ci_hdrc ci_hdrc.1: EHCI Host Controller [ 9.431488] ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus numb= er 1 [ 9.457197] ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00 [ 9.460370] usb usb1: New USB device found, idVendor=3D1d6b, idProduct= =3D0002, bcdDevice=3D 6.16 [ 9.468470] usb usb1: New USB device strings: Mfr=3D3, Product=3D2, Seri= alNumber=3D1 [ 9.475597] usb usb1: Product: EHCI Host Controller [ 9.480508] usb usb1: Manufacturer: Linux 6.16.0+ ehci_hcd [ 9.485913] usb usb1: SerialNumber: ci_hdrc.1 [ 9.490862] hub 1-0:1.0: USB hub found [ 9.494005] hub 1-0:1.0: 1 port detected [ 9.657191] usb 1-1: new high-speed USB device number 2 using ci_hdrc [ 9.844726] usb 1-1: New USB device found, idVendor=3D1519, idProduct=3D= 0020, bcdDevice=3D12.74 [ 9.850530] usb 1-1: New USB device strings: Mfr=3D1, Product=3D2, Seria= lNumber=3D3 [ 9.857594] usb 1-1: Product: HSIC Device [ 9.861606] usb 1-1: Manufacturer: Comneon [ 9.865627] usb 1-1: SerialNumber: 0123456789 [ 9.908739] cdc_acm 1-1:1.0: ttyACM0: USB ACM device Signed-off-by: Svyatoslav Ryhel --- drivers/net/usb/Kconfig | 15 ++ drivers/net/usb/Makefile | 1 + drivers/net/usb/baseband-xmm6260.c | 335 +++++++++++++++++++++++++++++ 3 files changed, 351 insertions(+) create mode 100644 drivers/net/usb/baseband-xmm6260.c diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig index 52a5c0922c79..503f24a3cfa6 100644 --- a/drivers/net/usb/Kconfig +++ b/drivers/net/usb/Kconfig @@ -642,4 +642,19 @@ config USB_RTL8153_ECM CONFIG_USB_RTL8152 is not set, or the RTL8153 device is not supported by r8152 driver. =20 +config USB_NET_XMM6260 + tristate "Infineon XMM626X Baseband HSPA/HSUPA modem" + depends on GPIOLIB && OF && USB_CHIPIDEA + help + Select this if you want to use an Infineon XMM626X modem, found in + devices such as the LG Optimus 4X P880, LG Optimus Vu P895, Samsung + Galaxy S II (GT-I9100), and Galaxy Nexus (GT-I9250). This driver + handles the modem configuration and provides a stable way to expose + the modem's USB interface. To establish a connection, you will first + need a userspace program to send the correct commands to the modem + through its CDC ACM port, as well as a DHCP client. + + To compile this driver as a module, choose M here: the module will + be called baseband-xmm6260. + endif # USB_NET_DRIVERS diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile index 4964f7b326fb..ffa532c7d7d6 100644 --- a/drivers/net/usb/Makefile +++ b/drivers/net/usb/Makefile @@ -42,3 +42,4 @@ obj-$(CONFIG_USB_NET_CDC_MBIM) +=3D cdc_mbim.o obj-$(CONFIG_USB_NET_CH9200) +=3D ch9200.o obj-$(CONFIG_USB_NET_AQC111) +=3D aqc111.o obj-$(CONFIG_USB_RTL8153_ECM) +=3D r8153_ecm.o +obj-$(CONFIG_USB_NET_XMM6260) +=3D baseband-xmm6260.o diff --git a/drivers/net/usb/baseband-xmm6260.c b/drivers/net/usb/baseband-= xmm6260.c new file mode 100644 index 000000000000..658f5351fab7 --- /dev/null +++ b/drivers/net/usb/baseband-xmm6260.c @@ -0,0 +1,335 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2011 NVIDIA Corporation + * Copyright (C) 2023 Svyatoslav Ryhel + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BASEBAND_XMM_INIT_DELAY 5000 + +#define BASEBAND_PRODUCT_ID_XMM6260 0x0020 +#define BASEBAND_VENDOR_ID_COMNEON 0x1519 + +enum ipc_ap_wake_state { + IPC_AP_WAKE_IRQ_READY, + IPC_AP_WAKE_INIT1, + IPC_AP_WAKE_INIT2, + IPC_AP_WAKE_L, + IPC_AP_WAKE_H, + IPC_AP_WAKE_UNINIT, +}; + +struct baseband_xmm_data { + struct device *dev; + struct rfkill *rfkill_dev; + struct phy *mphy; + + struct gpio_desc *reset_gpio; + struct gpio_desc *enable_gpio; + + struct gpio_desc *ipc_cp_gpio; + struct gpio_desc *ipc_ap_gpio; + + struct regulator *vbat_supply; + + struct delayed_work modem_work; + struct notifier_block nb; + + enum ipc_ap_wake_state ap_state; + + bool powered; /* tracks usb bus state */ + bool inited; /* tracks modem state */ +}; + +static int baseband_xmm_usb_notifier_call(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct baseband_xmm_data *priv =3D + container_of(nb, struct baseband_xmm_data, nb); + struct usb_device *udev =3D data; + u16 product =3D le16_to_cpu(udev->descriptor.idProduct); + u16 vendor =3D le16_to_cpu(udev->descriptor.idVendor); + + switch (action) { + case USB_DEVICE_ADD: + /* Infineon XMM6260 ID 1519:0020 */ + if (vendor =3D=3D BASEBAND_VENDOR_ID_COMNEON && + product =3D=3D BASEBAND_PRODUCT_ID_XMM6260) { + cancel_delayed_work_sync(&priv->modem_work); + priv->inited =3D true; + } + break; + } + + return NOTIFY_OK; +} + +static void baseband_xmm_reset(struct baseband_xmm_data *priv) +{ + int ret; + + ret =3D regulator_enable(priv->vbat_supply); + if (ret) + dev_err(priv->dev, "failed to enable vbat power supply\n"); + + gpiod_set_value_cansleep(priv->enable_gpio, 0); + msleep(50); + + gpiod_set_value_cansleep(priv->reset_gpio, 1); + msleep(200); + gpiod_set_value_cansleep(priv->reset_gpio, 0); + + msleep(50); + + /* falling edge trigger to CP */ + gpiod_set_value_cansleep(priv->enable_gpio, 1); + usleep_range(50, 100); + gpiod_set_value_cansleep(priv->enable_gpio, 0); + msleep(20); +} + +static int baseband_xmm_set_block(void *data, bool blocked) +{ + struct baseband_xmm_data *priv =3D data; + + if (blocked) { + if (priv->inited && priv->powered) { + phy_power_off(priv->mphy); + + msleep(500); + + gpiod_set_value_cansleep(priv->reset_gpio, 1); + regulator_disable(priv->vbat_supply); + + priv->powered =3D false; + priv->inited =3D false; + } + } else { + if (priv->inited) + return 0; + + priv->ap_state =3D IPC_AP_WAKE_IRQ_READY; + baseband_xmm_reset(priv); + + priv->powered =3D false; + priv->inited =3D false; + } + + return 0; +} + +static const struct rfkill_ops baseband_xmm_rfkill_ops =3D { + .set_block =3D baseband_xmm_set_block, +}; + +static void baseband_xmm_work(struct work_struct *work) +{ + struct baseband_xmm_data *priv =3D + container_of(work, struct baseband_xmm_data, modem_work.work); + + switch (priv->ap_state) { + case IPC_AP_WAKE_INIT1: + if (priv->powered) + return; + + phy_power_on(priv->mphy); + priv->powered =3D true; + break; + + case IPC_AP_WAKE_INIT2: + priv->ap_state =3D IPC_AP_WAKE_IRQ_READY; + + phy_power_off(priv->mphy); + + priv->powered =3D false; + priv->inited =3D false; + + msleep(500); + break; + + default: + break; + } +}; + +static irqreturn_t baseband_hostwake_interrupt(int irq, void *dev_id) +{ + struct baseband_xmm_data *priv =3D dev_id; + int state =3D gpiod_get_value(priv->ipc_ap_gpio); + + switch (priv->ap_state) { + case IPC_AP_WAKE_IRQ_READY: + if (!state) { + priv->ap_state =3D IPC_AP_WAKE_INIT1; + schedule_delayed_work(&priv->modem_work, 0); + } + + break; + + case IPC_AP_WAKE_INIT1: + if (state) { + priv->ap_state =3D IPC_AP_WAKE_INIT2; + schedule_delayed_work(&priv->modem_work, + msecs_to_jiffies(BASEBAND_XMM_INIT_DELAY)); + } + + break; + + default: + break; + } + + return IRQ_HANDLED; +} + +static int baseband_xmm_probe(struct platform_device *pdev) +{ + struct baseband_xmm_data *priv; + struct device *dev =3D &pdev->dev; + unsigned long irqflags; + int irq, ret; + + priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->dev =3D dev; + platform_set_drvdata(pdev, priv); + + priv->vbat_supply =3D devm_regulator_get(dev, "vbat"); + if (IS_ERR(priv->vbat_supply)) + return dev_err_probe(dev, PTR_ERR(priv->vbat_supply), + "failed to get vbat regulator\n"); + + /* Own modem gpios */ + priv->reset_gpio =3D devm_gpiod_get_optional(dev, "reset", + GPIOD_OUT_LOW); + if (IS_ERR(priv->reset_gpio)) + return dev_err_probe(dev, PTR_ERR(priv->reset_gpio), + "failed to get reset GPIO\n"); + + priv->enable_gpio =3D devm_gpiod_get_optional(dev, "enable", + GPIOD_OUT_LOW); + if (IS_ERR(priv->enable_gpio)) + return dev_err_probe(dev, PTR_ERR(priv->enable_gpio), + "failed to get enable GPIO\n"); + + /* CP - AP connections */ + priv->ipc_cp_gpio =3D devm_gpiod_get_optional(dev, "cp-wake", + GPIOD_OUT_LOW); + if (IS_ERR(priv->ipc_cp_gpio)) + return dev_err_probe(dev, PTR_ERR(priv->ipc_cp_gpio), + "failed to get CP wake GPIO\n"); + + priv->ipc_ap_gpio =3D devm_gpiod_get_optional(dev, "ap-wake", GPIOD_IN); + if (IS_ERR(priv->ipc_ap_gpio)) + return dev_err_probe(dev, PTR_ERR(priv->ipc_ap_gpio), + "failed to get AP wake GPIO\n"); + + /* Modem PHY */ + priv->mphy =3D devm_phy_optional_get(dev, NULL); + if (IS_ERR(priv->mphy)) + return dev_err_probe(dev, PTR_ERR(priv->mphy), + "failed to get modem PHY"); + + /* + * Strting from ver 1145 modem starts in READY state. AP wake + * interrupt keeps low util CP starts to initiate HSIC hw. AP + * wake interrupt goes up during CP HSIC init and then it goes + * down when CP HSIC is ready. + */ + priv->ap_state =3D IPC_AP_WAKE_IRQ_READY; + priv->inited =3D false; + + devm_delayed_work_autocancel(dev, &priv->modem_work, baseband_xmm_work); + + irq =3D platform_get_irq(pdev, 0); + if (irq < 0) + return dev_err_probe(dev, irq, "failed to get IRQ\n"); + + /* + * Systems using device tree should set up interrupt via DT, + * the rest will use the default edge both interrupt. + */ + irqflags =3D dev->of_node ? 0 : IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLIN= G; + + ret =3D devm_request_threaded_irq(dev, irq, NULL, + &baseband_hostwake_interrupt, + IRQF_ONESHOT | irqflags, + "modem-hostwake", priv); + if (ret) + return dev_err_probe(dev, ret, + "failed to register IRQ %d\n", irq); + + priv->rfkill_dev =3D rfkill_alloc("xmm-modem", dev, RFKILL_TYPE_WWAN, + &baseband_xmm_rfkill_ops, priv); + if (priv->rfkill_dev) { + ret =3D rfkill_register(priv->rfkill_dev); + if (ret < 0) { + rfkill_destroy(priv->rfkill_dev); + return dev_err_probe(dev, ret, + "failed to register WWAN rfkill\n"); + } + } else { + return dev_err_probe(dev, PTR_ERR(priv->rfkill_dev), + "failed to allocate WWAN rfkill\n"); + } + + priv->nb.notifier_call =3D baseband_xmm_usb_notifier_call; + usb_register_notify(&priv->nb); + + baseband_xmm_reset(priv); + priv->powered =3D false; + + return 0; +} + +static void baseband_xmm_remove(struct platform_device *pdev) +{ + struct baseband_xmm_data *priv =3D platform_get_drvdata(pdev); + + rfkill_unregister(priv->rfkill_dev); + rfkill_destroy(priv->rfkill_dev); + + usb_unregister_notify(&priv->nb); + phy_power_off(priv->mphy); + + gpiod_set_value_cansleep(priv->reset_gpio, 1); + regulator_disable(priv->vbat_supply); +} + +static const struct of_device_id baseband_xmm_match[] =3D { + { .compatible =3D "infineon,xmm6260" }, + { } +}; +MODULE_DEVICE_TABLE(of, baseband_xmm_match); + +static struct platform_driver baseband_xmm_driver =3D { + .driver =3D { + .name =3D "baseband-xmm6260", + .of_match_table =3D baseband_xmm_match, + }, + .probe =3D baseband_xmm_probe, + .remove =3D baseband_xmm_remove, +}; +module_platform_driver(baseband_xmm_driver); + +MODULE_AUTHOR("Svyatolsav Ryhel "); +MODULE_DESCRIPTION("Baseband Infineon XMM6260 driver"); +MODULE_LICENSE("GPL"); --=20 2.51.0 From nobody Sat Jun 13 02:04:57 2026 Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) (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 F3CF13FCB37 for ; Mon, 11 May 2026 13:57:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507868; cv=none; b=pwRFed/M5Y3aNsHCD12yZRc9WPu3oC+KXkpzjPwYJ1MgVQqOZSa9Q7BzjpcA37NGpY4FQgYRqnR3KGFhjNuhrY/98QAar0HSg54aOc7bi5df4TYKX+zS+pKm7ZjiKNPSAxUoHm9giaDY9iiaTj55WrzRPVWzFLygWgPyc9cmBmQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507868; c=relaxed/simple; bh=Xp/TUYJI1eAs/D+9Nq+dELgCqu+Ss/welMktAjHcpbk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fc0LgzzW8G3fo3yrJkPcB6Za8+j0dva0W8nQ6RbnRugMo5fuRQw6U9x0ySYgE3lxHOLxqDpyucjmWlm6BUuKmU33fz5w9NBL/ffSRKfNV5mQlTnxd6PW/jLVI50ZvuYJ9cX9K67vD+4nUwjSFT+SezKOnjlJJr4DRKVWRN8bCZE= 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=jTVG2x2U; arc=none smtp.client-ip=209.85.208.47 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="jTVG2x2U" Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-678a16429c6so6653086a12.1 for ; Mon, 11 May 2026 06:57:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778507855; x=1779112655; 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=BnjnB0/XPfthXcOXqkhM1htDcff/BGb30MwU7TWoKRg=; b=jTVG2x2Uzv7Dt8V8cSlP4y777+8Umg8UZR4qC4X5tWhuFi4FWQFNdi99gObVcIVWYh oLpRMdYIKJRz+zUeMBhJnJe+itGJ90THEwF47hQ+KNBpGdZB6q5rFu9bf59ndsOdvCvM Pe+W8fTkPch001mxqd1ckVyc+AHxBBIQgZcEF0IqMap+LmMV52rvWEiXhqKR8Xn2SgxS SKuwV96wcJpgR+Ocjcc01yCZT91wqWZFCUf7QMF33+IHkiuZWvgV3uA5qGPksBook4i5 2BuxZcWbQ9hMYGsLBMuuKGCerc0YwGOI6q9KSl4wRVofStDZ6PQBX7nYY3DJtUeE0fdq t1yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778507855; x=1779112655; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BnjnB0/XPfthXcOXqkhM1htDcff/BGb30MwU7TWoKRg=; b=CaJPyth2M1mee/NqHCQVnOREDwS3JI06XqDKpICWqIEc/1Bbd/rLo+8Hfg8GYb1w0w De4tIFq1+vIBQWm31AnOM6WadgJ9q/1PP1GQyyiCmOv9cTH11wbfi62qr7ch4C6pt8Xg aW9FaVhL6wve0tLgZCD1KQls0/r5UXa5YDdoWqHo34/gine2V8NCWKyOqYuN/orrFFhl MI5PPlypx8j12h8Y400LaXR3j7NGVKXt71NnfpbCj2S3H2U4Qz4mkBoHKzim47of+cp8 rNYtlbwpB6vIGX15Ie9cEkkx6E9DW0VoCWPTnfpqeHPZOndiiLQHW3LayA3DV7by4Xyo dIvA== X-Forwarded-Encrypted: i=1; AFNElJ9EpWlmwOg18SBwUZ2BGcgFA1eiE71O0NFTM7rEilTZttmMm2FSZQxsLrTF0fleFUbDcXm2oIrvH1wTeDE=@vger.kernel.org X-Gm-Message-State: AOJu0YxiiAm2kZLYc3pZNWkSPYXtMI3SezO8GknkSows0/SIvwAtQ2Q0 CUlWKo/jy1YIw5W8dplXKvZA7/03LZa21oOzohek2Si6GJ7+VWD+/Ex5 X-Gm-Gg: Acq92OGw4wC5F9T7V4XZZCvJ3ZCWGAvjraxVlRkmr1g4g4jGLNnvedJ1AM4WmMCaIEb E+BRe8fu9gNGIW8GahxKdeRpABCPbQ5PyPmUTL55PuBdfvuBM/j+fEZMy8hVkd/1ioaJyQUjQgr ZELnpPHAeMo6ayr+G2sbk2lXjjcdCbete1bgrHfRbYD240vxCZT5WSYBhiy0HjlQ1lVOuX/zm8S LeaGcIIXO9OpVkwAoxmUjXalaYw1X/m5MgtLDKeCtiAlbd0wnmeGTCu9dOOzzUPu7pkdqnq99Dh 7em8IIuvLrYHzy2JyCglOZiVtcO+mDFRIni2kQmWO2FO7BfCO0WmHVbo7xIEq6KC82Hw43LXTAF brLeLSWD7WQxYoCKmhK89Dfhf1CB2wLZN4omknqJ0uyjt4eUocsTbIQY/A/PUzUvUNnw3+k9XnC bSyBqxYFfhIKb8 X-Received: by 2002:a05:6402:b8a:b0:671:9dec:ba3 with SMTP id 4fb4d7f45d1cf-67e0ee9abb2mr5590673a12.13.1778507854968; Mon, 11 May 2026 06:57:34 -0700 (PDT) Received: from xeon ([188.163.112.56]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-67ef0b3b904sm3685357a12.1.2026.05.11.06.57.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 06:57:33 -0700 (PDT) From: Svyatoslav Ryhel To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Neil Armstrong , Thierry Reding , Jonathan Hunter , Greg Kroah-Hartman , Peter Chen , Svyatoslav Ryhel Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org Subject: [PATCH v1 5/6] dt-bindings: phy: tegra: Document Nvidia Tegra XMM6260 PHY Date: Mon, 11 May 2026 16:57:00 +0300 Message-ID: <20260511135703.62470-6-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260511135703.62470-1-clamor95@gmail.com> References: <20260511135703.62470-1-clamor95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Document the XMM6260 PHY used by various devices based on the Nvidia Tegra SoC, describing its usage Signed-off-by: Svyatoslav Ryhel --- .../bindings/phy/nvidia,tegra-xmm6260.yaml | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Documentation/devicetree/bindings/phy/nvidia,tegra-xmm6= 260.yaml diff --git a/Documentation/devicetree/bindings/phy/nvidia,tegra-xmm6260.yam= l b/Documentation/devicetree/bindings/phy/nvidia,tegra-xmm6260.yaml new file mode 100644 index 000000000000..0346433c9772 --- /dev/null +++ b/Documentation/devicetree/bindings/phy/nvidia,tegra-xmm6260.yaml @@ -0,0 +1,58 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/phy/nvidia,tegra-xmm6260.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Nvidia Tegra PHY for XMM6260 modem + +description: + A hardware configuration used in Tegra SoCs to provide proper interaction + between the application processor and the modem, as well as control over + one of the SoC's USB lines for the modem. + +maintainers: + - Svyatoslav Ryhel + +properties: + compatible: + const: nvidia,tegra-xmm6260 + + enable-gpios: + description: GPIO connected to the EINT1 pin + maxItems: 1 + + nvidia,usb-bus: + description: + Contains two phandles; the first is pointing to the Host's USB contr= oller + and the second linking to the controller's PHY. + $ref: /schemas/types.yaml#/definitions/phandle-array + minItems: 2 + maxItems: 2 + + phy-supply: + description: Supply powering the PHY. + + "#phy-cells": + const: 0 + +required: + - compatible + - nvidia,usb-bus + - "#phy-cells" + +additionalProperties: false + +examples: + - | + #include + + phy { + compatible =3D "nvidia,tegra-xmm6260"; + + enable-gpios =3D <&gpio 165 GPIO_ACTIVE_HIGH>; + phy-supply =3D <&vdd_3v3_vbat>; + + nvidia,usb-bus =3D <&hsic_usb>, <&phy2>; + #phy-cells =3D <0>; + }; --=20 2.51.0 From nobody Sat Jun 13 02:04:57 2026 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.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 C73913F65F9 for ; Mon, 11 May 2026 13:57:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507865; cv=none; b=MChoy9GUCYX9xLBEkWHWaEJI2Kgivuvx2MEjST210rAvRznD0xJaAEY7DglLXRFO738gfGNm8P1Lb+k1cklXAbBc0WmE1b5zv1YdWd2ATPfYLkoPGqZ30oylC2cclhIZTZnskfEMSsrs3tlaG7QA0IX7sFAqk+CrXPe+YVkxlqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507865; c=relaxed/simple; bh=//xeqBDO+FAC+aa1qPeAepE9RtXXW3YKKxu7v7xKkuw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fbditJ+jD2FpRPkLno0k6wpurszpchlJnjPn50C0ogL1FVw0eu2vmksYdAlo7YUWvlA44xcUHH6MK1f5QlFdbyrs8vnRb2qHqKzq6qa9Y7fC+w6Y7UoSqM6crmDRZLf0lN6dx4TYTBDWMfdjn4fAza00IJ5IzVzaSEMY2xBRHTk= 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=cF7H620Y; arc=none smtp.client-ip=209.85.218.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="cF7H620Y" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-bb91b426e40so723895466b.0 for ; Mon, 11 May 2026 06:57:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778507857; x=1779112657; 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=2O8Su9Gk1Lf9CS4xvd/yWBGZ4wDlTJeCYsl5Z1xTugo=; b=cF7H620YRQdAAB6av+O7l8dQp8lR1njATPv1q3DMnueWOX33L0/xEEN7Gr2Y7up8CK tzAr7mYz2wMEs+QttSiBu+7ddSAnjzpT7VCh/usSCX/MfMCbybBMRxLc0qK/gX1yz6qJ /BBZvl2To8Xkqlyg6lh+l2Y8k+FhTzAHQYTeEh3hd33LAbXREsdHpERz9jckZZIN7g2a vOt1rgXDkHsdBj5NEvJoAYQM5INfe/9zSQz20mG4TX4olcYtig99+8rRakm4vZ0ijNDF UmiJQodssNZrdJKdjMXQf9YluXVnuqUL1z5kjGtaNXYtNDcAD/aCCiGqWizX5+aRFIUW RrEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778507857; x=1779112657; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2O8Su9Gk1Lf9CS4xvd/yWBGZ4wDlTJeCYsl5Z1xTugo=; b=KIW8SJsTxcxiq0kJ2Z8A+0M47fBNYz/y1jLb0IynOOGjSaCzlicdigKn/bS63/TIdh gcKZDoDEz6eLACpqIlZrCG1wo4l3Bfdnj1RrMeIwYPHqFl3STjJDBBYY9a/Mjb3Ok7xb VyONfyYA6HVPwClPHZt7AJdETc36Qr5Koyu9rFyHPp4OOuh+FXWv8MZvw5G+MqGqfL3m +6eJEDW2J6T/NCuWkFiEFdY9geS2KkdCaSE3FKX5rNvpIZ3n37PAAP/uQYNXwt3VTcLs t/Nl/a4nvYMpqZyh7RVCcXI8M36rH2FjTuEsM0OoZmse63kVQTlMHGTaEppKDShLYhVb hKPw== X-Forwarded-Encrypted: i=1; AFNElJ9/KYBm0BEAGUU/dhJg0TshTJXRGdeDd4hXUcRt1ibWvt/mbp+FFWK/lvqfUMJdZfGgh+ZGbvjuXlLBbPg=@vger.kernel.org X-Gm-Message-State: AOJu0YxnXUi/EG0TggVQUv7uXd37pzSTlA0ICVCcuIH4HnCQmBID+caQ gUPdLrOaPD4OjauDpPxEVVA1nl8i6rq3+TCQjx1wvhgjWYa+JdL+u/eI X-Gm-Gg: Acq92OG22ARIq7Zq25N3FsQcsEpMQpQhTimeATHn2glnCzWLiO/DTMfF94qTY0anhUs frA0z2fbGfqPU33usYYLJat5p7oD/6cELLKLyla3AeNwUVIy9sUCKqDUzIWk4nlbA0Gt5bgFFNo Hq1uQ1gDcuc9ErgPv4DCM07UIZIlr6KgrdfU4JUrTFJ4E0Rm6qDWafPDAFcqTBBMA88BS+ChILH pWhMz3xeyTq7BYuld8ZVlv8HcWxXZQuqDZq+T8SixQuPVM46rIYQe37n7CHKGiRdBgrlFy3TBbu sAoSqY9S/LIEIb4Ni8tOb+owJXQfyedZH8nXzVvhFQytPp7hQ98EW2FU4F1aeO4S4LbE0k73RdN kwQHPXOA2cpIy+r7Q2wYM3Mjva/HoA5KnGtzSBn0BGZI86x17Bs9hlzRBHljKT1cWEkmtM0zsg7 +GmQ1MNoz6zB8m X-Received: by 2002:a17:907:c18:b0:bb8:b536:55dd with SMTP id a640c23a62f3a-bc56d713f3bmr1489015866b.41.1778507856804; Mon, 11 May 2026 06:57:36 -0700 (PDT) Received: from xeon ([188.163.112.56]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-67ef0b3b904sm3685357a12.1.2026.05.11.06.57.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 06:57:36 -0700 (PDT) From: Svyatoslav Ryhel To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Neil Armstrong , Thierry Reding , Jonathan Hunter , Greg Kroah-Hartman , Peter Chen , Svyatoslav Ryhel Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org Subject: [PATCH v1 6/6] phy: tegra: Add support for Nvidia Tegra XMM6260 PHY Date: Mon, 11 May 2026 16:57:01 +0300 Message-ID: <20260511135703.62470-7-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260511135703.62470-1-clamor95@gmail.com> References: <20260511135703.62470-1-clamor95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Nvidia Tegra XMM6260 PHY is a hardware configuration used in Tegra SoCs to provide proper interaction between the application processor and the modem, as well as control over one of the SoC's USB lines for the modem. Signed-off-by: Svyatoslav Ryhel --- drivers/phy/tegra/Kconfig | 12 +++ drivers/phy/tegra/Makefile | 1 + drivers/phy/tegra/phy-tegra-xmm6260.c | 144 ++++++++++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 drivers/phy/tegra/phy-tegra-xmm6260.c diff --git a/drivers/phy/tegra/Kconfig b/drivers/phy/tegra/Kconfig index 342fb736da4b..41b5ce460f37 100644 --- a/drivers/phy/tegra/Kconfig +++ b/drivers/phy/tegra/Kconfig @@ -18,3 +18,15 @@ config PHY_TEGRA194_P2U help Enable this to support the P2U (PIPE to UPHY) that is part of Tegra 19x and 234 SOCs. + +config PHY_TEGRA_XMM6260 + tristate "NVIDIA Tegra XMM6260 PHY driver" + depends on ARCH_TEGRA && USB_NET_XMM6260 && USB_SUPPORT + select GENERIC_PHY + help + Enable this to support XMM6260 modem found in various Tegra devices + with cellular capabilities, like LG Optimus 4X P880, LG Optimus Vu + P895, Google Nexus 7 (2012) 3G and ASUS Transformer Pad 3G TF300TG. + + To compile this driver as a module, choose M here: the module will + be called phy-tegra-xmm6260. diff --git a/drivers/phy/tegra/Makefile b/drivers/phy/tegra/Makefile index eeeea72de117..829e298ee56c 100644 --- a/drivers/phy/tegra/Makefile +++ b/drivers/phy/tegra/Makefile @@ -9,3 +9,4 @@ phy-tegra-xusb-$(CONFIG_ARCH_TEGRA_186_SOC) +=3D xusb-tegra= 186.o phy-tegra-xusb-$(CONFIG_ARCH_TEGRA_194_SOC) +=3D xusb-tegra186.o phy-tegra-xusb-$(CONFIG_ARCH_TEGRA_234_SOC) +=3D xusb-tegra186.o obj-$(CONFIG_PHY_TEGRA194_P2U) +=3D phy-tegra194-p2u.o +obj-$(CONFIG_PHY_TEGRA_XMM6260) +=3D phy-tegra-xmm6260.o diff --git a/drivers/phy/tegra/phy-tegra-xmm6260.c b/drivers/phy/tegra/phy-= tegra-xmm6260.c new file mode 100644 index 000000000000..7511de1333aa --- /dev/null +++ b/drivers/phy/tegra/phy-tegra-xmm6260.c @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct tegra_usb_device { + struct ci_hdrc_platform_data data; + struct platform_device *dev; +}; + +struct tegra_xmm6260_phy { + struct device *dev; + struct platform_device *usb_dev; + struct usb_phy *usb_phy; + struct gpio_desc *enable_gpio; +}; + +static int tegra_xmm6260_phy_power_on(struct phy *phy) +{ + struct tegra_xmm6260_phy *mphy =3D phy_get_drvdata(phy); + struct tegra_usb_device *usb =3D platform_get_drvdata(mphy->usb_dev); + int ret; + + gpiod_set_value_cansleep(mphy->enable_gpio, 1); + + ret =3D usb_phy_init(mphy->usb_phy); + if (ret) { + gpiod_set_value_cansleep(mphy->enable_gpio, 0); + return dev_err_probe(mphy->dev, ret, + "failed to init USB PHY\n"); + } + + usb->dev =3D ci_hdrc_add_device(&mphy->usb_dev->dev, + mphy->usb_dev->resource, + mphy->usb_dev->num_resources, + &usb->data); + if (IS_ERR(usb->dev)) { + gpiod_set_value_cansleep(mphy->enable_gpio, 0); + usb_phy_shutdown(mphy->usb_phy); + return dev_err_probe(mphy->dev, PTR_ERR(usb->dev), + "failed to register USB controller\n"); + } + + return 0; +} + +static int tegra_xmm6260_phy_power_off(struct phy *phy) +{ + struct tegra_xmm6260_phy *mphy =3D phy_get_drvdata(phy); + struct tegra_usb_device *usb =3D platform_get_drvdata(mphy->usb_dev); + + ci_hdrc_remove_device(usb->dev); + usb_phy_shutdown(mphy->usb_phy); + + gpiod_set_value_cansleep(mphy->enable_gpio, 0); + + return 0; +} + +static const struct phy_ops tegra_xmm6260_phy_ops =3D { + .power_on =3D tegra_xmm6260_phy_power_on, + .power_off =3D tegra_xmm6260_phy_power_off, + .owner =3D THIS_MODULE, +}; + +static int tegra_xmm6260_phy_probe(struct platform_device *pdev) +{ + struct phy_provider *phy_provider; + struct device *dev =3D &pdev->dev; + struct device_node *usb_node; + struct phy *generic_phy; + struct tegra_xmm6260_phy *mphy; + + mphy =3D devm_kzalloc(dev, sizeof(*mphy), GFP_KERNEL); + if (!mphy) + return -ENOMEM; + + mphy->enable_gpio =3D devm_gpiod_get_optional(dev, "enable", + GPIOD_OUT_LOW); + if (IS_ERR(mphy->enable_gpio)) + return dev_err_probe(dev, PTR_ERR(mphy->enable_gpio), + "failed to get enable GPIO\n"); + + usb_node =3D of_parse_phandle(dev->of_node, "nvidia,usb-bus", 0); + if (IS_ERR(usb_node)) + return dev_err_probe(dev, PTR_ERR(usb_node), + "failed to parse modem USB bus\n"); + + mphy->usb_dev =3D of_find_device_by_node(usb_node); + of_node_put(usb_node); + if (!mphy->usb_dev) + return dev_err_probe(dev, -ENODEV, + "failed to get modem USB bus\n"); + + mphy->usb_phy =3D devm_usb_get_phy_by_phandle(dev, "nvidia,usb-bus", 1); + if (IS_ERR(mphy->usb_phy)) + return dev_err_probe(dev, PTR_ERR(mphy->usb_phy), + "failed to get USB PHY"); + + generic_phy =3D devm_phy_create(dev, NULL, &tegra_xmm6260_phy_ops); + if (IS_ERR(generic_phy)) + return dev_err_probe(dev, PTR_ERR(generic_phy), + "failed to create PHY\n"); + + phy_set_drvdata(generic_phy, mphy); + mphy->dev =3D dev; + + phy_provider =3D devm_of_phy_provider_register(dev, of_phy_simple_xlate); + if (IS_ERR(phy_provider)) + return dev_err_probe(dev, PTR_ERR(phy_provider), + "failed to register PHY\n"); + + return 0; +} + +static const struct of_device_id tegra_xmm6260_phy_match[] =3D { + { .compatible =3D "nvidia,tegra-xmm6260" }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, tegra_xmm6260_phy_match); + +static struct platform_driver tegra_xmm6260_phy_driver =3D { + .driver =3D { + .name =3D "tegra-xmm6260-phy", + .of_match_table =3D tegra_xmm6260_phy_match, + }, + .probe =3D tegra_xmm6260_phy_probe, +}; +module_platform_driver(tegra_xmm6260_phy_driver); + +MODULE_AUTHOR("Svyatolsav Ryhel "); +MODULE_DESCRIPTION("Tegra XMM6260 PHY driver"); +MODULE_LICENSE("GPL"); --=20 2.51.0