mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Marc Reilly <marc@cpdesign.com.au>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 7/7] drivers/eeprom: at24: add I2C eeprom driver for 24c01/02
Date: Wed, 1 Aug 2012 09:25:14 +0200	[thread overview]
Message-ID: <20120801072514.GD10670@pengutronix.de> (raw)
In-Reply-To: <3749450.lP8xDhAWsE@dev1>

Hi Marc,

On Mon, Jul 30, 2012 at 08:36:46PM +1000, Marc Reilly wrote:
> Thanks for comments. You are very thorough, and I mean that in a nice way.
> I gather you also have an at24 driver, did you support addressing offsets > 
> 256?
yes, our driver does. But it hardcodes two address bytes similar to your
driver hardcoding a single byte :-)

> > > +#define DRIVERNAME		"at24"
> > > +#define DEVICENAME		"eeprom"
> > 
> > why not DEVICENAME == DRIVERNAME?
> 
> Originally I'd started with DRIVENAME as eeprom, but changed it later as that 
> seemed too generic. I wanted to keep the device name as eeprom so that the 
> device would be "/dev/eepromX", both for compatibilty with existing board 
> setup and as a conceptual abstraction to regard the device as a more generic 
> "eeprom" device, rather than a more specific "at24".
> (Hope that makes sense).
Ah, I missed that your devices have a number included after eeprom. Then
I'm ok with your approach.
 
> > > +	while (i && retries) {
> > > +		ret = i2c_read_reg(priv->client, offset, buf, i);
> > > +		if (ret < 0)
> > > +			return (ssize_t)ret;
> > 
> > This cast is also done implicitly.
> > 
> > > +		else if (ret == 0)
> > > +			--retries;
> > > +
> > > +		numwritten += ret;
> > > +		i -= ret;
> > > +		offset += ret;
> > > +		buf += ret;
> > > +	}
> > 
> > IMHO this loop should be in a more generic place once instead of
> > repeating it for each driver. Also I wonder if you saw the eeprom
> > yielding some but not all requested bytes on a read request.
> 
> Not that I can remember, but this code is old, and I think was copied from a 
> kernel driver and I just left as is.
> I considered doing a generic loop, but in my head anything I thought of wasn't 
> much better than having similar code 2 or 3 times.
I think it would be worth to have it in generic code. (For our driver I
did it in the command that implements the custom eeprom layout. So I
don't have anything to share.)

> > > +static int at24_poll_device(struct i2c_client *client)
> > > +{
> > > +	uint64_t start;
> > > +	u8 dummy;
> > > +	int ret;
> > > +
> > > +	/*
> > > +	 * eeprom can take 5-10ms to write, during which time it
> > > +	 * will not respond. Poll it by attempting reads.
> > > +	 */
> > > +	start = get_time_ns();
> > > +	while (1) {
> > > +		ret = i2c_master_recv(client, &dummy, 1);
> > 
> > I implemented a write of length 0 here. IMHO this is better.
> 
> I'm not clear whether you are saying that your way is better :)
> This way reads just one byte after device responds. I'm thinking that your way
> would write a byte for the address...
/me rechecks ... Hm, our driver uses:

	i2c_write_reg(at24->client, I2C_ADDR_16_BIT, buf, 0);

so it even transfers two bytes for the address, so regarding the
generated overhead, you're right. But "my" datasheet[1] says:

	ACKNOWLEDGE POLLING: Once the internally-timed write cycle has
	started and the EEPROM inputs are disabled, acknowledge polling
	can be initiated. This involves sending a start condition
	followed by the device address word. The read/write bit is
	representative of the operation desired. Only if the internal
	write cycle has completed will the EEPROM respond with a zero,
	allowing the read or write sequence to continue.

So I think you must not do a read operation to check if a write is
possible. That might be a theoretical problem now, but still I prefer
being aligned to the datasheet.

[1] http://www.atmel.com/Images/doc0670.pdf

> > I think conceptually you don't need the erase callback for this eeprom.
> 
> While it is possible to write 0xff through the device, this was more 
> convenient. I'd prefer to keep it, unless theres a reason otherwise. 
I don't care much, but IMHO the erase callback is for devices that need
the erase before writing.
 
Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2012-08-01  7:25 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-29  7:41 at24 eeprom driver (V2) and misc patches Marc Reilly
2012-07-29  7:41 ` [PATCH 1/7] imx35: 6-bit divider helper Marc Reilly
2012-07-29  7:41 ` [PATCH 2/7] imx35: mmc clock has 6 bit divider, not 3_3 Marc Reilly
2012-07-29  7:41 ` [PATCH 3/7] i2c: add platform_data for i2c_board_info Marc Reilly
2012-07-30  8:13   ` Uwe Kleine-König
2012-07-30  9:41   ` Sascha Hauer
2012-07-29  7:41 ` [PATCH 4/7] i2c: device id default to -1 for auto assignment Marc Reilly
2012-07-29  9:59   ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-29  7:41 ` [PATCH 5/7] nand: fix build error when BBT not enabled Marc Reilly
2012-07-29  9:58   ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-29 11:28     ` Marc Reilly
2012-07-29  7:41 ` [PATCH 6/7] nand: Prevent drivers setting NAND_USE_FLASH_BBT if BBT config " Marc Reilly
2012-07-29 10:00   ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-29 11:30     ` Marc Reilly
2012-07-29  7:41 ` [PATCH 7/7] drivers/eeprom: at24: add I2C eeprom driver for 24c01/02 Marc Reilly
2012-07-30  8:25   ` Uwe Kleine-König
2012-07-30 10:36     ` Marc Reilly
2012-08-01  7:25       ` Uwe Kleine-König [this message]
2012-07-30  9:38 ` at24 eeprom driver (V2) and misc patches Sascha Hauer

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=20120801072514.GD10670@pengutronix.de \
    --to=u.kleine-koenig@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=marc@cpdesign.com.au \
    /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