From patchwork Fri Oct 21 00:30:12 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rajat Jain X-Patchwork-Id: 9387777 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B14A960487 for ; Fri, 21 Oct 2016 00:30:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A1305292A4 for ; Fri, 21 Oct 2016 00:30:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 95B3D29362; Fri, 21 Oct 2016 00:30:56 +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.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, 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 E8920292A4 for ; Fri, 21 Oct 2016 00:30:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755713AbcJUAaw (ORCPT ); Thu, 20 Oct 2016 20:30:52 -0400 Received: from mail-pf0-f176.google.com ([209.85.192.176]:33509 "EHLO mail-pf0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755491AbcJUAal (ORCPT ); Thu, 20 Oct 2016 20:30:41 -0400 Received: by mail-pf0-f176.google.com with SMTP id 128so45993164pfz.0 for ; Thu, 20 Oct 2016 17:30:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=NLNLeH9X4/q9CIT9iosqNZj93WtC7RTZj9pSa8VR9ic=; b=FPG3I4nwzhgXkIu+rUQyy9y9z38tTZZZjuKd3VcCPlVj/umzU+EgunmD4j6xepDYI+ 1H6Nu+8Z6Sey4Re1W8rv7WkeaxNgRy2bCiNVfycmSyNkBvsH4+2LpsfPcRrVgttHo7db vNRtAuDIC5kEzL01pXrPhdqyAXXuBTwSU4i6Vve4Nb5OTHHdaRs49KEegAjwGuN9dtSV DDoALinR81qC9RxnlKPVTQI2J+D4PhLj25InfxdUAn+OHL7XMdxg8ZQUJNdo/lPjIaSV YJM6Z4RZ2wfvPq8N80AiZddj8GXR3VgIg8zjfkmIntYBO0PMA659frS/RsRcGf+iiJAp QP9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=NLNLeH9X4/q9CIT9iosqNZj93WtC7RTZj9pSa8VR9ic=; b=FjZAWDCNSX2QFWytlfMeGyUiPxSuBbAWbK3v/oh9x9wHxSJM1HYPCiOOF4HrD+EW7e Mw7nQlq0jk/4hhAUoNTMON5vWwDQ5+5fg34sAx0do6wb8i2N9ied1RLS2unvjihgl8dv kr/mK0Pagefh5OoRf50W5bpdTtM12CLaDUbXlR8Bb6SiaPg4P13UFL3uh24sMg+8RH5G PQeLae98sSOjNHfpeTMr8/vnq+3pJfH25qgjLtvFZPc1egs1uZ18/c7p9mbCPYHIzjJV uNycGvLfkz6YbokReFz03vfkb2oZkApMOCTWIJTP4D7ar/+WdwVHd+D7ucK6mFKpo02c +R8Q== X-Gm-Message-State: AA6/9RkezFXqClZp1RP4ncqZjiAp+w4xoqsoupBN/I4PXENpLlezLFu54Oc/lVBWBT/vsxqn X-Received: by 10.98.137.206 with SMTP id n75mr6187568pfk.132.1477009839997; Thu, 20 Oct 2016 17:30:39 -0700 (PDT) Received: from rajat.mtv.corp.google.com ([172.22.64.13]) by smtp.gmail.com with ESMTPSA id r194sm52074496pfr.94.2016.10.20.17.30.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 20 Oct 2016 17:30:39 -0700 (PDT) From: Rajat Jain To: linux-wireless@vger.kernel.org, devicetree@vger.kernel.org, Xinming Hu , Amitkumar Karwar , Brian Norris , Kalle Valo , Rob Herring Cc: rajatxjain@gmail.com, Rajat Jain Subject: [PATCH v4] mwifiex: parse device tree node for PCIe Date: Thu, 20 Oct 2016 17:30:12 -0700 Message-Id: <1477009812-95032-1-git-send-email-rajatja@google.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <20161005194827.GA14626@localhost> References: <20161005194827.GA14626@localhost> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Xinming Hu This patch derives device tree node from pcie bus layer framework. Device tree bindings file has been renamed(marvell-sd8xxx.txt -> marvell-8xxx.txt) to accomodate PCIe changes. Signed-off-by: Xinming Hu Signed-off-by: Amitkumar Karwar Signed-off-by: Rajat Jain Reviewed-by: Brian Norris --- Since I need this patch and haven't seen updates, I thought I'll take a stab. v2: Included vendor and product IDs in compatible strings for PCIe chipsets(Rob Herring) v3: Patch is created using -M option so that it will only include diff of original and renamed files(Rob Herring) Resend v3: Resending the patch because I missed to include device tree mailing while sending v3. v4: Fix error handling, also move-on even if no device tree node is present. .../{marvell-sd8xxx.txt => marvell-8xxx.txt} | 8 +++-- drivers/net/wireless/marvell/mwifiex/pcie.c | 39 +++++++++++++++++++--- drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 3 +- 3 files changed, 42 insertions(+), 8 deletions(-) rename Documentation/devicetree/bindings/net/wireless/{marvell-sd8xxx.txt => marvell-8xxx.txt} (91%) diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt similarity index 91% rename from Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt rename to Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt index c421aba..dfe5f8e 100644 --- a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt +++ b/Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt @@ -1,8 +1,8 @@ -Marvell 8897/8997 (sd8897/sd8997) SDIO devices +Marvell 8897/8997 (sd8897/sd8997/pcie8997) SDIO/PCIE devices ------ -This node provides properties for controlling the marvell sdio wireless device. -The node is expected to be specified as a child node to the SDIO controller that +This node provides properties for controlling the marvell sdio/pcie wireless device. +The node is expected to be specified as a child node to the SDIO/PCIE controller that connects the device to the system. Required properties: @@ -10,6 +10,8 @@ Required properties: - compatible : should be one of the following: * "marvell,sd8897" * "marvell,sd8997" + * "pci11ab,2b42" + * "pci1b4b,2b42" Optional properties: diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c index 3c3c4f1..b3e6f06 100644 --- a/drivers/net/wireless/marvell/mwifiex/pcie.c +++ b/drivers/net/wireless/marvell/mwifiex/pcie.c @@ -37,6 +37,22 @@ static struct mwifiex_if_ops pcie_ops; static struct semaphore add_remove_card_sem; +static const struct of_device_id mwifiex_pcie_of_match_table[] = { + { .compatible = "pci11ab,2b42" }, + { .compatible = "pci1b4b,2b42" }, + { } +}; + +static int mwifiex_pcie_probe_of(struct device *dev) +{ + if (!of_match_node(mwifiex_pcie_of_match_table, dev->of_node)) { + pr_err("pcie device node not available"); + return -1; + } + + return 0; +} + static int mwifiex_map_pci_memory(struct mwifiex_adapter *adapter, struct sk_buff *skb, size_t size, int flags) @@ -178,6 +194,7 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct pcie_service_card *card; + int ret; pr_debug("info: vendor=0x%4.04X device=0x%4.04X rev=%d\n", pdev->vendor, pdev->device, pdev->revision); @@ -199,13 +216,27 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev, card->pcie.can_ext_scan = data->can_ext_scan; } - if (mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops, - MWIFIEX_PCIE)) { - pr_err("%s failed\n", __func__); - return -1; + /* device tree node parsing and platform specific configuration*/ + if (pdev->dev.of_node) { + ret = mwifiex_pcie_probe_of(&pdev->dev); + if (ret) { + dev_err(&pdev->dev, + "required compatible string missing\n"); + goto err_free; + } } + ret = mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops, + MWIFIEX_PCIE); + if (ret) { + pr_err("%s failed\n", __func__); + goto err_free; + } return 0; + +err_free: + kfree(card); + return ret; } /* diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c index 2a162c3..c8dccf5 100644 --- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c +++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c @@ -2218,7 +2218,8 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) * The cal-data can be read from device tree and/or * a configuration file and downloaded to firmware. */ - if (priv->adapter->iface_type == MWIFIEX_SDIO && + if ((priv->adapter->iface_type == MWIFIEX_SDIO || + priv->adapter->iface_type == MWIFIEX_PCIE) && adapter->dev->of_node) { adapter->dt_node = adapter->dev->of_node; if (of_property_read_u32(adapter->dt_node,