Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp683074imu; Fri, 11 Jan 2019 07:18:40 -0800 (PST) X-Google-Smtp-Source: ALg8bN6y3PL8iO1XyK6yVEva1/PRpvYWMyJx4gNc+Y++kaj9JqHuoBhbXBqX8O8p8wP9DVhtiT9r X-Received: by 2002:a17:902:5a5:: with SMTP id f34mr15139444plf.161.1547219920887; Fri, 11 Jan 2019 07:18:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547219920; cv=none; d=google.com; s=arc-20160816; b=Mb3PlFHeFNIPL7XBKReSTR/9P/XDurt4Uk0MVm2TBwFe5TJTV28RhXsc1CtTFvqtxy /mDTkWm9RAh/7N9+5rIoOSOo9ip6MtSKgIhc0URO/IAVBXNO12cIrIDA8ZrMUJkqk+/m pUQ75YQVm3Wvdbs/1dt9v9bTs7xDvKS70CQBQ1QWylNPfcpsHrxEIcLRZtVNWnaL4dXo cQe1wuYdbOe5Wr20nnbSjH37NNT6QxTzXhYFywTZGwAp1NGV7ulDFuM509THqolJveX+ DcFtWDk0Y8UAdm8K9JF6DdMMuk82xjRok8lP3WGqyUMmgC1EAfx42NK74ylj3lE1SqkA Rkzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=z3il6FsZAkxrweavBfN5VcDg9Ta+eYW/EFGA91tdOEg=; b=LNOG375YkRyVTiIaAxk/pqhqMNp0khDySYH7zhWZAsWU/eIVh5LO+n/ZVv9AY8OvFJ 082cBZqXHFyjOMnC66Keo6sfgumrGvhUOZKY0pLt1AS5Pr5qG0nX5P/PfefUIConhVVT PlkXwhguzNzH+DfSVNNq4UpcMkfQt3pjyICtQf5CNr0JGLcE5kZmtvaWHzPmKtMjtorW YRUfhsvYnLOYRWmYy7V6XtLo0Yk8vBGnuYkLXx2bR2mK5Nr0l3NTQuypSl79IL4Y1Vhe 8Gt1rHAILIVinaYQLH/SR5yeXu1HIROKZV61AeD6pnrZGoL9A8vPQcv6l95rNZcAGP3s 4dcQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u123si15090726pgb.516.2019.01.11.07.18.25; Fri, 11 Jan 2019 07:18:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387587AbfAKPQ7 (ORCPT + 99 others); Fri, 11 Jan 2019 10:16:59 -0500 Received: from smtp1.goneo.de ([85.220.129.30]:47332 "EHLO smtp1.goneo.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731231AbfAKPQ7 (ORCPT ); Fri, 11 Jan 2019 10:16:59 -0500 Received: from localhost (localhost [127.0.0.1]) by smtp1.goneo.de (Postfix) with ESMTP id 62BB223F4D5; Fri, 11 Jan 2019 16:16:55 +0100 (CET) X-Virus-Scanned: by goneo X-Spam-Flag: NO X-Spam-Score: -3.147 X-Spam-Level: X-Spam-Status: No, score=-3.147 tagged_above=-999 tests=[ALL_TRUSTED=-1, AWL=-0.247, BAYES_00=-1.9] autolearn=ham Received: from smtp1.goneo.de ([127.0.0.1]) by localhost (smtp1.goneo.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id mjhIMb_oz8za; Fri, 11 Jan 2019 16:16:54 +0100 (CET) Received: from lem-wkst-02.lemonage.de. (hq.lemonage.de [87.138.178.34]) by smtp1.goneo.de (Postfix) with ESMTPA id 4AF0523F0D5; Fri, 11 Jan 2019 16:16:54 +0100 (CET) From: Lars Poeschel To: Linus Walleij , linux-gpio@vger.kernel.org (open list:PIN CONTROL SUBSYSTEM), linux-kernel@vger.kernel.org (open list) Cc: Lars Poeschel Subject: [PATCH] pinctrl: mcp23s08: Allocate irq_chip dynamic Date: Fri, 11 Jan 2019 17:25:16 +0100 Message-Id: <20190111162516.28197-1-poeschel@lemonage.de> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Keeping the irq_chip definition static shares it with multiple instances of the mcp23s08 gpiochip in the system. This is bad and now we get this warning from gpiolib core: "detected irqchip that is shared with multiple gpiochips: please fix the driver." Hence, move the irq_chip definition from being driver static into the struct mcp23s08. So a unique irq_chip is used for each gpiochip instance. Signed-off-by: Lars Poeschel --- drivers/pinctrl/pinctrl-mcp23s08.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c index b03481ef99a1..3b1785e56174 100644 --- a/drivers/pinctrl/pinctrl-mcp23s08.c +++ b/drivers/pinctrl/pinctrl-mcp23s08.c @@ -68,6 +68,7 @@ struct mcp23s08 { struct mutex lock; struct gpio_chip chip; + struct irq_chip irq_chip; struct regmap *regmap; struct device *dev; @@ -607,15 +608,6 @@ static void mcp23s08_irq_bus_unlock(struct irq_data *data) mutex_unlock(&mcp->lock); } -static struct irq_chip mcp23s08_irq_chip = { - .name = "gpio-mcp23xxx", - .irq_mask = mcp23s08_irq_mask, - .irq_unmask = mcp23s08_irq_unmask, - .irq_set_type = mcp23s08_irq_set_type, - .irq_bus_lock = mcp23s08_irq_bus_lock, - .irq_bus_sync_unlock = mcp23s08_irq_bus_unlock, -}; - static int mcp23s08_irq_setup(struct mcp23s08 *mcp) { struct gpio_chip *chip = &mcp->chip; @@ -645,7 +637,7 @@ static int mcp23s08_irqchip_setup(struct mcp23s08 *mcp) int err; err = gpiochip_irqchip_add_nested(chip, - &mcp23s08_irq_chip, + &mcp->irq_chip, 0, handle_simple_irq, IRQ_TYPE_NONE); @@ -656,7 +648,7 @@ static int mcp23s08_irqchip_setup(struct mcp23s08 *mcp) } gpiochip_set_nested_irqchip(chip, - &mcp23s08_irq_chip, + &mcp->irq_chip, mcp->irq); return 0; @@ -1042,6 +1034,13 @@ static int mcp230xx_probe(struct i2c_client *client, return -ENOMEM; mcp->irq = client->irq; + mcp->irq_chip.name = dev_name(&client->dev); + mcp->irq_chip.irq_mask = mcp23s08_irq_mask; + mcp->irq_chip.irq_unmask = mcp23s08_irq_unmask; + mcp->irq_chip.irq_set_type = mcp23s08_irq_set_type; + mcp->irq_chip.irq_bus_lock = mcp23s08_irq_bus_lock; + mcp->irq_chip.irq_bus_sync_unlock = mcp23s08_irq_bus_unlock; + status = mcp23s08_probe_one(mcp, &client->dev, client, client->addr, id->driver_data, pdata->base, 0); if (status) @@ -1152,6 +1151,13 @@ static int mcp23s08_probe(struct spi_device *spi) chips--; data->mcp[addr] = &data->chip[chips]; data->mcp[addr]->irq = spi->irq; + data->mcp[addr]->irq_chip.name = dev_name(&spi->dev); + data->mcp[addr]->irq_chip.irq_mask = mcp23s08_irq_mask; + data->mcp[addr]->irq_chip.irq_unmask = mcp23s08_irq_unmask; + data->mcp[addr]->irq_chip.irq_set_type = mcp23s08_irq_set_type; + data->mcp[addr]->irq_chip.irq_bus_lock = mcp23s08_irq_bus_lock; + data->mcp[addr]->irq_chip.irq_bus_sync_unlock = + mcp23s08_irq_bus_unlock; status = mcp23s08_probe_one(data->mcp[addr], &spi->dev, spi, 0x40 | (addr << 1), type, pdata->base, addr); -- 2.20.1