Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3405300imu; Mon, 14 Jan 2019 02:22:23 -0800 (PST) X-Google-Smtp-Source: ALg8bN6KC0IM+Q129vltnJvYf4zIoDlnA4ix+BybkNMx1O86xfZ8DzkYWxgJQwEaV1dICYrqpjGc X-Received: by 2002:a62:2c81:: with SMTP id s123mr24460104pfs.174.1547461343304; Mon, 14 Jan 2019 02:22:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547461343; cv=none; d=google.com; s=arc-20160816; b=ZwUUg7x+f2951lTSWu8qxK6OpRi5YMh7bWBPux+y6CKnf+stePfoKmP4DSD9ZW7iNN Y4nk9r/pMPzLKi7Y3rqrbh0qNr9PUqkU6kXHAoZzMnCA5vDUUdJ+BlH9fR9Tt3eORbrQ /gO8f5dgd4Ijrcqoq/EDvxYWbHlLCs4gDGNZdDZk6UA8LvGZjhFg6wjUkDxT+WQsj8T3 MdADoTHl7Juw7MfgFe5q4ipNRFfle3ZwJkG/AXaYEKueb0lwX1StI24nXtyh07rHB6gn EfGn5KxhQ4wSh0lwqXF5O4zGeg9NInWLxUD6U8ecdNfB8Pguuit/jBO1AHB6o5Vmv2w0 zghA== 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:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=5Tn/EFhs98eW0ffaWyqrAkjxL5wKmlxFqBOZ6ai8owE=; b=z9zbgmGxEqLLz0KiXW/OoHXC0xiXaYvLu8Wyoc5r/m76+JPK9Hix6wlAAmdKZudfd7 EF1krXrIJk52ncqI0Emy809ffgg8OuoZ5THDlLJBgXOgAV+N9DP9nvjzwyQuIdbTH52l fGvu4Sv8wxwAnBe+b0yEQH+JoTqv9yNWIyBYa9+4pHPzz7l3wiv42CdniwMLOyrGdhcM jwgrSaja+QDjK8tq/qofqo5omY+n4krddpNKWyaiZjS17f1MNdp3kMg5VIPywqGTSeIm ZwdxHwlD51GIcTvaoQIJ4t/JuJlOJYLSGT3jveml7Bc5PbUG87PjhFc0khhEXDuP4qxM CDMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=C2R0Ww9u; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 2si6561pla.156.2019.01.14.02.22.07; Mon, 14 Jan 2019 02:22:23 -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; dkim=pass header.i=@linaro.org header.s=google header.b=C2R0Ww9u; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726513AbfANKVC (ORCPT + 99 others); Mon, 14 Jan 2019 05:21:02 -0500 Received: from mail-lf1-f67.google.com ([209.85.167.67]:36576 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726064AbfANKVC (ORCPT ); Mon, 14 Jan 2019 05:21:02 -0500 Received: by mail-lf1-f67.google.com with SMTP id a16so15167441lfg.3 for ; Mon, 14 Jan 2019 02:21:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=5Tn/EFhs98eW0ffaWyqrAkjxL5wKmlxFqBOZ6ai8owE=; b=C2R0Ww9uSYLPg8u1uv7jKLtyg89Tb55OMTXU+Ozy0E3q4K6AxTt4lqhwd1NxC04Vsf Gb5GLkBXGs5W4WOAny3B3JIimokaYfUGg02/rDH+yRCaSGoCNV3MkXs4RI/uIyoUb5AW GPji3mIwMgxbFcywV4out/b3i3zVvAiQvd6R0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=5Tn/EFhs98eW0ffaWyqrAkjxL5wKmlxFqBOZ6ai8owE=; b=n42mMXuVqRtTz82MeRMx+3aGgUnKzA4vj6Q62tfE1nkhKtH4BDg0JNzChzSDZkZbZ2 //8qNYKpMOBee5Ucz96ckIstTveSzpx5/BRUv3GLfGDqLf3xhHeoD57IBoCi4Pg/G2Fw U8B8z4BlmhcEiNbUvO95h9Pb3d8n89w21Ok0UZ9V5uOJMd/PJk11KdsJ8mILUmJtNi8n wUpMFctiXSedNejy+7e3aFX3PCQIaD4JjoMlj1hhb9CWB4ymdNtbm+pk/nBMVQwDaJOs KIE9NTG/ahoox7JeHBJaPVS5Y0EogB74lbvVce1pbvpO8bRKGdLzjXiu/oL7nkArJK9x SuFg== X-Gm-Message-State: AJcUukfuwv+LdX67cy5DZGsbgzT31RGMhDcP/oUf43vZOug6M1Qy6Kis lhgMB8vUuxjPrPBsAIZnbZg1IqqonRr2L6qKOaVMeA== X-Received: by 2002:a19:8d01:: with SMTP id p1mr12288263lfd.149.1547461260452; Mon, 14 Jan 2019 02:21:00 -0800 (PST) MIME-Version: 1.0 References: <20190113135844.13109-1-j.neuschaefer@gmx.net> <20190113135844.13109-2-j.neuschaefer@gmx.net> In-Reply-To: <20190113135844.13109-2-j.neuschaefer@gmx.net> From: Linus Walleij Date: Mon, 14 Jan 2019 11:20:49 +0100 Message-ID: Subject: Re: [PATCH 1/2] gpio: hlwd: Add basic IRQ support To: =?UTF-8?Q?Jonathan_Neusch=C3=A4fer?= Cc: "open list:GPIO SUBSYSTEM" , Bartosz Golaszewski , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jonathan, thanks for the patch! It is looking very good. Some minor comments: On Sun, Jan 13, 2019 at 3:00 PM Jonathan Neusch=C3=A4fer wrote: > select GPIO_GENERIC > + select GPIOLIB_IRQCHIP Nice! > +static void hlwd_gpio_irqhandler(struct irq_desc *desc) > +{ > + struct hlwd_gpio *hlwd =3D > + gpiochip_get_data(irq_desc_get_handler_data(desc)); > + struct irq_chip *chip =3D irq_desc_get_chip(desc); > + unsigned long flags; > + unsigned long pending; > + int hwirq; > + > + spin_lock_irqsave(&hlwd->gpioc.bgpio_lock, flags); > + pending =3D hlwd->gpioc.read_reg(hlwd->regs + HW_GPIOB_INTFLAG); > + pending &=3D hlwd->gpioc.read_reg(hlwd->regs + HW_GPIOB_INTMASK); Please just access IO directly instead through the helper. ioread32be()/iowrite32be() I suppose? > +static void hlwd_gpio_irq_ack(struct irq_data *data) > +{ > + struct hlwd_gpio *hlwd =3D > + gpiochip_get_data(irq_data_get_irq_chip_data(data)); > + > + hlwd->gpioc.write_reg(hlwd->regs + HW_GPIOB_INTFLAG, BIT(data->hw= irq)); Dito. > + spin_lock_irqsave(&hlwd->gpioc.bgpio_lock, flags); > + mask =3D hlwd->gpioc.read_reg(hlwd->regs + HW_GPIOB_INTMASK); > + mask &=3D ~BIT(data->hwirq); > + hlwd->gpioc.write_reg(hlwd->regs + HW_GPIOB_INTMASK, mask); Dito. > + spin_lock_irqsave(&hlwd->gpioc.bgpio_lock, flags); > + mask =3D hlwd->gpioc.read_reg(hlwd->regs + HW_GPIOB_INTMASK); > + mask |=3D BIT(data->hwirq); > + hlwd->gpioc.write_reg(hlwd->regs + HW_GPIOB_INTMASK, mask); Dito. > + switch (flow_type) { > + case IRQ_TYPE_LEVEL_HIGH: > + level =3D hlwd->gpioc.read_reg(hlwd->regs + HW_GPIOB_INTL= VL); > + level |=3D BIT(data->hwirq); > + hlwd->gpioc.write_reg(hlwd->regs + HW_GPIOB_INTLVL, level= ); > + break; > + case IRQ_TYPE_LEVEL_LOW: > + level =3D hlwd->gpioc.read_reg(hlwd->regs + HW_GPIOB_INTL= VL); > + level &=3D ~BIT(data->hwirq); > + hlwd->gpioc.write_reg(hlwd->regs + HW_GPIOB_INTLVL, level= ); > + break; Dito. > + hlwd->irqc.name =3D "GPIO"; What about using something device-unique? hlwd->irqc.name =3D dev_name(&pdev->dev); for example? otherwise it looks fine! Yours, Linus Walleij