summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/drivers/xpowers/axp209/Kconfig15
-rw-r--r--src/drivers/xpowers/axp209/Makefile.inc7
-rw-r--r--src/drivers/xpowers/axp209/axp209.c324
-rw-r--r--src/drivers/xpowers/axp209/axp209.h20
-rw-r--r--src/drivers/xpowers/axp209/chip.h21
5 files changed, 0 insertions, 387 deletions
diff --git a/src/drivers/xpowers/axp209/Kconfig b/src/drivers/xpowers/axp209/Kconfig
deleted file mode 100644
index 684873c127..0000000000
--- a/src/drivers/xpowers/axp209/Kconfig
+++ /dev/null
@@ -1,15 +0,0 @@
-config DRIVER_XPOWERS_AXP209
- bool
- default n
- help
- X-Powers AXP902 Power Management Unit
-
-if DRIVER_XPOWERS_AXP209
-
-config DRIVER_XPOWERS_AXP209_BOOTBLOCK
- bool
- default n
- help
- Make AXP209 functionality available in he bootblock.
-
-endif # DRIVER_XPOWERS_AXP209
diff --git a/src/drivers/xpowers/axp209/Makefile.inc b/src/drivers/xpowers/axp209/Makefile.inc
deleted file mode 100644
index e08a8e21a6..0000000000
--- a/src/drivers/xpowers/axp209/Makefile.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-ifeq ($(CONFIG_DRIVER_XPOWERS_AXP209),y)
-
-bootblock-$(CONFIG_DRIVER_XPOWERS_AXP209_BOOTBLOCK) += axp209.c
-romstage-y += axp209.c
-ramstage-y += axp209.c
-
-endif
diff --git a/src/drivers/xpowers/axp209/axp209.c b/src/drivers/xpowers/axp209/axp209.c
deleted file mode 100644
index 93e864dff7..0000000000
--- a/src/drivers/xpowers/axp209/axp209.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Driver for X-Powers AXP 209 Power Management Unit
- *
- * Despite axp209_read/write only working on a byte at a time, there is no such
- * limitation in the AXP209.
- *
- * Copyright (C) 2013 Alexandru Gagniuc <mr.nuke.me@gmail.com>
- * Subject to the GNU GPL v2, or (at your option) any later version.
- */
-
-#include <console/console.h>
-#include <device/device.h>
-#include <device/i2c_simple.h>
-#include <types.h>
-
-#include "axp209.h"
-#include "chip.h"
-
-/* Hide these definitions from the rest of the source, so keep them here */
-enum registers {
- REG_POWER_STATUS = 0x00,
- REG_POWER_MODE = 0x01,
- REG_OTG_VBUS = 0x02,
- REG_CHIP_ID = 0x03,
- REG_CHIP_PWROUT_CTL = 0x12,
- REG_DCDC2_VOLTAGE = 0x23,
- REG_DCDC2_LDO3_CTL = 0x25,
- REG_DCDC3_VOLTAGE = 0x27,
- REG_LDO24_VOLTAGE = 0x28,
- REG_LDO3_VOLTAGE = 0x29,
- REG_VBUS_IPSOUT = 0x30,
- REG_PWROFF_VOLTAGE = 0x31,
- REG_SHTDWN_SETTING = 0x32,
-};
-
-/* REG_LDO24_VOLTAGE definitions */
-#define REG_LDO24_VOLTAGE_LDO2_MASK (0xf << 4)
-#define REG_LDO24_VOLTAGE_LDO2_VAL(x) ((x << 4) & REG_LDO24_VOLTAGE_LDO2_MASK)
-#define REG_LDO24_VOLTAGE_LDO4_MASK (0xf << 0)
-#define REG_LDO24_VOLTAGE_LDO4_VAL(x) ((x << 0) & REG_LDO24_VOLTAGE_LDO4_MASK)
-
-/*
- * Read and write accessors. We only work on one register at a time, but there
- * is no limitation on the AXP209 as to how many registers we may read or write
- * in one transaction.
- * These return the number of bytes read/written, or an error code. In this
- * case, they return 1 on success, or an error code otherwise. This is done to
- * work with I2C drivers that return either 0 on success or the number of bytes
- * actually transferred.
- */
-static int axp209_read(u8 bus, u8 reg, u8 *val)
-{
- if (i2c_readb(bus, AXP209_I2C_ADDR, reg, val) < 0)
- return CB_ERR;
- return 1;
-}
-
-static int axp209_write(u8 bus, u8 reg, u8 val)
-{
- if (i2c_writeb(bus, AXP209_I2C_ADDR, reg, val) < 0)
- return CB_ERR;
- return 1;
-}
-
-/**
- * \brief Identify and initialize an AXP209 on the I2C bus
- *
- * @param[in] bus I2C bus to which the AXP209 is connected
- * @return CB_SUCCES on if an AXP209 is found, or an error code otherwise.
- */
-enum cb_err axp209_init(u8 bus)
-{
- u8 id;
-
- if (axp209_read(bus, REG_CHIP_ID, &id) != 1)
- return CB_ERR;
-
- /* From U-Boot code : Low 4 bits is chip version */
- if ((id & 0x0f) != 0x1) {
- printk(BIOS_ERR, "[axp209] ID 0x%x does not match\n", id);
- return CB_ERR;
- }
-
- return CB_SUCCESS;
-}
-
-/**
- * \brief Configure the output voltage of DC-DC2 converter
- *
- * If the requested voltage is not available, the next lowest voltage will
- * be applied.
- * Valid values are between 700mV and 2275mV
- *
- * @param[in] millivolts voltage in mV units.
- * @param[in] bus I2C bus to which the AXP209 is connected
- * @return CB_SUCCES on success,
- * CB_ERR_ARG if voltage is out of range, or an error code otherwise.
- */
-enum cb_err axp209_set_dcdc2_voltage(u8 bus, u16 millivolts)
-{
- u8 val;
-
- if (millivolts < 700 || millivolts > 2275)
- return CB_ERR_ARG;
-
- val = (millivolts - 700) / 25;
-
- if (axp209_write(bus, REG_DCDC2_VOLTAGE, val) != 1)
- return CB_ERR;
-
- return CB_SUCCESS;
-}
-
-/**
- * \brief Configure the output voltage of DC-DC3 converter
- *
- * If the requested voltage is not available, the next lowest voltage will
- * be applied.
- * Valid values are between 700mV and 3500mV
- *
- * @param[in] millivolts voltage in mV units.
- * @param[in] bus I2C bus to which the AXP209 is connected
- * @return CB_SUCCES on success,
- * CB_ERR_ARG if voltage is out of range, or an error code otherwise.
- */
-enum cb_err axp209_set_dcdc3_voltage(u8 bus, u16 millivolts)
-{
- u8 val;
-
- if (millivolts < 700 || millivolts > 3500)
- return CB_ERR_ARG;
-
- val = (millivolts - 700) / 25;
-
- if (axp209_write(bus, REG_DCDC3_VOLTAGE, val) != 1)
- return CB_ERR;
-
- return CB_SUCCESS;
-}
-
-/**
- * \brief Configure the output voltage of LDO2 regulator
- *
- * If the requested voltage is not available, the next lowest voltage will
- * be applied.
- * Valid values are between 700mV and 3300mV
- *
- * @param[in] millivolts voltage in mV units.
- * @param[in] bus I2C bus to which the AXP209 is connected
- * @return CB_SUCCES on success,
- * CB_ERR_ARG if voltage is out of range, or an error code otherwise.
- */
-enum cb_err axp209_set_ldo2_voltage(u8 bus, u16 millivolts)
-{
- u8 reg8, val;
-
- if (millivolts < 1800 || millivolts > 3300)
- return CB_ERR_ARG;
-
- /* Try to read the register first, and stop here on error */
- if (axp209_read(bus, REG_LDO24_VOLTAGE, &reg8) != 1)
- return CB_ERR;
-
- val = (millivolts - 1800) / 100;
- reg8 &= ~REG_LDO24_VOLTAGE_LDO2_MASK;
- reg8 |= REG_LDO24_VOLTAGE_LDO2_VAL(val);
-
- if (axp209_write(bus, REG_LDO24_VOLTAGE, reg8) != 1)
- return CB_ERR;
-
- return CB_SUCCESS;
-}
-
-/**
- * \brief Configure the output voltage of LDO4 regulator
- *
- * If the requested voltage is not available, the next lowest voltage will
- * be applied.
- * Valid values are between 700mV and 3500mV. Datasheet lists maximum voltage at
- * 2250mV, but hardware samples go as high as 3500mV.
- *
- * @param[in] millivolts voltage in mV units.
- * @param[in] bus I2C bus to which the AXP209 is connected
- * @return CB_SUCCES on success,
- * CB_ERR_ARG if voltage is out of range, or an error code otherwise.
- */
-enum cb_err axp209_set_ldo3_voltage(u8 bus, u16 millivolts)
-{
- u8 val;
-
- /* Datasheet lists 2250 max, but PMU will output up to 3500mV */
- if (millivolts < 700 || millivolts > 3500)
- return CB_ERR_ARG;
-
- val = (millivolts - 700) / 25;
-
- if (axp209_write(bus, REG_LDO3_VOLTAGE, val) != 1)
- return CB_ERR;
-
- return CB_SUCCESS;
-}
-
-/**
- * \brief Configure the output voltage of DC-DC2 converter
- *
- * If the requested voltage is not available, the next lowest voltage will
- * be applied.
- * Valid values are between 1250V and 3300mV
- *
- * @param[in] millivolts voltage in mV units.
- * @param[in] bus I2C bus to which the AXP209 is connected
- * @return CB_SUCCES on success,
- * CB_ERR_ARG if voltage is out of range, or an error code otherwise.
- */
-enum cb_err axp209_set_ldo4_voltage(u8 bus, u16 millivolts)
-{
- u8 reg8, val;
-
- if (millivolts < 1250 || millivolts > 3300)
- return CB_ERR_ARG;
-
- /* Try to read the register first, and stop here on error */
- if (axp209_read(bus, REG_LDO24_VOLTAGE, &reg8) != 1)
- return CB_ERR;
-
- if (millivolts <= 2000)
- val = (millivolts - 1200) / 100;
- else if (millivolts <= 2700)
- val = 9 + (millivolts - 2500) / 100;
- else if (millivolts <= 2800)
- val = 11;
- else
- val = 12 + (millivolts - 3000) / 100;
-
- reg8 &= ~REG_LDO24_VOLTAGE_LDO4_MASK;
- reg8 |= REG_LDO24_VOLTAGE_LDO4_VAL(val);
-
- if (axp209_write(bus, REG_LDO24_VOLTAGE, reg8) != 1)
- return CB_ERR;
-
- return CB_SUCCESS;
-}
-
-static const struct {
- enum cb_err (*set_voltage) (u8 bus, u16 mv);
- const char *name;
-} vtable[] = { {
- .set_voltage = axp209_set_dcdc2_voltage,
- .name = "DCDC2",
- }, {
- .set_voltage = axp209_set_dcdc3_voltage,
- .name = "DCDC3",
- }, {
- .set_voltage = axp209_set_ldo2_voltage,
- .name = "LDO2",
- }, {
- .set_voltage = axp209_set_ldo3_voltage,
- .name = "LDO3",
- }, {
- .set_voltage = axp209_set_ldo4_voltage,
- .name = "LDO4",
- }
-};
-
-static enum cb_err set_rail(u8 bus, int idx, u16 mv)
-{
- enum cb_err err;
- const char *name = vtable[idx].name;
-
- /* If voltage isn't specified, don't touch the rail */
- if (mv == 0) {
- printk(BIOS_DEBUG, "[axp209] Skipping %s configuration\n",
- name);
- return CB_SUCCESS;
- }
-
- if ((err = vtable[idx].set_voltage(bus, mv) != CB_SUCCESS)) {
- printk(BIOS_ERR, "[axp209] Failed to set %s to %u mv\n",
- name, mv);
- return err;
- }
-
- return CB_SUCCESS;
-}
-
-/**
- * \brief Configure all voltage rails
- *
- * Configure all converters and regulators from devicetree config. If any of the
- * voltages are not declared (i.e. are zero), the respective rail will not be
- * reconfigured, and retain its powerup voltage.
- *
- * @param[in] cfg pointer to @ref drivers_xpowers_axp209_config structure
- * @param[in] bus I2C bus to which the AXP209 is connected
- * @return CB_SUCCES on success, or an error code otherwise.
- */
-enum cb_err axp209_set_voltages(u8 bus, const struct
- drivers_xpowers_axp209_config *cfg)
-{
- enum cb_err err;
-
- /* Don't worry about what the error is. Console prints that */
- err = set_rail(bus, 0, cfg->dcdc2_voltage_mv);
- err |= set_rail(bus, 1, cfg->dcdc3_voltage_mv);
- err |= set_rail(bus, 2, cfg->ldo2_voltage_mv);
- err |= set_rail(bus, 3, cfg->ldo3_voltage_mv);
- err |= set_rail(bus, 4, cfg->ldo4_voltage_mv);
-
- if (err != CB_SUCCESS)
- return CB_ERR;
-
- return CB_SUCCESS;
-}
-
-/*
- * Usually, the AXP209 is enabled and configured in romstage, so there is no
- * need for a full ramstage driver. Hence .enable_dev is NULL.
- */
-#ifndef __PRE_RAM__
-struct chip_operations drivers_xpowers_axp209_config = {
- CHIP_NAME("X-Powers AXP 209 Power Management Unit")
- .enable_dev = NULL,
-};
-#endif /* __PRE_RAM__ */
diff --git a/src/drivers/xpowers/axp209/axp209.h b/src/drivers/xpowers/axp209/axp209.h
deleted file mode 100644
index c9cdd7efba..0000000000
--- a/src/drivers/xpowers/axp209/axp209.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Definitions for X-Powers AXP 209 Power Management Unit
- *
- * Copyright (C) 2013 Alexandru Gagniuc <mr.nuke.me@gmail.com>
- * Subject to the GNU GPL v2, or (at your option) any later version.
- */
-
-#include <types.h>
-#include "chip.h"
-
-#define AXP209_I2C_ADDR (0x68 >> 1)
-
-enum cb_err axp209_init(u8 bus);
-enum cb_err axp209_set_dcdc2_voltage(u8 bus, u16 millivolts);
-enum cb_err axp209_set_dcdc3_voltage(u8 bus, u16 millivolts);
-enum cb_err axp209_set_ldo2_voltage(u8 bus, u16 millivolts);
-enum cb_err axp209_set_ldo3_voltage(u8 bus, u16 millivolts);
-enum cb_err axp209_set_ldo4_voltage(u8 bus, u16 millivolts);
-enum cb_err axp209_set_voltages(u8 bus, const struct
- drivers_xpowers_axp209_config *cfg);
diff --git a/src/drivers/xpowers/axp209/chip.h b/src/drivers/xpowers/axp209/chip.h
deleted file mode 100644
index c19253d6b5..0000000000
--- a/src/drivers/xpowers/axp209/chip.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * X-Powers AXP 209 devicetree.cb interface
- *
- * Copyright (C) 2013 Alexandru Gagniuc <mr.nuke.me@gmail.com>
- * Subject to the GNU GPL v2, or (at your option) any later version.
- */
-
-#ifndef AXP209_CHIP_H
-#define AXP209_CHIP_H
-
-#include <types.h>
-
-struct drivers_xpowers_axp209_config {
- u16 dcdc2_voltage_mv; /**< DCDC2 converter voltage output */
- u16 dcdc3_voltage_mv; /**< DCDC3 converter voltage output */
- u16 ldo2_voltage_mv; /**< LDO2 regulator voltage output */
- u16 ldo3_voltage_mv; /**< LDO3 regulator voltage output */
- u16 ldo4_voltage_mv; /**< LDO4 regulator voltage output */
-};
-
-#endif /* AXP209_CHIP_H */