From patchwork Sun Feb 23 12:22:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivaylo Ivanov X-Patchwork-Id: 867843 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 83D3C206F09; Sun, 23 Feb 2025 12:22:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740313358; cv=none; b=NGMl/gRxKfwcwN0vzOUcd+v3mM1ZHhdjb6VH+WbPkb9KOmnAZ5gpAlBZvcKibpnfWnXREAyUeWgvH7CWTg8+TCKheWc4YA4h7/OWiOzwo1TLS8/fL1d2Y6ByBbxIiGvG+s26IMwK+QhAEAMlCKg4/AUlxYxIrZJk2jUjoEqE9/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740313358; c=relaxed/simple; bh=8eyA5ctFa9eCCu7fnL3G0PyMQJF4NJW3EXr0Wu5fyFY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pq/b9gdEUcsdgqhCTiPk8JVCsoOaU4BI5JbP+y8L1stQdrVmXc/FAqiIZWPXd1FgQnijTy3zjJ5TFEnnxOPKF4diqEEh0jceyL/BsJPjcWxwbZ39gpVzOPp+qzldi/llJNAOR9qTKo0C/2ZwA7MG0j58vMVW83nKvApU2CEJNcc= 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=EgVYpanU; arc=none smtp.client-ip=209.85.128.42 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="EgVYpanU" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-439950a45daso21212475e9.2; Sun, 23 Feb 2025 04:22:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740313355; x=1740918155; 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=vMvQlF05mCiAYcMEroKJ0h4q5UvU+zcKze89brABNJQ=; b=EgVYpanUhqn/bSxBojQADa2PE96zp6GnmCkMIplIxKRAfhRJZBOzdyTrO8jubzTyrv 2RA4Ua1/qMKPzEqjRG3C4WAG2AF7kv2iNOdlYZbxxXYQjuFwnshtpKNUVwHr45qaLl0u H6McGMSH0xn/zlATncqRjb8fi3b0ttaw+eX5GIbahwjYvhUQgQ9Bdb39MIhJSbo8T8OO /OF1ZPeUshTdHuYZKy7pIqHtGAm2llOaQjix+OgUiOKBewNd6avfYkyHHNWGi7kyDCIW 1TLWn954bNd5ldUiqX1iUTkOetblD2QeRkUS+EhChzpaxHEUn9yhsygJ/zUzmtgFcN8z HHzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740313355; x=1740918155; 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=vMvQlF05mCiAYcMEroKJ0h4q5UvU+zcKze89brABNJQ=; b=nSP5qQpA8pIn9AwdNxRhe1ApDqXPZrIqJfPg1O0bnGo/RJF4R3C0G+UNBhJIFtkt+c 4Lj+Fwjer54x2QqC0W80rRElo4TgG4hqzebtm3FC/EokB83sWJB9JdDa02MJBSrXMmhk Akrb4B1f+V/P7aXnmpdEAIIt8wBK8m+h4g9Zip8DjlYQ8WsoE3s74Ua4jFFkgkjmYkSH wQThYyOo2CtWNaCOBxgPfZUn8U54WM1hCDBXsVrZxPW51WRQqFxJiqCksL5edmUbYC4o HrcKb3om9g+PHPPdm+1VABfRKBM9WJMxht6LVlFy5IUqnWi/PmUF/0xRPDwUJ8MFpwfz bnww== X-Forwarded-Encrypted: i=1; AJvYcCVlAq/JNZmwNqNJxh+saVV4+PzCnSoBM6lVaxsAhDo+pbyOP2OtoJwYyIi9uzdmexayKOVaeyPHN9pU@vger.kernel.org, AJvYcCW/m8tBBgqtHkII9rpTPMP3dtutAvEgaFivSHt/8SrCn3CwXCbnrMsEdv6fNw+O1bkZAzgH4iSLoG8V7XUm@vger.kernel.org, AJvYcCXO+fLpAj7sx8j/N0tmncayHXdWsYGCnxFF19U+TCVY9NHKUl8ItIZz00WmzUKZfrZXd+fn+jqA880BL9mJiTCrH0U=@vger.kernel.org X-Gm-Message-State: AOJu0YyeKBTZ8cVYjUKXmp4V9YnBRE6G4UJALpNilY1DB9qfIqLiVfMj Dw1c7MopsUy6DU26NdcDkXBqS0zX5zdfwAj2Nba4FOz42N5enMed X-Gm-Gg: ASbGncvI14jBacneCYFa+0E1MSytwWhiIkkbP7h7T63DiHSf3KkM71//HiJILppNGws OIGoP8+AHF3J9zChtd5QfzadXUEaG719LE/LokC7nMpZTtBA/rjmghRx97BMJD5VpwKerpzXiWy a91Mwu2BxKpRVy66c3VLBHAY2lBZKsLxGRhB9cJQFPdpwpq0v32BdyIaNhHfMnv8zorv1a0XZAW AmPUOgvroSc5r4kbJIJd+aTq999KIBIx53m/0ZZylAfxa3KoSPMkX3E1sBmzSuaIrmxMKjE2I4g qE/M4Sg1fQn2EDTKnKMnZ9tiRVsZnqgppHpQI2JfIVYRFTZ7DVgXMPQeAUCcZp2yArIRywyPT0Q 2cQ== X-Google-Smtp-Source: AGHT+IG+0MAODFk+p1TBCBtE4y4nFsqlItck+UeuAIWOTYDShqxnT5f5tx5xGljZ6owFfPbJmR567A== X-Received: by 2002:a5d:648a:0:b0:38f:43c8:f751 with SMTP id ffacd0b85a97d-38f6f0959c5mr10354553f8f.35.1740313353094; Sun, 23 Feb 2025 04:22:33 -0800 (PST) Received: from ivaylo-T580.. (91-139-201-119.stz.ddns.bulsat.com. [91.139.201.119]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38f259f8602sm29611608f8f.94.2025.02.23.04.22.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 04:22:32 -0800 (PST) From: Ivaylo Ivanov To: Vinod Koul , Kishon Vijay Abraham I , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alim Akhtar , Philipp Zabel , Abel Vesa Cc: linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/8] dt-bindings: phy: snps-eusb2: add exynos2200 support Date: Sun, 23 Feb 2025 14:22:21 +0200 Message-ID: <20250223122227.725233-3-ivo.ivanov.ivanov1@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250223122227.725233-1-ivo.ivanov.ivanov1@gmail.com> References: <20250223122227.725233-1-ivo.ivanov.ivanov1@gmail.com> Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Exynos 2200 makes use of the Synposys eUSB2 IP, so document it in the binding. Unlike the currently documented Qualcomm SoCs, it doesn't provide reset lines for reset control and uses more clocks. Signed-off-by: Ivaylo Ivanov --- .../bindings/phy/snps,eusb2-phy.yaml | 64 +++++++++++++++++-- 1 file changed, 57 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/phy/snps,eusb2-phy.yaml b/Documentation/devicetree/bindings/phy/snps,eusb2-phy.yaml index 22c77968f..f4164db71 100644 --- a/Documentation/devicetree/bindings/phy/snps,eusb2-phy.yaml +++ b/Documentation/devicetree/bindings/phy/snps,eusb2-phy.yaml @@ -23,6 +23,7 @@ properties: - qcom,x1e80100-snps-eusb2-phy - const: qcom,sm8550-snps-eusb2-phy - const: qcom,sm8550-snps-eusb2-phy + - const: samsung,exynos2200-snps-eusb2-phy reg: maxItems: 1 @@ -31,12 +32,12 @@ properties: const: 0 clocks: - items: - - description: ref + minItems: 1 + maxItems: 3 clock-names: - items: - - const: ref + minItems: 1 + maxItems: 3 resets: maxItems: 1 @@ -58,11 +59,60 @@ required: - compatible - reg - "#phy-cells" - - clocks - - clock-names - vdd-supply - vdda12-supply - - resets + +allOf: + - if: + properties: + compatible: + contains: + enum: + - qcom,sm8550-snps-eusb2-phy + + then: + properties: + reg: + maxItems: 1 + + clocks: + items: + - description: ref + + clock-names: + items: + - const: ref + + required: + - clocks + - clock-names + - resets + + - if: + properties: + compatible: + contains: + enum: + - samsung,exynos2200-snps-eusb2-phy + + then: + properties: + + clocks: + items: + - description: Reference clock + - description: Bus (APB) clock + - description: Control clock + + clock-names: + items: + - const: ref + - const: bus + - const: ctrl + + required: + - clocks + - clock-names additionalProperties: false From patchwork Sun Feb 23 12:22:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivaylo Ivanov X-Patchwork-Id: 867842 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.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 43089209668; Sun, 23 Feb 2025 12:22:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740313360; cv=none; b=KBepivbaMSYU7yEXVYBDcEPNo0OSJ0TygIg3d/yDxZATA1vqFnTq4b0TJZwqSBI9M7SyDhzKNad3LNeWTXrqkGiO6ARdd5oMgUvCxk1lVQMQ9LvViUINNOmZH77E58TAk2kYNhoCl4XWsM9eV0PFz1E03UjpQfKV+rzYQas7nL0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740313360; c=relaxed/simple; bh=UP1sx0YglB7Nf4opNcMJsVMo/q5R/lyn5TBkEfrHgWs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ioE/Qcd2ad5ptPBr+097DnfbwzsxL8gUGiy9TBMusun0Keum3cniSXn6G+eBO/U6ZU27lprs8Vtqyhfxi33C8hju7EGdTJ1bBThHrCxZ+v3q1cibbAmYATHO4NYgYpdCG2hTgIT5Y5sVa2QP7wENYrS3Lzwp1sBr9po8BaKw3mc= 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=X4gH6UCW; arc=none smtp.client-ip=209.85.128.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="X4gH6UCW" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-439350f1a0bso20681865e9.0; Sun, 23 Feb 2025 04:22:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740313357; x=1740918157; 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=z0wQhVsHeKChXXBl+h2UsEWEersbr5rCyfY+lWbHqbE=; b=X4gH6UCWiPDQZbIS9om8ArzgZeYPohdwtEy6GJlf5NWyFBmE98YZrbDNOEJPYvrOUN yd6rQyOBdNQ72AEj2TG0mCc53RLKiMDf6XlHzA89oziFKvmAExPqR6qgkzxopNst4xRj hSz2QjE9NhFggAas68Xq3xsxyeGIBV1Qttes0TO9KMfvPYK+oV4Euj9PuLsAUvufPqCB F2iuzjeCElB5VG2XAtUUybCqdrKkZOt/4WvaSEvsxvBCn6+CmHCEkj6PtYUWwMddXrP5 s6mU2rQbv9pt5hWgLXwcE0n8Dgu4XwsVdFVR9/YVNiWAPzYyb1iLldXC+eI+sqZmk3LH oJ5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740313357; x=1740918157; 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=z0wQhVsHeKChXXBl+h2UsEWEersbr5rCyfY+lWbHqbE=; b=svOZDw6LX8hPT/D/PRLIArD1sLAhujAAcihOMBeiVHh6wT2es/a0EULVd4VXOkUF1P JIdy5tBb13OAlVWJiU+M/BZ02pKAT5qaIWMX9Kdm+IRf60wVlXfgy+Q32EZ+PYjuiCIu ZOArW+5RWM0u1NFFUNLo2BTQuWF607dPBnuCo/Tcro6AouZLRFAWwsh5tAfAxJLhneja Shq34B64DxnJ5J/LE3GyCCLQF9zk1fLiAbYY2KkszNkl+q5RFC5s6b44DDHEDzmp101D 1ZWd3lvmAKFJCHw3cHcQ7gFiyrYhzluRCLqnqf9/uDY96Td90pI+wttl8ez7XtUGY2G+ HWvw== X-Forwarded-Encrypted: i=1; AJvYcCUw1LaJDcwLTeJL2NcC64mGOWXw8dRYyq4wUcOTggymnSgls/3JgTO8dx08mwIajkW3f9cwgJbdCwgsWYv0@vger.kernel.org, AJvYcCVKzyoDmGbNEyupx6qgx3NUZ2M4aD1CEoU209OoMSDZIjKRBuMrnb54F0FNev6HU3zUfZmobYB9TodO@vger.kernel.org, AJvYcCXMol/mwqtmRCRRRrT21Dh57SYnJ2dIjyBQ1rlsr+ilCebFHoKRiYhQh3dCh2KcR6VALjzicXyzcgrsmkzpGn85j4k=@vger.kernel.org X-Gm-Message-State: AOJu0YxISGwBfw7+WWpj0t1Z4rnbO/kUhl7PL50NrEjZ7x8eZlPMq2DW mKLqRMJi+zuPbrEyG/su56n6nkEikop7AsxtPFWZFbgRuM4lv8M4cNIrow== X-Gm-Gg: ASbGncsxAMhbUV5h+luPNj1FfTbk9IBxZQ8//zgb5J8lidLuZhBslAR/VLRlJZWSTVH s3/9YRimxIehHKjbmtHQyGN4e07KfOxTJdREKpMG5vgxGK/h3njBxtx9imCfdckchFfmIbR5IJs HinwNbqHniWVFZ7F9fkPWVw82N9bJwg2ZqAUfzmTYjIF8T8wZdZIsgEW5BNNGR17MHnTNfDkxW9 J1DVTGiTP9LnUovHyS4YN0IQ2s3NGRMUbm1gOgYpeJOdeRZc/t+jzjj65dWqXixBaLLU5XtE3XI CLcwiFqnvvWyWxtLDtnLCbz3mFR8uP3TUfs1FW2Y1APU3KECIv5eXL5QAVYljgVUkTkUN1pfsMg FGQ== X-Google-Smtp-Source: AGHT+IELhxBegLSVK0u+lmVP1P13Q3bXTlowJFOfv8B2pMlO46HBtKWfy8VmtqQKECimk9UdAMZdXw== X-Received: by 2002:a05:600c:4511:b0:439:5f04:4f8d with SMTP id 5b1f17b1804b1-439ae320687mr67074255e9.12.1740313357412; Sun, 23 Feb 2025 04:22:37 -0800 (PST) Received: from ivaylo-T580.. (91-139-201-119.stz.ddns.bulsat.com. [91.139.201.119]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38f259f8602sm29611608f8f.94.2025.02.23.04.22.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 04:22:36 -0800 (PST) From: Ivaylo Ivanov To: Vinod Koul , Kishon Vijay Abraham I , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alim Akhtar , Philipp Zabel , Abel Vesa Cc: linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 5/8] phy: phy-snps-eusb2: make repeater optional Date: Sun, 23 Feb 2025 14:22:24 +0200 Message-ID: <20250223122227.725233-6-ivo.ivanov.ivanov1@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250223122227.725233-1-ivo.ivanov.ivanov1@gmail.com> References: <20250223122227.725233-1-ivo.ivanov.ivanov1@gmail.com> Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Some platforms initialize their eUSB2 to USB repeater in the previous stage bootloader and leave it in a working state for linux. Make the repeater optional in order to allow for reusing that state until proper repeater drivers are introduced. Signed-off-by: Ivaylo Ivanov --- drivers/phy/phy-snps-eusb2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/phy/phy-snps-eusb2.c b/drivers/phy/phy-snps-eusb2.c index 4e5914a76..dcc69c00a 100644 --- a/drivers/phy/phy-snps-eusb2.c +++ b/drivers/phy/phy-snps-eusb2.c @@ -461,7 +461,7 @@ static int snps_eusb2_hsphy_probe(struct platform_device *pdev) return dev_err_probe(dev, ret, "failed to get regulator supplies\n"); - phy->repeater = devm_of_phy_get_by_index(dev, np, 0); + phy->repeater = devm_of_phy_optional_get(dev, np, 0); if (IS_ERR(phy->repeater)) return dev_err_probe(dev, PTR_ERR(phy->repeater), "failed to get repeater\n"); From patchwork Sun Feb 23 12:22:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivaylo Ivanov X-Patchwork-Id: 867841 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 9A1B920ADF8; Sun, 23 Feb 2025 12:22:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740313362; cv=none; b=kxu9LlfAbFX7BMQIJisgaKm3uTwxaqbv01xDC/G9GYJB+YaAK8Qij508puA4fOZqTN8Lt22mHJEKXzKfB2O7vtxzJF8hpf37e5Xpa20sCU1E97RClZW2jZJkvEKDX4Yi0nvXdbXxZQHjIe1sr3vfsB12acY/TVoCzThaNoYpRGc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740313362; c=relaxed/simple; bh=MQynf7HJpEJmrgwX3ZBNVINk6p8B6UBnCT/VBeNHOHQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NVQY2ODXxriYtc4wWZi4/Y2nMxxTKgdFm2dUISgitDJzSp6uUkSNbXe/5bjcavkTdBD4bARhz/rbSTc+MpGnIToDvmlwEIKNehALjIeRY8hnWHqt4gTi/MY/HWAHjUVF7SoeitsA+N1U4NxgP7hzh5ua9e2l/OeGQOpi0XwEx2E= 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=RQ3fkW1Y; arc=none smtp.client-ip=209.85.221.52 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="RQ3fkW1Y" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-38f24fc466aso2679961f8f.2; Sun, 23 Feb 2025 04:22:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740313359; x=1740918159; 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=C92cg9pDirScfRELIv/SYftxNY7no1Ol/6QVuJ3MiRc=; b=RQ3fkW1Y4EDdZOfCs0iQTWAOJDlTAp/M+b5BgNawN8Gf+E40cyc3aFCG6AhpNOZoYA mhPV4oFoni03BblbHCfEcT/4MV/J/nGE5wy8fVQtfxyKXVfjBFwOUWOQ7u90HZt5m7Cl J23k6nc0yzO1uE2tsMNXGmZl7BKN+ivTzXsTK1GBCdFmhX0KL5XMePFoZr03J2TPyR4j bKpneStCylAo2B4gmgMQkRE3m9v71Fzal2I1akWROJ1+iwEQf7ZAMLyv20avmKh+W19U 42FGGqkS/vfffsakBpzB2BexPlP/alxRgiw8b5dTbg5x9xdrP3jbkraXLU6o/+isEucM 1Ekg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740313359; x=1740918159; 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=C92cg9pDirScfRELIv/SYftxNY7no1Ol/6QVuJ3MiRc=; b=UsODWfXO6tXWH2zxh4cC/xe9ojj1yl+UK4WeCdOQXRgV7oSVfv2/P07x7zSuZXNTSV fmvhWTHoJBlu9S3plqTwTEfWWUe8DMMmnlWDeMNT7/UiQVf9rWJWQFIZTiX3EqvDKEAt 3DKmcGQqVf58FQ5TcZEw2tLqi+p9uqWn8gpN9m0gepv6v5fhn/v2DGvdyGScyzAHYoBQ 5IdwSqAOanq+NfNdo8zgcA9VNR66ZSzu5+S+Ez5UOjt4pqVbe7y6Avc7MZw4kAJ0tq7I gHREsf9b5DPn5Zxcpf3Z6RSPfpRo5C1CF+HDrYXZj7oXNtj0VeN+PTDKreGgCKYuOT4x vHQg== X-Forwarded-Encrypted: i=1; AJvYcCVGcX6wCjeeagD3ByDmQQFtVHlCwRZrbHXeecpGXWk6vzAXTBd1z8KL8n26mNy11BA/0rAEFGfheQe9@vger.kernel.org, AJvYcCWSqdgV1hWaCB6easApRUo73mCzsrqdWJBNZa4JVu9iveDwloI26vpsXdiKkcZwKFEMtSuHXe6RbSxroFMR@vger.kernel.org, AJvYcCX6hu4S0ahOvnJDz/j8BTHPVU//PYUlzT0OxfdhyUC+G77ZFoX6to5geYTpmNAcHLzaGsjMCA4cNjYKjV61sVccSIA=@vger.kernel.org X-Gm-Message-State: AOJu0YwOmdVQe76vJaa1DmPAh6yeYXH3omozknrb8sNI7zd2otPpq+kp mmauECQGU3lyzIz75FKadl0WA1R+SyDGWUfBnktKOTBoLBYpzdZ5 X-Gm-Gg: ASbGncuWIJORYd6l0fP+5XkaNTdFQY5oUSnj2dylWBALxBS3+nUMMQ6B59OywrJKCvP jhtwgTq7I2ZTli+EUfmpG57G4GKl4v6O/4CMXDAAHnFQf2RmMyG7Ma68VXFnmsT9N3+zNHOsl/V dbxwAhjMHjRJzOGlbn+gGhOE65HUaw062oGqGVFodhNiluvHLjqkjNHOvTOo0p2Xlj/ZQeaYhnh lOP6mRvC1ZKcdklH/h9eyxpoxqEXisq5jStTC3NSlrZReiz8a2vLeNhOHWvOHkeNzzBAeXuVvwe KUV4OLyGnsyWCL8ZrIXEQy8x6pnPaj35elZtubFqttDCtu9uVZ1f7LmIcIu7G80dR1gnvaQfjAM Jow== X-Google-Smtp-Source: AGHT+IHD/1fKxNbRJHEqjlek+14p9mn6PKTF//azfEyhIr2/+Ub8gP0MUCWd/hcqjMmdh1I7H/WIww== X-Received: by 2002:a5d:5850:0:b0:38f:2030:7da9 with SMTP id ffacd0b85a97d-38f707b0b87mr8586440f8f.28.1740313358741; Sun, 23 Feb 2025 04:22:38 -0800 (PST) Received: from ivaylo-T580.. (91-139-201-119.stz.ddns.bulsat.com. [91.139.201.119]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38f259f8602sm29611608f8f.94.2025.02.23.04.22.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 04:22:38 -0800 (PST) From: Ivaylo Ivanov To: Vinod Koul , Kishon Vijay Abraham I , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alim Akhtar , Philipp Zabel , Abel Vesa Cc: linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 6/8] phy: phy-snps-eusb2: make reset control optional Date: Sun, 23 Feb 2025 14:22:25 +0200 Message-ID: <20250223122227.725233-7-ivo.ivanov.ivanov1@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250223122227.725233-1-ivo.ivanov.ivanov1@gmail.com> References: <20250223122227.725233-1-ivo.ivanov.ivanov1@gmail.com> Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Some SoCs don't provide explicit reset lines, so make them optional. Signed-off-by: Ivaylo Ivanov --- drivers/phy/phy-snps-eusb2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/phy/phy-snps-eusb2.c b/drivers/phy/phy-snps-eusb2.c index dcc69c00a..7a242fe32 100644 --- a/drivers/phy/phy-snps-eusb2.c +++ b/drivers/phy/phy-snps-eusb2.c @@ -420,7 +420,7 @@ static int snps_eusb2_hsphy_probe(struct platform_device *pdev) if (IS_ERR(phy->base)) return PTR_ERR(phy->base); - phy->phy_reset = devm_reset_control_get_exclusive(dev, NULL); + phy->phy_reset = devm_reset_control_get_optional_exclusive(dev, NULL); if (IS_ERR(phy->phy_reset)) return PTR_ERR(phy->phy_reset); From patchwork Sun Feb 23 12:22:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivaylo Ivanov X-Patchwork-Id: 867840 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.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 449B020C01A; Sun, 23 Feb 2025 12:22:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740313365; cv=none; b=T6D8RV56C8VeUOYwBEJlZ7gFX/LeeVUWvaDeWT0Jf7Ss35xmS85hQJfhYL6bA5qHMNuA8RZWHpCZ1X3H3ZT5VCpLWOG37Cl50jGUKS6gwTHQLIjJBjmiueXkBqFdmI8T6Ekb1B5a84eSMYqTkabVjaB6QG5MohOietcbx4HUd2U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740313365; c=relaxed/simple; bh=aCBVubB+MrIOdvY44VTkDt+RnIcfU+/oZw+otDn16SY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IMSMtkM5J7Mxhk1T4IKsS3odiw6PJWXP9mf6b7MA28+h/0IOIjJDnodXv2buk6kzna211O+qPUMuqcVxXgAk6m1gvzOkcKxAv+hjjpTIXcOt6mGsYVKgyy/xiIYfAeskHsPvR4mn7xyzPZqVsd6Wv4UcMX2fNHwHUTSQGMAEOkY= 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=KAPZ94Vx; arc=none smtp.client-ip=209.85.128.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="KAPZ94Vx" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4398e3dfc66so31206875e9.0; Sun, 23 Feb 2025 04:22:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740313361; x=1740918161; 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=Mk17Af825MoY5+ViL1QPuoghulUe2DIpjNeLf3FSRxs=; b=KAPZ94Vxykx/ND1l1MthPDwdj2awli1Czis43US+BXkRvN9vScGMlYiR1Sj0INc+1B 04mIaXBGPye9wJul8Fs1jrvCFnqN61rdGjlQFHic4sCqf//Vy4Y1WhyGeBc8Wj7ECBVg uWJigdisCatYHP6gWRXb6QFAR4rBrv/yoh7mmhtH8Y592lLUggXYFuLoXsHHpgYBxrjD 732V/ltHz4Bz8ChrdlalX54R/7AAElF3as+9ey5+4sMXIZiNQsWWCRkN+H437FkOHQyq icItGECpmKtwCH2bj3YLJKbtCG9mgJUAXKCrE/yqmLGAZnNCLRb2SRcWD6v2OcPH/cxZ GpkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740313361; x=1740918161; 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=Mk17Af825MoY5+ViL1QPuoghulUe2DIpjNeLf3FSRxs=; b=dZ9ey2B0ychJ7GAYyvtWOHh/IMWAlFF7jQw5YixqqY8C2rO2HyyDQM0PHsB0H6YcnF ery8HU4z2voo5buL3CI6a6sYwkgLCzcfj9BmbzwlAK1/15G/+C202s4dcYD8r16l5GyN MIxpNRv2A8VYl01Hori2Qt5ilkL9sPwmAT2GZcOGI+YwYwgnpXwwxCQbj9PcnDpiA3Vb r6ur6LvyqjA4l6DFX05XzF6DLVzFtv3KnXkwoc8xcS3OKhVNO4uRD30+pQ2VxnJUy5Ea C97Z6nbzQaxfINqNFHknrKdIc+9yAhYEdv90qqIaPFhU48HduXn/6PCjsk6mt1+lTyuy JoNg== X-Forwarded-Encrypted: i=1; AJvYcCVD7rakPe63dyzG5WuhvAJwq1NCM8UKOgkJRToLxhge1P0Wo7zcYCNvsoy7oAjiZIEfqWwIN4QhhJjMcod/qz8xLJU=@vger.kernel.org, AJvYcCVqm1RIamZmPFppybue0ZrJXJoK4R1wiMHv54GAK0d6VF3B+6zcUcsNL1OT6XieTV0qVwppY548mzJydwnS@vger.kernel.org, AJvYcCXqdmhBiP5qLDR42TY4+WDqjQSnuUePYFGvVefGarJvTxfMjoKJa3DFpzphPT/mxew47FYskmfso0dB@vger.kernel.org X-Gm-Message-State: AOJu0YzsNNfxCe/1SVgzrbFT6vbMrOgGqZTFtqkiYskROshUSMWAQWsx fzUiDYDQpZzH0gM4s/9QTnl3tIkPpm+GW6F5ZjMIiUbuh2KdJjtc3C35hA== X-Gm-Gg: ASbGncvl73C/fmcuzwfnMf0d+PcvYw56T2gMg2Q15gYbWYQ2wMH3KcBnSKdcJ5nTakq 85xMOv1jOFbsVh2YuKcpKOZ+WrOedPvmAzl2M9dlYJIb3J8s+SsMvN0oORYVZB3OoOK4IyXCFXo 8aWbqco1WbtNRCNnGjrmoKWp/frV0mHtL/vLx7w7lniHvuPkqPkz3nQqovbwmMmjM+Fu7Qjv51J TkzeEGnrMMKAe9sxkjnohhnMgUMYQop/WbzTqbZpd6KTAkPAyUcEB8ikcX+O6GTTqPbBiStzzW5 g4UVb0DnCbsk44dCi85darFM/1PeGXdcUv4cD5+aJj2SBk/THGdGfdFe3n8SqwrGhK7VDzlet9L bxA== X-Google-Smtp-Source: AGHT+IGWxAXkSNHk+1KebllT+xCEuhjnywiq2a9VK2BhfWGgHCBvEOWfCz0XyKO8Rf1jRfUwEJMmcw== X-Received: by 2002:a05:6000:1ac7:b0:38d:d299:709f with SMTP id ffacd0b85a97d-38f6f0d1d13mr8003029f8f.48.1740313361328; Sun, 23 Feb 2025 04:22:41 -0800 (PST) Received: from ivaylo-T580.. (91-139-201-119.stz.ddns.bulsat.com. [91.139.201.119]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38f259f8602sm29611608f8f.94.2025.02.23.04.22.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 04:22:40 -0800 (PST) From: Ivaylo Ivanov To: Vinod Koul , Kishon Vijay Abraham I , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alim Akhtar , Philipp Zabel , Abel Vesa Cc: linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 8/8] phy: samsung: add Exynos2200 usb phy controller Date: Sun, 23 Feb 2025 14:22:27 +0200 Message-ID: <20250223122227.725233-9-ivo.ivanov.ivanov1@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250223122227.725233-1-ivo.ivanov.ivanov1@gmail.com> References: <20250223122227.725233-1-ivo.ivanov.ivanov1@gmail.com> Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The Exynos2200 SoC comes with a TI external repeater and 3 USB PHYs: - snps eUSB2 for UTMI - snps USBDP combophy for PIPE3 and DP - samsung USBCON phy The USBCON phy is an intermediary between the USB controller (DWC3) and the underlying PHYs. Add a new driver for it, modelled to take a phandle to the high-speed PHY for now. Signed-off-by: Ivaylo Ivanov --- drivers/phy/samsung/Kconfig | 12 + drivers/phy/samsung/Makefile | 1 + drivers/phy/samsung/phy-exynos2200-usbcon.c | 250 ++++++++++++++++++++ 3 files changed, 263 insertions(+) create mode 100644 drivers/phy/samsung/phy-exynos2200-usbcon.c diff --git a/drivers/phy/samsung/Kconfig b/drivers/phy/samsung/Kconfig index e2330b089..0f809a382 100644 --- a/drivers/phy/samsung/Kconfig +++ b/drivers/phy/samsung/Kconfig @@ -77,6 +77,18 @@ config PHY_S5PV210_USB2 particular SoC is compiled in the driver. In case of S5PV210 two phys are available - device and host. +config PHY_EXYNOS2200_USBCON + tristate "Exynos2200 USBCON PHY driver" + depends on (ARCH_EXYNOS && OF) || COMPILE_TEST + depends on HAS_IOMEM + select GENERIC_PHY + select MFD_SYSCON + default y + help + Enable USBCON PHY support for Exynos2200 SoC. + This driver provides PHY interface for the USBCON phy, which acts as + an intermediary between the USB controller and underlying PHYs. + config PHY_EXYNOS5_USBDRD tristate "Exynos5 SoC series USB DRD PHY driver" depends on (ARCH_EXYNOS && OF) || COMPILE_TEST diff --git a/drivers/phy/samsung/Makefile b/drivers/phy/samsung/Makefile index fea1f96d0..e2686a3f5 100644 --- a/drivers/phy/samsung/Makefile +++ b/drivers/phy/samsung/Makefile @@ -14,5 +14,6 @@ phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4210_USB2) += phy-exynos4210-usb2.o phy-exynos-usb2-$(CONFIG_PHY_EXYNOS4X12_USB2) += phy-exynos4x12-usb2.o phy-exynos-usb2-$(CONFIG_PHY_EXYNOS5250_USB2) += phy-exynos5250-usb2.o phy-exynos-usb2-$(CONFIG_PHY_S5PV210_USB2) += phy-s5pv210-usb2.o +obj-$(CONFIG_PHY_EXYNOS2200_USBCON) += phy-exynos2200-usbcon.o obj-$(CONFIG_PHY_EXYNOS5_USBDRD) += phy-exynos5-usbdrd.o obj-$(CONFIG_PHY_EXYNOS5250_SATA) += phy-exynos5250-sata.o diff --git a/drivers/phy/samsung/phy-exynos2200-usbcon.c b/drivers/phy/samsung/phy-exynos2200-usbcon.c new file mode 100644 index 000000000..aad59349e --- /dev/null +++ b/drivers/phy/samsung/phy-exynos2200-usbcon.c @@ -0,0 +1,250 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Ivaylo Ivanov + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define EXYNOS2200_USBCON_LINKCTRL 0x4 +#define LINKCTRL_FORCE_QACT BIT(8) + +#define EXYNOS2200_USBCON_UTMI_CTRL 0x10 +#define UTMI_CTRL_FORCESLEEP BIT(13) +#define UTMI_CTRL_FORCESUSPEND BIT(12) +#define UTMI_CTRL_FORCE_VBUSVALID BIT(1) +#define UTMI_CTRL_FORCE_BVALID BIT(0) + +#define EXYNOS2200_USBCON_LINK_CLKRST 0xc +#define LINK_CLKRST_SW_RST BIT(0) + +struct exynos2200_usbcon_phy_drvdata { + const char * const *clk_names; + int num_clks; +}; + +struct exynos2200_usbcon_phy { + struct phy *phy; + void __iomem *base; + struct regmap *reg_pmu; + struct clk_bulk_data *clks; + const struct exynos2200_usbcon_phy_drvdata *drv_data; + u32 pmu_offset; + struct phy *hs_phy; +}; + +static void exynos2200_usbcon_phy_isol(struct exynos2200_usbcon_phy *inst, + bool isolate) +{ + unsigned int val; + + if (!inst->reg_pmu) + return; + + val = isolate ? 0 : EXYNOS4_PHY_ENABLE; + + regmap_update_bits(inst->reg_pmu, inst->pmu_offset, + EXYNOS4_PHY_ENABLE, val); +} + +static void exynos2200_usbcon_phy_write_mask(void __iomem *base, u32 offset, + u32 mask, u32 val) +{ + u32 reg; + + reg = readl(base + offset); + reg &= ~mask; + reg |= val & mask; + writel(reg, base + offset); + + /* Ensure above write is completed */ + readl(base + offset); +} + +static int exynos2200_usbcon_phy_init(struct phy *p) +{ + int ret; + struct exynos2200_usbcon_phy *phy = phy_get_drvdata(p); + + /* Power-on PHY ... */ + ret = clk_bulk_prepare_enable(phy->drv_data->num_clks, phy->clks); + if (ret) + return ret; + + /* + * ... and ungate power via PMU. Without this here, we can't access + * registers + */ + exynos2200_usbcon_phy_isol(phy, false); + + /* + * Disable HWACG (hardware auto clock gating control). This will force + * QACTIVE signal in Q-Channel interface to HIGH level, to make sure + * the PHY clock is not gated by the hardware. + */ + exynos2200_usbcon_phy_write_mask(phy->base, EXYNOS2200_USBCON_LINKCTRL, + LINKCTRL_FORCE_QACT, + LINKCTRL_FORCE_QACT); + + /* Reset Link */ + exynos2200_usbcon_phy_write_mask(phy->base, + EXYNOS2200_USBCON_LINK_CLKRST, + LINK_CLKRST_SW_RST, + LINK_CLKRST_SW_RST); + + fsleep(10); /* required after POR high */ + exynos2200_usbcon_phy_write_mask(phy->base, + EXYNOS2200_USBCON_LINK_CLKRST, + LINK_CLKRST_SW_RST, 0); + + exynos2200_usbcon_phy_write_mask(phy->base, + EXYNOS2200_USBCON_UTMI_CTRL, + UTMI_CTRL_FORCESLEEP | + UTMI_CTRL_FORCESUSPEND, + 0); + + exynos2200_usbcon_phy_write_mask(phy->base, + EXYNOS2200_USBCON_UTMI_CTRL, + UTMI_CTRL_FORCE_BVALID | + UTMI_CTRL_FORCE_VBUSVALID, + UTMI_CTRL_FORCE_BVALID | + UTMI_CTRL_FORCE_VBUSVALID); + + return phy_init(phy->hs_phy); +} + +static int exynos2200_usbcon_phy_exit(struct phy *p) +{ + struct exynos2200_usbcon_phy *phy = phy_get_drvdata(p); + int ret; + + ret = phy_exit(phy->hs_phy); + if (ret) + return ret; + + exynos2200_usbcon_phy_write_mask(phy->base, + EXYNOS2200_USBCON_UTMI_CTRL, + UTMI_CTRL_FORCESLEEP | + UTMI_CTRL_FORCESUSPEND, + UTMI_CTRL_FORCESLEEP | + UTMI_CTRL_FORCESUSPEND); + + exynos2200_usbcon_phy_write_mask(phy->base, + EXYNOS2200_USBCON_LINK_CLKRST, + LINK_CLKRST_SW_RST, + LINK_CLKRST_SW_RST); + + /* Gate power via PMU */ + exynos2200_usbcon_phy_isol(phy, true); + + clk_bulk_disable_unprepare(phy->drv_data->num_clks, phy->clks); + + return 0; +} + +static const struct phy_ops exynos2200_usbcon_phy_ops = { + .init = exynos2200_usbcon_phy_init, + .exit = exynos2200_usbcon_phy_exit, + .owner = THIS_MODULE, +}; + +static int exynos2200_usbcon_phy_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct exynos2200_usbcon_phy *phy; + const struct exynos2200_usbcon_phy_drvdata *drv_data; + struct phy_provider *phy_provider; + struct phy *generic_phy; + int ret; + + phy = devm_kzalloc(dev, sizeof(*phy), GFP_KERNEL); + if (!phy) + return -ENOMEM; + + drv_data = of_device_get_match_data(dev); + if (!drv_data) + return -EINVAL; + phy->drv_data = drv_data; + + phy->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(phy->base)) + return PTR_ERR(phy->base); + + phy->clks = devm_kcalloc(dev, drv_data->num_clks, + sizeof(*phy->clks), GFP_KERNEL); + if (!phy->clks) + return -ENOMEM; + + for (int i = 0; i < drv_data->num_clks; ++i) + phy->clks[i].id = drv_data->clk_names[i]; + + ret = devm_clk_bulk_get(dev, phy->drv_data->num_clks, + phy->clks); + if (ret) + return dev_err_probe(dev, ret, + "failed to get phy clock(s)\n"); + + phy->reg_pmu = syscon_regmap_lookup_by_phandle_args(dev->of_node, + "samsung,pmu-syscon", + 1, &phy->pmu_offset); + if (IS_ERR(phy->reg_pmu)) { + dev_err(dev, "Failed to lookup PMU regmap\n"); + return PTR_ERR(phy->reg_pmu); + } + + phy->hs_phy = devm_of_phy_get_by_index(dev, dev->of_node, 0); + if (IS_ERR(phy->hs_phy)) + return dev_err_probe(dev, PTR_ERR(phy->hs_phy), + "failed to get hs_phy\n"); + + generic_phy = devm_phy_create(dev, NULL, &exynos2200_usbcon_phy_ops); + if (IS_ERR(generic_phy)) + return dev_err_probe(dev, PTR_ERR(generic_phy), + "failed to create phy %d\n", ret); + + dev_set_drvdata(dev, phy); + phy_set_drvdata(generic_phy, phy); + + phy_provider = 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 provider\n"); + + return 0; +} + +static const char * const exynos2200_clk_names[] = { + "bus", +}; + +static const struct exynos2200_usbcon_phy_drvdata exynos2200_usbcon_phy = { + .clk_names = exynos2200_clk_names, + .num_clks = ARRAY_SIZE(exynos2200_clk_names), +}; + +static const struct of_device_id exynos2200_usbcon_phy_of_match_table[] = { + { + .compatible = "samsung,exynos2200-usbcon-phy", + .data = &exynos2200_usbcon_phy, + }, { }, +}; +MODULE_DEVICE_TABLE(of, exynos2200_usbcon_phy_of_match_table); + +static struct platform_driver exynos2200_usbcon_phy_driver = { + .probe = exynos2200_usbcon_phy_probe, + .driver = { + .name = "exynos2200-usbcon-phy", + .of_match_table = exynos2200_usbcon_phy_of_match_table, + }, +}; + +module_platform_driver(exynos2200_usbcon_phy_driver); +MODULE_DESCRIPTION("Exynos2200 USBCON PHY driver"); +MODULE_LICENSE("GPL");