/* Basic test of the panel uclass */ static int dm_test_panel(struct unit_test_state *uts) { struct udevice *dev, *pwm, *gpio, *reg; uint period_ns; uint duty_ns; bool enable; bool polarity; ut_assertok(uclass_first_device_err(UCLASS_PANEL, &dev)); ut_assertok(uclass_first_device_err(UCLASS_PWM, &pwm)); ut_assertok(uclass_get_device(UCLASS_GPIO, 1, &gpio)); ut_assertok(regulator_get_by_platname("VDD_EMMC_1.8V", ®)); ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, &enable, &polarity)); ut_asserteq(false, enable); ut_asserteq(false, regulator_get_enable(reg)); ut_assertok(panel_enable_backlight(dev)); ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, &enable, &polarity)); ut_asserteq(1000, period_ns); ut_asserteq(170 * 1000 / 256, duty_ns); ut_asserteq(true, enable); ut_asserteq(false, polarity); ut_asserteq(1, sandbox_gpio_get_value(gpio, 1)); ut_asserteq(true, regulator_get_enable(reg)); ut_assertok(panel_set_backlight(dev, 40)); ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, &enable, &polarity)); ut_asserteq(64 * 1000 / 256, duty_ns); ut_assertok(panel_set_backlight(dev, BACKLIGHT_MAX)); ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, &enable, &polarity)); ut_asserteq(255 * 1000 / 256, duty_ns); ut_assertok(panel_set_backlight(dev, BACKLIGHT_MIN)); ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, &enable, &polarity)); ut_asserteq(0 * 1000 / 256, duty_ns); ut_asserteq(1, sandbox_gpio_get_value(gpio, 1)); ut_assertok(panel_set_backlight(dev, BACKLIGHT_DEFAULT)); ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, &enable, &polarity)); ut_asserteq(true, enable); ut_asserteq(170 * 1000 / 256, duty_ns); ut_assertok(panel_set_backlight(dev, BACKLIGHT_OFF)); ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns, &enable, &polarity)); ut_asserteq(0 * 1000 / 256, duty_ns); ut_asserteq(0, sandbox_gpio_get_value(gpio, 1)); ut_asserteq(false, regulator_get_enable(reg)); return 0; }
static int get_tpm(struct udevice **devp) { int rc; rc = uclass_first_device_err(UCLASS_TPM, devp); if (rc) { printf("Could not find TPM (ret=%d)\n", rc); return CMD_RET_FAILURE; } return 0; }
/* Initilaise sound subsystem */ static int do_init(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { struct udevice *dev; int ret; ret = uclass_first_device_err(UCLASS_SOUND, &dev); if (!ret) ret = sound_setup(dev); if (ret) { printf("Initialise Audio driver failed (ret=%d)\n", ret); return CMD_RET_FAILURE; } return 0; }
static int bd82x6x_sata_probe(struct udevice *dev) { struct udevice *pch; int ret; ret = uclass_first_device_err(UCLASS_PCH, &pch); if (ret) return ret; if (!(gd->flags & GD_FLG_RELOC)) bd82x6x_sata_enable(dev); else bd82x6x_sata_init(dev, pch); return 0; }
int arch_cpu_init_dm(void) { struct udevice *dev; int ret; ret = uclass_first_device_err(UCLASS_CPU, &dev); if (ret) return ret; gd->ram_size = CONFIG_SYS_SDRAM_SIZE; #ifndef CONFIG_ROM_STUBS copy_exception_trampoline(); #endif return 0; }
int pci_get_bus(int busnum, struct udevice **busp) { int ret; ret = uclass_get_device_by_seq(UCLASS_PCI, busnum, busp); /* Since buses may not be numbered yet try a little harder with bus 0 */ if (ret == -ENODEV) { ret = uclass_first_device_err(UCLASS_PCI, busp); if (ret) return ret; ret = uclass_get_device_by_seq(UCLASS_PCI, busnum, busp); } return ret; }
int notrace dm_timer_init(void) { __maybe_unused const void *blob = gd->fdt_blob; struct udevice *dev = NULL; int node = -ENOENT; int ret; if (gd->timer) return 0; #if !CONFIG_IS_ENABLED(OF_PLATDATA) /* Check for a chosen timer to be used for tick */ node = fdtdec_get_chosen_node(blob, "tick-timer"); #endif if (node < 0) { /* No chosen timer, trying first available timer */ ret = uclass_first_device_err(UCLASS_TIMER, &dev); if (ret) return ret; } else { if (uclass_get_device_by_of_offset(UCLASS_TIMER, node, &dev)) { /* * If the timer is not marked to be bound before * relocation, bind it anyway. */ if (node > 0 && !lists_bind_fdt(gd->dm_root, offset_to_ofnode(node), &dev)) { ret = device_probe(dev); if (ret) return ret; } } } if (dev) { gd->timer = dev; return 0; } return -ENODEV; }
static int rockchip_gpio_probe(struct udevice *dev) { struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev); struct rockchip_gpio_priv *priv = dev_get_priv(dev); char *end; int ret; priv->regs = dev_read_addr_ptr(dev); ret = uclass_first_device_err(UCLASS_PINCTRL, &priv->pinctrl); if (ret) return ret; uc_priv->gpio_count = ROCKCHIP_GPIOS_PER_BANK; end = strrchr(dev->name, '@'); priv->bank = trailing_strtoln(dev->name, end); priv->name[0] = 'A' + priv->bank; uc_priv->bank_name = priv->name; return 0; }
void display_sysid(void) { struct udevice *dev; u32 sysid[2]; struct tm t; char asc[32]; time_t stamp; int ret; /* the first misc device will be used */ ret = uclass_first_device_err(UCLASS_MISC, &dev); if (ret) return; ret = misc_read(dev, 0, &sysid, sizeof(sysid)); if (ret) return; stamp = sysid[1]; localtime_r(&stamp, &t); asctime_r(&t, asc); printf("SYSID: %08x, %s", sysid[0], asc); }
/* play sound from buffer */ static int do_play(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { struct udevice *dev; int ret = 0; int msec = 1000; int freq = 400; if (argc > 1) msec = simple_strtoul(argv[1], NULL, 10); if (argc > 2) freq = simple_strtoul(argv[2], NULL, 10); ret = uclass_first_device_err(UCLASS_SOUND, &dev); if (!ret) ret = sound_beep(dev, msec, freq); if (ret) { printf("Sound device failed to play (err=%d)\n", ret); return CMD_RET_FAILURE; } return 0; }
static int phycore_init(void) { struct udevice *pmic; int ret; ret = uclass_first_device_err(UCLASS_PMIC, &pmic); if (ret) return ret; #if defined(CONFIG_SPL_POWER_SUPPORT) /* Increase USB input current to 2A */ ret = rk818_spl_configure_usb_input_current(pmic, 2000); if (ret) return ret; /* Close charger when USB lower then 3.26V */ ret = rk818_spl_configure_usb_chrg_shutdown(pmic, 3260000); if (ret) return ret; #endif return 0; }
int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode, const char *drv_name, const char *dev_name, struct udevice **busp, struct spi_slave **devp) { struct udevice *bus, *dev; struct dm_spi_slave_platdata *plat; bool created = false; int ret; #if CONFIG_IS_ENABLED(OF_PLATDATA) ret = uclass_first_device_err(UCLASS_SPI, &bus); #else ret = uclass_get_device_by_seq(UCLASS_SPI, busnum, &bus); #endif if (ret) { printf("Invalid bus %d (err=%d)\n", busnum, ret); return ret; } ret = spi_find_chip_select(bus, cs, &dev); /* * If there is no such device, create one automatically. This means * that we don't need a device tree node or platform data for the * SPI flash chip - we will bind to the correct driver. */ if (ret == -ENODEV && drv_name) { debug("%s: Binding new device '%s', busnum=%d, cs=%d, driver=%s\n", __func__, dev_name, busnum, cs, drv_name); ret = device_bind_driver(bus, drv_name, dev_name, &dev); if (ret) { debug("%s: Unable to bind driver (ret=%d)\n", __func__, ret); return ret; } plat = dev_get_parent_platdata(dev); plat->cs = cs; plat->max_hz = speed; plat->mode = mode; created = true; } else if (ret) { printf("Invalid chip select %d:%d (err=%d)\n", busnum, cs, ret); return ret; } if (!device_active(dev)) { struct spi_slave *slave; ret = device_probe(dev); if (ret) goto err; slave = dev_get_parent_priv(dev); slave->dev = dev; } plat = dev_get_parent_platdata(dev); if (!speed) { speed = plat->max_hz; mode = plat->mode; } ret = spi_set_speed_mode(bus, speed, mode); if (ret) goto err; *busp = bus; *devp = dev_get_parent_priv(dev); debug("%s: bus=%p, slave=%p\n", __func__, bus, *devp); return 0; err: debug("%s: Error path, created=%d, device '%s'\n", __func__, created, dev->name); if (created) { device_remove(dev, DM_REMOVE_NORMAL); device_unbind(dev); } return ret; }