From patchwork Mon Nov 13 12:28:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 164453 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b909:0:b0:403:3b70:6f57 with SMTP id t9csp1171990vqg; Mon, 13 Nov 2023 04:40:05 -0800 (PST) X-Google-Smtp-Source: AGHT+IFdyJxamHJCb31qYGMa4ShT0udu7i3bcq0vGa42vj3Qb7HwWFPfNKD2CoIjG1Wh+BCkBXLo X-Received: by 2002:a05:6a20:6a0b:b0:181:125:e85c with SMTP id p11-20020a056a206a0b00b001810125e85cmr8534734pzk.53.1699879205525; Mon, 13 Nov 2023 04:40:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699879205; cv=none; d=google.com; s=arc-20160816; b=JX1YgAoOdHMxggChxdHwITccUQbipVbli8pvS9HT+nK9RACe231Da/1Bgj9tvEwUrR 3ePz4V0RdGKVxx9g3DvOXjwhqmHSoK74KdAn5x50VQ1KOA07x29cBz8JQscRbt2kIEVc aet2mzdCqSKIq4Tgal+SjzwTEX8IHVSRR7THGRbPt/mb5h93WiSwOHxPDWs15YdXVhM+ pRJyzEJjdPXBTiyKHJFks8yhxBUgZt68+X3Ql7173sqa7uNAJ9l8wxP7V7qVDGi7DnVn 8sseaQl1fj55AuVQtkbtSITFlleEAVyKUYf84tNW76p+avldP4sd5GHwDKAUyrXcRJ9J Zv2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=dRTSaitNdkK7+KLo0H73izU04I4VtYkn8ThJ14RXqao=; fh=J13qx93UTzLz3dGw/n+v71gzZeD9mVJceLIMAhbotuQ=; b=lYuh74/QdgDwDMbm98SMho7gabsuWQm8s1XqOyPe5zuNDVh76yfi5F5vL5pRVQAmmv pemBOH5NkuoY5gEJz6ss0jzDpxiyj9f3ynQxhahhpL48SFHrz7QOZvFrIGJy1qRblwz0 n3g73A32pYJg2NcTg7RKzI/gGSd01mBLpwMdLIaW+cNxpzQkCfoTcaRcJRHhPjJXkMW8 TkxjdRXdgpJTttnkCQCyydtvM89K0TmXhl2pGA51GgUQR9eC7ouqKwUAtfNrdKnbR7/o JPCeczGH27qnZWVJeZfFSmdA2vaQcIW7kbDEcHHrzrNiED0VVXTCbm9NhoKuPAHCTKKe oZdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fQs0wgSI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id dc15-20020a056a0035cf00b0068fe9c452acsi5800242pfb.376.2023.11.13.04.40.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Nov 2023 04:40:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fQs0wgSI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 9E2D8803047B; Mon, 13 Nov 2023 04:40:04 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229928AbjKMMkD (ORCPT + 29 others); Mon, 13 Nov 2023 07:40:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229470AbjKMMkB (ORCPT ); Mon, 13 Nov 2023 07:40:01 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A869CD79; Mon, 13 Nov 2023 04:39:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1699879198; x=1731415198; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=E7fDxJK51e9bco+AhBHJ0FtTr2XjHsY+0b0sdYUYno8=; b=fQs0wgSImwTyMkW8CuprQWa40kURnpXdlaKkXaNJAeoP2geR1ZFLkLvo AmJNYIsWs89s9AnNINjTJWTQOAMTjnh6bBWcSZZWwMjEMB9P0RVr0+cgA jTjffWPviUNYt8rI61jbQ0UHhTIp5e/TroIJZ9x8WCGCoaaviAJa8gr2D RCiemDP6okPz4EeWOmwomXV5OKYe5T2m3Ldya0I0148xlsLpdPGnq54nB LR9zjcrRe/0hLvdn4B4BSNI0ZWYSP21Jw+w8Ms0wJs7ryxAX2i+7vzMWt hBSCRYpBd0qw9fBhHcu+73wZnnobe3FhV3K1pcnSInRW+RoMdMrKjO/iE A==; X-IronPort-AV: E=McAfee;i="6600,9927,10892"; a="476646574" X-IronPort-AV: E=Sophos;i="6.03,299,1694761200"; d="scan'208";a="476646574" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Nov 2023 04:39:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10892"; a="1095740696" X-IronPort-AV: E=Sophos;i="6.03,299,1694761200"; d="scan'208";a="1095740696" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga005.fm.intel.com with ESMTP; 13 Nov 2023 04:39:56 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 402395C2; Mon, 13 Nov 2023 14:31:49 +0200 (EET) From: Andy Shevchenko To: Andy Shevchenko , Raag Jadav , Mika Westerberg , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org Cc: Andy Shevchenko , Linus Walleij Subject: [PATCH v2 1/2] pinctrl: intel: Revert "Unexport intel_pinctrl_probe()" Date: Mon, 13 Nov 2023 14:28:47 +0200 Message-ID: <20231113123147.4075203-2-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20231113123147.4075203-1-andriy.shevchenko@linux.intel.com> References: <20231113123147.4075203-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 13 Nov 2023 04:40:04 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782452537760942195 X-GMAIL-MSGID: 1782452537760942195 In order to prepare for a new coming driver export the original intel_pinctrl_probe() again. This reverts commit 0dd519e3784b13befa1cdfeff847a0885b06650f. Signed-off-by: Andy Shevchenko --- drivers/pinctrl/intel/pinctrl-intel.c | 5 +++-- drivers/pinctrl/intel/pinctrl-intel.h | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c index 62daf189d3f4..2367c2747a83 100644 --- a/drivers/pinctrl/intel/pinctrl-intel.c +++ b/drivers/pinctrl/intel/pinctrl-intel.c @@ -1504,8 +1504,8 @@ static int intel_pinctrl_probe_pwm(struct intel_pinctrl *pctrl, return PTR_ERR_OR_ZERO(pwm); } -static int intel_pinctrl_probe(struct platform_device *pdev, - const struct intel_pinctrl_soc_data *soc_data) +int intel_pinctrl_probe(struct platform_device *pdev, + const struct intel_pinctrl_soc_data *soc_data) { struct device *dev = &pdev->dev; struct intel_pinctrl *pctrl; @@ -1623,6 +1623,7 @@ static int intel_pinctrl_probe(struct platform_device *pdev, return 0; } +EXPORT_SYMBOL_NS_GPL(intel_pinctrl_probe, PINCTRL_INTEL); int intel_pinctrl_probe_by_hid(struct platform_device *pdev) { diff --git a/drivers/pinctrl/intel/pinctrl-intel.h b/drivers/pinctrl/intel/pinctrl-intel.h index e7d911a65584..fde65e18cd14 100644 --- a/drivers/pinctrl/intel/pinctrl-intel.h +++ b/drivers/pinctrl/intel/pinctrl-intel.h @@ -252,6 +252,9 @@ struct intel_pinctrl { int irq; }; +int intel_pinctrl_probe(struct platform_device *pdev, + const struct intel_pinctrl_soc_data *soc_data); + int intel_pinctrl_probe_by_hid(struct platform_device *pdev); int intel_pinctrl_probe_by_uid(struct platform_device *pdev); From patchwork Mon Nov 13 12:28:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 164455 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b909:0:b0:403:3b70:6f57 with SMTP id t9csp1172409vqg; Mon, 13 Nov 2023 04:40:56 -0800 (PST) X-Google-Smtp-Source: AGHT+IFEUR/+Q8ALZn9F3ldpJIEMzLKTAPRjp9pC4KiW6LbQGha7qUwZ0zoielnlY34+j5v/i7kp X-Received: by 2002:a17:903:485:b0:1cc:373b:f0e6 with SMTP id jj5-20020a170903048500b001cc373bf0e6mr3865714plb.67.1699879256395; Mon, 13 Nov 2023 04:40:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699879256; cv=none; d=google.com; s=arc-20160816; b=WGtv+YgEZB0BUc9+7dmLaXdAR0JitD6qaqenTF+Iu5tYpFaVmrbjdWK7CVjgFjl1xM G/Wo88etpq5VT7EIix0UZC3F2pOSvpCOvutrnQZspEN+KCjFogavSbT3/WnhaJlXLejs SptxP1cQA/RIgRP/iHZUa+Xg7gUdkirMAiaNrqKH8PKA9Y5V2ZImS7/lyiwk2tEsW5aq yxPSQSWUuTpW4QhbfeV+HYoObGvMfRDvDt6sQ/xE0zyOFrv97/JXs1Gr8iv+DSIUN+Vs XT4CF5xvsaPNoD389h0c0mxQYBJkX9uh1ArrZZcxbb6cdlQi8hTDm72HPAs2r2dJpExG /5uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=SqSvJmsTYxmfmufKqCxruQ0oCXeNunCuHMIOyFUo7NE=; fh=J13qx93UTzLz3dGw/n+v71gzZeD9mVJceLIMAhbotuQ=; b=h8un0WJaYmazb33yN1cZflLMYqlpsD5N3/NMhAGIWsy+rQCuIsDslKaRb+kLGPUWHo OGe4BEsGQHNwp1AMzsfek0yholY3rcTxEUMzs3Bry8ETkpNiU20WVkfMSVbR2r8RJ2Gb Ps+ThEHySpj5s3LySg54aECZoF4lp4fJ3TuSe3sP5+bAOpJIgI0qoeM40LCBSUW3HfTR R0nqmi5xJORZa6RXaN7qCJ+HAhGrMbixR3sXHBhMncAoXWjjwIpcWMNM5icRqWnytnKN O/J7mfmuR/a9Kqe1Rm8aXdo6mTo/cwe3laNmnz51P7bCwcpzR+4HCG9rmDjQW6GcOwEx tONA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=IHfX4N36; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id e1-20020a170902d38100b001c9e765e151si5431722pld.116.2023.11.13.04.40.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Nov 2023 04:40:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=IHfX4N36; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 9F4B480784DD; Mon, 13 Nov 2023 04:40:38 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229928AbjKMMkV (ORCPT + 29 others); Mon, 13 Nov 2023 07:40:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229470AbjKMMkU (ORCPT ); Mon, 13 Nov 2023 07:40:20 -0500 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 73943171F; Mon, 13 Nov 2023 04:40:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1699879216; x=1731415216; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=UjuuT7vwu5HyOEeJ+9HscGkad4vAsx/2d+SgD8lgWTY=; b=IHfX4N36qtQ92iiKgJWgpbj7N6d1tyqNrrxiEVqDCPVYo8hOVDSoV0r8 2eS4+RphgumBp6h3JTCmmCZ85TIMT8/1WS047mn8fZxOMiW4XkpS94qsG 0htaa2cr0iKk7ZlTYUzRe0HlcVUeL1lXrwvAzlOCXDoxyWssHoK1WgLJj UIwfpNb7/TySbLGc/jbuwP4l3iZBv+NR0zzmN2La2MSR4fJryrto6gvif tztpJmDGiyCFO1/GZLn3L7NjTDTcTmyMaNUy0ObGFb0M6bLbLMLMvzJdw 7Fa6fDQmNtu94M6S+5Jd5I2MQo+UwzRKlcJ/FTUCo6k+Gi9n1sgpGVD14 Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10892"; a="375454571" X-IronPort-AV: E=Sophos;i="6.03,299,1694761200"; d="scan'208";a="375454571" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Nov 2023 04:39:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10892"; a="767903399" X-IronPort-AV: E=Sophos;i="6.03,299,1694761200"; d="scan'208";a="767903399" Received: from black.fi.intel.com ([10.237.72.28]) by fmsmga007.fm.intel.com with ESMTP; 13 Nov 2023 04:39:56 -0800 Received: by black.fi.intel.com (Postfix, from userid 1003) id 4EB607F1; Mon, 13 Nov 2023 14:31:49 +0200 (EET) From: Andy Shevchenko To: Andy Shevchenko , Raag Jadav , Mika Westerberg , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org Cc: Andy Shevchenko , Linus Walleij Subject: [PATCH v2 2/2] pinctrl: intel: Add a generic Intel pin control platform driver Date: Mon, 13 Nov 2023 14:28:48 +0200 Message-ID: <20231113123147.4075203-3-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.43.0.rc1.1.gbec44491f096 In-Reply-To: <20231113123147.4075203-1-andriy.shevchenko@linux.intel.com> References: <20231113123147.4075203-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Mon, 13 Nov 2023 04:40:38 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782452591069877974 X-GMAIL-MSGID: 1782452591069877974 New generations of Intel platforms will provide better description of the pin control devices in the ACPI tables. Hence, we may provide a generic pin control platform driver to cover all of them. Currently the following Intel SoCs / platforms require this to be functional: - Lunar Lake Signed-off-by: Andy Shevchenko Acked-by: Mika Westerberg --- drivers/pinctrl/intel/Kconfig | 10 + drivers/pinctrl/intel/Makefile | 1 + .../pinctrl/intel/pinctrl-intel-platform.c | 225 ++++++++++++++++++ 3 files changed, 236 insertions(+) create mode 100644 drivers/pinctrl/intel/pinctrl-intel-platform.c diff --git a/drivers/pinctrl/intel/Kconfig b/drivers/pinctrl/intel/Kconfig index d66f4f6932d8..8c50bae85bca 100644 --- a/drivers/pinctrl/intel/Kconfig +++ b/drivers/pinctrl/intel/Kconfig @@ -37,6 +37,16 @@ config PINCTRL_INTEL select GPIOLIB select GPIOLIB_IRQCHIP +config PINCTRL_INTEL_PLATFORM + tristate "Intel pinctrl and GPIO platform driver" + depends on ACPI + select PINCTRL_INTEL + help + This pinctrl driver provides an interface that allows configuring + of Intel PCH pins and using them as GPIOs. Currently the following + Intel SoCs / platforms require this to be functional: + - Lunar Lake + config PINCTRL_ALDERLAKE tristate "Intel Alder Lake pinctrl and GPIO driver" select PINCTRL_INTEL diff --git a/drivers/pinctrl/intel/Makefile b/drivers/pinctrl/intel/Makefile index f6d30f2d973a..96c93ed4bd58 100644 --- a/drivers/pinctrl/intel/Makefile +++ b/drivers/pinctrl/intel/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_PINCTRL_TANGIER) += pinctrl-tangier.o obj-$(CONFIG_PINCTRL_MERRIFIELD) += pinctrl-merrifield.o obj-$(CONFIG_PINCTRL_MOOREFIELD) += pinctrl-moorefield.o obj-$(CONFIG_PINCTRL_INTEL) += pinctrl-intel.o +obj-$(CONFIG_PINCTRL_INTEL_PLATFORM) += pinctrl-intel-platform.o obj-$(CONFIG_PINCTRL_ALDERLAKE) += pinctrl-alderlake.o obj-$(CONFIG_PINCTRL_BROXTON) += pinctrl-broxton.o obj-$(CONFIG_PINCTRL_CANNONLAKE) += pinctrl-cannonlake.o diff --git a/drivers/pinctrl/intel/pinctrl-intel-platform.c b/drivers/pinctrl/intel/pinctrl-intel-platform.c new file mode 100644 index 000000000000..4a19ab3b4ba7 --- /dev/null +++ b/drivers/pinctrl/intel/pinctrl-intel-platform.c @@ -0,0 +1,225 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Intel PCH pinctrl/GPIO driver + * + * Copyright (C) 2021-2023, Intel Corporation + * Author: Andy Shevchenko + */ + +#include +#include +#include +#include +#include +#include + +#include + +#include "pinctrl-intel.h" + +struct intel_platform_pins { + struct pinctrl_pin_desc *pins; + size_t npins; +}; + +static int intel_platform_pinctrl_prepare_pins(struct device *dev, size_t base, + const char *name, u32 size, + struct intel_platform_pins *pins) +{ + struct pinctrl_pin_desc *descs; + char **pin_names; + unsigned int i; + + pin_names = devm_kasprintf_strarray(dev, name, size); + if (IS_ERR(pin_names)) + return PTR_ERR(pin_names); + + descs = devm_krealloc_array(dev, pins->pins, base + size, sizeof(*descs), GFP_KERNEL); + if (!descs) + return -ENOMEM; + + for (i = 0; i < size; i++) { + unsigned int pin_number = base + i; + char *pin_name = pin_names[i]; + struct pinctrl_pin_desc *desc; + + /* Unify delimiter for pin name */ + strreplace(pin_name, '-', '_'); + + desc = &descs[pin_number]; + desc->number = pin_number; + desc->name = pin_name; + } + + pins->pins = descs; + pins->npins = base + size; + + return 0; +} + +static int intel_platform_pinctrl_prepare_group(struct device *dev, + struct fwnode_handle *child, + struct intel_padgroup *gpp, + struct intel_platform_pins *pins) +{ + size_t base = pins->npins; + const char *name; + u32 size; + int ret; + + ret = fwnode_property_read_string(child, "intc-gpio-group-name", &name); + if (ret) + return ret; + + ret = fwnode_property_read_u32(child, "intc-gpio-pad-count", &size); + if (ret) + return ret; + + ret = intel_platform_pinctrl_prepare_pins(dev, base, name, size, pins); + if (ret) + return ret; + + gpp->base = base; + gpp->size = size; + gpp->gpio_base = INTEL_GPIO_BASE_MATCH; + + return 0; +} + +static int intel_platform_pinctrl_prepare_community(struct device *dev, + struct intel_community *community, + struct intel_platform_pins *pins) +{ + struct fwnode_handle *child; + struct intel_padgroup *gpps; + unsigned int group; + size_t ngpps; + u32 offset; + int ret; + + ret = device_property_read_u32(dev, "intc-gpio-pad-ownership-offset", &offset); + if (ret) + return ret; + community->padown_offset = offset; + + ret = device_property_read_u32(dev, "intc-gpio-pad-configuration-lock-offset", &offset); + if (ret) + return ret; + community->padcfglock_offset = offset; + + ret = device_property_read_u32(dev, "intc-gpio-host-software-pad-ownership-offset", &offset); + if (ret) + return ret; + community->hostown_offset = offset; + + ret = device_property_read_u32(dev, "intc-gpio-gpi-interrupt-status-offset", &offset); + if (ret) + return ret; + community->is_offset = offset; + + ret = device_property_read_u32(dev, "intc-gpio-gpi-interrupt-enable-offset", &offset); + if (ret) + return ret; + community->ie_offset = offset; + + ngpps = device_get_child_node_count(dev); + if (!ngpps) + return -ENODEV; + + gpps = devm_kcalloc(dev, ngpps, sizeof(*gpps), GFP_KERNEL); + if (!gpps) + return -ENOMEM; + + group = 0; + device_for_each_child_node(dev, child) { + struct intel_padgroup *gpp = &gpps[group]; + + gpp->reg_num = group; + + ret = intel_platform_pinctrl_prepare_group(dev, child, gpp, pins); + if (ret) + return ret; + + group++; + } + + community->ngpps = ngpps; + community->gpps = gpps; + + return 0; +} + +static int intel_platform_pinctrl_prepare_soc_data(struct device *dev, + struct intel_pinctrl_soc_data *data) +{ + struct intel_platform_pins pins = {}; + struct intel_community *communities; + size_t ncommunities; + unsigned int i; + int ret; + + /* Version 1.0 of the specification assumes only a single community per device node */ + ncommunities = 1, + communities = devm_kcalloc(dev, ncommunities, sizeof(*communities), GFP_KERNEL); + if (!communities) + return -ENOMEM; + + for (i = 0; i < ncommunities; i++) { + struct intel_community *community = &communities[i]; + + community->barno = i; + community->pin_base = pins.npins; + + ret = intel_platform_pinctrl_prepare_community(dev, community, &pins); + if (ret) + return ret; + + community->npins = pins.npins - community->pin_base; + } + + data->ncommunities = ncommunities; + data->communities = communities; + + data->npins = pins.npins; + data->pins = pins.pins; + + return 0; +} + +static int intel_platform_pinctrl_probe(struct platform_device *pdev) +{ + struct intel_pinctrl_soc_data *data; + struct device *dev = &pdev->dev; + int ret; + + data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + ret = intel_platform_pinctrl_prepare_soc_data(dev, data); + if (ret) + return ret; + + return intel_pinctrl_probe(pdev, data); +} + +static const struct acpi_device_id intel_platform_pinctrl_acpi_match[] = { + { "INTC105F" }, + { } +}; +MODULE_DEVICE_TABLE(acpi, intel_platform_pinctrl_acpi_match); + +static struct platform_driver intel_platform_pinctrl_driver = { + .probe = intel_platform_pinctrl_probe, + .driver = { + .name = "intel-pinctrl", + .acpi_match_table = intel_platform_pinctrl_acpi_match, + .pm = pm_sleep_ptr(&intel_pinctrl_pm_ops), + }, +}; +module_platform_driver(intel_platform_pinctrl_driver); + +MODULE_AUTHOR("Andy Shevchenko "); +MODULE_DESCRIPTION("Intel PCH pinctrl/GPIO driver"); +MODULE_LICENSE("GPL v2"); +MODULE_IMPORT_NS(PINCTRL_INTEL);