#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/platform_device.h>
#include <linux/regulator/driver.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/of_regulator.h>
#include <linux/mfd/da9052/da9052.h>
#include <linux/mfd/da9052/reg.h>
#include <linux/mfd/da9052/pdata.h>
#define DA9052_BUCK_PERI_3uV_STEP 100000
#define DA9052_BUCK_PERI_REG_MAP_UPTO_3uV 24
#define DA9052_CONST_3uV 3000000
#define DA9052_CURRENT_RANGE 4
#define DA9052_BUCK_ILIM_MASK_EVEN 0x0c
#define DA9052_BUCK_ILIM_MASK_ODD 0xc0
#define DA9052_ID_BUCK1 0
#define DA9052_ID_BUCK2 1
#define DA9052_ID_BUCK3 2
#define DA9052_ID_BUCK4 3
#define DA9052_ID_LDO7 10
#define DA9052_ID_LDO8 11
#define DA9052_ID_LDO9 12
#define DA9052_ID_LDO10 13
static const u32 da9052_current_limits[3][4] = {
{700000, 800000, 1000000, 1200000},
{1600000, 2000000, 2400000, 3000000},
{800000, 1000000, 1200000, 1500000},
struct da9052_regulator_info {
struct regulator_desc reg_desc;
unsigned char activate_bit;
struct da9052_regulator {
struct da9052_regulator_info *info;
struct regulator_dev *rdev;
static int verify_range(struct da9052_regulator_info *info,
if (min_uV > info->max_uV || max_uV < info->min_uV)
static int da9052_dcdc_get_current_limit(struct regulator_dev *rdev)