Collie is slightly strange; it does not seem to have proper ucb1x00 ID. With this patch, basic ucb support seems to work and I can get interrupts from battery.
Signed-off-by: Pavel Machek <[EMAIL PROTECTED]> --- commit 7247714847e6e3eebcdd71c58a4f730e12f0e56b tree 555a0b987efd7b625097032bf894620574472f2c parent 5a5269552a832668451518423ab7c1ece8d814e8 author <[EMAIL PROTECTED](none)> Sun, 31 Jul 2005 15:45:30 +0200 committer <[EMAIL PROTECTED](none)> Sun, 31 Jul 2005 15:45:30 +0200 drivers/misc/mcp-sa1100.c | 13 +++++++++++-- drivers/misc/ucb1x00-core.c | 15 ++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/misc/mcp-sa1100.c b/drivers/misc/mcp-sa1100.c --- a/drivers/misc/mcp-sa1100.c +++ b/drivers/misc/mcp-sa1100.c @@ -149,7 +149,7 @@ static int mcp_sa1100_probe(struct devic !machine_is_graphicsmaster() && !machine_is_lart() && !machine_is_omnimeter() && !machine_is_pfs168() && !machine_is_shannon() && !machine_is_simpad() && - !machine_is_yopy()) + !machine_is_yopy() && !machine_is_collie()) return -ENODEV; if (!request_mem_region(0x80060000, 0x60, "sa11x0-mcp")) @@ -170,6 +170,12 @@ static int mcp_sa1100_probe(struct devic ASSABET_BCR_set(ASSABET_BCR_CODEC_RST); } + if (machine_is_collie()) { + GAFR &= ~(GPIO_GPIO(16)); + GPDR |= GPIO_GPIO(16); + GPSR |= GPIO_GPIO(16); + } + /* * Setup the PPC unit correctly. */ @@ -181,7 +187,10 @@ static int mcp_sa1100_probe(struct devic Ser4MCSR = -1; Ser4MCCR1 = 0; - Ser4MCCR0 = 0x00007f7f | MCCR0_ADM; + if (machine_is_collie()) + Ser4MCCR0 = MCCR0_ADM | MCCR0_ExtClk; + else + Ser4MCCR0 = 0x00007f7f | MCCR0_ADM; /* * Calculate the read/write timeout (us) from the bit clock diff --git a/drivers/misc/ucb1x00-core.c b/drivers/misc/ucb1x00-core.c --- a/drivers/misc/ucb1x00-core.c +++ b/drivers/misc/ucb1x00-core.c @@ -28,6 +28,7 @@ #include <asm/dma.h> #include <asm/hardware.h> #include <asm/irq.h> +#include <asm/mach-types.h> #include <asm/arch/ucb1x00.h> @@ -461,15 +462,19 @@ static int ucb1x00_probe(struct mcp *mcp { struct ucb1x00 *ucb; struct ucb1x00_driver *drv; - unsigned int id; + unsigned int id = UCB_ID_1200; int ret = -ENODEV; mcp_enable(mcp); - id = mcp_reg_read(mcp, UCB_ID); - if (id != UCB_ID_1200 && id != UCB_ID_1300) { - printk(KERN_WARNING "UCB1x00 ID not found: %04x\n", id); - goto err_disable; + if (!machine_is_collie()) { + id = mcp_reg_read(mcp, UCB_ID); + + /* Ouch? Collie produces basically random numbers. */ + if (id != UCB_ID_1200 && id != UCB_ID_1300) { + printk(KERN_WARNING "UCB1x00 ID not found: %04x\n", id); + goto err_disable; + } } ucb = kmalloc(sizeof(struct ucb1x00), GFP_KERNEL); -- if you have sharp zaurus hardware you don't need... you know my address - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/