static int __init leds_init(void) { if (machine_is_ebsa285() || machine_is_co285()) leds_event = ebsa285_leds_event; leds_event(led_start); return 0; }
void __init footbridge_init_irq(void) { __fb_init_irq(); if (!footbridge_cfn_mode()) return; if (machine_is_ebsa285()) isa_init_irq(IRQ_PCI); if (machine_is_cats()) isa_init_irq(IRQ_IN2); if (machine_is_netwinder()) isa_init_irq(IRQ_IN3); }
void __init footbridge_init_irq(void) { __fb_init_irq(); if (!footbridge_cfn_mode()) return; if (machine_is_ebsa285()) /* The following is dependent on which slot * you plug the Southbridge card into. We * currently assume that you plug it into * the right-hand most slot. */ isa_init_irq(IRQ_PCI); if (machine_is_cats()) isa_init_irq(IRQ_IN2); if (machine_is_netwinder()) isa_init_irq(IRQ_IN3); }
static int __init init_dc21285(void) { #ifdef CONFIG_MTD_PARTITIONS int nrparts; #endif /* Determine bankwidth */ switch (*CSR_SA110_CNTL & (3<<14)) { case SA110_CNTL_ROMWIDTH_8: dc21285_map.bankwidth = 1; dc21285_map.read = dc21285_read8; dc21285_map.write = dc21285_write8; dc21285_map.copy_to = dc21285_copy_to_8; break; case SA110_CNTL_ROMWIDTH_16: dc21285_map.bankwidth = 2; dc21285_map.read = dc21285_read16; dc21285_map.write = dc21285_write16; dc21285_map.copy_to = dc21285_copy_to_16; break; case SA110_CNTL_ROMWIDTH_32: dc21285_map.bankwidth = 4; break; dc21285_map.read = dc21285_read32; dc21285_map.write = dc21285_write32; dc21285_map.copy_to = dc21285_copy_to_32; default: printk (KERN_ERR "DC21285 flash: undefined bankwidth\n"); return -ENXIO; } printk (KERN_NOTICE "DC21285 flash support (%d-bit bankwidth)\n", dc21285_map.bankwidth*8); /* Let's map the flash area */ dc21285_map.map_priv_1 = (unsigned long)ioremap(DC21285_FLASH, 16*1024*1024); if (!dc21285_map.map_priv_1) { printk("Failed to ioremap\n"); return -EIO; } if (machine_is_ebsa285()) { dc21285_mtd = do_map_probe("cfi_probe", &dc21285_map); } else { dc21285_mtd = do_map_probe("jedec_probe", &dc21285_map); } if (!dc21285_mtd) { iounmap((void *)dc21285_map.map_priv_1); return -ENXIO; } dc21285_mtd->owner = THIS_MODULE; #ifdef CONFIG_MTD_PARTITIONS nrparts = parse_mtd_partitions(dc21285_mtd, probes, &dc21285_parts, (void *)0); if (nrparts > 0) add_mtd_partitions(dc21285_mtd, dc21285_parts, nrparts); else #endif add_mtd_device(dc21285_mtd); if(machine_is_ebsa285()) { /* * Flash timing is determined with bits 19-16 of the * CSR_SA110_CNTL. The value is the number of wait cycles, or * 0 for 16 cycles (the default). Cycles are 20 ns. * Here we use 7 for 140 ns flash chips. */ /* access time */ *CSR_SA110_CNTL = ((*CSR_SA110_CNTL & ~0x000f0000) | (7 << 16)); /* burst time */ *CSR_SA110_CNTL = ((*CSR_SA110_CNTL & ~0x00f00000) | (7 << 20)); /* tristate time */ *CSR_SA110_CNTL = ((*CSR_SA110_CNTL & ~0x0f000000) | (7 << 24)); } return 0; }
/* * Set up timer interrupt. */ void __init footbridge_init_time(void) { if (machine_is_co285() || machine_is_personal_server()) /* * Add-in 21285s shouldn't access the RTC */ rtc_base = 0; else rtc_base = 0x70; if (rtc_base) { int reg_d, reg_b; /* * Probe for the RTC. */ reg_d = CMOS_READ(RTC_REG_D); /* * make sure the divider is set */ CMOS_WRITE(RTC_REF_CLCK_32KHZ, RTC_REG_A); /* * Set control reg B * (24 hour mode, update enabled) */ reg_b = CMOS_READ(RTC_REG_B) & 0x7f; reg_b |= 2; CMOS_WRITE(reg_b, RTC_REG_B); if ((CMOS_READ(RTC_REG_A) & 0x7f) == RTC_REF_CLCK_32KHZ && CMOS_READ(RTC_REG_B) == reg_b) { struct timespec tv; /* * We have a RTC. Check the battery */ if ((reg_d & 0x80) == 0) printk(KERN_WARNING "RTC: *** warning: CMOS battery bad\n"); tv.tv_nsec = 0; tv.tv_sec = get_isa_cmos_time(); do_settimeofday(&tv); set_rtc = set_isa_cmos_time; } else rtc_base = 0; } if (machine_is_ebsa285() || machine_is_co285() || machine_is_personal_server()) { gettimeoffset = timer1_gettimeoffset; timer1_latch = (mem_fclk_21285 + 8 * HZ) / (16 * HZ); *CSR_TIMER1_CLR = 0; *CSR_TIMER1_LOAD = timer1_latch; *CSR_TIMER1_CNTL = TIMER_CNTL_ENABLE | TIMER_CNTL_AUTORELOAD | TIMER_CNTL_DIV16; footbridge_timer_irq.name = "Timer1 Timer Tick"; footbridge_timer_irq.handler = timer1_interrupt; setup_irq(IRQ_TIMER1, &footbridge_timer_irq); } else { /* enable PIT timer */ /* set for periodic (4) and LSB/MSB write (0x30) */ outb(0x34, 0x43); outb((mSEC_10_from_14/6) & 0xFF, 0x40); outb((mSEC_10_from_14/6) >> 8, 0x40); gettimeoffset = isa_gettimeoffset; footbridge_timer_irq.name = "ISA Timer Tick"; footbridge_timer_irq.handler = isa_timer_interrupt; setup_irq(IRQ_ISA_TIMER, &footbridge_timer_irq); } }
static int __init ebsa285_init_pci(void) { if (machine_is_ebsa285()) pci_common_init(&ebsa285_pci); return 0; }
static int __init init_dc21285(void) { /* */ switch (*CSR_SA110_CNTL & (3<<14)) { case SA110_CNTL_ROMWIDTH_8: dc21285_map.bankwidth = 1; dc21285_map.read = dc21285_read8; dc21285_map.write = dc21285_write8; dc21285_map.copy_to = dc21285_copy_to_8; break; case SA110_CNTL_ROMWIDTH_16: dc21285_map.bankwidth = 2; dc21285_map.read = dc21285_read16; dc21285_map.write = dc21285_write16; dc21285_map.copy_to = dc21285_copy_to_16; break; case SA110_CNTL_ROMWIDTH_32: dc21285_map.bankwidth = 4; dc21285_map.read = dc21285_read32; dc21285_map.write = dc21285_write32; dc21285_map.copy_to = dc21285_copy_to_32; break; default: printk (KERN_ERR "DC21285 flash: undefined bankwidth\n"); return -ENXIO; } printk (KERN_NOTICE "DC21285 flash support (%d-bit bankwidth)\n", dc21285_map.bankwidth*8); /* */ dc21285_map.virt = ioremap(DC21285_FLASH, 16*1024*1024); if (!dc21285_map.virt) { printk("Failed to ioremap\n"); return -EIO; } if (machine_is_ebsa285()) { dc21285_mtd = do_map_probe("cfi_probe", &dc21285_map); } else { dc21285_mtd = do_map_probe("jedec_probe", &dc21285_map); } if (!dc21285_mtd) { iounmap(dc21285_map.virt); return -ENXIO; } dc21285_mtd->owner = THIS_MODULE; mtd_device_parse_register(dc21285_mtd, probes, NULL, NULL, 0); if(machine_is_ebsa285()) { /* */ /* */ *CSR_SA110_CNTL = ((*CSR_SA110_CNTL & ~0x000f0000) | (7 << 16)); /* */ *CSR_SA110_CNTL = ((*CSR_SA110_CNTL & ~0x00f00000) | (7 << 20)); /* */ *CSR_SA110_CNTL = ((*CSR_SA110_CNTL & ~0x0f000000) | (7 << 24)); } return 0; }