Clocks are an important feature of platforms and have become increasing complex with time. Most modern SoCs have multiple PLLs and dozens of clock dividers which distribute clocks to on-chip peripherals. Some SoC implementations have a clock API which is private to that SoC family, e.g. Tegra and Exynos. This is useful but it would be better to have a common API that can be understood and used throughout U-Boot. Add a simple clock API as a starting point. It supports querying and setting the rate of a clock. Each clock is a device. To reduce memory and processing overhead the concept of peripheral clocks is provided. These do not need to be explicit devices - it is possible to write a driver that can adjust the I2C clock (for example) without an explicit I2C clock device. This can dramatically reduce the number of devices (and associated overhead) in a complex SoC. Clocks are referenced by a number, and it is expected that SoCs will define that numbering themselves via an enum. Signed-off-by: Simon Glass <sjg@chromium.org>
65 lines
2 KiB
C
65 lines
2 KiB
C
/*
|
|
* Copyright (c) 2013 Google, Inc
|
|
*
|
|
* (C) Copyright 2012
|
|
* Pavel Herrmann <morpheus.ibis@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#ifndef _DM_UCLASS_ID_H
|
|
#define _DM_UCLASS_ID_H
|
|
|
|
/* TODO(sjg@chromium.org): this could be compile-time generated */
|
|
enum uclass_id {
|
|
/* These are used internally by driver model */
|
|
UCLASS_ROOT = 0,
|
|
UCLASS_DEMO,
|
|
UCLASS_TEST,
|
|
UCLASS_TEST_FDT,
|
|
UCLASS_TEST_BUS,
|
|
UCLASS_SPI_EMUL, /* sandbox SPI device emulator */
|
|
UCLASS_I2C_EMUL, /* sandbox I2C device emulator */
|
|
UCLASS_PCI_EMUL, /* sandbox PCI device emulator */
|
|
UCLASS_USB_EMUL, /* sandbox USB bus device emulator */
|
|
UCLASS_SIMPLE_BUS, /* bus with child devices */
|
|
|
|
/* U-Boot uclasses start here - in alphabetical order */
|
|
UCLASS_CLK, /* Clock source, e.g. used by peripherals */
|
|
UCLASS_CPU, /* CPU, typically part of an SoC */
|
|
UCLASS_CROS_EC, /* Chrome OS EC */
|
|
UCLASS_DISPLAY_PORT, /* Display port video */
|
|
UCLASS_RAM, /* RAM controller */
|
|
UCLASS_ETH, /* Ethernet device */
|
|
UCLASS_GPIO, /* Bank of general-purpose I/O pins */
|
|
UCLASS_I2C, /* I2C bus */
|
|
UCLASS_I2C_EEPROM, /* I2C EEPROM device */
|
|
UCLASS_I2C_GENERIC, /* Generic I2C device */
|
|
UCLASS_LED, /* Light-emitting diode (LED) */
|
|
UCLASS_LPC, /* x86 'low pin count' interface */
|
|
UCLASS_MASS_STORAGE, /* Mass storage device */
|
|
UCLASS_MMC, /* SD / MMC card or chip */
|
|
UCLASS_MOD_EXP, /* RSA Mod Exp device */
|
|
UCLASS_PCH, /* x86 platform controller hub */
|
|
UCLASS_PCI, /* PCI bus */
|
|
UCLASS_PCI_GENERIC, /* Generic PCI bus device */
|
|
UCLASS_PMIC, /* PMIC I/O device */
|
|
UCLASS_REGULATOR, /* Regulator device */
|
|
UCLASS_RESET, /* Reset device */
|
|
UCLASS_RTC, /* Real time clock device */
|
|
UCLASS_SERIAL, /* Serial UART */
|
|
UCLASS_SPI, /* SPI bus */
|
|
UCLASS_SPI_FLASH, /* SPI flash */
|
|
UCLASS_SPI_GENERIC, /* Generic SPI flash target */
|
|
UCLASS_SYSCON, /* System configuration device */
|
|
UCLASS_THERMAL, /* Thermal sensor */
|
|
UCLASS_USB, /* USB bus */
|
|
UCLASS_USB_DEV_GENERIC, /* USB generic device */
|
|
UCLASS_USB_HUB, /* USB hub */
|
|
|
|
UCLASS_COUNT,
|
|
UCLASS_INVALID = -1,
|
|
};
|
|
|
|
#endif
|