summaryrefslogtreecommitdiff
path: root/include/linux/mfd/tps6586x.h
blob: 5354b7d3b559fb22c83a818a5530e6868ea16736 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#ifndef __LINUX_MFD_TPS6586X_H
#define __LINUX_MFD_TPS6586X_H

#define TPS6586X_SLEW_RATE_INSTANTLY	0x00
#define TPS6586X_SLEW_RATE_110UV	0x01
#define TPS6586X_SLEW_RATE_220UV	0x02
#define TPS6586X_SLEW_RATE_440UV	0x03
#define TPS6586X_SLEW_RATE_880UV	0x04
#define TPS6586X_SLEW_RATE_1760UV	0x05
#define TPS6586X_SLEW_RATE_3520UV	0x06
#define TPS6586X_SLEW_RATE_7040UV	0x07

#define TPS6586X_SLEW_RATE_SET		0x08
#define TPS6586X_SLEW_RATE_MASK         0x07

#define SM0_PWM_BIT 0
#define SM1_PWM_BIT 1
#define SM2_PWM_BIT 2

enum {
	TPS6586X_ID_SYS,
	TPS6586X_ID_SM_0,
	TPS6586X_ID_SM_1,
	TPS6586X_ID_SM_2,
	TPS6586X_ID_LDO_0,
	TPS6586X_ID_LDO_1,
	TPS6586X_ID_LDO_2,
	TPS6586X_ID_LDO_3,
	TPS6586X_ID_LDO_4,
	TPS6586X_ID_LDO_5,
	TPS6586X_ID_LDO_6,
	TPS6586X_ID_LDO_7,
	TPS6586X_ID_LDO_8,
	TPS6586X_ID_LDO_9,
	TPS6586X_ID_LDO_RTC,
	TPS6586X_ID_MAX_REGULATOR,
};

enum {
	TPS6586X_INT_PLDO_0,
	TPS6586X_INT_PLDO_1,
	TPS6586X_INT_PLDO_2,
	TPS6586X_INT_PLDO_3,
	TPS6586X_INT_PLDO_4,
	TPS6586X_INT_PLDO_5,
	TPS6586X_INT_PLDO_6,
	TPS6586X_INT_PLDO_7,
	TPS6586X_INT_COMP_DET,
	TPS6586X_INT_ADC,
	TPS6586X_INT_PLDO_8,
	TPS6586X_INT_PLDO_9,
	TPS6586X_INT_PSM_0,
	TPS6586X_INT_PSM_1,
	TPS6586X_INT_PSM_2,
	TPS6586X_INT_PSM_3,
	TPS6586X_INT_RTC_ALM1,
	TPS6586X_INT_ACUSB_OVP,
	TPS6586X_INT_USB_DET,
	TPS6586X_INT_AC_DET,
	TPS6586X_INT_BAT_DET,
	TPS6586X_INT_CHG_STAT,
	TPS6586X_INT_CHG_TEMP,
	TPS6586X_INT_PP,
	TPS6586X_INT_RESUME,
	TPS6586X_INT_LOW_SYS,
	TPS6586X_INT_RTC_ALM2,
};

enum pwm_pfm_mode {
	PWM_ONLY,
	AUTO_PWM_PFM,
	PWM_DEFAULT_VALUE
};

struct tps6586x_settings {
	int slew_rate;
	/* SM0, SM1 and SM2 have PWM-only and auto PWM/PFM mode */
	enum pwm_pfm_mode sm_pwm_mode;
};

enum {
	TPS6586X_RTC_CL_SEL_1_5PF  = 0x0,
	TPS6586X_RTC_CL_SEL_6_5PF  = 0x1,
	TPS6586X_RTC_CL_SEL_7_5PF  = 0x2,
	TPS6586X_RTC_CL_SEL_12_5PF = 0x3,
};

struct tps6586x_subdev_info {
	int		id;
	const char	*name;
	void		*platform_data;
	struct device_node *of_node;
};

struct tps6586x_epoch_start {
	int year;
	int month;
	int day;
	int hour;
	int min;
	int sec;
};

struct tps6586x_rtc_platform_data {
	struct tps6586x_epoch_start start;
	int cl_sel; /* internal XTAL capacitance, see TPS6586X_RTC_CL_SEL* */
};

struct tps6586x_platform_data {
	int num_subdevs;
	struct tps6586x_subdev_info *subdevs;

	int gpio_base;
	int irq_base;
	bool pm_off;

	struct regulator_init_data *reg_init_data[TPS6586X_ID_MAX_REGULATOR];
};

/*
 * NOTE: the functions below are not intended for use outside
 * of the TPS6586X sub-device drivers
 */
extern int tps6586x_write(struct device *dev, int reg, uint8_t val);
extern int tps6586x_writes(struct device *dev, int reg, int len, uint8_t *val);
extern int tps6586x_read(struct device *dev, int reg, uint8_t *val);
extern int tps6586x_reads(struct device *dev, int reg, int len, uint8_t *val);
extern int tps6586x_set_bits(struct device *dev, int reg, uint8_t bit_mask);
extern int tps6586x_clr_bits(struct device *dev, int reg, uint8_t bit_mask);
extern int tps6586x_update(struct device *dev, int reg, uint8_t val,
			   uint8_t mask);
extern int tps6586x_irq_get_virq(struct device *dev, int irq);

#endif /*__LINUX_MFD_TPS6586X_H */