static int bochs_init(struct pci_slot_dev *pci_dev) { int ret; struct fb_info *info; size_t mmap_len; assert(pci_dev != NULL); info = fb_alloc(); if (info == NULL) { return -ENOMEM; } memcpy(&info->fix, &bochs_fix_screeninfo, sizeof info->fix); fill_var(&info->var); info->ops = &bochs_ops; info->screen_base = (void *)(pci_dev->bar[0] & ~0xf); /* FIXME */ mmap_len = binalign_bound(VBE_DISPI_MAX_XRES * VBE_DISPI_MAX_YRES * VBE_DISPI_MAX_BPP / 8, PAGE_SIZE()); if (MAP_FAILED == mmap_device_memory(info->screen_base, mmap_len, PROT_READ|PROT_WRITE|PROT_NOCACHE, MAP_FIXED, (unsigned long) info->screen_base)) { return -EIO; } ret = fb_register(info); if (ret != 0) { fb_release(info); return ret; } return 0; }
FAR struct lcd_dev_s *sam_graphics_setup(unsigned int devno) { FAR struct spi_dev_s *spi; FAR struct lcd_dev_s *dev; /* Configure the OLED GPIOs. This initial configuration is RESET low, * putting the OLED into reset state. */ sam_configgpio(GPIO_SSD1306_RST); /* Wait a bit then release the OLED from the reset state */ up_mdelay(20); sam_gpiowrite(GPIO_SSD1306_RST, true); /* Get the SPI1 port interface */ spi = sam_spibus_initialize(GPIO_SSD1306_CS); if (!spi) { lcderr("ERROR: Failed to initialize SPI port 1\n"); } else { /* Bind the SPI port to the OLED */ dev = ssd1306_initialize(spi, NULL, devno); if (!dev) { lcderr("ERROR: Failed to bind SPI port 1 to OLED %d: %d\n", devno); } else { lcdinfo("Bound SPI port 1 to OLED %d\n", devno); /* And turn the OLED on */ (void)dev->setpower(dev, CONFIG_LCD_MAXPOWER); #if defined(CONFIG_VIDEO_FB) && defined(CONFIG_LCD_FRAMEBUFFER) /* Initialize and register the simulated framebuffer driver */ ret = fb_register(0, 0); if (ret < 0) { syslog(LOG_ERR, "ERROR: fb_register() failed: %d\n", ret); } #endif return dev; } } return NULL; }
static int cirrus_init(struct pci_slot_dev *pci_dev) { int ret; struct fb_info *info; assert(pci_dev != NULL); info = fb_alloc(); if (info == NULL) { return -ENOMEM; } memcpy(&info->fix, &cl_fix_screeninfo, sizeof(info->fix)); memcpy(&info->var, &cl_default_var_screeninfo, sizeof(info->var)); info->ops = &cl_ops; info->screen_base = (void *)(pci_dev->bar[0] & PCI_BASE_ADDR_IO_MASK); ret = fb_register(info); if (ret != 0) { fb_release(info); return ret; } return 0; }
int lpc54_bringup(void) { #ifdef HAVE_MMCSD struct sdio_dev_s *sdmmc; #endif #ifdef HAVE_RTC_DRIVER struct rtc_lowerhalf_s *rtc; #endif int ret; #ifdef CONFIG_FS_PROCFS /* Mount the procfs file system */ ret = mount(NULL, "/proc", "procfs", 0, NULL); if (ret < 0) { syslog(LOG_ERR, "ERROR: Failed to mount procfs at /proc: %d\n", ret); } #endif #ifdef HAVE_RTC_DRIVER /* Instantiate the STM32 lower-half RTC driver */ rtc = lpc54_rtc_lowerhalf(); if (rtc == NULL) { syslog(LOG_ERR, "ERROR: Failed to instantiate the RTC lower-half driver\n"); } else { /* Bind the lower half driver and register the combined RTC driver * as /dev/rtc0 */ ret = rtc_initialize(0, rtc); if (ret < 0) { syslog(LOG_ERR, "ERROR: Failed to bind/register the RTC driver: %d\n", ret); } } #endif #ifdef HAVE_I2CTOOL /* Register I2C drivers on behalf of the I2C tool */ lpc54_i2ctool(); #endif #ifdef CONFIG_VIDEO_FB /* Initialize and register the framebuffer driver */ ret = fb_register(0, 0); if (ret < 0) { syslog(LOG_ERR, "ERROR: fb_register() failed: %d\n", ret); } #endif #ifdef HAVE_FT5x06 /* Register the FT5x06 touch panel driver */ ret = lpc54_ft5x06_register(); if (ret < 0) { syslog(LOG_ERR, "ERROR: lpc54_ft5x06_register() failed: %d\n", ret); } #endif #ifdef HAVE_MMCSD /* Get an instance of the SDIO interface */ sdmmc = lpc54_sdmmc_initialize(0); if (!sdmmc) { syslog(LOG_ERR, "ERROR: Failed to initialize SD/MMC\n"); } else { /* Dind the SDIO interface to the MMC/SD driver */ ret = mmcsd_slotinitialize(MMCSD_MINOR, sdmmc); if (ret != OK) { syslog(LOG_ERR, "ERROR: Failed to bind SDIO to the MMC/SD driver: %d\n", ret); } } #endif #ifdef CONFIG_BUTTONS_LOWER /* Register the BUTTON driver */ ret = btn_lower_initialize("/dev/buttons"); if (ret < 0) { syslog(LOG_ERR, "ERROR: btn_lower_initialize() failed: %d\n", ret); } #endif UNUSED(ret); return OK; }