void btnmgrattach(device_t parent, device_t self, void *aux) { int id; struct btnmgr_softc *sc = device_private(self); struct wskbddev_attach_args wa; printf("\n"); /* * install button event listener */ for (id = 0; id <= n_button_config; id++) if (button_config[id].name != NULL) sc->sc_hook_tag = config_hook(CONFIG_HOOK_BUTTONEVENT, id, CONFIG_HOOK_SHARE, btnmgr_hook, sc); /* * attach wskbd */ wa.console = 0; wa.keymap = &btnmgr_keymapdata; wa.accessops = &btnmgr_wskbd_accessops; wa.accesscookie = sc; sc->sc_wskbddev = config_found(self, &wa, wskbddevprint); if (!pmf_device_register(self, NULL, NULL)) aprint_error_dev(self, "unable to establish power handler\n"); }
static void hpcapm_attach(device_t parent, device_t self, void *aux) { struct apmhpc_softc *sc; struct apmdev_attach_args aaa; sc = device_private(self); printf(": pseudo power management module\n"); sc->events = 0; sc->power_state = APM_SYS_READY; sc->battery_flags = APM_BATT_FLAG_UNKNOWN; sc->ac_state = APM_AC_UNKNOWN; sc->battery_life = APM_BATT_LIFE_UNKNOWN; sc->minutes_left = 0; sc->sc_standby_hook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_STANDBYREQ, CONFIG_HOOK_EXCLUSIVE, hpcapm_hook, sc); sc->sc_suspend_hook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_SUSPENDREQ, CONFIG_HOOK_EXCLUSIVE, hpcapm_hook, sc); sc->sc_battery_hook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_BATTERY, CONFIG_HOOK_SHARE, hpcapm_hook, sc); sc->sc_ac_hook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_AC, CONFIG_HOOK_SHARE, hpcapm_hook, sc); aaa.accessops = &hpcapm_accessops; aaa.accesscookie = sc; aaa.apm_detail = 0x0102; sc->sc_apmdev = config_found_ia(self, "apmdevif", &aaa, apmprint); if (!pmf_device_register(self, NULL, NULL)) aprint_error_dev(self, "unable to establish power handler\n"); }
void * vrc4172pci_intr_establish(pci_chipset_tag_t pc, pci_intr_handle_t ih, int level, int (*func)(void *), void *arg) { if (ih == -1) return (NULL); DPRINTF(("vrc4172pci_intr_establish: %lx\n", ih)); return (config_hook(CONFIG_HOOK_PCIINTR, ih, CONFIG_HOOK_EXCLUSIVE, (int (*)(void *, int, long, void *))func, arg)); }
static void psh3pwr_attach(device_t parent, device_t self, void *aux) { extern void (*__sleep_func)(void *); extern void *__sleep_ctx; struct psh3pwr_softc *sc = device_private(self); uint8_t phdr; sc->sc_dev = self; /* arrange for hpcapm to call us when power status is requested */ config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_ACADAPTER, CONFIG_HOOK_EXCLUSIVE, psh3pwr_apm_getpower_hook, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_CHARGE, CONFIG_HOOK_EXCLUSIVE, psh3pwr_apm_getpower_hook, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_BATTERYVAL, CONFIG_HOOK_EXCLUSIVE, psh3pwr_apm_getpower_hook, sc); /* regisiter sleep function to APM */ __sleep_func = psh3pwr_sleep; __sleep_ctx = self; phdr = _reg_read_1(SH7709_PHDR); _reg_write_1(SH7709_PHDR, phdr | PSH3_GREEN_LED_ON); aprint_naive("\n"); aprint_normal("\n"); sc->sc_ih_pout = intc_intr_establish(SH7709_INTEVT2_IRQ0, IST_EDGE, IPL_TTY, psh3pwr_intr_plug_out, sc); sc->sc_ih_pin = intc_intr_establish(SH7709_INTEVT2_IRQ1, IST_EDGE, IPL_TTY, psh3pwr_intr_plug_in, sc); /* XXXX: WindowsCE sets this bit. */ aprint_normal_dev(self, "plug status: %s\n", psh3pwr_ac_is_off() ? "out" : "in"); }
void optpoint_attach(struct device *parent, struct device *self, void *aux) { struct txspi_attach_args *ta = aux; struct optpoint_softc *sc = (void*)self; struct tx39spi_softc *spi = sc->sc_spi = (void*)parent; tx_chipset_tag_t tc = sc->sc_tc = ta->sa_tc; struct wsmousedev_attach_args wsmaa; sc->sc_hc = tc->tc_iochip[MFIO]; sc->enabled = 0; /* Specific SPI settings for OptPoint of HC-AJ2 */ tx39spi_delayval(spi, 0); tx39spi_baudrate(spi, 4); /* SPICLK Rate = 737.3 kHz */ tx39spi_word(spi, 0); /* Use 8bits of data */ tx39spi_phapol(spi, 0); tx39spi_clkpol(spi, 1); tx39spi_lsb(spi, 0); /* MSB first */ optpoint_enable(sc); printf("\n"); wsmaa.accessops = &optpoint_accessops; wsmaa.accesscookie = sc; /* attach the wsmouse */ sc->sc_wsmousedev = config_found(self, &wsmaa, wsmousedevprint); /* Add a hard power hook to power saving */ sc->sc_powerhook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_HARDPOWER, CONFIG_HOOK_SHARE, optpoint_power, sc); #ifdef DIAGNOSTIC if (sc->sc_powerhook == 0) printf("%s: unable to establish hard power hook", sc->sc_dev.dv_xname); #endif }
void hpcout_attach(device_t parent, device_t self, void *aux) { struct hpcioman_attach_args *hma = aux; struct hpcout_softc *sc = device_private(self); sc->sc_hma = *hma; /* structure assignment */ if (hma->hma_hc == NULL || hma->hma_type == HPCIOMANCF_EVTYPE_DEFAULT || hma->hma_id == HPCIOMANCF_ID_DEFAULT || hma->hma_port == HPCIOMANCF_PORT_DEFAULT) { printf(": ignored\n"); return; } printf("\n"); if (hma->hma_initvalue != -1) hpcio_portwrite(sc->sc_hc, sc->sc_port, hma->hma_initvalue); config_hook(sc->sc_type, sc->sc_id, CONFIG_HOOK_SHARE, hpcout_hook, sc); }
static void j720lcd_attach(device_t parent, device_t self, void *aux) { struct j720lcd_softc *sc = device_private(self); int brightness, contrast; sc->sc_dev = self; sc->sc_ssp = device_private(parent); /* LCD brightness hooks. */ config_hook(CONFIG_HOOK_SET, CONFIG_HOOK_BRIGHTNESS, CONFIG_HOOK_SHARE, j720lcd_param, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_BRIGHTNESS, CONFIG_HOOK_SHARE, j720lcd_param, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_BRIGHTNESS_MAX, CONFIG_HOOK_SHARE, j720lcd_param, sc); /* LCD contrast hooks. */ config_hook(CONFIG_HOOK_SET, CONFIG_HOOK_CONTRAST, CONFIG_HOOK_SHARE, j720lcd_param, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_CONTRAST, CONFIG_HOOK_SHARE, j720lcd_param, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_CONTRAST_MAX, CONFIG_HOOK_SHARE, j720lcd_param, sc); /* LCD power hook. */ #if 0 config_hook(CONFIG_HOOK_POWERCONTROL, CONFIG_HOOK_POWERCONTROL_LCDLIGHT, CONFIG_HOOK_SHARE, j720lcd_power, sc); #endif /* Get default brightness/contrast values. */ config_hook_call(CONFIG_HOOK_GET, CONFIG_HOOK_BRIGHTNESS, &brightness); config_hook_call(CONFIG_HOOK_GET, CONFIG_HOOK_CONTRAST, &contrast); aprint_normal(": brightness %d, contrast %d\n", brightness, contrast); }
void mq200_attach(struct mq200_softc *sc) { unsigned long regval; struct hpcfb_attach_args ha; int console = (bootinfo->bi_cnuse & BI_CNUSE_SERIAL) ? 0 : 1; printf(": "); if (mq200_fbinit(&sc->sc_fbconf) != 0) { /* just return so that hpcfb will not be attached */ return; } sc->sc_fbconf.hf_baseaddr = (u_long)bootinfo->fb_addr; sc->sc_fbconf.hf_offset = (u_long)sc->sc_fbconf.hf_baseaddr - MIPS_PHYS_TO_KSEG1(mips_ptob(mips_btop(sc->sc_baseaddr))); DPRINTF("hf_baseaddr=%lx\n", sc->sc_fbconf.hf_baseaddr); DPRINTF("hf_offset=%lx\n", sc->sc_fbconf.hf_offset); regval = mq200_read(sc, MQ200_PC08R); printf("MQ200 Rev.%02lx video controller", regval & 0xff); if (console) { printf(", console"); } printf("\n"); printf("%s: framebuffer address: 0x%08lx\n", device_xname(sc->sc_dev), (u_long)bootinfo->fb_addr); /* * setup registers */ sc->sc_flags = 0; sc->sc_baseclock = 12288; /* 12.288 MHz */ #ifdef MQ200_DEBUG if (bootverbose) { /* dump current setting */ mq200_dump_all(sc); mq200_dump_pll(sc); } #endif mq200_setup_regctx(sc); mq200_mdsetup(sc); if (sc->sc_md) { int mode; switch (sc->sc_fbconf.hf_pixel_width) { case 1: mode = MQ200_GCC_1BPP; break; case 2: mode = MQ200_GCC_2BPP; break; case 4: mode = MQ200_GCC_4BPP; break; case 8: mode = MQ200_GCC_8BPP; break; case 16: mode = MQ200_GCC_16BPP_DIRECT; break; default: printf("%s: %dbpp isn't supported\n", device_xname(sc->sc_dev), sc->sc_fbconf.hf_pixel_width); return; } if (sc->sc_md->md_flags & MQ200_MD_HAVEFP) { sc->sc_flags |= MQ200_SC_GC2_ENABLE; /* FP */ } #if MQ200_USECRT if (sc->sc_md->md_flags & MQ200_MD_HAVECRT) { int i; sc->sc_flags |= MQ200_SC_GC1_ENABLE; /* CRT */ for (i = 0; i < mq200_crt_nparams; i++) { sc->sc_crt = &mq200_crt_params[i]; if (sc->sc_md->md_fp_width <= mq200_crt_params[i].width && sc->sc_md->md_fp_height <= mq200_crt_params[i].height) break; } } #endif mq200_setup(sc); if (sc->sc_flags & MQ200_SC_GC2_ENABLE) /* FP */ mq200_win_enable(sc, MQ200_GC2, mode, sc->sc_fbconf.hf_baseaddr, sc->sc_fbconf.hf_width, sc->sc_fbconf.hf_height, sc->sc_fbconf.hf_bytes_per_plane); if (sc->sc_flags & MQ200_SC_GC1_ENABLE) /* CRT */ mq200_win_enable(sc, MQ200_GC1, mode, sc->sc_fbconf.hf_baseaddr, sc->sc_fbconf.hf_width, sc->sc_fbconf.hf_height, sc->sc_fbconf.hf_bytes_per_plane); } #ifdef MQ200_DEBUG if (sc->sc_md == NULL || bootverbose) { mq200_dump_pll(sc); } #endif /* Add a power hook to power saving */ sc->sc_mq200pwstate = MQ200_POWERSTATE_D0; sc->sc_powerhook = powerhook_establish(device_xname(sc->sc_dev), mq200_power, sc); if (sc->sc_powerhook == NULL) printf("%s: WARNING: unable to establish power hook\n", device_xname(sc->sc_dev)); /* Add a hard power hook to power saving */ sc->sc_hardpowerhook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_HARDPOWER, CONFIG_HOOK_SHARE, mq200_hardpower, sc); if (sc->sc_hardpowerhook == NULL) printf("%s: WARNING: unable to establish hard power hook\n", device_xname(sc->sc_dev)); /* initialize backlight brightness and lcd contrast */ sc->sc_lcd_inited = 0; mq200_init_brightness(sc, 1); mq200_init_contrast(sc, 1); mq200_init_backlight(sc, 1); if (console && hpcfb_cnattach(&sc->sc_fbconf) != 0) { panic("mq200_attach: can't init fb console"); } ha.ha_console = console; ha.ha_accessops = &mq200_ha; ha.ha_accessctx = sc; ha.ha_curfbconf = 0; ha.ha_nfbconf = 1; ha.ha_fbconflist = &sc->sc_fbconf; ha.ha_curdspconf = 0; ha.ha_ndspconf = 1; ha.ha_dspconflist = &sc->sc_dspconf; config_found(sc->sc_dev, &ha, hpcfbprint); #if NBIVIDEO > 0 /* * bivideo is no longer need */ bivideo_dont_attach = 1; #endif /* NBIVIDEO > 0 */ }
void j720sspattach(struct device *parent, struct device *self, void *aux) { struct j720ssp_softc *sc = (void *)self; struct sa11x0_softc *psc = (void *)parent; struct sa11x0_attach_args *sa = aux; struct wskbddev_attach_args a; printf("\n"); sc->sc_iot = psc->sc_iot; sc->sc_gpioh = psc->sc_gpioh; if (bus_space_map(sc->sc_iot, sa->sa_addr, sa->sa_size, 0, &sc->sc_ssph)) { printf("%s: unable to map SSP registers\n", sc->sc_dev.dv_xname); return; } sc->sc_si = softintr_establish(IPL_SOFTCLOCK, j720kbdsoft, sc); sc->sc_enabled = 0; a.console = 0; a.keymap = &j720kbd_keymapdata; a.accessops = &j720kbd_accessops; a.accesscookie = sc; /* Do console initialization */ if (! (bootinfo->bi_cnuse & BI_CNUSE_SERIAL)) { j720kbdcons_sc = *sc; a.console = 1; wskbd_cnattach(&j720kbd_consops, NULL, &j720kbd_keymapdata); j720kbdcons_initstate = 1; } /* * Attach the wskbd, saving a handle to it. * XXX XXX XXX */ sc->sc_wskbddev = config_found(self, &a, wskbddevprint); #ifdef DEBUG /* Zero the stat counters */ j720sspwaitcnt = 0; j720sspwaittime = 0; #endif if (j720kbdcons_initstate == 1) j720kbd_enable(sc, 1); /* LCD control is on the same bus */ config_hook(CONFIG_HOOK_SET, CONFIG_HOOK_BRIGHTNESS, CONFIG_HOOK_SHARE, j720lcdparam, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_BRIGHTNESS, CONFIG_HOOK_SHARE, j720lcdparam, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_BRIGHTNESS_MAX, CONFIG_HOOK_SHARE, j720lcdparam, sc); config_hook(CONFIG_HOOK_SET, CONFIG_HOOK_CONTRAST, CONFIG_HOOK_SHARE, j720lcdparam, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_CONTRAST, CONFIG_HOOK_SHARE, j720lcdparam, sc); config_hook(CONFIG_HOOK_GET, CONFIG_HOOK_CONTRAST_MAX, CONFIG_HOOK_SHARE, j720lcdparam, sc); }
void tx3912video_attach(device_t parent, device_t self, void *aux) { struct tx3912video_softc *sc = device_private(self); struct video_chip *chip; static const char *const depth_print[] = { [TX3912_VIDEOCTRL1_BITSEL_MONOCHROME] = "monochrome", [TX3912_VIDEOCTRL1_BITSEL_2BITGREYSCALE] = "2bit greyscale", [TX3912_VIDEOCTRL1_BITSEL_4BITGREYSCALE] = "4bit greyscale", [TX3912_VIDEOCTRL1_BITSEL_8BITCOLOR] = "8bit color" }; struct hpcfb_attach_args ha; tx_chipset_tag_t tc; txreg_t val; int console; sc->sc_dev = self; sc->sc_console = console = cn_tab ? 0 : 1; sc->sc_chip = chip = &tx3912video_chip; /* print video module information */ printf(": %s, frame buffer 0x%08x-0x%08x\n", depth_print[(ffs(chip->vc_fbdepth) - 1) & 0x3], (unsigned)chip->vc_fbpaddr, (unsigned)(chip->vc_fbpaddr + chip->vc_fbsize)); /* don't inverse VDAT[3:0] signal */ tc = chip->vc_v; val = tx_conf_read(tc, TX3912_VIDEOCTRL1_REG); val &= ~TX3912_VIDEOCTRL1_INVVID; tx_conf_write(tc, TX3912_VIDEOCTRL1_REG, val); /* install default CLUT */ tx3912video_clut_init(sc); /* if serial console, power off video module */ tx3912video_power(sc, 0, 0, (void *) (console ? PWR_RESUME : PWR_SUSPEND)); /* Add a hard power hook to power saving */ sc->sc_powerhook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_HARDPOWER, CONFIG_HOOK_SHARE, tx3912video_power, sc); if (sc->sc_powerhook == 0) printf("WARNING unable to establish hard power hook"); #ifdef TX3912VIDEO_DEBUG /* attach debug draw routine (debugging use) */ video_attach_drawfunc(sc->sc_chip); tx_conf_register_video(tc, sc->sc_chip); #endif /* Attach frame buffer device */ tx3912video_hpcfbinit(sc); if (console && hpcfb_cnattach(&sc->sc_fbconf) != 0) { panic("tx3912video_attach: can't init fb console"); } ha.ha_console = console; ha.ha_accessops = &tx3912video_ha; ha.ha_accessctx = sc; ha.ha_curfbconf = 0; ha.ha_nfbconf = 1; ha.ha_fbconflist = &sc->sc_fbconf; ha.ha_curdspconf = 0; ha.ha_ndspconf = 1; ha.ha_dspconflist = &sc->sc_dspconf; config_found(self, &ha, hpcfbprint); #if NBIVIDEO > 0 /* bivideo is no longer need */ bivideo_dont_attach = 1; #endif /* NBIVIDEO > 0 */ }
static void sed1356_attach(struct device *parent, struct device *self, void *aux) { struct sed1356_softc *sc = (struct sed1356_softc *)self; struct hpcfb_attach_args ha; int console = (bootinfo->bi_cnuse & BI_CNUSE_SERIAL) ? 0 : 1; if (attach_flag) { panic("%s(%d): sed1356 attached twice", __FILE__, __LINE__); } attach_flag = 1; if (sed1356_init(&sc->sc_fbconf) != 0) { /* just return so that hpcfb will not be attached */ return; } printf("\n"); sc->sc_iot = &sa11x0_bs_tag; sc->sc_parent = (struct sa11x0_softc *)parent; if (bus_space_map(sc->sc_iot, (bus_addr_t)bootinfo->fb_addr & ~0x3fffff, 0x200, 0, &sc->sc_regh)) { printf("%s: unable to map register\n", sc->sc_dev.dv_xname); return; } printf("%s: Epson SED1356", sc->sc_dev.dv_xname); if (console) { printf(", console"); } printf("\n"); printf("%s: framebuffer address: 0x%08lx\n", sc->sc_dev.dv_xname, (u_long)bootinfo->fb_addr); /* Add a suspend hook to power saving */ sc->sc_powerstate = 0; sc->sc_powerhook = powerhook_establish(self->dv_xname, sed1356_power, sc); if (sc->sc_powerhook == NULL) printf("%s: WARNING: unable to establish power hook\n", sc->sc_dev.dv_xname); /* Initialize backlight brightness and lcd contrast */ sc->sc_lcd_inited = 0; sed1356_init_brightness(sc, 1); sed1356_init_contrast(sc, 1); sed1356_init_backlight(sc, 1); if (console && hpcfb_cnattach(&sc->sc_fbconf) != 0) panic("sed1356_attach: cannot init fb console"); ha.ha_console = console; ha.ha_accessops = &sed1356_ha; ha.ha_accessctx = sc; ha.ha_curfbconf = 0; ha.ha_nfbconf = 1; ha.ha_fbconflist = &sc->sc_fbconf; ha.ha_curdspconf = 0; ha.ha_ndspconf = 1; ha.ha_dspconflist = &sc->sc_dspconf; /* XXX */ if (platid_match(&platid, &platid_mask_MACH_HP_JORNADA_7XX)) { config_hook(CONFIG_HOOK_POWERCONTROL, CONFIG_HOOK_POWERCONTROL_LCDLIGHT, CONFIG_HOOK_SHARE, j720lcd_power, sc); } config_found(self, &ha, hpcfbprint); }
static void zapm_attach(device_t parent, device_t self, void *aux) { struct zapm_softc *sc = device_private(self); struct apmdev_attach_args aaa; sc->sc_dev = self; aprint_normal(": pseudo power management module\n"); aprint_naive("\n"); /* machine-depent part */ callout_init(&sc->sc_cyclic_poll, 0); callout_setfunc(&sc->sc_cyclic_poll, zapm_cyclic, sc); callout_init(&sc->sc_discharge_poll, 0); callout_setfunc(&sc->sc_discharge_poll, zapm_poll, sc); mutex_init(&sc->sc_mtx, MUTEX_DEFAULT, IPL_NONE); if (ZAURUS_ISC1000 || ZAURUS_ISC3000) { sc->sc_ac_detect_pin = GPIO_AC_IN_C3000; sc->sc_batt_cover_pin = GPIO_BATT_COVER_C3000; sc->sc_charge_comp_pin = GPIO_CHRG_CO_C3000; } else { /* XXX */ return; } pxa2x0_gpio_set_function(sc->sc_ac_detect_pin, GPIO_IN); pxa2x0_gpio_set_function(sc->sc_charge_comp_pin, GPIO_IN); pxa2x0_gpio_set_function(sc->sc_batt_cover_pin, GPIO_IN); (void)pxa2x0_gpio_intr_establish(sc->sc_ac_detect_pin, IST_EDGE_BOTH, IPL_BIO, zapm_acintr, sc); (void)pxa2x0_gpio_intr_establish(sc->sc_charge_comp_pin, IST_EDGE_BOTH, IPL_BIO, zapm_bcintr, sc); /* machine-independent part */ sc->events = 0; sc->power_state = APM_SYS_READY; sc->battery_state = APM_BATT_FLAG_UNKNOWN; sc->ac_state = APM_AC_UNKNOWN; sc->battery_life = APM_BATT_LIFE_UNKNOWN; sc->minutes_left = 0; sc->sc_standby_hook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_STANDBYREQ, CONFIG_HOOK_EXCLUSIVE, zapm_hook, sc); sc->sc_suspend_hook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_SUSPENDREQ, CONFIG_HOOK_EXCLUSIVE, zapm_hook, sc); sc->sc_battery_hook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_BATTERY, CONFIG_HOOK_SHARE, zapm_hook, sc); sc->sc_ac_hook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_AC, CONFIG_HOOK_SHARE, zapm_hook, sc); aaa.accessops = &zapm_accessops; aaa.accesscookie = sc; aaa.apm_detail = 0x0102; sc->sc_apmdev = config_found_ia(self, "apmdevif", &aaa, apmprint); if (sc->sc_apmdev != NULL) { zapm_poll1(sc, 0); callout_schedule(&sc->sc_cyclic_poll, CYCLIC_TIME); } }
void ite8181_attach(struct ite8181_softc *sc) { unsigned long regval; struct hpcfb_attach_args ha; int console = (bootinfo->bi_cnuse & BI_CNUSE_SERIAL) ? 0 : 1; printf(": "); if (ite8181_fbinit(&sc->sc_fbconf) != 0) { /* just return so that hpcfb will not be attached */ return; } regval = ite8181_config_read_4(sc->sc_iot, sc->sc_ioh, ITE8181_CLASS); printf("ITE8181 Rev.%02lx", regval & ITE8181_REV_MASK); if (console) { printf(", console"); } printf("\n"); printf("%s: framebuffer address: 0x%08lx\n", sc->sc_dev.dv_xname, (u_long)bootinfo->fb_addr); if (ite8181_lcd_control_disable) printf("%s: ite8181 lcd control is DISABLED.\n", sc->sc_dev.dv_xname); /* set base offsets */ sc->sc_mba = ite8181_config_read_4(sc->sc_iot, sc->sc_ioh, ITE8181_MBA); DPRINTFN(1, ("ite8181: Memory base offset %08x\n", sc->sc_mba)); sc->sc_gba = ite8181_config_read_4(sc->sc_iot, sc->sc_ioh, ITE8181_GBA); DPRINTFN(1, ("ite8181: GUI base offset %08x\n", sc->sc_gba)); sc->sc_sba = ite8181_config_read_4(sc->sc_iot, sc->sc_ioh, ITE8181_SBA); DPRINTFN(1, ("ite8181: Graphics base offset %08x\n", sc->sc_sba)); /* assume lcd is on */ sc->sc_lcd = 1; /* erase wince cursor */ ite8181_erase_cursor(sc); /* Add a power hook to power saving */ sc->sc_powerhook = powerhook_establish(sc->sc_dev.dv_xname, ite8181_power, sc); if (sc->sc_powerhook == NULL) printf("%s: WARNING: unable to establish power hook\n", sc->sc_dev.dv_xname); /* Add a hard power hook to power saving */ sc->sc_hardpowerhook = config_hook(CONFIG_HOOK_PMEVENT, CONFIG_HOOK_PMEVENT_HARDPOWER, CONFIG_HOOK_SHARE, ite8181_hardpower, sc); if (sc->sc_hardpowerhook == NULL) printf("%s: WARNING: unable to establish hard power hook\n", sc->sc_dev.dv_xname); /* initialize backlight brightness and lcd contrast */ sc->sc_lcd_inited = 0; ite8181_init_brightness(sc, 1); ite8181_init_contrast(sc, 1); ite8181_init_backlight(sc, 1); if (console && hpcfb_cnattach(&sc->sc_fbconf) != 0) { panic("ite8181_attach: can't init fb console"); } ha.ha_console = console; ha.ha_accessops = &ite8181_ha; ha.ha_accessctx = sc; ha.ha_curfbconf = 0; ha.ha_nfbconf = 1; ha.ha_fbconflist = &sc->sc_fbconf; ha.ha_curdspconf = 0; ha.ha_ndspconf = 1; ha.ha_dspconflist = &sc->sc_dspconf; config_found(&sc->sc_dev, &ha, hpcfbprint); #if NBIVIDEO > 0 /* * bivideo is no longer need */ bivideo_dont_attach = 1; #endif /* NBIVIDEO > 0 */ }