summaryrefslogtreecommitdiffstats
path: root/drivers/w1/slaves/w1_ds2781.h
blob: fa902dfa013638111b6e843f04d2e00fe2c7317e (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
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * 1-Wire implementation for the ds2780 chip
 *
 * Author: Renata Sayakhova <renata@oktetlabs.ru>
 *
 * Based on w1-ds2760 driver
 */

#ifndef _W1_DS2781_H
#define _W1_DS2781_H

/* Function commands */
#define W1_DS2781_READ_DATA		0x69
#define W1_DS2781_WRITE_DATA		0x6C
#define W1_DS2781_COPY_DATA		0x48
#define W1_DS2781_RECALL_DATA		0xB8
#define W1_DS2781_LOCK			0x6A

/* Register map */
/* Register 0x00 Reserved */
#define DS2781_STATUS			0x01
#define DS2781_RAAC_MSB			0x02
#define DS2781_RAAC_LSB			0x03
#define DS2781_RSAC_MSB			0x04
#define DS2781_RSAC_LSB			0x05
#define DS2781_RARC			0x06
#define DS2781_RSRC			0x07
#define DS2781_IAVG_MSB			0x08
#define DS2781_IAVG_LSB			0x09
#define DS2781_TEMP_MSB			0x0A
#define DS2781_TEMP_LSB			0x0B
#define DS2781_VOLT_MSB			0x0C
#define DS2781_VOLT_LSB			0x0D
#define DS2781_CURRENT_MSB		0x0E
#define DS2781_CURRENT_LSB		0x0F
#define DS2781_ACR_MSB			0x10
#define DS2781_ACR_LSB			0x11
#define DS2781_ACRL_MSB			0x12
#define DS2781_ACRL_LSB			0x13
#define DS2781_AS			0x14
#define DS2781_SFR			0x15
#define DS2781_FULL_MSB			0x16
#define DS2781_FULL_LSB			0x17
#define DS2781_AE_MSB			0x18
#define DS2781_AE_LSB			0x19
#define DS2781_SE_MSB			0x1A
#define DS2781_SE_LSB			0x1B
/* Register 0x1C - 0x1E Reserved */
#define DS2781_EEPROM		0x1F
#define DS2781_EEPROM_BLOCK0_START	0x20
/* Register 0x20 - 0x2F User EEPROM */
#define DS2781_EEPROM_BLOCK0_END	0x2F
/* Register 0x30 - 0x5F Reserved */
#define DS2781_EEPROM_BLOCK1_START	0x60
#define DS2781_CONTROL			0x60
#define DS2781_AB			0x61
#define DS2781_AC_MSB			0x62
#define DS2781_AC_LSB			0x63
#define DS2781_VCHG			0x64
#define DS2781_IMIN			0x65
#define DS2781_VAE			0x66
#define DS2781_IAE			0x67
#define DS2781_AE_40			0x68
#define DS2781_RSNSP			0x69
#define DS2781_FULL_40_MSB		0x6A
#define DS2781_FULL_40_LSB		0x6B
#define DS2781_FULL_4_SLOPE		0x6C
#define DS2781_FULL_3_SLOPE		0x6D
#define DS2781_FULL_2_SLOPE		0x6E
#define DS2781_FULL_1_SLOPE		0x6F
#define DS2781_AE_4_SLOPE		0x70
#define DS2781_AE_3_SLOPE		0x71
#define DS2781_AE_2_SLOPE		0x72
#define DS2781_AE_1_SLOPE		0x73
#define DS2781_SE_4_SLOPE		0x74
#define DS2781_SE_3_SLOPE		0x75
#define DS2781_SE_2_SLOPE		0x76
#define DS2781_SE_1_SLOPE		0x77
#define DS2781_RSGAIN_MSB		0x78
#define DS2781_RSGAIN_LSB		0x79
#define DS2781_RSTC			0x7A
#define DS2781_COB			0x7B
#define DS2781_TBP34			0x7C
#define DS2781_TBP23			0x7D
#define DS2781_TBP12			0x7E
#define DS2781_EEPROM_BLOCK1_END	0x7F
/* Register 0x7D - 0xFF Reserved */

#define DS2781_FSGAIN_MSB		0xB0
#define DS2781_FSGAIN_LSB		0xB1

/* Number of valid register addresses */
#define DS2781_DATA_SIZE		0xB2

/* Status register bits */
#define DS2781_STATUS_CHGTF		(1 << 7)
#define DS2781_STATUS_AEF		(1 << 6)
#define DS2781_STATUS_SEF		(1 << 5)
#define DS2781_STATUS_LEARNF		(1 << 4)
/* Bit 3 Reserved */
#define DS2781_STATUS_UVF		(1 << 2)
#define DS2781_STATUS_PORF		(1 << 1)
/* Bit 0 Reserved */

/* Control register bits */
/* Bit 7 Reserved */
#define DS2781_CONTROL_NBEN		(1 << 7)
#define DS2781_CONTROL_UVEN		(1 << 6)
#define DS2781_CONTROL_PMOD		(1 << 5)
#define DS2781_CONTROL_RNAOP		(1 << 4)
#define DS1781_CONTROL_UVTH		(1 << 3)
/* Bit 0 - 2 Reserved */

/* Special feature register bits */
/* Bit 1 - 7 Reserved */
#define DS2781_SFR_PIOSC		(1 << 0)

/* EEPROM register bits */
#define DS2781_EEPROM_EEC		(1 << 7)
#define DS2781_EEPROM_LOCK		(1 << 6)
/* Bit 2 - 6 Reserved */
#define DS2781_EEPROM_BL1		(1 << 1)
#define DS2781_EEPROM_BL0		(1 << 0)

extern int w1_ds2781_io(struct device *dev, char *buf, int addr, size_t count,
			int io);
extern int w1_ds2781_eeprom_cmd(struct device *dev, int addr, int cmd);

#endif /* !_W1_DS2781_H */