From patchwork Mon Dec 3 03:15:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jay Fang X-Patchwork-Id: 10708567 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D379A17F0 for ; Mon, 3 Dec 2018 03:16:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C4C0A2A2A4 for ; Mon, 3 Dec 2018 03:16:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B91AD2A4A0; Mon, 3 Dec 2018 03:16:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 632E12A2A4 for ; Mon, 3 Dec 2018 03:16:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725847AbeLCDQD (ORCPT ); Sun, 2 Dec 2018 22:16:03 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:34678 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725803AbeLCDQD (ORCPT ); Sun, 2 Dec 2018 22:16:03 -0500 Received: from DGGEMS410-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 64FA36EBE0E50; Mon, 3 Dec 2018 11:15:59 +0800 (CST) Received: from localhost.localdomain (10.67.212.132) by DGGEMS410-HUB.china.huawei.com (10.3.19.210) with Microsoft SMTP Server id 14.3.408.0; Mon, 3 Dec 2018 11:15:50 +0800 From: Jay Fang To: CC: , , , , , , , Subject: [PATCH 3/3] spi: add ACPI support for SPI controller chip select lines(cs-gpios) Date: Mon, 3 Dec 2018 11:15:51 +0800 Message-ID: <1543806951-61848-4-git-send-email-f.fangjian@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1543806951-61848-1-git-send-email-f.fangjian@huawei.com> References: <1543806951-61848-1-git-send-email-f.fangjian@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.67.212.132] X-CFilter-Loop: Reflected Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This will also allow to use cs-gpios for chip select in ACPI code with no modification in the driver binding, like it be used in DT. We could share almost all of the code with the DT path. Signed-off-by: Jay Fang --- drivers/spi/spi.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 6ca5940..81d404a 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -2075,16 +2075,13 @@ struct spi_controller *__spi_alloc_controller(struct device *dev, } EXPORT_SYMBOL_GPL(__spi_alloc_controller); -#ifdef CONFIG_OF -static int of_spi_register_master(struct spi_controller *ctlr) +static int __spi_register_controller(struct spi_controller *ctlr) { int nb, i, *cs; struct device_node *np = ctlr->dev.of_node; + struct gpio_desc *desc; - if (!np) - return 0; - - nb = of_gpio_named_count(np, "cs-gpios"); + nb = gpiod_count(&ctlr->dev, "cs"); ctlr->num_chipselect = max_t(int, nb, ctlr->num_chipselect); /* Return error only for an incorrectly formed cs-gpios property */ @@ -2103,17 +2100,20 @@ static int of_spi_register_master(struct spi_controller *ctlr) for (i = 0; i < ctlr->num_chipselect; i++) cs[i] = -ENOENT; - for (i = 0; i < nb; i++) - cs[i] = of_get_named_gpio(np, "cs-gpios", i); - - return 0; -} -#else -static int of_spi_register_master(struct spi_controller *ctlr) -{ + if (IS_ENABLED(CONFIG_OF) && np) { + for (i = 0; i < nb; i++) + cs[i] = of_get_named_gpio(np, "cs-gpios", i); + } else if (IS_ENABLED(CONFIG_ACPI) && ACPI_HANDLE(&ctlr->dev)) { + for (i = 0; i < nb; i++) { + desc = devm_gpiod_get_index(&ctlr->dev, "cs", + i, GPIOD_ASIS); + if (IS_ERR(desc)) + continue; + cs[i] = desc_to_gpio(desc); + } + } return 0; } -#endif static int spi_controller_check_ops(struct spi_controller *ctlr) { @@ -2177,7 +2177,7 @@ int spi_register_controller(struct spi_controller *ctlr) return status; if (!spi_controller_is_slave(ctlr)) { - status = of_spi_register_master(ctlr); + status = __spi_register_controller(ctlr); if (status) return status; }