On Tue, Dec 04, 2007 at 07:27:38PM -0800, Andrew Morton wrote:
> > +#define READ_SC(p, r) readb((p)->membase + RD_##r)
> > +#define WRITE_SC(p, r, v) writeb((v), (p)->membase + WR_##r)
> and these:
> > +#define READ_SC_PORT(p, r) read_sc_port(p, RD_PORT_##r)
> > +#define WRITE_SC_PORT(p, r, v) write_sc_port(p, WR_PORT_##r, v)
> really don't need to exist. All they do is make the code harder to read.
but they make the code safer. The chip has common register and port
registers, which are randomly splattered over the address range. And
some of them are read only, some write only. Read only and Write
only register live at the same register offset and their function
usually doesn't have anything in common. By using these macros I'll
get compile errors when doing a READ_SC from a write only register
and vice versa. I will also get compile errors, if I try to access a
common register via READ_SC_PORT/WRITE_SC_PORT.
If there is a better way to get more readable code for you and
the safety I'd like, just tell me.
> Think of the poor reader who sees this:
> status = READ_SC_PORT(port, SR);
> and then goes madly searching for "SR".
which he then finds by this name in the data sheet. All the register
names are named as close to the datasheet as possible. And I consider
consulting datasheets when looking at drivers a pretty good idea.
> Code is written once and is read a thousand times. Please optimise for
it's no big deal to change that, but is getting bitten by stupid chips
worth it ? I'd prefer to get a compile error than debugging a runtime
Crap can work. Given enough thrust pigs will fly, but it's not necessary a
good idea. [ RFC1925, 2.3 ]