Merge git://git.denx.de/u-boot-dm
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
"fdtfile=exynos5250-arndale.dtb\0"
|
||||
|
||||
#include "exynos5250-common.h"
|
||||
#include <configs/exynos5-common.h>
|
||||
|
||||
/* SD/MMC configuration */
|
||||
#define CONFIG_SUPPORT_EMMC_BOOT
|
||||
@@ -20,15 +21,6 @@
|
||||
/* allow to overwrite serial and ethaddr */
|
||||
#define CONFIG_ENV_OVERWRITE
|
||||
|
||||
/* USB */
|
||||
#define CONFIG_USB_EHCI
|
||||
#define CONFIG_USB_EHCI_EXYNOS
|
||||
|
||||
#define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS 3
|
||||
#define CONFIG_USB_HOST_ETHER
|
||||
#define CONFIG_USB_ETHER_ASIX
|
||||
#define CONFIG_USB_ETHER_ASIX88179
|
||||
|
||||
/* MMC SPL */
|
||||
#define CONFIG_EXYNOS_SPL
|
||||
|
||||
@@ -36,9 +28,6 @@
|
||||
#define CONFIG_SYS_PROMPT "ARNDALE # "
|
||||
#define CONFIG_DEFAULT_CONSOLE "console=ttySAC2,115200n8\0"
|
||||
|
||||
#define CONFIG_NR_DRAM_BANKS 8
|
||||
#define SDRAM_BANK_SIZE (256UL << 20UL) /* 256 MB */
|
||||
|
||||
#define CONFIG_IDENT_STRING " for ARNDALE"
|
||||
|
||||
#define CONFIG_ENV_IS_IN_MMC
|
||||
@@ -49,6 +38,7 @@
|
||||
#define CONFIG_SYS_INIT_SP_ADDR CONFIG_IRAM_STACK
|
||||
|
||||
/* PMIC */
|
||||
#define CONFIG_POWER
|
||||
#define CONFIG_PMIC
|
||||
#define CONFIG_POWER_I2C
|
||||
|
||||
@@ -60,4 +50,8 @@
|
||||
/* The PERIPHBASE in the CBAR register is wrong on the Arndale, so override it */
|
||||
#define CONFIG_ARM_GIC_BASE_ADDRESS 0x10480000
|
||||
|
||||
/* Power */
|
||||
#define CONFIG_POWER
|
||||
#define CONFIG_POWER_I2C
|
||||
|
||||
#endif /* __CONFIG_H */
|
||||
|
||||
@@ -67,6 +67,8 @@
|
||||
|
||||
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
||||
#define CONFIG_SPL_GPIO_SUPPORT
|
||||
#define CONFIG_SPL_SERIAL_SUPPORT
|
||||
#define CONFIG_SPL_LIBGENERIC_SUPPORT
|
||||
|
||||
/* specific .lds file */
|
||||
#define CONFIG_SPL_LDSCRIPT "board/samsung/common/exynos-uboot-spl.lds"
|
||||
@@ -126,10 +128,6 @@
|
||||
#define SPI_FLASH_UBOOT_POS (CONFIG_SEC_FW_SIZE + CONFIG_BL1_SIZE)
|
||||
|
||||
/* I2C */
|
||||
|
||||
/* TODO(sjg@chromium.org): Move these two options to Kconfig */
|
||||
#define CONFIG_DM_I2C
|
||||
#define CONFIG_DM_I2C_COMPAT
|
||||
#define CONFIG_CMD_I2C
|
||||
#define CONFIG_SYS_I2C_S3C24X0
|
||||
#define CONFIG_SYS_I2C_S3C24X0_SPEED 100000 /* 100 Kbps */
|
||||
@@ -145,14 +143,8 @@
|
||||
#define CONFIG_SPI_FLASH_GIGADEVICE
|
||||
#define CONFIG_SF_DEFAULT_MODE SPI_MODE_0
|
||||
#define CONFIG_SF_DEFAULT_SPEED 50000000
|
||||
#define EXYNOS5_SPI_NUM_CONTROLLERS 5
|
||||
#define CONFIG_OF_SPI
|
||||
#endif
|
||||
|
||||
/* Power */
|
||||
#define CONFIG_POWER
|
||||
#define CONFIG_POWER_I2C
|
||||
|
||||
#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
|
||||
#define CONFIG_ENV_SPI_MODE SPI_MODE_0
|
||||
#define CONFIG_ENV_SECT_SIZE CONFIG_ENV_SIZE
|
||||
@@ -200,7 +192,6 @@
|
||||
#define CONFIG_FIT
|
||||
#define CONFIG_FIT_BEST_MATCH
|
||||
|
||||
|
||||
#define BOOT_TARGET_DEVICES(func) \
|
||||
func(MMC, mmc, 1) \
|
||||
func(MMC, mmc, 0) \
|
||||
|
||||
@@ -16,12 +16,23 @@
|
||||
"stdout=serial,lcd\0" \
|
||||
"stderr=serial,lcd\0"
|
||||
|
||||
#include "exynos5-common.h"
|
||||
#define CONFIG_EXYNOS5_DT
|
||||
|
||||
/* PMIC */
|
||||
#define CONFIG_POWER
|
||||
#define CONFIG_POWER_I2C
|
||||
#define CONFIG_POWER_TPS65090
|
||||
#define CONFIG_ENV_IS_IN_SPI_FLASH
|
||||
#define CONFIG_ENV_SPI_BASE 0x12D30000
|
||||
#define FLASH_SIZE (4 << 20)
|
||||
#define CONFIG_ENV_OFFSET (FLASH_SIZE - CONFIG_ENV_SECT_SIZE)
|
||||
#define CONFIG_SPI_BOOTING
|
||||
|
||||
#define CONFIG_BOARD_COMMON
|
||||
|
||||
/* Display */
|
||||
#define CONFIG_LCD
|
||||
#ifdef CONFIG_LCD
|
||||
#define CONFIG_EXYNOS_FB
|
||||
#define CONFIG_EXYNOS_DP
|
||||
#define LCD_BPP LCD_COLOR16
|
||||
#endif
|
||||
|
||||
/* Enable keyboard */
|
||||
#define CONFIG_KEYBOARD
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#ifndef __CONFIG_5250_H
|
||||
#define __CONFIG_5250_H
|
||||
|
||||
#include <configs/exynos5-common.h>
|
||||
#define CONFIG_EXYNOS5250
|
||||
|
||||
#define CONFIG_SYS_SDRAM_BASE 0x40000000
|
||||
@@ -28,16 +27,13 @@
|
||||
|
||||
#define CONFIG_SYS_INIT_SP_ADDR CONFIG_IRAM_STACK
|
||||
|
||||
/* I2C */
|
||||
#define CONFIG_MAX_I2C_NUM 8
|
||||
/* USB */
|
||||
#define CONFIG_USB_EHCI
|
||||
#define CONFIG_USB_EHCI_EXYNOS
|
||||
|
||||
/* Display */
|
||||
#define CONFIG_LCD
|
||||
#ifdef CONFIG_LCD
|
||||
#define CONFIG_EXYNOS_FB
|
||||
#define CONFIG_EXYNOS_DP
|
||||
#define LCD_BPP LCD_COLOR16
|
||||
#endif
|
||||
#define CONFIG_USB_HOST_ETHER
|
||||
#define CONFIG_USB_ETHER_ASIX
|
||||
#define CONFIG_USB_ETHER_ASIX88179
|
||||
|
||||
/* DRAM Memory Banks */
|
||||
#define CONFIG_NR_DRAM_BANKS 8
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
/* A variant of Exynos5420 (Exynos5 Family) */
|
||||
#define CONFIG_EXYNOS5800
|
||||
|
||||
#include <configs/exynos5-common.h>
|
||||
#define CONFIG_EXYNOS5_DT
|
||||
|
||||
#define MACH_TYPE_SMDK5420 8002
|
||||
#define CONFIG_MACH_TYPE MACH_TYPE_SMDK5420
|
||||
@@ -32,10 +32,6 @@
|
||||
#define CONFIG_DEVICE_TREE_LIST "exynos5800-peach-pi" \
|
||||
"exynos5420-peach-pit exynos5420-smdk5420"
|
||||
|
||||
#define CONFIG_MAX_I2C_NUM 11
|
||||
|
||||
#define CONFIG_BOARD_REV_GPIO_COUNT 2
|
||||
|
||||
#define CONFIG_PHY_IRAM_BASE 0x02020000
|
||||
|
||||
/* Address for relocating helper code (Last 4 KB of IRAM) */
|
||||
@@ -52,4 +48,7 @@
|
||||
*/
|
||||
#define CONFIG_CORE_COUNT 0x8
|
||||
|
||||
#define CONFIG_USB_XHCI
|
||||
#define CONFIG_USB_XHCI_EXYNOS
|
||||
|
||||
#endif /* __CONFIG_EXYNOS5420_H */
|
||||
|
||||
@@ -9,7 +9,9 @@
|
||||
#define __CONFIG_ODROID_XU3_H
|
||||
|
||||
#include "exynos5420-common.h"
|
||||
#include <configs/exynos5-common.h>
|
||||
|
||||
#undef CONFIG_ENV_IS_IN_SPI_FLASH
|
||||
#define CONFIG_SYS_PROMPT "ODROID-XU3 # "
|
||||
#define CONFIG_IDENT_STRING " for ODROID-XU3"
|
||||
|
||||
|
||||
@@ -9,12 +9,6 @@
|
||||
#ifndef __CONFIG_PEACH_PI_H
|
||||
#define __CONFIG_PEACH_PI_H
|
||||
|
||||
#define CONFIG_ENV_IS_IN_SPI_FLASH
|
||||
#define CONFIG_ENV_SPI_BASE 0x12D30000
|
||||
#define FLASH_SIZE (0x4 << 20)
|
||||
#define CONFIG_ENV_OFFSET (FLASH_SIZE - CONFIG_BL2_SIZE)
|
||||
#define CONFIG_SPI_BOOTING
|
||||
|
||||
#define MEM_LAYOUT_ENV_SETTINGS \
|
||||
"bootm_size=0x10000000\0" \
|
||||
"kernel_addr_r=0x22000000\0" \
|
||||
@@ -25,8 +19,7 @@
|
||||
|
||||
#include <configs/exynos5420-common.h>
|
||||
#include <configs/exynos5-dt-common.h>
|
||||
|
||||
#define CONFIG_BOARD_COMMON
|
||||
#include <configs/exynos5-common.h>
|
||||
|
||||
#define CONFIG_SYS_SDRAM_BASE 0x20000000
|
||||
#define CONFIG_SYS_TEXT_BASE 0x23E00000
|
||||
@@ -39,8 +32,6 @@
|
||||
#define CONFIG_SYS_PROMPT "Peach-Pi # "
|
||||
#define CONFIG_IDENT_STRING " for Peach-Pi"
|
||||
|
||||
#define CONFIG_VIDEO_PARADE
|
||||
|
||||
/* Display */
|
||||
#define CONFIG_LCD
|
||||
#ifdef CONFIG_LCD
|
||||
@@ -51,9 +42,6 @@
|
||||
|
||||
#define CONFIG_POWER_TPS65090_EC
|
||||
|
||||
#define CONFIG_USB_XHCI
|
||||
#define CONFIG_USB_XHCI_EXYNOS
|
||||
|
||||
/* DRAM Memory Banks */
|
||||
#define CONFIG_NR_DRAM_BANKS 7
|
||||
#define SDRAM_BANK_SIZE (512UL << 20UL) /* 512 MB */
|
||||
|
||||
@@ -9,12 +9,6 @@
|
||||
#ifndef __CONFIG_PEACH_PIT_H
|
||||
#define __CONFIG_PEACH_PIT_H
|
||||
|
||||
#define CONFIG_ENV_IS_IN_SPI_FLASH
|
||||
#define CONFIG_ENV_SPI_BASE 0x12D30000
|
||||
#define FLASH_SIZE (0x4 << 20)
|
||||
#define CONFIG_ENV_OFFSET (FLASH_SIZE - CONFIG_BL2_SIZE)
|
||||
#define CONFIG_SPI_BOOTING
|
||||
|
||||
#define MEM_LAYOUT_ENV_SETTINGS \
|
||||
"bootm_size=0x10000000\0" \
|
||||
"kernel_addr_r=0x22000000\0" \
|
||||
@@ -25,8 +19,7 @@
|
||||
|
||||
#include <configs/exynos5420-common.h>
|
||||
#include <configs/exynos5-dt-common.h>
|
||||
|
||||
#define CONFIG_BOARD_COMMON
|
||||
#include <configs/exynos5-common.h>
|
||||
|
||||
#define CONFIG_SYS_SDRAM_BASE 0x20000000
|
||||
#define CONFIG_SYS_TEXT_BASE 0x23E00000
|
||||
@@ -39,21 +32,6 @@
|
||||
#define CONFIG_SYS_PROMPT "Peach-Pit # "
|
||||
#define CONFIG_IDENT_STRING " for Peach-Pit"
|
||||
|
||||
#define CONFIG_VIDEO_PARADE
|
||||
|
||||
/* Display */
|
||||
#define CONFIG_LCD
|
||||
#ifdef CONFIG_LCD
|
||||
#define CONFIG_EXYNOS_FB
|
||||
#define CONFIG_EXYNOS_DP
|
||||
#define LCD_BPP LCD_COLOR16
|
||||
#endif
|
||||
|
||||
#define CONFIG_POWER_TPS65090_EC
|
||||
|
||||
#define CONFIG_USB_XHCI
|
||||
#define CONFIG_USB_XHCI_EXYNOS
|
||||
|
||||
/* DRAM Memory Banks */
|
||||
#define CONFIG_NR_DRAM_BANKS 4
|
||||
#define SDRAM_BANK_SIZE (512UL << 20UL) /* 512 MB */
|
||||
|
||||
@@ -9,26 +9,16 @@
|
||||
#ifndef __CONFIG_SMDK_H
|
||||
#define __CONFIG_SMDK_H
|
||||
|
||||
#define CONFIG_ENV_IS_IN_SPI_FLASH
|
||||
#define CONFIG_ENV_SPI_BASE 0x12D30000
|
||||
#define FLASH_SIZE (0x4 << 20)
|
||||
#define CONFIG_ENV_OFFSET (FLASH_SIZE - CONFIG_BL2_SIZE)
|
||||
#define CONFIG_SPI_BOOTING
|
||||
|
||||
#include <configs/exynos5250-common.h>
|
||||
#include <configs/exynos5-dt-common.h>
|
||||
#include <configs/exynos5-common.h>
|
||||
|
||||
/* PMIC */
|
||||
#define CONFIG_POWER_MAX77686
|
||||
#undef CONFIG_KEYBOARD
|
||||
|
||||
#define CONFIG_BOARD_COMMON
|
||||
|
||||
#define CONFIG_USB_XHCI
|
||||
#define CONFIG_USB_XHCI_EXYNOS
|
||||
|
||||
#define CONFIG_SYS_PROMPT "SMDK5250 # "
|
||||
#define CONFIG_IDENT_STRING " for SMDK5250"
|
||||
|
||||
/* Miscellaneous configurable options */
|
||||
#define CONFIG_DEFAULT_CONSOLE "console=ttySAC1,115200n8\0"
|
||||
|
||||
#endif /* __CONFIG_SMDK_H */
|
||||
|
||||
@@ -9,13 +9,11 @@
|
||||
#ifndef __CONFIG_SMDK5420_H
|
||||
#define __CONFIG_SMDK5420_H
|
||||
|
||||
#define CONFIG_ENV_IS_IN_SPI_FLASH
|
||||
#define CONFIG_ENV_SPI_BASE 0x12D30000
|
||||
#define FLASH_SIZE (0x4 << 20)
|
||||
#define CONFIG_ENV_OFFSET (FLASH_SIZE - CONFIG_BL2_SIZE)
|
||||
#define CONFIG_SPI_BOOTING
|
||||
|
||||
#include <configs/exynos5420-common.h>
|
||||
#include <configs/exynos5-dt-common.h>
|
||||
#include <configs/exynos5-common.h>
|
||||
|
||||
#undef CONFIG_KEYBOARD
|
||||
|
||||
#define CONFIG_BOARD_COMMON
|
||||
|
||||
|
||||
@@ -9,25 +9,12 @@
|
||||
#ifndef __CONFIG_SNOW_H
|
||||
#define __CONFIG_SNOW_H
|
||||
|
||||
#define CONFIG_ENV_IS_IN_SPI_FLASH
|
||||
#define CONFIG_ENV_SPI_BASE 0x12D30000
|
||||
#define FLASH_SIZE (0x4 << 20)
|
||||
#define CONFIG_ENV_OFFSET (FLASH_SIZE - CONFIG_BL2_SIZE)
|
||||
#define CONFIG_SPI_BOOTING
|
||||
|
||||
#include <configs/exynos5250-common.h>
|
||||
#include <configs/exynos5-dt-common.h>
|
||||
|
||||
|
||||
#define CONFIG_POWER_TPS65090_I2C
|
||||
#include <configs/exynos5-common.h>
|
||||
|
||||
#define CONFIG_BOARD_COMMON
|
||||
|
||||
#define CONFIG_USB_XHCI
|
||||
#define CONFIG_USB_EHCI
|
||||
#define CONFIG_USB_XHCI_EXYNOS
|
||||
#define CONFIG_USB_EHCI_EXYNOS
|
||||
|
||||
#define CONFIG_SYS_PROMPT "snow # "
|
||||
#define CONFIG_IDENT_STRING " for snow"
|
||||
#define CONFIG_DEFAULT_CONSOLE "console=ttySAC1,115200n8\0"
|
||||
|
||||
20
include/configs/spring.h
Normal file
20
include/configs/spring.h
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Google, Inc
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __CONFIG_SPRING_H
|
||||
#define __CONFIG_SPRING_H
|
||||
|
||||
#include <configs/exynos5250-common.h>
|
||||
#include <configs/exynos5-dt-common.h>
|
||||
#include <configs/exynos5-common.h>
|
||||
|
||||
#define CONFIG_BOARD_COMMON
|
||||
|
||||
#define CONFIG_SYS_PROMPT "spring # "
|
||||
#define CONFIG_IDENT_STRING " for spring"
|
||||
#define CONFIG_DEFAULT_CONSOLE "console=ttySAC1,115200n8\0"
|
||||
|
||||
#endif /* __CONFIG_SPRING_H */
|
||||
@@ -350,7 +350,7 @@ int cros_ec_read_build_info(struct cros_ec_dev *dev, char **strp);
|
||||
* @param state new state of the LDO/FET : EC_LDO_STATE_ON|OFF
|
||||
* @return 0 if ok, -1 on error
|
||||
*/
|
||||
int cros_ec_set_ldo(struct cros_ec_dev *dev, uint8_t index, uint8_t state);
|
||||
int cros_ec_set_ldo(struct udevice *dev, uint8_t index, uint8_t state);
|
||||
|
||||
/**
|
||||
* Read back a LDO / FET current state.
|
||||
@@ -360,7 +360,7 @@ int cros_ec_set_ldo(struct cros_ec_dev *dev, uint8_t index, uint8_t state);
|
||||
* @param state current state of the LDO/FET : EC_LDO_STATE_ON|OFF
|
||||
* @return 0 if ok, -1 on error
|
||||
*/
|
||||
int cros_ec_get_ldo(struct cros_ec_dev *dev, uint8_t index, uint8_t *state);
|
||||
int cros_ec_get_ldo(struct udevice *dev, uint8_t index, uint8_t *state);
|
||||
|
||||
/**
|
||||
* Get access to the error reported when cros_ec_board_init() was called
|
||||
@@ -390,18 +390,14 @@ int cros_ec_decode_ec_flash(const void *blob, int node,
|
||||
*/
|
||||
void cros_ec_check_keyboard(struct cros_ec_dev *dev);
|
||||
|
||||
struct i2c_msg;
|
||||
/*
|
||||
* Tunnel an I2C transfer to the EC
|
||||
*
|
||||
* @param dev CROS-EC device
|
||||
* @param chip Chip address (7-bit I2C address)
|
||||
* @param addr Register address to read/write
|
||||
* @param alen Length of register address in bytes
|
||||
* @param buffer Buffer containing data to read/write
|
||||
* @param len Length of buffer
|
||||
* @param is_read 1 if this is a read, 0 if this is a write
|
||||
* @param msg List of messages to transfer
|
||||
* @param nmsgs Number of messages to transfer
|
||||
*/
|
||||
int cros_ec_i2c_xfer(struct cros_ec_dev *dev, uchar chip, uint addr,
|
||||
int alen, uchar *buffer, int len, int is_read);
|
||||
int cros_ec_i2c_tunnel(struct udevice *dev, struct i2c_msg *msg, int nmsgs);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -139,8 +139,52 @@ void device_free(struct udevice *dev);
|
||||
static inline void device_free(struct udevice *dev) {}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* simple_bus_translate() - translate a bus address to a system address
|
||||
*
|
||||
* This handles the 'ranges' property in a simple bus. It translates the
|
||||
* device address @addr to a system address using this property.
|
||||
*
|
||||
* @dev: Simple bus device (parent of target device)
|
||||
* @addr: Address to translate
|
||||
* @return new address
|
||||
*/
|
||||
fdt_addr_t simple_bus_translate(struct udevice *dev, fdt_addr_t addr);
|
||||
|
||||
/* Cast away any volatile pointer */
|
||||
#define DM_ROOT_NON_CONST (((gd_t *)gd)->dm_root)
|
||||
#define DM_UCLASS_ROOT_NON_CONST (((gd_t *)gd)->uclass_root)
|
||||
|
||||
/* device resource management */
|
||||
#ifdef CONFIG_DEVRES
|
||||
|
||||
/**
|
||||
* devres_release_probe - Release managed resources allocated after probing
|
||||
* @dev: Device to release resources for
|
||||
*
|
||||
* Release all resources allocated for @dev when it was probed or later.
|
||||
* This function is called on driver removal.
|
||||
*/
|
||||
void devres_release_probe(struct udevice *dev);
|
||||
|
||||
/**
|
||||
* devres_release_all - Release all managed resources
|
||||
* @dev: Device to release resources for
|
||||
*
|
||||
* Release all resources associated with @dev. This function is
|
||||
* called on driver unbinding.
|
||||
*/
|
||||
void devres_release_all(struct udevice *dev);
|
||||
|
||||
#else /* ! CONFIG_DEVRES */
|
||||
|
||||
static inline void devres_release_probe(struct udevice *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void devres_release_all(struct udevice *dev)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* ! CONFIG_DEVRES */
|
||||
#endif
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
#include <dm/uclass-id.h>
|
||||
#include <fdtdec.h>
|
||||
#include <linker_lists.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
struct driver_info;
|
||||
@@ -36,6 +38,9 @@ struct driver_info;
|
||||
/* Allocate driver private data on a DMA boundary */
|
||||
#define DM_FLAG_ALLOC_PRIV_DMA (1 << 5)
|
||||
|
||||
/* Device is bound */
|
||||
#define DM_FLAG_BOUND (1 << 6)
|
||||
|
||||
/**
|
||||
* struct udevice - An instance of a driver
|
||||
*
|
||||
@@ -93,6 +98,9 @@ struct udevice {
|
||||
uint32_t flags;
|
||||
int req_seq;
|
||||
int seq;
|
||||
#ifdef CONFIG_DEVRES
|
||||
struct list_head devres_head;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Maximum sequence number supported */
|
||||
@@ -462,4 +470,280 @@ bool device_has_active_children(struct udevice *dev);
|
||||
*/
|
||||
bool device_is_last_sibling(struct udevice *dev);
|
||||
|
||||
/**
|
||||
* device_set_name() - set the name of a device
|
||||
*
|
||||
* This must be called in the device's bind() method and no later. Normally
|
||||
* this is unnecessary but for probed devices which don't get a useful name
|
||||
* this function can be helpful.
|
||||
*
|
||||
* @dev: Device to update
|
||||
* @name: New name (this string is allocated new memory and attached to
|
||||
* the device)
|
||||
* @return 0 if OK, -ENOMEM if there is not enough memory to allocate the
|
||||
* string
|
||||
*/
|
||||
int device_set_name(struct udevice *dev, const char *name);
|
||||
|
||||
/* device resource management */
|
||||
typedef void (*dr_release_t)(struct udevice *dev, void *res);
|
||||
typedef int (*dr_match_t)(struct udevice *dev, void *res, void *match_data);
|
||||
|
||||
#ifdef CONFIG_DEVRES
|
||||
|
||||
#ifdef CONFIG_DEBUG_DEVRES
|
||||
void *__devres_alloc(dr_release_t release, size_t size, gfp_t gfp,
|
||||
const char *name);
|
||||
#define _devres_alloc(release, size, gfp) \
|
||||
__devres_alloc(release, size, gfp, #release)
|
||||
#else
|
||||
void *_devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* devres_alloc - Allocate device resource data
|
||||
* @release: Release function devres will be associated with
|
||||
* @size: Allocation size
|
||||
* @gfp: Allocation flags
|
||||
*
|
||||
* Allocate devres of @size bytes. The allocated area is associated
|
||||
* with @release. The returned pointer can be passed to
|
||||
* other devres_*() functions.
|
||||
*
|
||||
* RETURNS:
|
||||
* Pointer to allocated devres on success, NULL on failure.
|
||||
*/
|
||||
#define devres_alloc(release, size, gfp) \
|
||||
_devres_alloc(release, size, gfp | __GFP_ZERO)
|
||||
|
||||
/**
|
||||
* devres_free - Free device resource data
|
||||
* @res: Pointer to devres data to free
|
||||
*
|
||||
* Free devres created with devres_alloc().
|
||||
*/
|
||||
void devres_free(void *res);
|
||||
|
||||
/**
|
||||
* devres_add - Register device resource
|
||||
* @dev: Device to add resource to
|
||||
* @res: Resource to register
|
||||
*
|
||||
* Register devres @res to @dev. @res should have been allocated
|
||||
* using devres_alloc(). On driver detach, the associated release
|
||||
* function will be invoked and devres will be freed automatically.
|
||||
*/
|
||||
void devres_add(struct udevice *dev, void *res);
|
||||
|
||||
/**
|
||||
* devres_find - Find device resource
|
||||
* @dev: Device to lookup resource from
|
||||
* @release: Look for resources associated with this release function
|
||||
* @match: Match function (optional)
|
||||
* @match_data: Data for the match function
|
||||
*
|
||||
* Find the latest devres of @dev which is associated with @release
|
||||
* and for which @match returns 1. If @match is NULL, it's considered
|
||||
* to match all.
|
||||
*
|
||||
* RETURNS:
|
||||
* Pointer to found devres, NULL if not found.
|
||||
*/
|
||||
void *devres_find(struct udevice *dev, dr_release_t release,
|
||||
dr_match_t match, void *match_data);
|
||||
|
||||
/**
|
||||
* devres_get - Find devres, if non-existent, add one atomically
|
||||
* @dev: Device to lookup or add devres for
|
||||
* @new_res: Pointer to new initialized devres to add if not found
|
||||
* @match: Match function (optional)
|
||||
* @match_data: Data for the match function
|
||||
*
|
||||
* Find the latest devres of @dev which has the same release function
|
||||
* as @new_res and for which @match return 1. If found, @new_res is
|
||||
* freed; otherwise, @new_res is added atomically.
|
||||
*
|
||||
* RETURNS:
|
||||
* Pointer to found or added devres.
|
||||
*/
|
||||
void *devres_get(struct udevice *dev, void *new_res,
|
||||
dr_match_t match, void *match_data);
|
||||
|
||||
/**
|
||||
* devres_remove - Find a device resource and remove it
|
||||
* @dev: Device to find resource from
|
||||
* @release: Look for resources associated with this release function
|
||||
* @match: Match function (optional)
|
||||
* @match_data: Data for the match function
|
||||
*
|
||||
* Find the latest devres of @dev associated with @release and for
|
||||
* which @match returns 1. If @match is NULL, it's considered to
|
||||
* match all. If found, the resource is removed atomically and
|
||||
* returned.
|
||||
*
|
||||
* RETURNS:
|
||||
* Pointer to removed devres on success, NULL if not found.
|
||||
*/
|
||||
void *devres_remove(struct udevice *dev, dr_release_t release,
|
||||
dr_match_t match, void *match_data);
|
||||
|
||||
/**
|
||||
* devres_destroy - Find a device resource and destroy it
|
||||
* @dev: Device to find resource from
|
||||
* @release: Look for resources associated with this release function
|
||||
* @match: Match function (optional)
|
||||
* @match_data: Data for the match function
|
||||
*
|
||||
* Find the latest devres of @dev associated with @release and for
|
||||
* which @match returns 1. If @match is NULL, it's considered to
|
||||
* match all. If found, the resource is removed atomically and freed.
|
||||
*
|
||||
* Note that the release function for the resource will not be called,
|
||||
* only the devres-allocated data will be freed. The caller becomes
|
||||
* responsible for freeing any other data.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 if devres is found and freed, -ENOENT if not found.
|
||||
*/
|
||||
int devres_destroy(struct udevice *dev, dr_release_t release,
|
||||
dr_match_t match, void *match_data);
|
||||
|
||||
/**
|
||||
* devres_release - Find a device resource and destroy it, calling release
|
||||
* @dev: Device to find resource from
|
||||
* @release: Look for resources associated with this release function
|
||||
* @match: Match function (optional)
|
||||
* @match_data: Data for the match function
|
||||
*
|
||||
* Find the latest devres of @dev associated with @release and for
|
||||
* which @match returns 1. If @match is NULL, it's considered to
|
||||
* match all. If found, the resource is removed atomically, the
|
||||
* release function called and the resource freed.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 if devres is found and freed, -ENOENT if not found.
|
||||
*/
|
||||
int devres_release(struct udevice *dev, dr_release_t release,
|
||||
dr_match_t match, void *match_data);
|
||||
|
||||
/* managed devm_k.alloc/kfree for device drivers */
|
||||
/**
|
||||
* devm_kmalloc - Resource-managed kmalloc
|
||||
* @dev: Device to allocate memory for
|
||||
* @size: Allocation size
|
||||
* @gfp: Allocation gfp flags
|
||||
*
|
||||
* Managed kmalloc. Memory allocated with this function is
|
||||
* automatically freed on driver detach. Like all other devres
|
||||
* resources, guaranteed alignment is unsigned long long.
|
||||
*
|
||||
* RETURNS:
|
||||
* Pointer to allocated memory on success, NULL on failure.
|
||||
*/
|
||||
void *devm_kmalloc(struct udevice *dev, size_t size, gfp_t gfp);
|
||||
static inline void *devm_kzalloc(struct udevice *dev, size_t size, gfp_t gfp)
|
||||
{
|
||||
return devm_kmalloc(dev, size, gfp | __GFP_ZERO);
|
||||
}
|
||||
static inline void *devm_kmalloc_array(struct udevice *dev,
|
||||
size_t n, size_t size, gfp_t flags)
|
||||
{
|
||||
if (size != 0 && n > SIZE_MAX / size)
|
||||
return NULL;
|
||||
return devm_kmalloc(dev, n * size, flags);
|
||||
}
|
||||
static inline void *devm_kcalloc(struct udevice *dev,
|
||||
size_t n, size_t size, gfp_t flags)
|
||||
{
|
||||
return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_kfree - Resource-managed kfree
|
||||
* @dev: Device this memory belongs to
|
||||
* @p: Memory to free
|
||||
*
|
||||
* Free memory allocated with devm_kmalloc().
|
||||
*/
|
||||
void devm_kfree(struct udevice *dev, void *p);
|
||||
|
||||
#else /* ! CONFIG_DEVRES */
|
||||
|
||||
static inline void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp)
|
||||
{
|
||||
return kzalloc(size, gfp);
|
||||
}
|
||||
|
||||
static inline void devres_free(void *res)
|
||||
{
|
||||
kfree(res);
|
||||
}
|
||||
|
||||
static inline void devres_add(struct udevice *dev, void *res)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void *devres_find(struct udevice *dev, dr_release_t release,
|
||||
dr_match_t match, void *match_data)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void *devres_get(struct udevice *dev, void *new_res,
|
||||
dr_match_t match, void *match_data)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void *devres_remove(struct udevice *dev, dr_release_t release,
|
||||
dr_match_t match, void *match_data)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline int devres_destroy(struct udevice *dev, dr_release_t release,
|
||||
dr_match_t match, void *match_data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int devres_release(struct udevice *dev, dr_release_t release,
|
||||
dr_match_t match, void *match_data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void *devm_kmalloc(struct udevice *dev, size_t size, gfp_t gfp)
|
||||
{
|
||||
return kmalloc(size, gfp);
|
||||
}
|
||||
|
||||
static inline void *devm_kzalloc(struct udevice *dev, size_t size, gfp_t gfp)
|
||||
{
|
||||
return kzalloc(size, gfp);
|
||||
}
|
||||
|
||||
static inline void *devm_kmaloc_array(struct udevice *dev,
|
||||
size_t n, size_t size, gfp_t flags)
|
||||
{
|
||||
/* TODO: add kmalloc_array() to linux/compat.h */
|
||||
if (size != 0 && n > SIZE_MAX / size)
|
||||
return NULL;
|
||||
return kmalloc(n * size, flags);
|
||||
}
|
||||
|
||||
static inline void *devm_kcalloc(struct udevice *dev,
|
||||
size_t n, size_t size, gfp_t flags)
|
||||
{
|
||||
/* TODO: add kcalloc() to linux/compat.h */
|
||||
return kmalloc(n * size, flags | __GFP_ZERO);
|
||||
}
|
||||
|
||||
static inline void devm_kfree(struct udevice *dev, void *p)
|
||||
{
|
||||
kfree(p);
|
||||
}
|
||||
|
||||
#endif /* ! CONFIG_DEVRES */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -35,6 +35,7 @@ enum uclass_id {
|
||||
UCLASS_I2C, /* I2C bus */
|
||||
UCLASS_I2C_EEPROM, /* I2C EEPROM device */
|
||||
UCLASS_I2C_GENERIC, /* Generic I2C device */
|
||||
UCLASS_I2C_MUX, /* I2C multiplexer */
|
||||
UCLASS_LED, /* Light-emitting diode (LED) */
|
||||
UCLASS_LPC, /* x86 'low pin count' interface */
|
||||
UCLASS_MASS_STORAGE, /* Mass storage device */
|
||||
@@ -56,6 +57,7 @@ enum uclass_id {
|
||||
UCLASS_USB, /* USB bus */
|
||||
UCLASS_USB_DEV_GENERIC, /* USB generic device */
|
||||
UCLASS_USB_HUB, /* USB hub */
|
||||
UCLASS_VIDEO_BRIDGE, /* Video bridge, e.g. DisplayPort to LVDS */
|
||||
|
||||
UCLASS_COUNT,
|
||||
UCLASS_INVALID = -1,
|
||||
|
||||
@@ -130,7 +130,7 @@ int uclass_get(enum uclass_id key, struct uclass **ucp);
|
||||
int uclass_get_device(enum uclass_id id, int index, struct udevice **devp);
|
||||
|
||||
/**
|
||||
* uclass_get_device_by_name() - Get a uclass device by it's name
|
||||
* uclass_get_device_by_name() - Get a uclass device by its name
|
||||
*
|
||||
* This searches the devices in the uclass for one with the exactly given name.
|
||||
*
|
||||
@@ -176,6 +176,23 @@ int uclass_get_device_by_seq(enum uclass_id id, int seq, struct udevice **devp);
|
||||
int uclass_get_device_by_of_offset(enum uclass_id id, int node,
|
||||
struct udevice **devp);
|
||||
|
||||
/**
|
||||
* uclass_get_device_by_phandle() - Get a uclass device by phandle
|
||||
*
|
||||
* This searches the devices in the uclass for one with the given phandle.
|
||||
*
|
||||
* The device is probed to activate it ready for use.
|
||||
*
|
||||
* @id: uclass ID to look up
|
||||
* @parent: Parent device containing the phandle pointer
|
||||
* @name: Name of property in the parent device node
|
||||
* @devp: Returns pointer to device (there is only one for each node)
|
||||
* @return 0 if OK, -ENOENT if there is no @name present in the node, other
|
||||
* -ve on error
|
||||
*/
|
||||
int uclass_get_device_by_phandle(enum uclass_id id, struct udevice *parent,
|
||||
const char *name, struct udevice **devp);
|
||||
|
||||
/**
|
||||
* uclass_first_device() - Get the first device in a uclass
|
||||
*
|
||||
|
||||
@@ -39,4 +39,13 @@ void dm_dump_all(void);
|
||||
/* Dump out a list of uclasses and their devices */
|
||||
void dm_dump_uclass(void);
|
||||
|
||||
#ifdef CONFIG_DEBUG_DEVRES
|
||||
/* Dump out a list of device resources */
|
||||
void dm_dump_devres(void);
|
||||
#else
|
||||
static inline void dm_dump_devres(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,15 +21,13 @@
|
||||
* A typedef for a physical address. Note that fdt data is always big
|
||||
* endian even on a litle endian machine.
|
||||
*/
|
||||
typedef phys_addr_t fdt_addr_t;
|
||||
typedef phys_size_t fdt_size_t;
|
||||
#ifdef CONFIG_PHYS_64BIT
|
||||
typedef u64 fdt_addr_t;
|
||||
typedef u64 fdt_size_t;
|
||||
#define FDT_ADDR_T_NONE (-1ULL)
|
||||
#define fdt_addr_to_cpu(reg) be64_to_cpu(reg)
|
||||
#define fdt_size_to_cpu(reg) be64_to_cpu(reg)
|
||||
#else
|
||||
typedef u32 fdt_addr_t;
|
||||
typedef u32 fdt_size_t;
|
||||
#define FDT_ADDR_T_NONE (-1U)
|
||||
#define fdt_addr_to_cpu(reg) be32_to_cpu(reg)
|
||||
#define fdt_size_to_cpu(reg) be32_to_cpu(reg)
|
||||
@@ -170,10 +168,7 @@ enum fdt_compat_id {
|
||||
COMPAT_INFINEON_SLB9645_TPM, /* Infineon SLB9645 TPM */
|
||||
COMPAT_SAMSUNG_EXYNOS5_I2C, /* Exynos5 High Speed I2C Controller */
|
||||
COMPAT_SANDBOX_LCD_SDL, /* Sandbox LCD emulation with SDL */
|
||||
COMPAT_TI_TPS65090, /* Texas Instrument TPS65090 */
|
||||
COMPAT_NXP_PTN3460, /* NXP PTN3460 DP/LVDS bridge */
|
||||
COMPAT_SAMSUNG_EXYNOS_SYSMMU, /* Exynos sysmmu */
|
||||
COMPAT_PARADE_PS8625, /* Parade PS8622 EDP->LVDS bridge */
|
||||
COMPAT_INTEL_MICROCODE, /* Intel microcode update */
|
||||
COMPAT_MEMORY_SPD, /* Memory SPD information */
|
||||
COMPAT_INTEL_PANTHERPOINT_AHCI, /* Intel Pantherpoint AHCI */
|
||||
|
||||
150
include/i2c.h
150
include/i2c.h
@@ -74,6 +74,49 @@ struct dm_i2c_bus {
|
||||
int speed_hz;
|
||||
};
|
||||
|
||||
/*
|
||||
* Not all of these flags are implemented in the U-Boot API
|
||||
*/
|
||||
enum dm_i2c_msg_flags {
|
||||
I2C_M_TEN = 0x0010, /* ten-bit chip address */
|
||||
I2C_M_RD = 0x0001, /* read data, from slave to master */
|
||||
I2C_M_STOP = 0x8000, /* send stop after this message */
|
||||
I2C_M_NOSTART = 0x4000, /* no start before this message */
|
||||
I2C_M_REV_DIR_ADDR = 0x2000, /* invert polarity of R/W bit */
|
||||
I2C_M_IGNORE_NAK = 0x1000, /* continue after NAK */
|
||||
I2C_M_NO_RD_ACK = 0x0800, /* skip the Ack bit on reads */
|
||||
I2C_M_RECV_LEN = 0x0400, /* length is first received byte */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct i2c_msg - an I2C message
|
||||
*
|
||||
* @addr: Slave address
|
||||
* @flags: Flags (see enum dm_i2c_msg_flags)
|
||||
* @len: Length of buffer in bytes, may be 0 for a probe
|
||||
* @buf: Buffer to send/receive, or NULL if no data
|
||||
*/
|
||||
struct i2c_msg {
|
||||
uint addr;
|
||||
uint flags;
|
||||
uint len;
|
||||
u8 *buf;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct i2c_msg_list - a list of I2C messages
|
||||
*
|
||||
* This is called i2c_rdwr_ioctl_data in Linux but the name does not seem
|
||||
* appropriate in U-Boot.
|
||||
*
|
||||
* @msg: Pointer to i2c_msg array
|
||||
* @nmsgs: Number of elements in the array
|
||||
*/
|
||||
struct i2c_msg_list {
|
||||
struct i2c_msg *msgs;
|
||||
uint nmsgs;
|
||||
};
|
||||
|
||||
/**
|
||||
* dm_i2c_read() - read bytes from an I2C chip
|
||||
*
|
||||
@@ -129,6 +172,7 @@ int dm_i2c_probe(struct udevice *bus, uint chip_addr, uint chip_flags,
|
||||
*
|
||||
* This reads a single value from the given address in an I2C chip
|
||||
*
|
||||
* @dev: Device to use for transfer
|
||||
* @addr: Address to read from
|
||||
* @return value read, or -ve on error
|
||||
*/
|
||||
@@ -139,12 +183,26 @@ int dm_i2c_reg_read(struct udevice *dev, uint offset);
|
||||
*
|
||||
* This writes a single value to the given address in an I2C chip
|
||||
*
|
||||
* @dev: Device to use for transfer
|
||||
* @addr: Address to write to
|
||||
* @val: Value to write (normally a byte)
|
||||
* @return 0 on success, -ve on error
|
||||
*/
|
||||
int dm_i2c_reg_write(struct udevice *dev, uint offset, unsigned int val);
|
||||
|
||||
/**
|
||||
* dm_i2c_xfer() - Transfer messages over I2C
|
||||
*
|
||||
* This transfers a raw message. It is best to use dm_i2c_reg_read/write()
|
||||
* instead.
|
||||
*
|
||||
* @dev: Device to use for transfer
|
||||
* @msg: List of messages to transfer
|
||||
* @nmsgs: Number of messages to transfer
|
||||
* @return 0 on success, -ve on error
|
||||
*/
|
||||
int dm_i2c_xfer(struct udevice *dev, struct i2c_msg *msg, int nmsgs);
|
||||
|
||||
/**
|
||||
* dm_i2c_set_bus_speed() - set the speed of a bus
|
||||
*
|
||||
@@ -292,49 +350,6 @@ void i2c_reg_write(uint8_t addr, uint8_t reg, uint8_t val);
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Not all of these flags are implemented in the U-Boot API
|
||||
*/
|
||||
enum dm_i2c_msg_flags {
|
||||
I2C_M_TEN = 0x0010, /* ten-bit chip address */
|
||||
I2C_M_RD = 0x0001, /* read data, from slave to master */
|
||||
I2C_M_STOP = 0x8000, /* send stop after this message */
|
||||
I2C_M_NOSTART = 0x4000, /* no start before this message */
|
||||
I2C_M_REV_DIR_ADDR = 0x2000, /* invert polarity of R/W bit */
|
||||
I2C_M_IGNORE_NAK = 0x1000, /* continue after NAK */
|
||||
I2C_M_NO_RD_ACK = 0x0800, /* skip the Ack bit on reads */
|
||||
I2C_M_RECV_LEN = 0x0400, /* length is first received byte */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct i2c_msg - an I2C message
|
||||
*
|
||||
* @addr: Slave address
|
||||
* @flags: Flags (see enum dm_i2c_msg_flags)
|
||||
* @len: Length of buffer in bytes, may be 0 for a probe
|
||||
* @buf: Buffer to send/receive, or NULL if no data
|
||||
*/
|
||||
struct i2c_msg {
|
||||
uint addr;
|
||||
uint flags;
|
||||
uint len;
|
||||
u8 *buf;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct i2c_msg_list - a list of I2C messages
|
||||
*
|
||||
* This is called i2c_rdwr_ioctl_data in Linux but the name does not seem
|
||||
* appropriate in U-Boot.
|
||||
*
|
||||
* @msg: Pointer to i2c_msg array
|
||||
* @nmsgs: Number of elements in the array
|
||||
*/
|
||||
struct i2c_msg_list {
|
||||
struct i2c_msg *msgs;
|
||||
uint nmsgs;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dm_i2c_ops - driver operations for I2C uclass
|
||||
*
|
||||
@@ -429,6 +444,45 @@ struct dm_i2c_ops {
|
||||
|
||||
#define i2c_get_ops(dev) ((struct dm_i2c_ops *)(dev)->driver->ops)
|
||||
|
||||
/**
|
||||
* struct i2c_mux_ops - operations for an I2C mux
|
||||
*
|
||||
* The current mux state is expected to be stored in the mux itself since
|
||||
* it is the only thing that knows how to make things work. The mux can
|
||||
* record the current state and then avoid switching unless it is necessary.
|
||||
* So select() can be skipped if the mux is already in the correct state.
|
||||
* Also deselect() can be made a nop if required.
|
||||
*/
|
||||
struct i2c_mux_ops {
|
||||
/**
|
||||
* select() - select one of of I2C buses attached to a mux
|
||||
*
|
||||
* This will be called when there is no bus currently selected by the
|
||||
* mux. This method does not need to deselect the old bus since
|
||||
* deselect() will be already have been called if necessary.
|
||||
*
|
||||
* @mux: Mux device
|
||||
* @bus: I2C bus to select
|
||||
* @channel: Channel number correponding to the bus to select
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int (*select)(struct udevice *mux, struct udevice *bus, uint channel);
|
||||
|
||||
/**
|
||||
* deselect() - select one of of I2C buses attached to a mux
|
||||
*
|
||||
* This is used to deselect the currently selected I2C bus.
|
||||
*
|
||||
* @mux: Mux device
|
||||
* @bus: I2C bus to deselect
|
||||
* @channel: Channel number correponding to the bus to deselect
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int (*deselect)(struct udevice *mux, struct udevice *bus, uint channel);
|
||||
};
|
||||
|
||||
#define i2c_mux_get_ops(dev) ((struct i2c_mux_ops *)(dev)->driver->ops)
|
||||
|
||||
/**
|
||||
* i2c_get_chip() - get a device to use to access a chip on a bus
|
||||
*
|
||||
@@ -473,6 +527,16 @@ int i2c_get_chip_for_busnum(int busnum, int chip_addr, uint offset_len,
|
||||
int i2c_chip_ofdata_to_platdata(const void *blob, int node,
|
||||
struct dm_i2c_chip *chip);
|
||||
|
||||
/**
|
||||
* i2c_dump_msgs() - Dump a list of I2C messages
|
||||
*
|
||||
* This may be useful for debugging.
|
||||
*
|
||||
* @msg: Message list to dump
|
||||
* @nmsgs: Number of messages
|
||||
*/
|
||||
void i2c_dump_msgs(struct i2c_msg *msg, int nmsgs);
|
||||
|
||||
#ifndef CONFIG_DM_I2C
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2012 Samsung Electronics
|
||||
* Donghwa Lee <dh09.lee@samsung.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __PARADE_H__
|
||||
#define __PARADE_H__
|
||||
|
||||
/* Initialize the Parade dP<->LVDS bridge if present */
|
||||
#ifdef CONFIG_VIDEO_PARADE
|
||||
int parade_init(const void *blob);
|
||||
#else
|
||||
static inline int parade_init(const void *blob) { return -1; }
|
||||
#endif
|
||||
|
||||
#endif /* __PARADE_H__ */
|
||||
85
include/power/s5m8767.h
Normal file
85
include/power/s5m8767.h
Normal file
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Google, Inc
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __S5M8767_H_
|
||||
#define __S5M8767_H_
|
||||
|
||||
enum s5m8767_regnum {
|
||||
S5M8767_BUCK1 = 0,
|
||||
S5M8767_BUCK2,
|
||||
S5M8767_BUCK3,
|
||||
S5M8767_BUCK4,
|
||||
S5M8767_BUCK5,
|
||||
S5M8767_BUCK6,
|
||||
S5M8767_BUCK7,
|
||||
S5M8767_BUCK8,
|
||||
S5M8767_BUCK9,
|
||||
S5M8767_LDO1,
|
||||
S5M8767_LDO2,
|
||||
S5M8767_LDO3,
|
||||
S5M8767_LDO4,
|
||||
S5M8767_LDO5,
|
||||
S5M8767_LDO6,
|
||||
S5M8767_LDO7,
|
||||
S5M8767_LDO8,
|
||||
S5M8767_LDO9,
|
||||
S5M8767_LDO10,
|
||||
S5M8767_LDO11,
|
||||
S5M8767_LDO12,
|
||||
S5M8767_LDO13,
|
||||
S5M8767_LDO14,
|
||||
S5M8767_LDO15,
|
||||
S5M8767_LDO16,
|
||||
S5M8767_LDO17,
|
||||
S5M8767_LDO18,
|
||||
S5M8767_LDO19,
|
||||
S5M8767_LDO20,
|
||||
S5M8767_LDO21,
|
||||
S5M8767_LDO22,
|
||||
S5M8767_LDO23,
|
||||
S5M8767_LDO24,
|
||||
S5M8767_LDO25,
|
||||
S5M8767_LDO26,
|
||||
S5M8767_LDO27,
|
||||
S5M8767_LDO28,
|
||||
S5M8767_EN32KHZ_CP,
|
||||
|
||||
S5M8767_NUM_OF_REGS,
|
||||
};
|
||||
|
||||
struct sec_voltage_desc {
|
||||
int max;
|
||||
int min;
|
||||
int step;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct s5m8767_para - s5m8767 register parameters
|
||||
* @param vol_addr i2c address of the given buck/ldo register
|
||||
* @param vol_bitpos bit position to be set or clear within register
|
||||
* @param vol_bitmask bit mask value
|
||||
* @param reg_enaddr control register address, which enable the given
|
||||
* given buck/ldo.
|
||||
* @param reg_enbiton value to be written to buck/ldo to make it ON
|
||||
* @param vol Voltage information
|
||||
*/
|
||||
struct s5m8767_para {
|
||||
enum s5m8767_regnum regnum;
|
||||
u8 vol_addr;
|
||||
u8 vol_bitpos;
|
||||
u8 vol_bitmask;
|
||||
u8 reg_enaddr;
|
||||
u8 reg_enbiton;
|
||||
const struct sec_voltage_desc *vol;
|
||||
};
|
||||
|
||||
/* Drivers name */
|
||||
#define S5M8767_LDO_DRIVER "s5m8767_ldo"
|
||||
#define S5M8767_BUCK_DRIVER "s5m8767_buck"
|
||||
|
||||
int s5m8767_enable_32khz_cp(struct udevice *dev);
|
||||
|
||||
#endif /* __S5M8767_PMIC_H_ */
|
||||
56
include/power/tps65090.h
Normal file
56
include/power/tps65090.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Google, Inc
|
||||
* Written by Simon Glass <sjg@chromium.org>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __TPS65090_PMIC_H_
|
||||
#define __TPS65090_PMIC_H_
|
||||
|
||||
/* I2C device address for TPS65090 PMU */
|
||||
#define TPS65090_I2C_ADDR 0x48
|
||||
|
||||
/* TPS65090 register addresses */
|
||||
enum {
|
||||
REG_IRQ1 = 0,
|
||||
REG_CG_CTRL0 = 4,
|
||||
REG_CG_STATUS1 = 0xa,
|
||||
REG_FET_BASE = 0xe, /* Not a real register, FETs count from here */
|
||||
REG_FET1_CTRL,
|
||||
REG_FET2_CTRL,
|
||||
REG_FET3_CTRL,
|
||||
REG_FET4_CTRL,
|
||||
REG_FET5_CTRL,
|
||||
REG_FET6_CTRL,
|
||||
REG_FET7_CTRL,
|
||||
TPS65090_NUM_REGS,
|
||||
};
|
||||
|
||||
enum {
|
||||
IRQ1_VBATG = 1 << 3,
|
||||
CG_CTRL0_ENC_MASK = 0x01,
|
||||
|
||||
MAX_FET_NUM = 7,
|
||||
MAX_CTRL_READ_TRIES = 5,
|
||||
|
||||
/* TPS65090 FET_CTRL register values */
|
||||
FET_CTRL_TOFET = 1 << 7, /* Timeout, startup, overload */
|
||||
FET_CTRL_PGFET = 1 << 4, /* Power good for FET status */
|
||||
FET_CTRL_WAIT = 3 << 2, /* Overcurrent timeout max */
|
||||
FET_CTRL_ADENFET = 1 << 1, /* Enable output auto discharge */
|
||||
FET_CTRL_ENFET = 1 << 0, /* Enable FET */
|
||||
};
|
||||
|
||||
enum {
|
||||
/* Status register fields */
|
||||
TPS65090_ST1_OTC = 1 << 0,
|
||||
TPS65090_ST1_OCC = 1 << 1,
|
||||
TPS65090_ST1_STATE_SHIFT = 4,
|
||||
TPS65090_ST1_STATE_MASK = 0xf << TPS65090_ST1_STATE_SHIFT,
|
||||
};
|
||||
|
||||
/* Drivers name */
|
||||
#define TPS65090_FET_DRIVER "tps65090_fet"
|
||||
|
||||
#endif /* __TPS65090_PMIC_H_ */
|
||||
@@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2012 The Chromium OS Authors.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __TPS65090_PMIC_H_
|
||||
#define __TPS65090_PMIC_H_
|
||||
|
||||
/* I2C device address for TPS65090 PMU */
|
||||
#define TPS65090_I2C_ADDR 0x48
|
||||
|
||||
enum {
|
||||
/* Status register fields */
|
||||
TPS65090_ST1_OTC = 1 << 0,
|
||||
TPS65090_ST1_OCC = 1 << 1,
|
||||
TPS65090_ST1_STATE_SHIFT = 4,
|
||||
TPS65090_ST1_STATE_MASK = 0xf << TPS65090_ST1_STATE_SHIFT,
|
||||
};
|
||||
|
||||
/**
|
||||
* Enable FET
|
||||
*
|
||||
* @param fet_id FET ID, value between 1 and 7
|
||||
* @return 0 on success, non-0 on failure
|
||||
*/
|
||||
int tps65090_fet_enable(unsigned int fet_id);
|
||||
|
||||
/**
|
||||
* Disable FET
|
||||
*
|
||||
* @param fet_id FET ID, value between 1 and 7
|
||||
* @return 0 on success, non-0 on failure
|
||||
*/
|
||||
int tps65090_fet_disable(unsigned int fet_id);
|
||||
|
||||
/**
|
||||
* Is FET enabled?
|
||||
*
|
||||
* @param fet_id FET ID, value between 1 and 7
|
||||
* @return 1 enabled, 0 disabled, negative value on failure
|
||||
*/
|
||||
int tps65090_fet_is_enabled(unsigned int fet_id);
|
||||
|
||||
/**
|
||||
* Enable / disable the battery charger
|
||||
*
|
||||
* @param enable 0 to disable charging, non-zero to enable
|
||||
*/
|
||||
int tps65090_set_charge_enable(int enable);
|
||||
|
||||
/**
|
||||
* Check whether we have enabled battery charging
|
||||
*
|
||||
* @return 1 if enabled, 0 if disabled
|
||||
*/
|
||||
int tps65090_get_charging(void);
|
||||
|
||||
/**
|
||||
* Return the value of the status register
|
||||
*
|
||||
* @return status register value, or -1 on error
|
||||
*/
|
||||
int tps65090_get_status(void);
|
||||
|
||||
/**
|
||||
* Initialize the TPS65090 PMU.
|
||||
*
|
||||
* @return 0 on success, non-0 on failure
|
||||
*/
|
||||
int tps65090_init(void);
|
||||
|
||||
#endif /* __TPS65090_PMIC_H_ */
|
||||
92
include/video_bridge.h
Normal file
92
include/video_bridge.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Google, Inc
|
||||
* Written by Simon Glass <sjg@chromium.org>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef __VIDEO_BRIDGE
|
||||
#define __VIDEO_BRIDGE
|
||||
|
||||
#include <asm/gpio.h>
|
||||
|
||||
/**
|
||||
* struct video_bridge_priv - uclass information for video bridges
|
||||
*
|
||||
* @sleep: GPIO to assert to power down the bridge
|
||||
* @reset: GPIO to assert to reset the bridge
|
||||
* @hotplug: Optional GPIO to check if bridge is connected
|
||||
*/
|
||||
struct video_bridge_priv {
|
||||
struct gpio_desc sleep;
|
||||
struct gpio_desc reset;
|
||||
struct gpio_desc hotplug;
|
||||
};
|
||||
|
||||
/**
|
||||
* Operations for video bridges
|
||||
*/
|
||||
struct video_bridge_ops {
|
||||
/**
|
||||
* attach() - attach a video bridge
|
||||
*
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int (*attach)(struct udevice *dev);
|
||||
|
||||
/**
|
||||
* check_attached() - check if a bridge is correctly attached
|
||||
*
|
||||
* This method is optional - if not provided then the hotplug GPIO
|
||||
* will be checked instead.
|
||||
*
|
||||
* @dev: Device to check
|
||||
* @return 0 if attached, -EENOTCONN if not, or other -ve error
|
||||
*/
|
||||
int (*check_attached)(struct udevice *dev);
|
||||
|
||||
/**
|
||||
* set_backlight() - Set the backlight brightness
|
||||
*
|
||||
* @dev: device to adjust
|
||||
* @percent: brightness percentage (0=off, 100=full brightness)
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int (*set_backlight)(struct udevice *dev, int percent);
|
||||
};
|
||||
|
||||
#define video_bridge_get_ops(dev) \
|
||||
((struct video_bridge_ops *)(dev)->driver->ops)
|
||||
|
||||
/**
|
||||
* video_bridge_attach() - attach a video bridge
|
||||
*
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int video_bridge_attach(struct udevice *dev);
|
||||
|
||||
/**
|
||||
* video_bridge_set_backlight() - Set the backlight brightness
|
||||
*
|
||||
* @percent: brightness percentage (0=off, 100=full brightness)
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int video_bridge_set_backlight(struct udevice *dev, int percent);
|
||||
|
||||
/**
|
||||
* video_bridge_set_active() - take the bridge in/out of reset/powerdown
|
||||
*
|
||||
* @dev: Device to adjust
|
||||
* @active: true to power up and reset, false to power down
|
||||
*/
|
||||
int video_bridge_set_active(struct udevice *dev, bool active);
|
||||
|
||||
/**
|
||||
* check_attached() - check if a bridge is correctly attached
|
||||
*
|
||||
* @dev: Device to check
|
||||
* @return 0 if attached, -EENOTCONN if not, or other -ve error
|
||||
*/
|
||||
int video_bridge_check_attached(struct udevice *dev);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user