devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Cory Tusar <cory.tusar-J6Z/VSE8EyIAspv4Qr0y0gC/G2K4zDHf@public.gmane.org>
To: Vladimir Zapolskiy <vz-ChpfBGZJDbMAvxtiuMwx3w@public.gmane.org>,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	pawel.moll-5wv7dgnIgG8@public.gmane.org,
	mark.rutland-5wv7dgnIgG8@public.gmane.org,
	ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org,
	galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org,
	agust-ynQEQJNshbs@public.gmane.org,
	gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org
Cc: jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	afd-l0cyMroinI0@public.gmane.org,
	andrew-g2DYL2Zd6BY@public.gmane.org,
	Chris.Healy-c8ZVq/bFV1I@public.gmane.org,
	Keith.Vennel-c8ZVq/bFV1I@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v2 3/5] misc: eeprom_93xx46: Implement eeprom_93xx46 DT bindings.
Date: Mon, 23 Nov 2015 13:24:15 -0500	[thread overview]
Message-ID: <565359CF.6010607@pid1solutions.com> (raw)
In-Reply-To: <5650B999.8010905-ChpfBGZJDbMAvxtiuMwx3w@public.gmane.org>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 11/21/2015 01:36 PM, Vladimir Zapolskiy wrote:
> On 21.11.2015 06:40, Cory Tusar wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> On 11/19/2015 12:50 AM, Vladimir Zapolskiy wrote:
>>> 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 <cory.tusar-J6Z/VSE8EyIAspv4Qr0y0gC/G2K4zDHf@public.gmane.org>
>>>> ---
>>>>  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 <linux/kernel.h>
>>>>  #include <linux/module.h>
>>>>  #include <linux/mutex.h>
>>>> +#include <linux/of.h>
>>>> +#include <linux/of_device.h>
>>>>  #include <linux/slab.h>
>>>>  #include <linux/spi/spi.h>
>>>>  #include <linux/sysfs.h>
>>>> @@ -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.
>>
>> As Andrew noted in his follow-up, it's used in the function immediately
>> after this declaration.  Seems logical to leave it here?
> 
> IMO no, see my comment below.

...keep in mind also that it needs to be _here_ for quirk support (next
patch) as well.

>>> Also you can avoid #ifdef here, if you write
>>>
>>>    .of_match_table = of_match_ptr(eeprom_93xx46_of_table)
>>
>> Will change this to use of_match_ptr().
>>
>>> Whenever possible please avoid #ifdef's in .c files.
>>
>> Agreed.  #ifdef CONFIG_OF still seems to be fairly pervasive though...?
>>
> 
> In my opinion it is better to avoid it, and many nice drivers don't have
> #ifdef CONFIG_OF.
> 
>>>> +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;
> 
> This check above is redundant, please remove it.
> 
> Imagine, how can you get here !of_match_device(..) condition, if you
> have driver initialization from a valid device node?

Will fix.

>>>> +
>>>> +	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.
>>
>> Will fix.
>>
>>> 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.
>>
>> I don't see such an assumption as safe...data word size is an inherent
>> property of the device (or the way it's strapped on a given platform),
>> and should be required for proper operation.
>>
> 
> Ok.
> 
>>>> +	}
>>>> +
>>>> +	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.
>>
>> Will fix.
>>
>>>> +	}
>>>> +
>>>> +	if (of_property_read_bool(np, "read-only"))
>>>> +		pd->flags |= EE_READONLY;
>>>> +
>>>> +	spi->dev.platform_data = pd;
>>>> +
>>>> +	return 1;
>>>
>>> On success please return 0.
>>
>> Fixed.
>>
>>>> +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()
>>
>> How about...
>>
>> 	if (IS_ENABLED(CONFIG_OF) && spi->dev.of_node) {
>> 		err = eeprom_93xx46_probe_dt(spi);
>> 		if (err < 0)
>> 			return err;
>> 	}
>>
>> ...at the beginning of eeprom_93xx46_probe() (as below)?
>>
> 
> 	if (spi->dev.of_node) {
> 		err = eeprom_93xx46_probe_dt(spi);
> 		if (err < 0)
> 			return err;
> 	}
> 
> is good enough.
> 
> Condition (!IS_ENABLED(CONFIG_OF) && spi->dev.of_node) is always false.

Please re-read the above - there's no negation on the IS_ENABLED()
portion...  :)

That stated, a quick build test shows that just the check for
spi->dev.of_node is sufficient to short-circuit (at compile-time) the
DT-specific probe.

This driver previously supported instantiation only as a
platform_device; I'm trying not to break that, just add to it...

Thanks for all the review.

