int drv_keyboard_init(void) { struct stdio_dev dev; if (input_init(&config.input, 0)) { debug("%s: Cannot set up input\n", __func__); return -1; } config.input.read_keys = cros_ec_kbc_check; memset(&dev, '\0', sizeof(dev)); strcpy(dev.name, "cros-ec-keyb"); dev.flags = DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM; dev.getc = kbd_getc; dev.tstc = kbd_tstc; dev.start = cros_ec_init_keyboard; /* Register the device. cros_ec_init_keyboard() will be called soon */ return input_stdio_register(&dev); }
int drv_keyboard_init(void) { int error; struct stdio_dev dev = { .name = "button", .flags = DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM, .start = novena_gpio_button_init, .getc = novena_gpio_button_getc, .tstc = novena_gpio_button_tstc, }; error = input_init(&button_input, 0); if (error) { debug("%s: Cannot set up input\n", __func__); return -1; } button_input.read_keys = novena_gpio_button_read_keys; error = input_stdio_register(&dev); if (error) return error; return 0; } #endif /* * SDHC */ #ifdef CONFIG_FSL_ESDHC static struct fsl_esdhc_cfg usdhc_cfg[] = { { USDHC3_BASE_ADDR, 0, 4 }, /* Micro SD */ { USDHC2_BASE_ADDR, 0, 4 }, /* Big SD */ }; int board_mmc_getcd(struct mmc *mmc) { struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; /* There is no CD for a microSD card, assume always present. */ if (cfg->esdhc_base == USDHC3_BASE_ADDR) return 1; else return !gpio_get_value(NOVENA_SD_CD); } int board_mmc_getwp(struct mmc *mmc) { struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; /* There is no WP for a microSD card, assume always read-write. */ if (cfg->esdhc_base == USDHC3_BASE_ADDR) return 0; else return gpio_get_value(NOVENA_SD_WP); } int board_mmc_init(bd_t *bis) { s32 status = 0; int index; usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); /* Big SD write-protect and card-detect */ gpio_direction_input(NOVENA_SD_WP); gpio_direction_input(NOVENA_SD_CD); for (index = 0; index < ARRAY_SIZE(usdhc_cfg); index++) { status = fsl_esdhc_initialize(bis, &usdhc_cfg[index]); if (status) return status; } return status; }
/* i8042_kbd_init - reset keyboard and init state flags */ static int i8042_start(struct udevice *dev) { struct keyboard_priv *uc_priv = dev_get_uclass_priv(dev); struct i8042_kbd_priv *priv = dev_get_priv(dev); struct input_config *input = &uc_priv->input; int keymap, try; char *penv; int ret; if (!kbd_controller_present() || board_i8042_skip()) { debug("i8042 keyboard controller is not present\n"); return -ENOENT; } /* Init keyboard device (default US layout) */ keymap = KBD_US; penv = getenv("keymap"); if (penv != NULL) { if (strncmp(penv, "de", 3) == 0) keymap = KBD_GER; } for (try = 0; kbd_reset(priv->quirks) != 0; try++) { if (try >= KBD_RESET_TRIES) return -1; } ret = input_add_tables(input, keymap == KBD_GER); if (ret) return ret; i8042_kbd_update_leds(dev, NORMAL); debug("%s: started\n", __func__); return 0; } /** * Set up the i8042 keyboard. This is called by the stdio device handler * * We want to do this init when the keyboard is actually used rather than * at start-up, since keyboard input may not currently be selected. * * Once the keyboard starts there will be a period during which we must * wait for the keyboard to init. We do this only when a key is first * read - see kbd_wait_for_fifo_init(). * * @return 0 if ok, -ve on error */ static int i8042_kbd_probe(struct udevice *dev) { struct keyboard_priv *uc_priv = dev_get_uclass_priv(dev); struct i8042_kbd_priv *priv = dev_get_priv(dev); struct stdio_dev *sdev = &uc_priv->sdev; struct input_config *input = &uc_priv->input; int ret; if (fdtdec_get_bool(gd->fdt_blob, dev->of_offset, "intel,duplicate-por")) priv->quirks |= QUIRK_DUP_POR; /* Register the device. i8042_start() will be called soon */ input->dev = dev; input->read_keys = i8042_kbd_check; input_allow_repeats(input, true); strcpy(sdev->name, "i8042-kbd"); ret = input_stdio_register(sdev); if (ret) { debug("%s: input_stdio_register() failed\n", __func__); return ret; } debug("%s: ready\n", __func__); return 0; } static const struct keyboard_ops i8042_kbd_ops = { .start = i8042_start, .update_leds = i8042_kbd_update_leds, }; static const struct udevice_id i8042_kbd_ids[] = { { .compatible = "intel,i8042-keyboard" }, { } };