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
{
@@ -99,7 +133,7 @@ int adltc2990_is_busy(const struct device *dev, bool *is_busy)
99
133
const struct adltc2990_config * cfg = dev -> config ;
100
134
uint8_t status_reg = 0 ;
101
135
102
- if (i2c_reg_read_byte_dt ( & cfg -> bus , ADLTC2990_REG_STATUS , & status_reg )) {
136
+ if (adltc2990_reg_read_byte_dt ( dev , ADLTC2990_REG_STATUS , & status_reg )) {
103
137
return - EIO ;
104
138
}
105
139
@@ -136,7 +170,6 @@ static void adltc2990_get_v3_v4_val(const struct device *dev, struct sensor_valu
136
170
int adltc2990_trigger_measurement (const struct device * dev ,
137
171
enum adltc2990_acquisition_format format )
138
172
{
139
- const struct adltc2990_config * cfg = dev -> config ;
140
173
struct adltc2990_data * data = dev -> data ;
141
174
142
175
if (data -> acq_format == format ) {
@@ -146,20 +179,18 @@ int adltc2990_trigger_measurement(const struct device *dev,
146
179
data -> acq_format = format ;
147
180
uint8_t ctrl_reg_setting ;
148
181
149
- if (i2c_reg_read_byte_dt (& cfg -> bus , ADLTC2990_REG_CONTROL , & ctrl_reg_setting )) {
150
- LOG_ERR ("reading control register failed." );
182
+ if (adltc2990_reg_read_byte_dt (dev , ADLTC2990_REG_CONTROL , & ctrl_reg_setting )) {
151
183
return - EIO ;
152
184
}
153
185
154
186
WRITE_BIT (ctrl_reg_setting , ADLTC2990_ACQUISITION_BIT_POS , format );
155
187
156
- if (i2c_reg_write_byte_dt (& cfg -> bus , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
157
- LOG_ERR ("configuring for single bus failed." );
188
+ if (adltc2990_reg_write_byte_dt (dev , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
158
189
return - EIO ;
159
190
}
160
191
161
192
trigger_conversion :
162
- return i2c_reg_write_byte_dt ( & cfg -> bus , ADLTC2990_REG_TRIGGER , 0x1 );
193
+ return adltc2990_reg_write_byte_dt ( dev , ADLTC2990_REG_TRIGGER , 0x1 );
163
194
}
164
195
165
196
static int adltc2990_fetch_property_value (const struct device * dev ,
@@ -207,11 +238,11 @@ static int adltc2990_fetch_property_value(const struct device *dev,
207
238
return - EINVAL ;
208
239
}
209
240
210
- if (i2c_reg_read_byte_dt ( & cfg -> bus , msb_address , & msb_value )) {
241
+ if (adltc2990_reg_read_byte_dt ( dev , msb_address , & msb_value )) {
211
242
return - EIO ;
212
243
}
213
244
214
- if (i2c_reg_read_byte_dt ( & cfg -> bus , lsb_address , & lsb_value )) {
245
+ if (adltc2990_reg_read_byte_dt ( dev , lsb_address , & lsb_value )) {
215
246
return - EIO ;
216
247
}
217
248
@@ -595,6 +626,8 @@ static int adltc2990_init(const struct device *dev)
595
626
struct adltc2990_data * data = dev -> data ;
596
627
int err ;
597
628
629
+ k_sem_init (& data -> sem , 1 , 1 );
630
+
598
631
if (!i2c_is_ready_dt (& cfg -> bus )) {
599
632
LOG_ERR ("I2C bus %s not ready" , cfg -> bus .bus -> name );
600
633
return - ENODEV ;
@@ -604,8 +637,7 @@ static int adltc2990_init(const struct device *dev)
604
637
cfg -> measurement_mode [1 ] << 3 | cfg -> measurement_mode [0 ];
605
638
606
639
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." );
640
+ if (adltc2990_reg_write_byte_dt (dev , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
609
641
return - EIO ;
610
642
}
611
643
0 commit comments