diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2005-11-23 01:57:25 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-01-08 22:49:54 -0500 |
commit | 51d3082fe6e55aecfa17113dbe98077c749f724c (patch) | |
tree | 9a1e2355d5988d8cc1ca511d53c1bb24b0baa17f /drivers/i2c | |
parent | 463ce0e103f419f51b1769111e73fe8bb305d0ec (diff) |
[PATCH] powerpc: Unify udbg (#2)
This patch unifies udbg for both ppc32 and ppc64 when building the
merged achitecture. xmon now has a single "back end". The powermac udbg
stuff gets enriched with some ADB capabilities and btext output. In
addition, the early_init callback is now called on ppc32 as well,
approx. in the same order as ppc64 regarding device-tree manipulations.
The init sequences of ppc32 and ppc64 are getting closer, I'll unify
them in a later patch.
For now, you can force udbg to the scc using "sccdbg" or to btext using
"btextdbg" on powermacs. I'll implement a cleaner way of forcing udbg
output to something else than the autodetected OF output device in a
later patch.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/busses/i2c-keywest.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/drivers/i2c/busses/i2c-keywest.c b/drivers/i2c/busses/i2c-keywest.c index d61f748278fc..93e7080e3bc5 100644 --- a/drivers/i2c/busses/i2c-keywest.c +++ b/drivers/i2c/busses/i2c-keywest.c | |||
@@ -505,16 +505,23 @@ static int | |||
505 | create_iface(struct device_node *np, struct device *dev) | 505 | create_iface(struct device_node *np, struct device *dev) |
506 | { | 506 | { |
507 | unsigned long steps; | 507 | unsigned long steps; |
508 | unsigned bsteps, tsize, i, nchan, addroffset; | 508 | unsigned bsteps, tsize, i, nchan; |
509 | struct keywest_iface* iface; | 509 | struct keywest_iface* iface; |
510 | u32 *psteps, *prate; | 510 | u32 *psteps, *prate, *addrp; |
511 | int rc; | 511 | int rc; |
512 | 512 | ||
513 | if (np->n_intrs < 1 || np->n_addrs < 1) { | 513 | if (np->n_intrs < 1) { |
514 | printk(KERN_ERR "%s: Missing interrupt or address !\n", | 514 | printk(KERN_ERR "%s: Missing interrupt !\n", |
515 | np->full_name); | 515 | np->full_name); |
516 | return -ENODEV; | 516 | return -ENODEV; |
517 | } | 517 | } |
518 | addrp = (u32 *)get_property(np, "AAPL,address", NULL); | ||
519 | if (addrp == NULL) { | ||
520 | printk(KERN_ERR "%s: Can't find address !\n", | ||
521 | np->full_name); | ||
522 | return -ENODEV; | ||
523 | } | ||
524 | |||
518 | if (pmac_low_i2c_lock(np)) | 525 | if (pmac_low_i2c_lock(np)) |
519 | return -ENODEV; | 526 | return -ENODEV; |
520 | 527 | ||
@@ -525,13 +532,10 @@ create_iface(struct device_node *np, struct device *dev) | |||
525 | for (bsteps = 0; (steps & 0x01) == 0; bsteps++) | 532 | for (bsteps = 0; (steps & 0x01) == 0; bsteps++) |
526 | steps >>= 1; | 533 | steps >>= 1; |
527 | 534 | ||
528 | if (np->parent->name[0] == 'u') { | 535 | if (np->parent->name[0] == 'u') |
529 | nchan = 2; | 536 | nchan = 2; |
530 | addroffset = 3; | 537 | else |
531 | } else { | ||
532 | addroffset = 0; | ||
533 | nchan = 1; | 538 | nchan = 1; |
534 | } | ||
535 | 539 | ||
536 | tsize = sizeof(struct keywest_iface) + | 540 | tsize = sizeof(struct keywest_iface) + |
537 | (sizeof(struct keywest_chan) + 4) * nchan; | 541 | (sizeof(struct keywest_chan) + 4) * nchan; |
@@ -550,8 +554,7 @@ create_iface(struct device_node *np, struct device *dev) | |||
550 | iface->irq = np->intrs[0].line; | 554 | iface->irq = np->intrs[0].line; |
551 | iface->channels = (struct keywest_chan *) | 555 | iface->channels = (struct keywest_chan *) |
552 | (((unsigned long)(iface + 1) + 3UL) & ~3UL); | 556 | (((unsigned long)(iface + 1) + 3UL) & ~3UL); |
553 | iface->base = ioremap(np->addrs[0].address + addroffset, | 557 | iface->base = ioremap(*addrp, 0x1000); |
554 | np->addrs[0].size); | ||
555 | if (!iface->base) { | 558 | if (!iface->base) { |
556 | printk(KERN_ERR "i2c-keywest: can't map inteface !\n"); | 559 | printk(KERN_ERR "i2c-keywest: can't map inteface !\n"); |
557 | kfree(iface); | 560 | kfree(iface); |