18
18
#include <zephyr/logging/log.h>
19
19
LOG_MODULE_REGISTER (adltc2990 , CONFIG_SENSOR_LOG_LEVEL );
20
20
21
+ static int adltc2990_reg_write_byte_dt (const struct device * dev , uint8_t reg , uint8_t value )
22
+ {
23
+ const struct adltc2990_config * cfg = dev -> config ;
24
+ struct adltc2990_data * data = dev -> data ;
25
+
26
+ k_sem_take (& data -> sem , K_FOREVER );
27
+
28
+ if (i2c_reg_write_byte_dt (& cfg -> bus , reg , value )) {
29
+ LOG_ERR ("Failed to write register 0x%02x" , reg );
30
+ return - EIO ;
31
+ }
32
+
33
+ k_sem_give (& data -> sem );
34
+
35
+ return 0 ;
36
+ }
37
+
38
+ static int adltc2990_reg_read_byte_dt (const struct device * dev , uint8_t reg , uint8_t * value )
39
+ {
40
+ const struct adltc2990_config * cfg = dev -> config ;
41
+ struct adltc2990_data * data = dev -> data ;
42
+
43
+ k_sem_take (& data -> sem , K_FOREVER );
44
+
45
+ if (i2c_reg_read_byte_dt (& cfg -> bus , reg , value )) {
46
+ LOG_ERR ("Failed to read register 0x%02x" , reg );
47
+ return - EIO ;
48
+ }
49
+
50
+ k_sem_give (& data -> sem );
51
+
52
+ return 0 ;
53
+ }
54
+
21
55
static enum adltc2990_monitoring_type adltc2990_get_v1_v2_measurement_modes (uint8_t mode_4_3 ,
22
56
uint8_t mode_2_0 )
23
57
{
@@ -96,10 +130,9 @@ static enum adltc2990_monitoring_type adltc2990_get_v3_v4_measurement_modes(uint
96
130
97
131
int adltc2990_is_busy (const struct device * dev , bool * is_busy )
98
132
{
99
- const struct adltc2990_config * cfg = dev -> config ;
100
133
uint8_t status_reg = 0 ;
101
134
102
- if (i2c_reg_read_byte_dt ( & cfg -> bus , ADLTC2990_REG_STATUS , & status_reg )) {
135
+ if (adltc2990_reg_read_byte_dt ( dev , ADLTC2990_REG_STATUS , & status_reg )) {
103
136
return - EIO ;
104
137
}
105
138
@@ -136,7 +169,6 @@ static void adltc2990_get_v3_v4_val(const struct device *dev, struct sensor_valu
136
169
int adltc2990_trigger_measurement (const struct device * dev ,
137
170
enum adltc2990_acquisition_format format )
138
171
{
139
- const struct adltc2990_config * cfg = dev -> config ;
140
172
struct adltc2990_data * data = dev -> data ;
141
173
142
174
if (data -> acq_format == format ) {
@@ -146,20 +178,18 @@ int adltc2990_trigger_measurement(const struct device *dev,
146
178
data -> acq_format = format ;
147
179
uint8_t ctrl_reg_setting ;
148
180
149
- if (i2c_reg_read_byte_dt (& cfg -> bus , ADLTC2990_REG_CONTROL , & ctrl_reg_setting )) {
150
- LOG_ERR ("reading control register failed." );
181
+ if (adltc2990_reg_read_byte_dt (dev , ADLTC2990_REG_CONTROL , & ctrl_reg_setting )) {
151
182
return - EIO ;
152
183
}
153
184
154
185
WRITE_BIT (ctrl_reg_setting , ADLTC2990_ACQUISITION_BIT_POS , format );
155
186
156
- if (i2c_reg_write_byte_dt (& cfg -> bus , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
157
- LOG_ERR ("configuring for single bus failed." );
187
+ if (adltc2990_reg_write_byte_dt (dev , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
158
188
return - EIO ;
159
189
}
160
190
161
191
trigger_conversion :
162
- return i2c_reg_write_byte_dt ( & cfg -> bus , ADLTC2990_REG_TRIGGER , 0x1 );
192
+ return adltc2990_reg_write_byte_dt ( dev , ADLTC2990_REG_TRIGGER , 0x1 );
163
193
}
164
194
165
195
static int adltc2990_fetch_property_value (const struct device * dev ,
@@ -207,11 +237,11 @@ static int adltc2990_fetch_property_value(const struct device *dev,
207
237
return - EINVAL ;
208
238
}
209
239
210
- if (i2c_reg_read_byte_dt ( & cfg -> bus , msb_address , & msb_value )) {
240
+ if (adltc2990_reg_read_byte_dt ( dev , msb_address , & msb_value )) {
211
241
return - EIO ;
212
242
}
213
243
214
- if (i2c_reg_read_byte_dt ( & cfg -> bus , lsb_address , & lsb_value )) {
244
+ if (adltc2990_reg_read_byte_dt ( dev , lsb_address , & lsb_value )) {
215
245
return - EIO ;
216
246
}
217
247
@@ -595,6 +625,8 @@ static int adltc2990_init(const struct device *dev)
595
625
struct adltc2990_data * data = dev -> data ;
596
626
int err ;
597
627
628
+ k_sem_init (& data -> sem , 1 , 1 );
629
+
598
630
if (!i2c_is_ready_dt (& cfg -> bus )) {
599
631
LOG_ERR ("I2C bus %s not ready" , cfg -> bus .bus -> name );
600
632
return - ENODEV ;
@@ -604,8 +636,7 @@ static int adltc2990_init(const struct device *dev)
604
636
cfg -> measurement_mode [1 ] << 3 | cfg -> measurement_mode [0 ];
605
637
606
638
LOG_DBG ("Setting Control Register to: 0x%x" , ctrl_reg_setting );
607
- if (i2c_reg_write_byte_dt (& cfg -> bus , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
608
- LOG_ERR ("configuring for single bus failed." );
639
+ if (adltc2990_reg_write_byte_dt (dev , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
609
640
return - EIO ;
610
641
}
611
642
0 commit comments