static void __exit sa1111_ohci_exit(void) { hc_remove_ohci(sa1111_ohci); /* * Put the USB host controller into reset. */ USB_RESET |= USB_RESET_FORCEIFRESET | USB_RESET_FORCEHCRESET; /* * Stop the USB clock. */ SKPCR &= ~SKPCR_UCLKEN; /* * Release memory resources. */ // release_mem_region(_USB_OHCI_OP_BASE, _USB_EXTENT); #ifdef CONFIG_SA1100_BADGE4 if (machine_is_badge4()) { badge4_set_5V(BADGE4_5V_USB, 0); } #endif }
static int __init sa1111_ohci_init(void) { int ret; /* * Request memory resources. */ // if (!request_mem_region(_USB_OHCI_OP_BASE, _USB_EXTENT, "usb-ohci")) // return -EBUSY; sa1111_ohci_configure(); /* * Initialise the generic OHCI driver. */ ret = hc_add_ohci(SA1111_FAKE_PCIDEV, NIRQHCIM, (void *)&USB_OHCI_OP_BASE, 0, &sa1111_ohci, "usb-ohci", "sa1111"); // if (ret) // release_mem_region(_USB_OHCI_OP_BASE, _USB_EXTENT); #ifdef CONFIG_SA1100_BADGE4 if (machine_is_badge4() && (!ret)) { /* found the controller, so now power the bus */ badge4_set_5V(BADGE4_5V_USB, 1); } #endif return ret; }
static void sa1111_stop_hc(struct sa1111_dev *dev) { unsigned int usb_rst; printk(KERN_DEBUG __FILE__ ": stopping SA-1111 OHCI USB Controller\n"); /* * Put the USB host controller into reset. */ usb_rst = sa1111_readl(dev->mapbase + SA1111_USB_RESET); sa1111_writel(usb_rst | USB_RESET_FORCEIFRESET | USB_RESET_FORCEHCRESET, dev->mapbase + SA1111_USB_RESET); /* * Stop the USB clock. */ sa1111_disable_device(dev); #ifdef CONFIG_SA1100_BADGE4 if (machine_is_badge4()) { /* Disable power to the USB bus */ badge4_set_5V(BADGE4_5V_USB, 0); } #endif }
static void sa1111_start_hc(struct sa1111_dev *dev) { unsigned int usb_rst = 0; printk(KERN_DEBUG __FILE__ ": starting SA-1111 OHCI USB Controller\n"); #ifdef CONFIG_SA1100_BADGE4 if (machine_is_badge4()) { badge4_set_5V(BADGE4_5V_USB, 1); } #endif if (machine_is_xp860() || machine_has_neponset() || machine_is_pfs168() || machine_is_badge4()) usb_rst = USB_RESET_PWRSENSELOW | USB_RESET_PWRCTRLLOW; /* * Configure the power sense and control lines. Place the USB * host controller in reset. */ sa1111_writel(usb_rst | USB_RESET_FORCEIFRESET | USB_RESET_FORCEHCRESET, dev->mapbase + SA1111_USB_RESET); /* * Now, carefully enable the USB clock, and take * the USB host controller out of reset. */ sa1111_enable_device(dev); udelay(11); sa1111_writel(usb_rst, dev->mapbase + SA1111_USB_RESET); }
static void sa1111_start_hc(struct sa1111_dev *dev) { unsigned int usb_rst = 0; printk(KERN_DEBUG __FILE__ ": starting SA-1111 OHCI USB Controller\n"); #ifdef CONFIG_SA1100_BADGE4 if (machine_is_badge4()) { badge4_set_5V(BADGE4_5V_USB, 1); } #endif if (machine_is_xp860() || machine_has_neponset() || machine_is_pfs168() || machine_is_badge4()) usb_rst = USB_RESET_PWRSENSELOW | USB_RESET_PWRCTRLLOW; sa1111_writel(usb_rst | USB_RESET_FORCEIFRESET | USB_RESET_FORCEHCRESET, dev->mapbase + SA1111_USB_RESET); sa1111_enable_device(dev); udelay(11); sa1111_writel(usb_rst, dev->mapbase + SA1111_USB_RESET); }
static int badge4_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { int ret; switch (skt->nr) { case 0: if ((state->Vcc != 0) && (state->Vcc != badge4_pcmvcc)) { complain_about_jumpering(__func__, "pcmvcc", badge4_pcmvcc, state->Vcc); // Apply power regardless of the jumpering. // return -1; } if ((state->Vpp != 0) && (state->Vpp != badge4_pcmvpp)) { complain_about_jumpering(__func__, "pcmvpp", badge4_pcmvpp, state->Vpp); return -1; } break; case 1: if ((state->Vcc != 0) && (state->Vcc != badge4_cfvcc)) { complain_about_jumpering(__func__, "cfvcc", badge4_cfvcc, state->Vcc); return -1; } break; default: return -1; } ret = sa1111_pcmcia_configure_socket(skt, state); if (ret == 0) { unsigned long flags; int need5V; local_irq_save(flags); need5V = ((state->Vcc == 50) || (state->Vpp == 50)); badge4_set_5V(BADGE4_5V_PCMCIA_SOCK(skt->nr), need5V); local_irq_restore(flags); } return 0; }
static int __init badge4_init(void) { int ret; if (!machine_is_badge4()) return -ENODEV; /* LCD */ GPCR = (BADGE4_GPIO_LGP2 | BADGE4_GPIO_LGP3 | BADGE4_GPIO_LGP4 | BADGE4_GPIO_LGP5 | BADGE4_GPIO_LGP6 | BADGE4_GPIO_LGP7 | BADGE4_GPIO_LGP8 | BADGE4_GPIO_LGP9 | BADGE4_GPIO_GPA_VID | BADGE4_GPIO_GPB_VID | BADGE4_GPIO_GPC_VID); GPDR &= ~BADGE4_GPIO_INT_VID; GPDR |= (BADGE4_GPIO_LGP2 | BADGE4_GPIO_LGP3 | BADGE4_GPIO_LGP4 | BADGE4_GPIO_LGP5 | BADGE4_GPIO_LGP6 | BADGE4_GPIO_LGP7 | BADGE4_GPIO_LGP8 | BADGE4_GPIO_LGP9 | BADGE4_GPIO_GPA_VID | BADGE4_GPIO_GPB_VID | BADGE4_GPIO_GPC_VID); /* SDRAM SPD i2c */ GPCR = (BADGE4_GPIO_SDSDA | BADGE4_GPIO_SDSCL); GPDR |= (BADGE4_GPIO_SDSDA | BADGE4_GPIO_SDSCL); /* uart */ GPCR = (BADGE4_GPIO_UART_HS1 | BADGE4_GPIO_UART_HS2); GPDR |= (BADGE4_GPIO_UART_HS1 | BADGE4_GPIO_UART_HS2); /* CPLD muxsel0 input for mux/adc chip select */ GPCR = BADGE4_GPIO_MUXSEL0; GPDR |= BADGE4_GPIO_MUXSEL0; /* test points: J5, J6 as inputs, J7 outputs */ GPDR &= ~(BADGE4_GPIO_TESTPT_J5 | BADGE4_GPIO_TESTPT_J6); GPCR = BADGE4_GPIO_TESTPT_J7; GPDR |= BADGE4_GPIO_TESTPT_J7; /* 5V supply rail. */ GPCR = BADGE4_GPIO_PCMEN5V; /* initially off */ GPDR |= BADGE4_GPIO_PCMEN5V; /* CPLD sdram type inputs; set up by blob */ //GPDR |= (BADGE4_GPIO_SDTYP1 | BADGE4_GPIO_SDTYP0); printk(KERN_DEBUG __FILE__ ": SDRAM CPLD typ1=%d typ0=%d\n", !!(GPLR & BADGE4_GPIO_SDTYP1), !!(GPLR & BADGE4_GPIO_SDTYP0)); /* SA1111 reset pin; set up by blob */ //GPSR = BADGE4_GPIO_SA1111_NRST; //GPDR |= BADGE4_GPIO_SA1111_NRST; /* power management cruft */ PGSR = 0; PWER = 0; PCFR = 0; PSDR = 0; PWER |= PWER_GPIO26; /* wake up on an edge from TESTPT_J5 */ PWER |= PWER_RTC; /* wake up if rtc fires */ /* drive sa1111_nrst during sleep */ PGSR |= BADGE4_GPIO_SA1111_NRST; /* drive CPLD as is during sleep */ PGSR |= (GPLR & (BADGE4_GPIO_SDTYP0|BADGE4_GPIO_SDTYP1)); /* Now bring up the SA-1111. */ ret = badge4_sa1111_init(); if (ret < 0) printk(KERN_ERR "%s: SA-1111 initialization failed (%d)\n", __func__, ret); /* maybe turn on 5v0 from the start */ badge4_set_5V(BADGE4_5V_INITIALLY, five_v_on); sa11x0_register_mtd(&badge4_flash_data, &badge4_flash_resource, 1); return 0; }
static void badge4_sa1111_disable(void *data, unsigned devid) { if (devid == SA1111_DEVID_USB) badge4_set_5V(BADGE4_5V_USB, 0); }
static int badge4_sa1111_enable(void *data, unsigned devid) { if (devid == SA1111_DEVID_USB) badge4_set_5V(BADGE4_5V_USB, 1); return 0; }