>>>>  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,
>>>>
>>
>>
> --
> With best wishes,
> Vladimir
> 


- -- 
Cory Tusar
Principal
PID 1 Solutions, Inc.


"There are two ways of constructing a software design.  One way is to
 make it so simple that there are obviously no deficiencies, and the
 other way is to make it so complicated that there are no obvious
 deficiencies."  --Sir Charles Anthony Richard Hoare

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iEYEARECAAYFAlZTWc8ACgkQHT1tsfGwHJ/mKwCgnmCkDTbUPjusqHFCcE37D6qs
Ht0AnR1NEIQ+OT9eO5l8DaQSWs1mlOR2
=VVAx
-----END PGP SIGNATURE-----
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2015-11-23 18:24 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-19  3:29 [PATCH v2 0/5] Devicetree support for misc/eeprom/eeprom_93xx46 Cory Tusar
2015-11-19  3:29 ` [PATCH v2 1/5] misc: eeprom_93xx46: Fix 16-bit read and write accesses Cory Tusar
     [not found] ` <1447903781-3910-1-git-send-email-cory.tusar-J6Z/VSE8EyIAspv4Qr0y0gC/G2K4zDHf@public.gmane.org>
2015-11-19  3:29   ` [PATCH v2 2/5] Documentation: devicetree: Add DT bindings to eeprom_93xx46 driver Cory Tusar
2015-11-19 14:59     ` Rob Herring
2015-11-19 17:30       ` Cory Tusar
2015-11-19  3:29 ` [PATCH v2 3/5] misc: eeprom_93xx46: Implement eeprom_93xx46 DT bindings Cory Tusar
2015-11-19  5:50   ` Vladimir Zapolskiy
     [not found]     ` <564D632D.8020107-ChpfBGZJDbMAvxtiuMwx3w@public.gmane.org>
2015-11-19 14:00       ` Andrew F. Davis
     [not found]         ` <564DD5E7.6080700-l0cyMroinI0@public.gmane.org>
2015-11-19 16:14           ` Vladimir Zapolskiy
2015-11-21  4:53         ` Cory Tusar
2015-11-21  4:40     ` Cory Tusar
     [not found]       ` <564FF5C5.2070107-J6Z/VSE8EyIAspv4Qr0y0gC/G2K4zDHf@public.gmane.org>
2015-11-21 18:36         ` Vladimir Zapolskiy
     [not found]           ` <5650B999.8010905-ChpfBGZJDbMAvxtiuMwx3w@public.gmane.org>
2015-11-23 18:24             ` Cory Tusar [this message]
2015-11-19  3:29 ` [PATCH v2 4/5] misc: eeprom_93xx46: Add quirks to support Atmel AT93C46D device Cory Tusar
     [not found]   ` <1447903781-3910-5-git-send-email-cory.tusar-J6Z/VSE8EyIAspv4Qr0y0gC/G2K4zDHf@public.gmane.org>
2015-11-19  5:59     ` Vladimir Zapolskiy
     [not found]       ` <564D654C.1080803-ChpfBGZJDbMAvxtiuMwx3w@public.gmane.org>
2015-11-23 17:44         ` Cory Tusar
2015-11-19  3:29 ` [PATCH v2 5/5] misc: eeprom_93xx46: Add support for a GPIO 'select' line Cory Tusar
2015-11-19  6:05   ` Vladimir Zapolskiy
     [not found]     ` <564D66BF.5010601-ChpfBGZJDbMAvxtiuMwx3w@public.gmane.org>
2015-11-19 14:18       ` Andrew Lunn
     [not found]         ` <20151119141810.GA30828-g2DYL2Zd6BY@public.gmane.org>
2015-11-19 16:52           ` Vladimir Zapolskiy
     [not found]             ` <564DFE69.6000203-ChpfBGZJDbMAvxtiuMwx3w@public.gmane.org>
2015-11-19 17:15               ` Andrew Lunn
2015-11-25  4:53     ` Cory Tusar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=565359CF.6010607@pid1solutions.com \
    --to=cory.tusar-j6z/vse8eyiaspv4qr0y0gc/g2k4zdhf@public.gmane.org \
    --cc=Chris.Healy-c8ZVq/bFV1I@public.gmane.org \
    --cc=Keith.Vennel-c8ZVq/bFV1I@public.gmane.org \
    --cc=afd-l0cyMroinI0@public.gmane.org \
    --cc=agust-ynQEQJNshbs@public.gmane.org \
    --cc=andrew-g2DYL2Zd6BY@public.gmane.org \
    --cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org \
    --cc=jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=pawel.moll-5wv7dgnIgG8@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=vz-ChpfBGZJDbMAvxtiuMwx3w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).