u-boot-brain/include/power/sandbox_pmic.h
Przemyslaw Marczak 5d387d0df9 sandbox: add: sandbox PMIC device drivers: I2C emul, pmic, regulator
This commit adds emulation of sandbox PMIC device, which includes:
- PMIC I2C emulation driver
- PMIC I/O driver (UCLASS_PMIC)
- PMIC regulator driver (UCLASS_REGULATOR)

The sandbox PMIC has 12 significant registers and 4 as padding to 16 bytes,
which allows using 'i2c md' command with the default count (16).

The sandbox PMIC provides regulators:
- 2x BUCK
- 2x LDO

Each, with adjustable output:
- Enable state
- Voltage
- Current limit (LDO1/BUCK1 only)
- Operation mode (different for BUCK and LDO)

Each attribute has it's own register, beside the enable state, which depends
on operation mode.

The header file: sandbox_pmic.h includes PMIC's default register values,
which are set on i2c pmic emul driver's probe() method.

Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
Tested on sandbox:
Tested-by: Simon Glass <sjg@chromium.org>
2015-05-14 19:58:34 -06:00

106 lines
2.4 KiB
C

/*
* Copyright (C) 2015 Samsung Electronics
* Przemyslaw Marczak <p.marczak@samsung.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef _SANDBOX_PMIC_H_
#define _SANDBOX_PMIC_H_
#define SANDBOX_LDO_DRIVER "sandbox_ldo"
#define SANDBOX_OF_LDO_PREFIX "ldo"
#define SANDBOX_BUCK_DRIVER "sandbox_buck"
#define SANDBOX_OF_BUCK_PREFIX "buck"
#define SANDBOX_BUCK_COUNT 2
#define SANDBOX_LDO_COUNT 2
/*
* Sandbox PMIC registers:
* We have only 12 significant registers, but we alloc 16 for padding.
*/
enum {
SANDBOX_PMIC_REG_BUCK1_UV = 0,
SANDBOX_PMIC_REG_BUCK1_UA,
SANDBOX_PMIC_REG_BUCK1_OM,
SANDBOX_PMIC_REG_BUCK2_UV,
SANDBOX_PMIC_REG_BUCK2_UA,
SANDBOX_PMIC_REG_BUCK2_OM,
SANDBOX_PMIC_REG_LDO_OFFSET,
SANDBOX_PMIC_REG_LDO1_UV = SANDBOX_PMIC_REG_LDO_OFFSET,
SANDBOX_PMIC_REG_LDO1_UA,
SANDBOX_PMIC_REG_LDO1_OM,
SANDBOX_PMIC_REG_LDO2_UV,
SANDBOX_PMIC_REG_LDO2_UA,
SANDBOX_PMIC_REG_LDO2_OM,
SANDBOX_PMIC_REG_COUNT = 16,
};
/* Register offset for output: micro Volts, micro Amps, Operation Mode */
enum {
OUT_REG_UV = 0,
OUT_REG_UA,
OUT_REG_OM,
OUT_REG_COUNT,
};
/* Buck operation modes */
enum {
BUCK_OM_OFF = 0,
BUCK_OM_ON,
BUCK_OM_PWM,
BUCK_OM_COUNT,
};
/* Ldo operation modes */
enum {
LDO_OM_OFF = 0,
LDO_OM_ON,
LDO_OM_SLEEP,
LDO_OM_STANDBY,
LDO_OM_COUNT,
};
/* BUCK1 Voltage: min: 0.8V, step: 25mV, max 2.4V */
#define OUT_BUCK1_UV_MIN 800000
#define OUT_BUCK1_UV_MAX 2400000
#define OUT_BUCK1_UV_STEP 25000
/* BUCK1 Amperage: min: 150mA, step: 25mA, max: 250mA */
#define OUT_BUCK1_UA_MIN 150000
#define OUT_BUCK1_UA_MAX 250000
#define OUT_BUCK1_UA_STEP 25000
/* BUCK2 Voltage: min: 0.75V, step: 50mV, max 3.95V */
#define OUT_BUCK2_UV_MIN 750000
#define OUT_BUCK2_UV_MAX 3950000
#define OUT_BUCK2_UV_STEP 50000
/* LDO1 Voltage: min: 0.8V, step: 25mV, max 2.4V */
#define OUT_LDO1_UV_MIN 800000
#define OUT_LDO1_UV_MAX 2400000
#define OUT_LDO1_UV_STEP 25000
/* LDO1 Amperage: min: 100mA, step: 50mA, max: 200mA */
#define OUT_LDO1_UA_MIN 100000
#define OUT_LDO1_UA_MAX 200000
#define OUT_LDO1_UA_STEP 50000
/* LDO2 Voltage: min: 0.75V, step: 50mV, max 3.95V */
#define OUT_LDO2_UV_MIN 750000
#define OUT_LDO2_UV_MAX 3950000
#define OUT_LDO2_UV_STEP 50000
/* register <-> value conversion */
#define REG2VAL(min, step, reg) ((min) + ((step) * (reg)))
#define VAL2REG(min, step, val) (((val) - (min)) / (step))
/* Operation mode id -> register value conversion */
#define OM2REG(x) (x)
#endif