mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-03 18:10:13 +00:00
f26c8a8e77
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>
64 lines
2 KiB
C
64 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
|