You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
kernel_samsung_sm7125/include/linux/regulator/s2dos03-regulator.h

148 lines
3.6 KiB

/*
* linux/regulator/s2dos03-regulator.h
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __LINUX_S2DOS03_REGULATOR_H
#define __LINUX_S2DOS03_REGULATOR_H
/*******************************************************************************
* Useful Macros
******************************************************************************/
#undef __CONST_FFS
#define __CONST_FFS(_x) \
((_x) & 0x0F ? ((_x) & 0x03 ? ((_x) & 0x01 ? 0 : 1) :\
((_x) & 0x04 ? 2 : 3)) :\
((_x) & 0x30 ? ((_x) & 0x10 ? 4 : 5) :\
((_x) & 0x40 ? 6 : 7)))
#undef BIT_RSVD
#define BIT_RSVD 0
#undef BITS
#define BITS(_end, _start) \
((BIT(_end) - BIT(_start)) + BIT(_end))
#undef __BITS_GET
#define __BITS_GET(_word, _mask, _shift) \
(((_word) & (_mask)) >> (_shift))
#undef BITS_GET
#define BITS_GET(_word, _bit) \
__BITS_GET(_word, _bit, FFS(_bit))
#undef __BITS_SET
#define __BITS_SET(_word, _mask, _shift, _val) \
(((_word) & ~(_mask)) | (((_val) << (_shift)) & (_mask)))
#undef BITS_SET
#define BITS_SET(_word, _bit, _val) \
__BITS_SET(_word, _bit, FFS(_bit), _val)
#undef BITS_MATCH
#define BITS_MATCH(_word, _bit) \
(((_word) & (_bit)) == (_bit))
/*******************************************************************************
* Register
******************************************************************************/
/* Slave Address */
#define S2DOS03_I2C_ADDR (0xC0>>1)
/* Register */
#define REG_DEVICE_ID 0x00
#define REG_TOPSYS_STAT 0x01
#define BIT_TJCT_140C BIT (1)
#define BIT_TJCT_120C BIT (0)
#define REG_REG_STAT 0x02
#define BIT_ELVDD_POK BIT (7)
#define BIT_ELVSS_POK BIT (6)
#define BIT_AVDD_POK BIT (5)
#define BIT_BUCK_POK BIT (4)
#define BIT_LDO4_POK BIT (3)
#define BIT_LDO3_POK BIT (2)
#define BIT_LDO2_POK BIT (1)
#define BIT_LDO1_POK BIT (0)
#define REG_REG_EN 0x03
#define BIT_B_EN BIT (4)
#define BIT_L4_EN BIT (3)
#define BIT_L3_EN BIT (2)
#define BIT_L2_EN BIT (1)
#define BIT_L1_EN BIT (0)
#define REG_GPIO_PD_CTRL 0x04
#define BIT_EN_B_PD_DIS BIT (0)
#define REG_UVLO_CFG1 0x05
#define BIT_UVLO_F BITS(1,0)
#define REG_LDO1_CFG 0x10
#define REG_LDO2_CFG 0x11
#define REG_LDO3_CFG 0x12
#define REG_LDO4_CFG 0x13
#define REG_LDOX_CFG(X) (REG_LDO1_CFG + X - 1)
#define BIT_LX_AD BIT (7)
#define BIT_LX_VOUT BITS(6,0)
#define REG_BUCK_CFG 0x20
#define BIT_B_RU_SR BITS(7,6)
#define BIT_B_RD_SR BITS(5,4)
#define BIT_B_AD BIT (3)
#define BIT_B_FPWM BIT (2)
#define BIT_B_FSRAD BIT (0)
#define REG_BUCK_VOUT 0x21
#define BIT_B_VOUT BITS(7,0)
/* voltage range and step */
#define LDO_MINUV 600000 /* 0.6V */
#define LDO_MAXUV 3775000 /* 3.775V */
#define LDO_STEP 25000 /* 25mV */
#define BUCK_MINUV 500000 /* 0.5V */
#define BUCK_MAXUV 2093750 /* 2.09375V */
#define BUCK_STEP 6250 /* 6.25mV */
/* S2DOS03 regulator ids */
enum s2dos03_regulator_id {
S2DOS03_LDO1 = 1,
S2DOS03_LDO2,
S2DOS03_LDO3,
S2DOS03_LDO4,
S2DOS03_BUCK,
S2DOS03_REGULATORS = S2DOS03_BUCK,
};
struct s2dos03_regulator_data {
int active_discharge_enable;
struct regulator_init_data *initdata;
struct device_node *of_node;
};
struct s2dos03_regulator_platform_data
{
int num_regulators;
struct s2dos03_regulator_data *regulators;
int buck_ramp_up;
int buck_ramp_down;
int buck_fpwm;
int buck_fsrad;
int uvlo_fall_threshold;
};
#endif