From: Wolfram Sang <w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
To: i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
Subject: Re: [PATCH] Add a new-style driver for most I2C EEPROMs
Date: Fri, 11 Apr 2008 14:24:55 +0200 [thread overview]
Message-ID: <ftnlao$o2r$1@ger.gmane.org> (raw)
In-Reply-To: <1207914198-8561-1-git-send-email-w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Hello,
I'll just review myself to ask for some comments where I think some more
opinions would be good. I also tried to contact David Brownell as the
original author directly last week, but all my mails got blocked; I hope
we can negotiate through this list.
I tested this version of the driver on a blackfin based board with a
24c02. In the next days, a powerpc based board with a X24645 (strange
one) will follow. On x86 and x86-64, it builds without warnings.
> + * at24.c - handle most I2C EEPROMs
Maybe rename the driver? at24 is vendor-specific. 24xx? 24cxx?
eeprom-ng? I'd go for 24xx.
> +/* One chip may consume up to this numbe of clients */
> +#define AT24_MAX_CLIENTS 8
> +
> +struct at24_data {
> + struct at24_platform_data chip;
> + bool use_smbus;
> +
> + /* Lock protects against activities from other Linux tasks,
> + * but not from changes by other I2C masters.
> + */
> + struct mutex lock;
> + struct bin_attribute bin;
> +
> + /* Some chips tie up multiple I2C addresses; dummy devices reserve
> + * them for ourselves, and we'll use them with SMBus calls.
> + */
> + struct i2c_client *client[AT24_MAX_CLIENTS];
> +
> + u8 *writebuf;
> + unsigned write_max;
> +};
To support the X24645, it would be necessary to raise AT24_MAX_CLIENTS
to 32 (what a beast!). Then again, most eeproms will just need one
client, so this would cause quite some overhead in most use-cases. Maybe
it pays off to hande this dynamically?
> +/*
> + * This routine supports chips which consume multiple I2C addresess. It
> + * computes the addressing information to be used for a given r/w request.
> + */
> +static struct i2c_client *at24_ee_address(
> + struct at24_data *at24,
> + u16 *addr,
> + unsigned *offset
> +)
> +{
> + unsigned per_address = 256;
> + struct at24_platform_data *chip = &at24->chip;
> + unsigned i;
> +
> + if (*offset >= chip->byte_len)
> + return NULL;
> +
> + if (chip->flags & AT24_EE_ADDR2)
> + per_address = 64 * 1024;
> + *addr = at24->client[0]->addr;
> + for (i = 0; *offset >= per_address; i++) {
> + (*addr)++;
> + *offset -= per_address;
> + }
> +
> + return at24->client[i];
> +}
I would suggest shortening it like this, unless I fail to see a drawback:
---
static struct i2c_client *at24_ee_address(
struct at24_data *at24,
u16 *addr,
unsigned *offset
)
{
const struct chip_desc *chip = &at24->chip;
unsigned i;
if (*offset >= chip->byte_len)
return NULL;
if (chip->flags & EE_ADDR2) {
i = *offset >> 16;
*offset &= 0xffff;
} else {
i = *offset >> 8;
*offset &= 0x00ff;
}
*addr = at24->client[i]->addr;
return at24->client[i];
}
---
This will save the for-loop and a variable.
> + /* Export the EEPROM bytes through sysfs, since that's convenient.
> + * By default, only root should see the data (maybe passwords etc)
> + */
> + at24->bin.attr.name = "eeprom";
> + at24->bin.attr.mode = S_IRUSR;
> + at24->bin.attr.owner = THIS_MODULE;
> + at24->bin.read = at24_bin_read;
> +
> + at24->bin.size = at24->chip.byte_len;
Use C99 initialization in struct at24_data above?
I guess, there is more to come during the discussion. But hopefully,
this is a start to get it into 2.6.26... That would be great!
Kind regards,
Wolfram
--
Dipl.-Ing. Wolfram Sang | http://www.pengutronix.de
Pengutronix - Linux Solutions for Science and Industry
_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c
next prev parent reply other threads:[~2008-04-11 12:24 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-11 11:43 [PATCH] Add a new-style driver for most I2C EEPROMs Wolfram Sang
[not found] ` <1207914198-8561-1-git-send-email-w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-04-11 12:24 ` Wolfram Sang [this message]
2008-04-14 7:22 ` Robert Schwebel
[not found] ` <20080414072227.GU13814-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-04-14 12:39 ` Jean Delvare
[not found] ` <20080414143925.31b55b39-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-04-14 15:57 ` David Brownell
[not found] ` <200804140857.33732.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-04-17 21:17 ` David Brownell
[not found] ` <200804171417.23753.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-04-18 8:07 ` Trent Piepho
[not found] ` <Pine.LNX.4.58.0804172346580.10592-nuiHJn5p267P3RPoUHIrnuTW4wlIGRCZ@public.gmane.org>
2008-04-18 10:31 ` Wolfram Sang
[not found] ` <20080418103149.GA4245-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-04-18 23:06 ` Trent Piepho
[not found] ` <Pine.LNX.4.58.0804181555560.15372-13q4cmjDBaTP3RPoUHIrnuTW4wlIGRCZ@public.gmane.org>
2008-04-21 9:17 ` Wolfram Sang
2008-04-21 17:20 ` Trent Piepho
[not found] ` <Pine.LNX.4.58.0804211005410.15697-nuiHJn5p267P3RPoUHIrnuTW4wlIGRCZ@public.gmane.org>
2008-04-24 10:47 ` Wolfram Sang
[not found] ` <20080424104740.GB4201-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-04-27 1:28 ` Trent Piepho
2008-04-18 16:48 ` David Brownell
[not found] ` <200804180948.15298.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-04-18 23:26 ` Trent Piepho
2008-04-18 8:59 ` Wolfram Sang
2008-04-15 10:13 ` Wolfram Sang
2008-04-17 16:05 ` Wolfram Sang
2008-04-17 16:24 ` Jean Delvare
-- strict thread matches above, loose matches on Subject: below --
2008-05-15 20:36 Wolfram Sang
[not found] ` <1210883799-25188-1-git-send-email-w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-05-22 20:20 ` Jean Delvare
[not found] ` <20080522222022.68d65cd7-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-22 21:35 ` David Brownell
[not found] ` <200805221435.36829.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-23 7:17 ` Jean Delvare
[not found] ` <20080523091703.2ba86bb1-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-24 21:11 ` David Brownell
2008-05-30 9:15 ` Wolfram Sang
[not found] ` <20080530091534.GB727-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-05-30 9:51 ` Jean Delvare
[not found] ` <20080530115131.0e111fdb-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-30 10:45 ` Wolfram Sang
2008-06-02 16:21 ` Wolfram Sang
[not found] ` <20080602162154.GA11141-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-06-02 18:50 ` Jean Delvare
[not found] ` <20080602205034.3e2b392b-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-06-02 19:33 ` David Brownell
[not found] ` <200806021233.46781.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-06-02 19:48 ` Jean Delvare
[not found] ` <20080602214823.15ca190b-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-06-03 20:36 ` David Brownell
[not found] ` <200806031336.35678.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-06-03 21:19 ` Jean Delvare
[not found] ` <20080603231927.61f9eb61-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-06-04 11:51 ` Wolfram Sang
2008-06-08 8:40 ` Jean Delvare
[not found] ` <20080608104038.006be072-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-06-08 20:26 ` David Brownell
2008-05-23 7:21 ` Jean Delvare
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='ftnlao$o2r$1@ger.gmane.org' \
--to=w.sang-bicnvbalz9megne8c9+irq@public.gmane.org \
--cc=i2c-GZX6beZjE8VD60Wz+7aTrA@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.