From patchwork Thu Feb 29 14:21:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Volodymyr Babchuk X-Patchwork-Id: 1906338 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=epam.com header.i=@epam.com header.a=rsa-sha256 header.s=selector2 header.b=MUPRhN6K; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tltjr0ySqz1yX7 for ; Fri, 1 Mar 2024 01:23:12 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 954FF880E3; Thu, 29 Feb 2024 15:22:22 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=epam.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=epam.com header.i=@epam.com header.b="MUPRhN6K"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 617D8880D5; Thu, 29 Feb 2024 15:21:21 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mx0b-0039f301.pphosted.com (mx0b-0039f301.pphosted.com [148.163.137.242]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id DAC18880CC for ; Thu, 29 Feb 2024 15:21:17 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=epam.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=prvs=978922fd78=volodymyr_babchuk@epam.com Received: from pps.filterd (m0174683.ppops.net [127.0.0.1]) by mx0b-0039f301.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41TEGl6d018534; Thu, 29 Feb 2024 14:21:15 GMT Received: from eur04-vi1-obe.outbound.protection.outlook.com (mail-vi1eur04lp2051.outbound.protection.outlook.com [104.47.14.51]) by mx0b-0039f301.pphosted.com (PPS) with ESMTPS id 3wjuj380gr-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Feb 2024 14:21:15 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z3+gkfX6TyK9WjD4+1UbJW4acZZL7c+2HDt3tR8RP258RCrbcDHnpCt7Ty4HhzEJdwVNoNYqiweONzoOlIDhX4j84FNA2+fQSfsL1HaCrZA+q7V2AvpqI3hWdTR6z+gbAM1NXCjdVTZHhe6okRWSPFvRHwDksvTMMeO4PFK0dNxRhS7U4/kAkws82nGoBZPSlRXG6E91S2n+3HA84ekq+Cq+hFgYGas03RCpNhNUvAk5sutS28fUQwkEhu7EnT79Y/kK9B9nEC46g2Hob2FbFaQttZSDevmmnUjIOz9SG5Z91GnaFKG2twQQ0bmhgfYgZoVRWk7ZfZ2nUtU40NOtFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QPCgxxMV0+eXhoqRz+9mUMZ4i/No9R0GRTL+FX2Ozmo=; b=dSXmsKus+DlobC2keCFXTHScyiLN+LMMoqt98B4ymyXlE14+cydeXvuq/rTy0DRqoBRc4IAbgXFDJLLvb52j6u3xUdMuA5Lw7hcukULUije1zhcxQIQhgsgbA/lhok3A7mJp1wtkN/yWST/tgjdwc0sEw349LY43u/rZcsYIy9tV1i4y255gR6rxkCIAC2lvkxNHTgKKXxcWXcmpkk5wxsQoB6j83cLZ5/OXY5T6znlkWfIQttSlDwVTpSXtg7LU4f5QYlYErqOYr63DZDSCGPmYuxG3lya9xHer6KeLuYqGvU5xiLrLpYJaZB/QhVOM8QbRIUqC7mfGqb8Fu0ogng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QPCgxxMV0+eXhoqRz+9mUMZ4i/No9R0GRTL+FX2Ozmo=; b=MUPRhN6K3PLsCO5NlgOmKf1SJK4+93tlFrTsw4mEmRN9lagO54wKLqFl5Xx7w9YL6KAOIWiVFYim4zRl/RWxlJs0YYpzZzckLTaVgRe8AUoTaC8TPpX63XH6pLPhEDQKe6HI04gODmqLgoIE/piD4Xbj1/0uFa1MXvob4h7sYUBAEeuHg6lRt1skoS71ZCQJNzmhiJQp9/lWlCJ6agsx/dB7rX7yJ/F+ZAd74Iv//IQJpiPodJHuZdv0FfQ2UmnE8G4/ncnzDwT4vrl5MDk4KGCnXPWbGUgHDyFr2lisOCres/vvqogJ00YDVyq01Ule+lt0/ohrLLcXg2J59B426g== Received: from DU5PR03MB10441.eurprd03.prod.outlook.com (2603:10a6:10:516::14) by AS8PR03MB7735.eurprd03.prod.outlook.com (2603:10a6:20b:405::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.41; Thu, 29 Feb 2024 14:21:09 +0000 Received: from DU5PR03MB10441.eurprd03.prod.outlook.com ([fe80::e157:6b89:169f:d30c]) by DU5PR03MB10441.eurprd03.prod.outlook.com ([fe80::e157:6b89:169f:d30c%7]) with mapi id 15.20.7316.039; Thu, 29 Feb 2024 14:21:09 +0000 From: Volodymyr Babchuk To: "u-boot@lists.denx.de" CC: Volodymyr Babchuk , Caleb Connolly , Neil Armstrong , Sumit Garg , Tom Rini Subject: [PATCH 7/8] pinctrl: qcom: add driver for SM8150 SoC Thread-Topic: [PATCH 7/8] pinctrl: qcom: add driver for SM8150 SoC Thread-Index: AQHaaxqKPu18ZIzGS0GuDCURpd5HDg== Date: Thu, 29 Feb 2024 14:21:09 +0000 Message-ID: <20240229142043.1263690-8-volodymyr_babchuk@epam.com> References: <20240229142043.1263690-1-volodymyr_babchuk@epam.com> In-Reply-To: <20240229142043.1263690-1-volodymyr_babchuk@epam.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.43.0 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DU5PR03MB10441:EE_|AS8PR03MB7735:EE_ x-ms-office365-filtering-correlation-id: 5258b225-501b-47ca-d32b-08dc3931acc7 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: T04Pr5EQc08Msw8IAAU0TNnsEhWfrl/MixSOhfOSAPvQaZgeUhdhI9Sv9lBS31SQgSgZP41mbdRVeoZYLYduhkQ5Lc91g9znDhx8K65EXUZRtO2QlXoFNv/zamGztV0mAvTzQ+2n4Rs8cK6TsLz9S0eD0+eRnWxLCEqRK4TCc+BkmXk4uH1xWx+bPnXz8YDS+lCC/SRFC+mm/k6USkiT6SaNt6yAgY6A+uG4t05NLbqVZlGfCzB+/TF6YQCZ4ZunGMFTJQKroSDN8XgErIx8TFO/6MNJS4PpfYrErd8SrQMBViEiQA5jqR+67cBTNQ3+5BJXoYqVaCxy8rx/n5tF+JBb4rLAbx0RkJjDMe/bMGDixdqxdJHIyKjXof9G0JHtuWBiS52sG712WlbdkJol6+Ypy9yGb/BqhDfGVfk827nHa8GVttsnGaQGO+jFhP1hTJySvhZaTlNIybnzF1KOItAvJSN6u/Od2TuwzQZGeD8OAe2qaXefdgJnBoP2bx4Sqk1vRH41u2NeKRizR+uZlSHgVyxEOjGMmi6nOwH7+5pgsWYZVQjOm5FWJ/MOVXIzz9p8LKt5Y/Gt4iC8jgvBJZTa6dvhR7MpFHM/5xvKpiPPnY+qjJytSdKtMstf/ldFdykzQjn097TnQhvXzJqWcJ+Dg8ag6GTs8wVd1vNpaX7V0/S+B4LstzomHz3VEb96pjrVhUtm5Ehb2VClpk9/2A== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU5PR03MB10441.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(38070700009); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?vPEZrznr0G7RVM8ftBOQdg5?= =?iso-8859-1?q?jZMPMWVwzu6lH5qQAtESRHcg9MWzvcHtRu5womE+keTIqpwM+W5HQpHgtNGE?= =?iso-8859-1?q?s2fenzwOdxuS+YZ3u1y5/pgIi9RbuFhljsfreo/vS/eLiY5kMhmKLVN6uRNM?= =?iso-8859-1?q?f6ZYAcSQlFx7RwjNtQhMUuCk3N4ImICHvZkLSU02cUCKw1zwBj4j7OYcoLW+?= =?iso-8859-1?q?u1DOMyY0CBj4JF8nSabNeaQYZjwkPz0PcFew+3sN0sG3ANfcf9XheQ/NaTs+?= =?iso-8859-1?q?4detJizlrskGTiOoZSwSN9mZL4qfwMJV+dbzsphs4re7NpzB5dRm5qJaIS4f?= =?iso-8859-1?q?ebDSbpfxGO23MgOj3VyxFh3VrePQBQXQcDndD/HfWG8OYk7Cw39Oe8rz68+L?= =?iso-8859-1?q?kv0W5QZXWJdzX/DYZ9LMQQxB0UEP1s6Up1iOpPbIDfR0vqe4ZlimTPvoIOUe?= =?iso-8859-1?q?bdrYn9fNDoruTMnMkJUf4875mXZKHJyYhLlUWRy/7Go2qYxh35Lr/tt9PutU?= =?iso-8859-1?q?9cUkvHkONoMx5AqM4JvMlM+s7qAcc2XDCirmh4LND76OVYS2BNN1QdmHwOur?= =?iso-8859-1?q?vkIeJiSd4D28nBkBeD9pZ30Pu652YYZiewBiqPFnKHocQUWAa/cz5ULZ/dmc?= =?iso-8859-1?q?bD6uls0Wfx0hvH8S/T5xFvM6D3U+2ENPeBElhMb90qee2k1wogp6Y7H2YF43?= =?iso-8859-1?q?QCdu9cgbX74olZT0kfl/gTGm1vrlNjSbW8NcNyGNbhLO9JpIQV/a/FhTE8WK?= =?iso-8859-1?q?XquuvZlxfVJPLEaHISaah81ghpbz9UwsKoJ/DfxEqPjzptJdo4mvy2++V24m?= =?iso-8859-1?q?70cT/ljSw5qLd1HaVWqHCkai+RMZAVXzgkE9G85YbGBVTAMgw92AbRbdKY2w?= =?iso-8859-1?q?SvocTBmjkzArj4VFPiNIXjN8v0bvKbIA1UNWsiLBdgiDyKjqaFYWKaFg3cTd?= =?iso-8859-1?q?Zy15ZiMA0S6EK5pgQf8CxDZJUzEyXuE5VQJ8NLe1b0N/tP4NnLjC1GE+jd5n?= =?iso-8859-1?q?loojU/qKe7CXVbiLHgnGKOXlC6kumkJopOveWfw9OYvXPlkbKG8PWtKivcgL?= =?iso-8859-1?q?QhEllemmLUBcKLJrrlmptCNL2w+kcJhkO2bp8Gje1uIS4KgCTkrOqkg1I/jW?= =?iso-8859-1?q?e4VcUVqpERRxnUzC+n72pg15O2GghJL3AuyEDLpx0YavBQ3uqF1gq5LXkaIG?= =?iso-8859-1?q?WBecOksZh5UEGoUeUZJHdRRi47kVSto4Sjk14XbVdC4sU3y5lRvvd0fz7th+?= =?iso-8859-1?q?J1vcbSVekf2Qdx7NHzvcPC971tr/BA8EA10lBvw/F4lYh3e3hUz1BcpwyONy?= =?iso-8859-1?q?LHNABmjb+NWIzo0brFcl1HceFAoX8EMYVRfFdBCMoDnfhmzB5c1s7cOtdEdt?= =?iso-8859-1?q?RkD0+6QWcWNbB27IZN/J1s3V34ydKv8isP/L7lkThhBGIk1oJt+l7LLgkvek?= =?iso-8859-1?q?josKmYuFdaRfaHCL0ZwIKCFUJzN4wAhGA7yvY0v52wXN+1oya5RAqL7VSsDH?= =?iso-8859-1?q?bYL6VWeSir80nSK/2PWM86xDVPeiEp+hHsvwxY2daKjpsyYBFTE2E0l5wK8p?= =?iso-8859-1?q?Dgktr7eWz/tVBr2GE8U1I91a7Zlfkj9iQpGm1qN9dsSwmHa2BM3o+w1Dvqc0?= =?iso-8859-1?q?EdC4rdIE7yuBOOul4NbNE8FPLtDGvym9xkZtk/A=3D=3D?= MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DU5PR03MB10441.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5258b225-501b-47ca-d32b-08dc3931acc7 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Feb 2024 14:21:09.4023 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Fu18kqCGzF4/ixbduPw344r+Npl4WcItyLeDxurTQRrvvvMnPdJH2dzh+dPFN2n8Hy/RCDPrVI5r3jVzDGZ6WdcqDQZlks5VarThtszmFtw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB7735 X-Proofpoint-GUID: Va4dk5jIQzt6_lY2XHFYjamd93XTK5LV X-Proofpoint-ORIG-GUID: Va4dk5jIQzt6_lY2XHFYjamd93XTK5LV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-29_02,2024-02-29_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 bulkscore=0 priorityscore=1501 adultscore=0 phishscore=0 impostorscore=0 mlxlogscore=999 mlxscore=0 spamscore=0 clxscore=1015 suspectscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402290110 X-Mailman-Approved-At: Thu, 29 Feb 2024 15:22:15 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Add pinctrl and GPIO driver for SM8150. Driver code is based on the similar U-Boot drivers. All constants are taken from the corresponding Linux driver. This drivers differs from the similar U-Boot drivers, because SM8150 SoC have different function IDs for the same functions on different pins. Signed-off-by: Volodymyr Babchuk --- drivers/pinctrl/qcom/Kconfig | 7 + drivers/pinctrl/qcom/Makefile | 1 + drivers/pinctrl/qcom/pinctrl-sm8150.c | 589 ++++++++++++++++++++++++++ 3 files changed, 597 insertions(+) create mode 100644 drivers/pinctrl/qcom/pinctrl-sm8150.c diff --git a/drivers/pinctrl/qcom/Kconfig b/drivers/pinctrl/qcom/Kconfig index 2fe6398147..290cefca47 100644 --- a/drivers/pinctrl/qcom/Kconfig +++ b/drivers/pinctrl/qcom/Kconfig @@ -41,6 +41,13 @@ config PINCTRL_QCOM_SDM845 Say Y here to enable support for pinctrl on the Snapdragon 845 SoC, as well as the associated GPIO driver. +config PINCTRL_QCOM_SM8150 + bool "Qualcomm SM8150 GCC" + select PINCTRL_QCOM + help + Say Y here to enable support for pinctrl on the Snapdragon SM8150 SoC, + as well as the associated GPIO driver. + endmenu endif diff --git a/drivers/pinctrl/qcom/Makefile b/drivers/pinctrl/qcom/Makefile index 6d9aca6d7b..3c7be4a685 100644 --- a/drivers/pinctrl/qcom/Makefile +++ b/drivers/pinctrl/qcom/Makefile @@ -8,3 +8,4 @@ obj-$(CONFIG_PINCTRL_QCOM_IPQ4019) += pinctrl-ipq4019.o obj-$(CONFIG_PINCTRL_QCOM_APQ8096) += pinctrl-apq8096.o obj-$(CONFIG_PINCTRL_QCOM_QCS404) += pinctrl-qcs404.o obj-$(CONFIG_PINCTRL_QCOM_SDM845) += pinctrl-sdm845.o +obj-$(CONFIG_PINCTRL_QCOM_SM8150) += pinctrl-sm8150.o diff --git a/drivers/pinctrl/qcom/pinctrl-sm8150.c b/drivers/pinctrl/qcom/pinctrl-sm8150.c new file mode 100644 index 0000000000..a6c14d7254 --- /dev/null +++ b/drivers/pinctrl/qcom/pinctrl-sm8150.c @@ -0,0 +1,589 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* + * Qualcomm SM8150 pinctrl and GPIO driver + * + * Volodymyr Babchuk + * Copyright (c) 2024 EPAM Systems. + * + * Based on similar U-Boot drivers. Constants were taken from the Linux driver + */ + +#include + +#include "pinctrl-qcom.h" + +#define WEST 0x00100000 +#define EAST 0x00500000 +#define NORTH 0x00900000 +#define SOUTH 0x00D00000 + +#define MAX_PIN_NAME_LEN 32 +static char pin_name[MAX_PIN_NAME_LEN] __section(".data"); + +enum sm8150_functions { + msm_mux_adsp_ext, + msm_mux_agera_pll, + msm_mux_aoss_cti, + msm_mux_atest_char, + msm_mux_atest_char0, + msm_mux_atest_char1, + msm_mux_atest_char2, + msm_mux_atest_char3, + msm_mux_atest_usb1, + msm_mux_atest_usb2, + msm_mux_atest_usb10, + msm_mux_atest_usb11, + msm_mux_atest_usb12, + msm_mux_atest_usb13, + msm_mux_atest_usb20, + msm_mux_atest_usb21, + msm_mux_atest_usb22, + msm_mux_atest_usb23, + msm_mux_audio_ref, + msm_mux_btfm_slimbus, + msm_mux_cam_mclk, + msm_mux_cci_async, + msm_mux_cci_i2c, + msm_mux_cci_timer0, + msm_mux_cci_timer1, + msm_mux_cci_timer2, + msm_mux_cci_timer3, + msm_mux_cci_timer4, + msm_mux_cri_trng, + msm_mux_cri_trng0, + msm_mux_cri_trng1, + msm_mux_dbg_out, + msm_mux_ddr_bist, + msm_mux_ddr_pxi0, + msm_mux_ddr_pxi1, + msm_mux_ddr_pxi2, + msm_mux_ddr_pxi3, + msm_mux_edp_hot, + msm_mux_edp_lcd, + msm_mux_emac_phy, + msm_mux_emac_pps, + msm_mux_gcc_gp1, + msm_mux_gcc_gp2, + msm_mux_gcc_gp3, + msm_mux_gpio, + msm_mux_jitter_bist, + msm_mux_hs1_mi2s, + msm_mux_hs2_mi2s, + msm_mux_hs3_mi2s, + msm_mux_lpass_slimbus, + msm_mux_mdp_vsync, + msm_mux_mdp_vsync0, + msm_mux_mdp_vsync1, + msm_mux_mdp_vsync2, + msm_mux_mdp_vsync3, + msm_mux_mss_lte, + msm_mux_m_voc, + msm_mux_nav_pps, + msm_mux_pa_indicator, + msm_mux_pci_e0, + msm_mux_pci_e1, + msm_mux_phase_flag, + msm_mux_pll_bist, + msm_mux_pll_bypassnl, + msm_mux_pll_reset, + msm_mux_pri_mi2s, + msm_mux_pri_mi2s_ws, + msm_mux_prng_rosc, + msm_mux_qdss, + msm_mux_qdss_cti, + msm_mux_qlink_enable, + msm_mux_qlink_request, + msm_mux_qspi0, + msm_mux_qspi1, + msm_mux_qspi2, + msm_mux_qspi3, + msm_mux_qspi_clk, + msm_mux_qspi_cs, + msm_mux_qua_mi2s, + msm_mux_qup0, + msm_mux_qup1, + msm_mux_qup2, + msm_mux_qup3, + msm_mux_qup4, + msm_mux_qup5, + msm_mux_qup6, + msm_mux_qup7, + msm_mux_qup8, + msm_mux_qup9, + msm_mux_qup10, + msm_mux_qup11, + msm_mux_qup12, + msm_mux_qup13, + msm_mux_qup14, + msm_mux_qup15, + msm_mux_qup16, + msm_mux_qup17, + msm_mux_qup18, + msm_mux_qup19, + msm_mux_qup_l4, + msm_mux_qup_l5, + msm_mux_qup_l6, + msm_mux_rgmii, + msm_mux_sdc4, + msm_mux_sd_write, + msm_mux_sec_mi2s, + msm_mux_spkr_i2s, + msm_mux_sp_cmu, + msm_mux_ter_mi2s, + msm_mux_tgu_ch0, + msm_mux_tgu_ch2, + msm_mux_tgu_ch1, + msm_mux_tgu_ch3, + msm_mux_tsense_pwm1, + msm_mux_tsense_pwm2, + msm_mux_tsif1, + msm_mux_tsif2, + msm_mux_uim1, + msm_mux_uim2, + msm_mux_uim_batt, + msm_mux_usb2phy_ac, + msm_mux_usb_phy, + msm_mux_vfr_1, + msm_mux_vsense_trigger, + msm_mux_wlan1_adc1, + msm_mux_wlan1_adc0, + msm_mux_wlan2_adc1, + msm_mux_wlan2_adc0, + msm_mux_wmss_reset, + msm_mux__, +}; + +#define MSM_PIN_FUNCTION(fname) \ + [msm_mux_##fname] = {#fname, msm_mux_##fname} + +static const struct pinctrl_function msm_pinctrl_functions[] = { + MSM_PIN_FUNCTION(adsp_ext), + MSM_PIN_FUNCTION(agera_pll), + MSM_PIN_FUNCTION(aoss_cti), + MSM_PIN_FUNCTION(ddr_pxi2), + MSM_PIN_FUNCTION(atest_char), + MSM_PIN_FUNCTION(atest_char0), + MSM_PIN_FUNCTION(atest_char1), + MSM_PIN_FUNCTION(atest_char2), + MSM_PIN_FUNCTION(atest_char3), + MSM_PIN_FUNCTION(audio_ref), + MSM_PIN_FUNCTION(atest_usb1), + MSM_PIN_FUNCTION(atest_usb2), + MSM_PIN_FUNCTION(atest_usb10), + MSM_PIN_FUNCTION(atest_usb11), + MSM_PIN_FUNCTION(atest_usb12), + MSM_PIN_FUNCTION(atest_usb13), + MSM_PIN_FUNCTION(atest_usb20), + MSM_PIN_FUNCTION(atest_usb21), + MSM_PIN_FUNCTION(atest_usb22), + MSM_PIN_FUNCTION(atest_usb23), + MSM_PIN_FUNCTION(btfm_slimbus), + MSM_PIN_FUNCTION(cam_mclk), + MSM_PIN_FUNCTION(cci_async), + MSM_PIN_FUNCTION(cci_i2c), + MSM_PIN_FUNCTION(cci_timer0), + MSM_PIN_FUNCTION(cci_timer1), + MSM_PIN_FUNCTION(cci_timer2), + MSM_PIN_FUNCTION(cci_timer3), + MSM_PIN_FUNCTION(cci_timer4), + MSM_PIN_FUNCTION(cri_trng), + MSM_PIN_FUNCTION(cri_trng0), + MSM_PIN_FUNCTION(cri_trng1), + MSM_PIN_FUNCTION(dbg_out), + MSM_PIN_FUNCTION(ddr_bist), + MSM_PIN_FUNCTION(ddr_pxi0), + MSM_PIN_FUNCTION(ddr_pxi1), + MSM_PIN_FUNCTION(ddr_pxi3), + MSM_PIN_FUNCTION(edp_hot), + MSM_PIN_FUNCTION(edp_lcd), + MSM_PIN_FUNCTION(emac_phy), + MSM_PIN_FUNCTION(emac_pps), + MSM_PIN_FUNCTION(gcc_gp1), + MSM_PIN_FUNCTION(gcc_gp2), + MSM_PIN_FUNCTION(gcc_gp3), + MSM_PIN_FUNCTION(gpio), + MSM_PIN_FUNCTION(hs1_mi2s), + MSM_PIN_FUNCTION(hs2_mi2s), + MSM_PIN_FUNCTION(hs3_mi2s), + MSM_PIN_FUNCTION(jitter_bist), + MSM_PIN_FUNCTION(lpass_slimbus), + MSM_PIN_FUNCTION(mdp_vsync), + MSM_PIN_FUNCTION(mdp_vsync0), + MSM_PIN_FUNCTION(mdp_vsync1), + MSM_PIN_FUNCTION(mdp_vsync2), + MSM_PIN_FUNCTION(mdp_vsync3), + MSM_PIN_FUNCTION(mss_lte), + MSM_PIN_FUNCTION(m_voc), + MSM_PIN_FUNCTION(nav_pps), + MSM_PIN_FUNCTION(pa_indicator), + MSM_PIN_FUNCTION(pci_e0), + MSM_PIN_FUNCTION(phase_flag), + MSM_PIN_FUNCTION(pll_bypassnl), + MSM_PIN_FUNCTION(pll_bist), + MSM_PIN_FUNCTION(pci_e1), + MSM_PIN_FUNCTION(pll_reset), + MSM_PIN_FUNCTION(pri_mi2s), + MSM_PIN_FUNCTION(pri_mi2s_ws), + MSM_PIN_FUNCTION(prng_rosc), + MSM_PIN_FUNCTION(qdss), + MSM_PIN_FUNCTION(qdss_cti), + MSM_PIN_FUNCTION(qlink_request), + MSM_PIN_FUNCTION(qlink_enable), + MSM_PIN_FUNCTION(qspi0), + MSM_PIN_FUNCTION(qspi1), + MSM_PIN_FUNCTION(qspi2), + MSM_PIN_FUNCTION(qspi3), + MSM_PIN_FUNCTION(qspi_clk), + MSM_PIN_FUNCTION(qspi_cs), + MSM_PIN_FUNCTION(qua_mi2s), + MSM_PIN_FUNCTION(qup0), + MSM_PIN_FUNCTION(qup1), + MSM_PIN_FUNCTION(qup2), + MSM_PIN_FUNCTION(qup3), + MSM_PIN_FUNCTION(qup4), + MSM_PIN_FUNCTION(qup5), + MSM_PIN_FUNCTION(qup6), + MSM_PIN_FUNCTION(qup7), + MSM_PIN_FUNCTION(qup8), + MSM_PIN_FUNCTION(qup9), + MSM_PIN_FUNCTION(qup10), + MSM_PIN_FUNCTION(qup11), + MSM_PIN_FUNCTION(qup12), + MSM_PIN_FUNCTION(qup13), + MSM_PIN_FUNCTION(qup14), + MSM_PIN_FUNCTION(qup15), + MSM_PIN_FUNCTION(qup16), + MSM_PIN_FUNCTION(qup17), + MSM_PIN_FUNCTION(qup18), + MSM_PIN_FUNCTION(qup19), + MSM_PIN_FUNCTION(qup_l4), + MSM_PIN_FUNCTION(qup_l5), + MSM_PIN_FUNCTION(qup_l6), + MSM_PIN_FUNCTION(rgmii), + MSM_PIN_FUNCTION(sdc4), + MSM_PIN_FUNCTION(sd_write), + MSM_PIN_FUNCTION(sec_mi2s), + MSM_PIN_FUNCTION(spkr_i2s), + MSM_PIN_FUNCTION(sp_cmu), + MSM_PIN_FUNCTION(ter_mi2s), + MSM_PIN_FUNCTION(tgu_ch0), + MSM_PIN_FUNCTION(tgu_ch1), + MSM_PIN_FUNCTION(tgu_ch2), + MSM_PIN_FUNCTION(tgu_ch3), + MSM_PIN_FUNCTION(tsense_pwm1), + MSM_PIN_FUNCTION(tsense_pwm2), + MSM_PIN_FUNCTION(tsif1), + MSM_PIN_FUNCTION(tsif2), + MSM_PIN_FUNCTION(uim1), + MSM_PIN_FUNCTION(uim2), + MSM_PIN_FUNCTION(uim_batt), + MSM_PIN_FUNCTION(usb2phy_ac), + MSM_PIN_FUNCTION(usb_phy), + MSM_PIN_FUNCTION(vfr_1), + MSM_PIN_FUNCTION(vsense_trigger), + MSM_PIN_FUNCTION(wlan1_adc0), + MSM_PIN_FUNCTION(wlan1_adc1), + MSM_PIN_FUNCTION(wlan2_adc0), + MSM_PIN_FUNCTION(wlan2_adc1), + MSM_PIN_FUNCTION(wmss_reset), +}; + +static const unsigned int sm8150_pin_offsets[] = { + [0] = SOUTH, [1] = SOUTH, [2] = SOUTH, [3] = SOUTH, + [4] = SOUTH, [5] = SOUTH, [6] = SOUTH, [7] = SOUTH, + [8] = NORTH, [9] = NORTH, [10] = NORTH, [11] = NORTH, + [12] = NORTH, [13] = NORTH, [14] = NORTH, [15] = NORTH, + [16] = NORTH, [17] = NORTH, [18] = NORTH, [19] = NORTH, + [20] = NORTH, [21] = EAST, [22] = EAST, [23] = EAST, + [24] = EAST, [25] = EAST, [26] = EAST, [27] = EAST, + [28] = EAST, [29] = EAST, [30] = EAST, [31] = NORTH, + [32] = NORTH, [33] = NORTH, [34] = NORTH, [35] = NORTH, + [36] = NORTH, [37] = NORTH, [38] = SOUTH, [39] = NORTH, + [40] = NORTH, [41] = NORTH, [42] = NORTH, [43] = EAST, + [44] = EAST, [45] = EAST, [46] = EAST, [47] = EAST, + [48] = EAST, [49] = EAST, [50] = EAST, [51] = SOUTH, + [52] = SOUTH, [53] = SOUTH, [54] = SOUTH, [55] = SOUTH, + [56] = SOUTH, [57] = SOUTH, [58] = SOUTH, [59] = SOUTH, + [60] = SOUTH, [61] = SOUTH, [62] = SOUTH, [63] = SOUTH, + [64] = SOUTH, [65] = SOUTH, [66] = SOUTH, [67] = SOUTH, + [68] = SOUTH, [69] = SOUTH, [70] = SOUTH, [71] = SOUTH, + [72] = SOUTH, [73] = SOUTH, [74] = SOUTH, [75] = SOUTH, + [76] = SOUTH, [77] = SOUTH, [78] = SOUTH, [79] = SOUTH, + [80] = SOUTH, [81] = SOUTH, [82] = SOUTH, [83] = NORTH, + [84] = NORTH, [85] = NORTH, [86] = NORTH, [87] = EAST, + [88] = NORTH, [89] = NORTH, [90] = NORTH, [91] = NORTH, + [92] = NORTH, [93] = NORTH, [94] = NORTH, [95] = NORTH, + [96] = NORTH, [97] = NORTH, [98] = SOUTH, [99] = SOUTH, + [100] = SOUTH, [101] = SOUTH, [102] = NORTH, [103] = NORTH, + [104] = NORTH, [105] = WEST, [106] = WEST, [107] = WEST, + [108] = WEST, [109] = WEST, [110] = WEST, [111] = WEST, + [112] = WEST, [113] = WEST, [114] = SOUTH, [115] = SOUTH, + [116] = SOUTH, [117] = SOUTH, [118] = SOUTH, [119] = SOUTH, + [120] = SOUTH, [121] = SOUTH, [122] = SOUTH, [123] = SOUTH, + [124] = SOUTH, [125] = WEST, [126] = SOUTH, [127] = SOUTH, + [128] = SOUTH, [129] = SOUTH, [130] = SOUTH, [131] = SOUTH, + [132] = SOUTH, [133] = SOUTH, [134] = SOUTH, [135] = SOUTH, + [136] = SOUTH, [137] = SOUTH, [138] = SOUTH, [139] = SOUTH, + [140] = SOUTH, [141] = SOUTH, [142] = SOUTH, [143] = SOUTH, + [144] = SOUTH, [145] = SOUTH, [146] = SOUTH, [147] = SOUTH, + [148] = SOUTH, [149] = SOUTH, [150] = SOUTH, [151] = SOUTH, + [152] = SOUTH, [153] = SOUTH, [154] = SOUTH, [155] = WEST, + [156] = WEST, [157] = WEST, [158] = WEST, [159] = WEST, + [160] = WEST, [161] = WEST, [162] = WEST, [163] = WEST, + [164] = WEST, [165] = WEST, [166] = WEST, [167] = WEST, + [168] = WEST, [169] = NORTH, [170] = NORTH, [171] = NORTH +}; + +typedef unsigned int msm_pin_function[10]; + +#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9) \ + [id] = { msm_mux_gpio, /* gpio mode */ \ + msm_mux_##f1, \ + msm_mux_##f2, \ + msm_mux_##f3, \ + msm_mux_##f4, \ + msm_mux_##f5, \ + msm_mux_##f6, \ + msm_mux_##f7, \ + msm_mux_##f8, \ + msm_mux_##f9 \ + } + +static const msm_pin_function sm8150_pin_functions[] = { + PINGROUP(0, qup0, _, _, _, _, _, _, _, _), + PINGROUP(1, qup0, _, _, _, _, _, _, _, _), + PINGROUP(2, qup0, _, _, _, _, _, _, _, _), + PINGROUP(3, qup0, _, _, _, _, _, _, _, _), + PINGROUP(4, qup6, rgmii, _, _, _, _, _, _, _), + PINGROUP(5, qup6, rgmii, _, _, _, _, _, _, _), + PINGROUP(6, qup6, rgmii, qup_l6, _, _, _, _, _, _), + PINGROUP(7, qup6, rgmii, qup_l5, _, _, _, _, _, _), + PINGROUP(8, mdp_vsync, _, _, _, _, _, _, _, _), + PINGROUP(9, mdp_vsync, edp_lcd, qup10, _, _, _, _, _, _), + PINGROUP(10, mdp_vsync, m_voc, edp_hot, qup10, _, _, _, _, _), + PINGROUP(11, qup10, _, _, _, _, _, _, _, _), + PINGROUP(12, qup10, _, _, _, _, _, _, _, _), + PINGROUP(13, cam_mclk, qdss, _, _, _, _, _, _, _), + PINGROUP(14, cam_mclk, qdss, _, _, _, _, _, _, _), + PINGROUP(15, cam_mclk, qdss, _, _, _, _, _, _, _), + PINGROUP(16, cam_mclk, qdss, _, _, _, _, _, _, _), + PINGROUP(17, cci_i2c, qdss, _, _, _, _, _, _, _), + PINGROUP(18, cci_i2c, phase_flag, _, qdss, _, _, _, _, _), + PINGROUP(19, cci_i2c, phase_flag, _, qdss, _, _, _, _, _), + PINGROUP(20, cci_i2c, phase_flag, _, qdss, _, _, _, _, _), + PINGROUP(21, cci_timer0, gcc_gp2, qdss, _, _, _, _, _, _), + PINGROUP(22, cci_timer1, gcc_gp3, qdss, _, _, _, _, _, _), + PINGROUP(23, cci_timer2, qup18, qdss, _, _, _, _, _, _), + PINGROUP(24, cci_timer3, cci_async, qup18, qdss, _, _, _, _, _), + PINGROUP(25, cci_timer4, cci_async, qup18, qdss, _, _, _, _, _), + PINGROUP(26, cci_async, qup18, qdss, _, _, _, _, _, _), + PINGROUP(27, qup15, _, qdss, _, _, _, _, _, _), + PINGROUP(28, qup15, qdss, _, _, _, _, _, _, _), + PINGROUP(29, qup15, qdss, _, _, _, _, _, _, _), + PINGROUP(30, qup15, qdss, _, _, _, _, _, _, _), + PINGROUP(31, cci_i2c, qdss, _, _, _, _, _, _, _), + PINGROUP(32, cci_i2c, qdss, _, _, _, _, _, _, _), + PINGROUP(33, cci_i2c, qup_l5, qdss, _, _, _, _, _, _), + PINGROUP(34, cci_i2c, qup_l6, _, _, _, _, _, _, _), + PINGROUP(35, pci_e0, _, _, _, _, _, _, _, _), + PINGROUP(36, pci_e0, _, _, _, _, _, _, _, _), + PINGROUP(37, qup_l4, agera_pll, _, _, _, _, _, _, _), + PINGROUP(38, usb_phy, _, _, _, _, _, _, _, _), + PINGROUP(39, qup9, qdss, _, _, _, _, _, _, _), + PINGROUP(40, qup9, qdss, _, _, _, _, _, _, _), + PINGROUP(41, qup9, qdss, _, _, _, _, _, _, _), + PINGROUP(42, qup9, qdss, _, _, _, _, _, _, _), + PINGROUP(43, qup13, _, _, _, _, _, _, _, _), + PINGROUP(44, qup13, _, _, _, _, _, _, _, _), + PINGROUP(45, qup13, qdss_cti, _, _, _, _, _, _, _), + PINGROUP(46, qup13, qdss_cti, _, _, _, _, _, _, _), + PINGROUP(47, qup14, qdss, _, _, _, _, _, _, _), + PINGROUP(48, qup14, qdss, _, _, _, _, _, _, _), + PINGROUP(49, qup14, _, qdss_cti, _, _, _, _, _, _), + PINGROUP(50, qup14, qdss_cti, _, _, _, _, _, _, _), + PINGROUP(51, qup4, _, _, _, _, _, _, _, _), + PINGROUP(52, qup4, _, _, _, _, _, _, _, _), + PINGROUP(53, qup4, _, _, _, _, _, _, _, _), + PINGROUP(54, qup4, _, _, _, _, _, _, _, _), + PINGROUP(55, qup17, qup19, phase_flag, _, _, _, _, _, _), + PINGROUP(56, qup17, qup19, qdss_cti, phase_flag, _, _, _, _, _), + PINGROUP(57, qup17, qup19, qdss_cti, phase_flag, _, _, _, _, _), + PINGROUP(58, qup17, qup19, qdss_cti, phase_flag, _, _, _, _, _), + PINGROUP(59, rgmii, qup_l4, phase_flag, _, atest_char, _, _, _, _), + PINGROUP(60, _, nav_pps, nav_pps, atest_usb2, _, _, _, _, _), + PINGROUP(61, qlink_request, _, _, _, _, _, _, _, _), + PINGROUP(62, qlink_enable, _, _, _, _, _, _, _, _), + PINGROUP(63, wmss_reset, atest_usb23, _, _, _, _, _, _, _), + PINGROUP(64, _, phase_flag, _, _, _, _, _, _, _), + PINGROUP(65, _, _, _, _, _, _, _, _, _), + PINGROUP(66, _, _, _, _, _, _, _, _, _), + PINGROUP(67, _, _, _, _, _, _, _, _, _), + PINGROUP(68, _, pa_indicator, phase_flag, _, _, _, _, _, _), + PINGROUP(69, mss_lte, _, _, _, _, _, _, _, _), + PINGROUP(70, mss_lte, _, _, _, _, _, _, _, _), + PINGROUP(71, _, _, _, _, _, _, _, _, _), + PINGROUP(72, _, _, _, _, _, _, _, _, _), + PINGROUP(73, _, _, _, _, _, _, _, _, _), + PINGROUP(74, _, _, _, _, _, _, _, _, _), + PINGROUP(75, _, _, _, _, _, _, _, _, _), + PINGROUP(76, _, _, _, nav_pps, nav_pps, phase_flag, _, _, _), + PINGROUP(77, _, _, _, nav_pps, nav_pps, _, _, _, _), + PINGROUP(78, _, _, _, _, _, _, _, _, _), + PINGROUP(79, _, _, phase_flag, _, _, _, _, _, _), + PINGROUP(80, _, _, phase_flag, _, _, _, _, _, _), + PINGROUP(81, _, _, _, nav_pps, nav_pps, qup_l4, mdp_vsync, emac_pps, _), + PINGROUP(82, _, _, _, nav_pps, nav_pps, qup_l5, mdp_vsync, _, _), + PINGROUP(83, qup12, qup16, _, qdss, _, _, _, _, _), + PINGROUP(84, qup12, qup16, _, _, _, _, _, _, _), + PINGROUP(85, qup12, qup16, _, _, _, _, _, _, _), + PINGROUP(86, qup12, qup16, _, _, _, _, _, _, _), + PINGROUP(87, _, _, _, _, _, _, _, _, _), + PINGROUP(88, tsif1, qup8, qspi_cs, tgu_ch3, _, _, _, _, _), + PINGROUP(89, tsif1, qup8, qspi0, mdp_vsync0, mdp_vsync1, mdp_vsync2, + mdp_vsync3, tgu_ch0, _), + PINGROUP(90, tsif1, qup8, qspi1, sdc4, phase_flag, tgu_ch1, _, _, + wlan1_adc1), + PINGROUP(91, tsif1, qup8, qspi2, sdc4, vfr_1, phase_flag, tgu_ch2, + _, _), + PINGROUP(92, tsif2, qup11, qspi_clk, sdc4, phase_flag, _, wlan2_adc1, + _, _), + PINGROUP(93, tsif2, qup11, qspi3, sdc4, phase_flag, _, wlan2_adc0, + _, _), + PINGROUP(94, tsif2, qup11, qspi_cs, sdc4, phase_flag, _, _, _, _), + PINGROUP(95, tsif2, qup11, sdc4, qup_l4, _, _, _, _, _), + PINGROUP(96, tsif2, qup_l5, phase_flag, _, _, _, _, _, _), + PINGROUP(97, sd_write, tsif1, qup_l6, _, _, _, _, _, _), + PINGROUP(98, qup7, ddr_bist, ddr_pxi3, _, _, _, _, _, _), + PINGROUP(99, qup7, ddr_bist, atest_usb13, ddr_pxi1, _, _, _, _, _), + PINGROUP(100, qup7, pll_bypassnl, atest_usb12, ddr_pxi1, _, _, _, _, _), + PINGROUP(101, qup7, pll_reset, ddr_pxi3, _, _, _, _, _, _), + PINGROUP(102, pci_e1, _, _, _, _, _, _, _, _), + PINGROUP(103, pci_e1, _, _, _, _, _, _, _, _), + PINGROUP(104, _, _, _, _, _, _, _, _, _), + PINGROUP(105, uim2, _, _, _, _, _, _, _, _), + PINGROUP(106, uim2, _, _, _, _, _, _, _, _), + PINGROUP(107, uim2, _, _, _, _, _, _, _, _), + PINGROUP(108, uim2, _, _, _, _, _, _, _, _), + PINGROUP(109, uim1, _, _, _, _, _, _, _, _), + PINGROUP(110, uim1, _, _, _, _, _, _, _, _), + PINGROUP(111, uim1, _, _, _, _, _, _, _, _), + PINGROUP(112, uim1, _, _, _, _, _, _, _, _), + PINGROUP(113, uim_batt, usb2phy_ac, aoss_cti, _, _, _, _, _, _), + PINGROUP(114, qup1, rgmii, phase_flag, _, _, _, _, _, _), + PINGROUP(115, qup1, rgmii, phase_flag, adsp_ext, _, _, _, _, _), + PINGROUP(116, qup1, rgmii, phase_flag, _, _, _, _, _, _), + PINGROUP(117, qup1, rgmii, phase_flag, _, qdss, _, _, _, _), + PINGROUP(118, rgmii, phase_flag, _, qdss, _, _, _, _, _), + PINGROUP(119, qup5, rgmii, phase_flag, _, qdss, _, _, _, _), + PINGROUP(120, qup5, rgmii, phase_flag, _, qdss, _, _, _, _), + PINGROUP(121, qup5, rgmii, phase_flag, _, qdss, _, _, _, _), + PINGROUP(122, qup5, rgmii, phase_flag, _, _, _, _, _, _), + PINGROUP(123, usb2phy_ac, qup_l6, atest_usb22, _, _, _, _, _, _), + PINGROUP(124, emac_phy, _, _, _, _, _, _, _, _), + PINGROUP(125, hs3_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(126, sec_mi2s, qup2, phase_flag, _, _, _, _, _, _), + PINGROUP(127, sec_mi2s, qup2, phase_flag, _, _, _, _, _, _), + PINGROUP(128, sec_mi2s, qup2, phase_flag, _, _, _, _, _, _), + PINGROUP(129, sec_mi2s, qup2, jitter_bist, atest_usb21, _, _, _, _, _), + PINGROUP(130, sec_mi2s, pll_bist, atest_usb20, atest_char0, + _, _, _, _, _), + PINGROUP(131, ter_mi2s, gcc_gp1, _, _, _, _, _, _, _), + PINGROUP(132, ter_mi2s, _, qdss, _, _, _, _, _, _), + PINGROUP(133, ter_mi2s, qdss, atest_char1, _, _, _, _, _, _), + PINGROUP(134, ter_mi2s, qdss, atest_char2, _, _, _, _, _, _), + PINGROUP(135, ter_mi2s, atest_char3, _, _, _, _, _, _, _), + PINGROUP(136, qua_mi2s, gcc_gp1, _, _, _, _, _, _, _), + PINGROUP(137, qua_mi2s, gcc_gp2, _, _, _, _, _, _, _), + PINGROUP(138, qua_mi2s, gcc_gp3, _, _, _, _, _, _, _), + PINGROUP(139, qua_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(140, qua_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(141, qua_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(142, qua_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(143, pri_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(144, pri_mi2s, qup3, phase_flag, _, ddr_pxi0, _, _, _, _), + PINGROUP(145, pri_mi2s_ws, qup3, phase_flag, ddr_bist, _, + vsense_trigger, atest_usb1, ddr_pxi0, _), + PINGROUP(146, pri_mi2s, qup3, ddr_bist, atest_usb11, ddr_pxi2, + _, _, _, _), + PINGROUP(147, pri_mi2s, qup3, dbg_out, atest_usb10, ddr_pxi2, + _, _, _, _), + PINGROUP(148, spkr_i2s, audio_ref, _, _, _, _, _, _, _), + PINGROUP(149, lpass_slimbus, spkr_i2s, _, _, _, _, _, _, _), + PINGROUP(150, lpass_slimbus, spkr_i2s, tsense_pwm1, tsense_pwm2, + _, _, _, _, _), + PINGROUP(151, lpass_slimbus, spkr_i2s, _, _, _, _, _, _, _), + PINGROUP(152, lpass_slimbus, spkr_i2s, _, _, _, _, _, _, _), + PINGROUP(153, btfm_slimbus, _, _, _, _, _, _, _, _), + PINGROUP(154, btfm_slimbus, _, _, _, _, _, _, _, _), + PINGROUP(155, hs1_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(156, hs1_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(157, hs1_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(158, hs1_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(159, hs1_mi2s, cri_trng0, _, _, _, _, _, _, _), + PINGROUP(160, hs2_mi2s, cri_trng1, _, _, _, _, _, _, _), + PINGROUP(161, hs2_mi2s, cri_trng, _, _, _, _, _, _, _), + PINGROUP(162, hs2_mi2s, sp_cmu, _, _, _, _, _, _, _), + PINGROUP(163, hs2_mi2s, prng_rosc, _, _, _, _, _, _, _), + PINGROUP(164, hs2_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(165, hs3_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(166, hs3_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(167, hs3_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(168, hs3_mi2s, _, _, _, _, _, _, _, _), + PINGROUP(169, _, _, _, _, _, _, _, _, _), + PINGROUP(170, _, _, _, _, _, _, _, _, _), + PINGROUP(171, _, _, _, _, _, _, _, _, _), + PINGROUP(172, _, _, _, _, _, _, _, _, _), + PINGROUP(173, _, _, _, _, _, _, _, _, _), + PINGROUP(174, _, _, _, _, _, _, _, _, _), +}; + +static const char *sm8150_get_function_name(struct udevice *dev, + unsigned int selector) +{ + return msm_pinctrl_functions[selector].name; +} + +static const char *sm8150_get_pin_name(struct udevice *dev, + unsigned int selector) +{ + snprintf(pin_name, MAX_PIN_NAME_LEN, "gpio%u", selector); + return pin_name; +} + +static unsigned int sm8150_get_function_mux(unsigned int pin, + unsigned int selector) +{ + unsigned int i; + const msm_pin_function *func = sm8150_pin_functions + pin; + + for (i = 0; i < 10; i++) + if ((*func)[i] == selector) + return i; + + pr_err("Can't find requested function for pin %u pin\n", pin); + return 0; +} + +static struct msm_pinctrl_data sm8150_data = { + .pin_data = { + .pin_offsets = sm8150_pin_offsets, + .pin_count = ARRAY_SIZE(sm8150_pin_offsets), + }, + .functions_count = ARRAY_SIZE(msm_pinctrl_functions), + .get_function_name = sm8150_get_function_name, + .get_function_mux = sm8150_get_function_mux, + .get_pin_name = sm8150_get_pin_name, +}; + +static const struct udevice_id msm_pinctrl_ids[] = { + { .compatible = "qcom,sm8150-pinctrl", .data = (ulong)&sm8150_data }, + { /* Sentinel */ } +}; + +U_BOOT_DRIVER(pinctrl_sm8150) = { + .name = "pinctrl_sm8150", + .id = UCLASS_NOP, + .of_match = msm_pinctrl_ids, + .ops = &msm_pinctrl_ops, + .bind = msm_pinctrl_bind, +};