123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- /*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
- #ifndef __REGULATOR_QPNP_REGULATOR_H__
- #define __REGULATOR_QPNP_REGULATOR_H__
- #include <linux/regulator/machine.h>
- #define QPNP_REGULATOR_DRIVER_NAME "qcom,qpnp-regulator"
- /* Pin control enable input pins. */
- #define QPNP_REGULATOR_PIN_CTRL_ENABLE_NONE 0x00
- #define QPNP_REGULATOR_PIN_CTRL_ENABLE_EN0 0x01
- #define QPNP_REGULATOR_PIN_CTRL_ENABLE_EN1 0x02
- #define QPNP_REGULATOR_PIN_CTRL_ENABLE_EN2 0x04
- #define QPNP_REGULATOR_PIN_CTRL_ENABLE_EN3 0x08
- #define QPNP_REGULATOR_PIN_CTRL_ENABLE_HW_DEFAULT 0x10
- /* Pin control high power mode input pins. */
- #define QPNP_REGULATOR_PIN_CTRL_HPM_NONE 0x00
- #define QPNP_REGULATOR_PIN_CTRL_HPM_EN0 0x01
- #define QPNP_REGULATOR_PIN_CTRL_HPM_EN1 0x02
- #define QPNP_REGULATOR_PIN_CTRL_HPM_EN2 0x04
- #define QPNP_REGULATOR_PIN_CTRL_HPM_EN3 0x08
- #define QPNP_REGULATOR_PIN_CTRL_HPM_SLEEP_B 0x10
- #define QPNP_REGULATOR_PIN_CTRL_HPM_HW_DEFAULT 0x20
- /*
- * Used with enable parameters to specify that hardware default register values
- * should be left unaltered.
- */
- #define QPNP_REGULATOR_DISABLE 0
- #define QPNP_REGULATOR_ENABLE 1
- #define QPNP_REGULATOR_USE_HW_DEFAULT 2
- /* Soft start strength of a voltage switch type regulator */
- enum qpnp_vs_soft_start_str {
- QPNP_VS_SOFT_START_STR_0P05_UA,
- QPNP_VS_SOFT_START_STR_0P25_UA,
- QPNP_VS_SOFT_START_STR_0P55_UA,
- QPNP_VS_SOFT_START_STR_0P75_UA,
- QPNP_VS_SOFT_START_STR_HW_DEFAULT,
- };
- /* Current limit of a boost type regulator */
- enum qpnp_boost_current_limit {
- QPNP_BOOST_CURRENT_LIMIT_300_MA,
- QPNP_BOOST_CURRENT_LIMIT_600_MA,
- QPNP_BOOST_CURRENT_LIMIT_900_MA,
- QPNP_BOOST_CURRENT_LIMIT_1200_MA,
- QPNP_BOOST_CURRENT_LIMIT_1500_MA,
- QPNP_BOOST_CURRENT_LIMIT_1800_MA,
- QPNP_BOOST_CURRENT_LIMIT_2100_MA,
- QPNP_BOOST_CURRENT_LIMIT_2400_MA,
- QPNP_BOOST_CURRENT_LIMIT_HW_DEFAULT,
- };
- /**
- * struct qpnp_regulator_platform_data - qpnp-regulator initialization data
- * @init_data: regulator constraints
- * @pull_down_enable: 1 = Enable output pull down resistor when the
- * regulator is disabled
- * 0 = Disable pull down resistor
- * QPNP_REGULATOR_USE_HW_DEFAULT = do not modify
- * pull down state
- * @pin_ctrl_enable: Bit mask specifying which hardware pins should be
- * used to enable the regulator, if any
- * Value should be an ORing of
- * QPNP_REGULATOR_PIN_CTRL_ENABLE_* constants. If
- * the bit specified by
- * QPNP_REGULATOR_PIN_CTRL_ENABLE_HW_DEFAULT is
- * set, then pin control enable hardware registers
- * will not be modified.
- * @pin_ctrl_hpm: Bit mask specifying which hardware pins should be
- * used to force the regulator into high power
- * mode, if any
- * Value should be an ORing of
- * QPNP_REGULATOR_PIN_CTRL_HPM_* constants. If
- * the bit specified by
- * QPNP_REGULATOR_PIN_CTRL_HPM_HW_DEFAULT is
- * set, then pin control mode hardware registers
- * will not be modified.
- * @system_load: Load in uA present on regulator that is not captured
- * by any consumer request
- * @enable_time: Time in us to delay after enabling the regulator
- * @ocp_enable: 1 = Allow over current protection (OCP) to be
- * enabled for voltage switch type regulators so
- * that they latch off automatically when over
- * current is detected. OCP is enabled when in HPM
- * or auto mode.
- * 0 = Disable OCP
- * QPNP_REGULATOR_USE_HW_DEFAULT = do not modify
- * OCP state
- * @ocp_irq: IRQ number of the voltage switch OCP IRQ. If
- * specified the voltage switch will be toggled off
- * and back on when OCP triggers in order to handle
- * high in-rush current.
- * @ocp_max_retries: Maximum number of times to try toggling a voltage
- * switch off and back on as a result of
- * consecutive over current events.
- * @ocp_retry_delay_ms: Time to delay in milliseconds between each
- * voltage switch toggle after an over current
- * event takes place.
- * @boost_current_limit: This parameter sets the current limit of boost type
- * regulators. Its value should be one of
- * QPNP_BOOST_CURRENT_LIMIT_*. If its value is
- * QPNP_BOOST_CURRENT_LIMIT_HW_DEFAULT, then the
- * boost current limit will be left at its default
- * hardware value.
- * @soft_start_enable: 1 = Enable soft start for LDO and voltage switch
- * type regulators so that output voltage slowly
- * ramps up when the regulator is enabled
- * 0 = Disable soft start
- * QPNP_REGULATOR_USE_HW_DEFAULT = do not modify
- * soft start state
- * @vs_soft_start_strength: This parameter sets the soft start strength for
- * voltage switch type regulators. Its value
- * should be one of QPNP_VS_SOFT_START_STR_*. If
- * its value is QPNP_VS_SOFT_START_STR_HW_DEFAULT,
- * then the soft start strength will be left at its
- * default hardware value.
- * @auto_mode_enable: 1 = Enable automatic hardware selection of regulator
- * mode (HPM vs LPM). Auto mode is not available
- * on boost type regulators
- * 0 = Disable auto mode selection
- * QPNP_REGULATOR_USE_HW_DEFAULT = do not modify
- * auto mode state
- * @bypass_mode_enable: 1 = Enable bypass mode for an LDO type regulator so
- * that it acts like a switch and simply outputs
- * its input voltage
- * 0 = Do not enable bypass mode
- * QPNP_REGULATOR_USE_HW_DEFAULT = do not modify
- * bypass mode state
- * @hpm_enable: 1 = Enable high power mode (HPM), also referred to
- * as NPM. HPM consumes more ground current than
- * LPM, but it can source significantly higher load
- * current. HPM is not available on boost type
- * regulators. For voltage switch type regulators,
- * HPM implies that over current protection and
- * soft start are active all the time. This
- * configuration can be overwritten by changing the
- * regulator's mode dynamically.
- * 0 = Do not enable HPM
- * QPNP_REGULATOR_USE_HW_DEFAULT = do not modify
- * HPM state
- * @base_addr: SMPI base address for the regulator peripheral
- */
- struct qpnp_regulator_platform_data {
- struct regulator_init_data init_data;
- int pull_down_enable;
- unsigned pin_ctrl_enable;
- unsigned pin_ctrl_hpm;
- int system_load;
- int enable_time;
- int ocp_enable;
- int ocp_irq;
- int ocp_max_retries;
- int ocp_retry_delay_ms;
- enum qpnp_boost_current_limit boost_current_limit;
- int soft_start_enable;
- enum qpnp_vs_soft_start_str vs_soft_start_strength;
- int auto_mode_enable;
- int bypass_mode_enable;
- int hpm_enable;
- u16 base_addr;
- };
- #ifdef CONFIG_REGULATOR_QPNP
- /**
- * qpnp_regulator_init() - register spmi driver for qpnp-regulator
- *
- * This initialization function should be called in systems in which driver
- * registration ordering must be controlled precisely.
- */
- int __init qpnp_regulator_init(void);
- #else
- static inline int __init qpnp_regulator_init(void)
- {
- return -ENODEV;
- }
- #endif /* CONFIG_REGULATOR_QPNP */
- #endif
|