From mboxrd@z Thu Jan 1 00:00:00 1970 From: Linus Walleij Subject: Re: [PATCH v4 09/10] gpio: Add a driver for Cadence I3C GPIO expander Date: Thu, 26 Apr 2018 10:44:26 +0200 Message-ID: References: <20180330074751.25987-1-boris.brezillon@bootlin.com> <20180330074751.25987-10-boris.brezillon@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Return-path: In-Reply-To: <20180330074751.25987-10-boris.brezillon@bootlin.com> Sender: linux-kernel-owner@vger.kernel.org To: Boris Brezillon Cc: Wolfram Sang , linux-i2c@vger.kernel.org, Jonathan Corbet , linux-doc@vger.kernel.org, Greg Kroah-Hartman , Arnd Bergmann , Przemyslaw Sroka , Arkadiusz Golec , Alan Douglas , Bartosz Folta , Damian Kos , Alicja Jurasik-Urbaniak , Cyprian Wronka , Suresh Punnoose , Rafal Ciepiela , Thomas Petazzoni , Nishanth Menon , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell List-Id: linux-i2c@vger.kernel.org On Fri, Mar 30, 2018 at 9:47 AM, Boris Brezillon wrote: > Add a driver for Cadence I3C GPIO expander. > > Signed-off-by: Boris Brezillon This is pretty much OK, and I don't want to raise the bar even higher for you to get this code into the kernel, so: Acked-by: Linus Walleij The following is an observation for future improvement: > +static int cdns_i3c_gpio_read_reg(struct cdns_i3c_gpio *gpioc, u8 reg, > + u8 *val) > +{ > + struct i3c_priv_xfer xfers[] = { > + { > + .len = sizeof(reg), > + .data.out = ®, > + }, > + { > + .rnw = true, > + .len = sizeof(*val), > + .data.in = val, > + }, > + }; > + > + return i3c_device_do_priv_xfers(gpioc->i3cdev, xfers, > + ARRAY_SIZE(xfers)); > +} > + > +static int cdns_i3c_gpio_write_reg(struct cdns_i3c_gpio *gpioc, u8 reg, > + u8 val) > +{ > + struct i3c_priv_xfer xfers[] = { > + { > + .len = sizeof(reg), > + .data.out = ®, > + }, > + { > + .len = sizeof(val), > + .data.out = &val, > + }, > + }; > + > + return i3c_device_do_priv_xfers(gpioc->i3cdev, xfers, > + ARRAY_SIZE(xfers)); > +} This is starting to resemble drivers/base/regmap/regmap-i2c.c Maybe we should very quickly add regmap-i3c.c as this infrastructre has had a great positive effect on may kernel subsystems. > +static int cdns_i3c_gpio_get_direction(struct gpio_chip *g, unsigned offset) > +{ > + struct cdns_i3c_gpio *gpioc = gpioc_to_cdns_gpioc(g); > + > + return gpioc->dir & BIT(offset); I would: return !!(gpioc->dir & BIT(offset)); So you clamp it to bit 0. Yours, Linus Walleij