Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752115AbbKSFuo (ORCPT ); Thu, 19 Nov 2015 00:50:44 -0500 Received: from mleia.com ([178.79.152.223]:39162 "EHLO mail.mleia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750874AbbKSFum (ORCPT ); Thu, 19 Nov 2015 00:50:42 -0500 Message-ID: <564D632D.8020107@mleia.com> Date: Thu, 19 Nov 2015 07:50:37 +0200 From: Vladimir Zapolskiy User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Icedove/31.6.0 MIME-Version: 1.0 To: Cory Tusar , robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com, ijc+devicetree@hellion.org.uk, galak@codeaurora.org, agust@denx.de, gregkh@linuxfoundation.org CC: jic23@kernel.org, broonie@kernel.org, afd@ti.com, andrew@lunn.ch, Chris.Healy@zii.aero, Keith.Vennel@zii.aero, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 3/5] misc: eeprom_93xx46: Implement eeprom_93xx46 DT bindings. References: <1447903781-3910-1-git-send-email-cory.tusar@pid1solutions.com> <1447903781-3910-4-git-send-email-cory.tusar@pid1solutions.com> In-Reply-To: <1447903781-3910-4-git-send-email-cory.tusar@pid1solutions.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-49551924 X-CRM114-CacheID: sfid-20151119_055155_278556_CF748BE3 X-CRM114-Status: GOOD ( 27.57 ) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3834 Lines: 139 Hi Cory, On 19.11.2015 05:29, Cory Tusar wrote: > This commit implements bindings in the eeprom_93xx46 driver allowing > device word size and read-only attributes to be specified via > devicetree. > > Signed-off-by: Cory Tusar > --- > drivers/misc/eeprom/eeprom_93xx46.c | 62 +++++++++++++++++++++++++++++++++++++ > 1 file changed, 62 insertions(+) > > diff --git a/drivers/misc/eeprom/eeprom_93xx46.c b/drivers/misc/eeprom/eeprom_93xx46.c > index e1bf0a5..1f29d9a 100644 > --- a/drivers/misc/eeprom/eeprom_93xx46.c > +++ b/drivers/misc/eeprom/eeprom_93xx46.c > @@ -13,6 +13,8 @@ > #include > #include > #include > +#include > +#include > #include > #include > #include > @@ -294,12 +296,71 @@ static ssize_t eeprom_93xx46_store_erase(struct device *dev, > } > static DEVICE_ATTR(erase, S_IWUSR, NULL, eeprom_93xx46_store_erase); > > +#ifdef CONFIG_OF > +static const struct of_device_id eeprom_93xx46_of_table[] = { > + { .compatible = "eeprom-93xx46", }, > + {} > +}; > +MODULE_DEVICE_TABLE(of, eeprom_93xx46_of_table); > + Please move this declaration closer to struct spi_driver eeprom_93xx46_driver below. Also you can avoid #ifdef here, if you write .of_match_table = of_match_ptr(eeprom_93xx46_of_table) Whenever possible please avoid #ifdef's in .c files. > +static int eeprom_93xx46_probe_dt(struct spi_device *spi) > +{ > + struct device_node *np = spi->dev.of_node; > + struct eeprom_93xx46_platform_data *pd; > + u32 tmp; > + int ret; > + > + if (!of_match_device(eeprom_93xx46_of_table, &spi->dev)) > + return 0; > + > + pd = devm_kzalloc(&spi->dev, sizeof(*pd), GFP_KERNEL); > + if (!pd) > + return -ENOMEM; > + > + ret = of_property_read_u32(np, "data-size", &tmp); > + if (ret < 0) { > + dev_err(&spi->dev, "data-size property not found\n"); > + goto error_free; Because you use devm_* resource allocation in .probe, just return error. Plus I would suggest to change "data-size" property to an optional one, here I mean that if it is omitted, then by default consider pd->flags |= EE_ADDR8. > + } > + > + if (tmp == 8) { > + pd->flags |= EE_ADDR8; > + } else if (tmp == 16) { > + pd->flags |= EE_ADDR16; > + } else { > + dev_err(&spi->dev, "invalid data-size (%d)\n", tmp); > + goto error_free; Same here. > + } > + > + if (of_property_read_bool(np, "read-only")) > + pd->flags |= EE_READONLY; > + > + spi->dev.platform_data = pd; > + > + return 1; On success please return 0. > +error_free: > + devm_kfree(&spi->dev, pd); > + return ret; > +} > + > +#else > +static inline int eeprom_93xx46_probe_dt(struct spi_device *spi) > +{ > + return 0; > +} > +#endif > + I actually don't see a point to have #ifdef CONFIG_OF here. Instead please add a check for !spi->dev.of_node at the beginning of eeprom_93xx46_probe_dt() or in .probe() > static int eeprom_93xx46_probe(struct spi_device *spi) > { > struct eeprom_93xx46_platform_data *pd; > struct eeprom_93xx46_dev *edev; > int err; > > + err = eeprom_93xx46_probe_dt(spi); > + if (err < 0) > + return err; > + > pd = spi->dev.platform_data; > if (!pd) { > dev_err(&spi->dev, "missing platform data\n"); > @@ -370,6 +431,7 @@ static int eeprom_93xx46_remove(struct spi_device *spi) > static struct spi_driver eeprom_93xx46_driver = { > .driver = { > .name = "93xx46", > + .of_match_table = eeprom_93xx46_of_table, > }, > .probe = eeprom_93xx46_probe, > .remove = eeprom_93xx46_remove, > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/