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
+ int err ;
26
+
27
+ k_sem_take (& data -> sem , K_FOREVER );
28
+
29
+ err = i2c_reg_write_byte_dt (& cfg -> bus , reg , value );
30
+
31
+ k_sem_give (& data -> sem );
32
+
33
+ if (err != 0 ) {
34
+ LOG_ERR ("Failed to write register 0x%02x" , reg );
35
+ }
36
+
37
+ return err ;
38
+ }
39
+
40
+ static int adltc2990_reg_read_byte_dt (const struct device * dev , uint8_t reg , uint8_t * value )
41
+ {
42
+ const struct adltc2990_config * cfg = dev -> config ;
43
+ struct adltc2990_data * data = dev -> data ;
44
+ int err ;
45
+
46
+ k_sem_take (& data -> sem , K_FOREVER );
47
+
48
+ err = i2c_reg_read_byte_dt (& cfg -> bus , reg , value );
49
+
50
+ k_sem_give (& data -> sem );
51
+
52
+ if (err != 0 ) {
53
+ LOG_ERR ("Failed to read register 0x%02x" , reg );
54
+ }
55
+
56
+ return err ;
57
+ }
58
+
21
59
static enum adltc2990_monitoring_type adltc2990_get_v1_v2_measurement_modes (uint8_t mode_4_3 ,
22
60
uint8_t mode_2_0 )
23
61
{
@@ -96,10 +134,9 @@ static enum adltc2990_monitoring_type adltc2990_get_v3_v4_measurement_modes(uint
96
134
97
135
int adltc2990_is_busy (const struct device * dev , bool * is_busy )
98
136
{
99
- const struct adltc2990_config * cfg = dev -> config ;
100
137
uint8_t status_reg = 0 ;
101
138
102
- if (i2c_reg_read_byte_dt ( & cfg -> bus , ADLTC2990_REG_STATUS , & status_reg )) {
139
+ if (adltc2990_reg_read_byte_dt ( dev , ADLTC2990_REG_STATUS , & status_reg )) {
103
140
return - EIO ;
104
141
}
105
142
@@ -136,7 +173,6 @@ static void adltc2990_get_v3_v4_val(const struct device *dev, struct sensor_valu
136
173
int adltc2990_trigger_measurement (const struct device * dev ,
137
174
enum adltc2990_acquisition_format format )
138
175
{
139
- const struct adltc2990_config * cfg = dev -> config ;
140
176
struct adltc2990_data * data = dev -> data ;
141
177
142
178
if (data -> acq_format == format ) {
@@ -146,20 +182,18 @@ int adltc2990_trigger_measurement(const struct device *dev,
146
182
data -> acq_format = format ;
147
183
uint8_t ctrl_reg_setting ;
148
184
149
- if (i2c_reg_read_byte_dt (& cfg -> bus , ADLTC2990_REG_CONTROL , & ctrl_reg_setting )) {
150
- LOG_ERR ("reading control register failed." );
185
+ if (adltc2990_reg_read_byte_dt (dev , ADLTC2990_REG_CONTROL , & ctrl_reg_setting )) {
151
186
return - EIO ;
152
187
}
153
188
154
189
WRITE_BIT (ctrl_reg_setting , ADLTC2990_ACQUISITION_BIT_POS , format );
155
190
156
- if (i2c_reg_write_byte_dt (& cfg -> bus , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
157
- LOG_ERR ("configuring for single bus failed." );
191
+ if (adltc2990_reg_write_byte_dt (dev , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
158
192
return - EIO ;
159
193
}
160
194
161
195
trigger_conversion :
162
- return i2c_reg_write_byte_dt ( & cfg -> bus , ADLTC2990_REG_TRIGGER , 0x1 );
196
+ return adltc2990_reg_write_byte_dt ( dev , ADLTC2990_REG_TRIGGER , 0x1 );
163
197
}
164
198
165
199
static int adltc2990_fetch_property_value (const struct device * dev ,
@@ -207,11 +241,11 @@ static int adltc2990_fetch_property_value(const struct device *dev,
207
241
return - EINVAL ;
208
242
}
209
243
210
- if (i2c_reg_read_byte_dt ( & cfg -> bus , msb_address , & msb_value )) {
244
+ if (adltc2990_reg_read_byte_dt ( dev , msb_address , & msb_value )) {
211
245
return - EIO ;
212
246
}
213
247
214
- if (i2c_reg_read_byte_dt ( & cfg -> bus , lsb_address , & lsb_value )) {
248
+ if (adltc2990_reg_read_byte_dt ( dev , lsb_address , & lsb_value )) {
215
249
return - EIO ;
216
250
}
217
251
@@ -595,6 +629,8 @@ static int adltc2990_init(const struct device *dev)
595
629
struct adltc2990_data * data = dev -> data ;
596
630
int err ;
597
631
632
+ k_sem_init (& data -> sem , 1 , 1 );
633
+
598
634
if (!i2c_is_ready_dt (& cfg -> bus )) {
599
635
LOG_ERR ("I2C bus %s not ready" , cfg -> bus .bus -> name );
600
636
return - ENODEV ;
@@ -604,8 +640,7 @@ static int adltc2990_init(const struct device *dev)
604
640
cfg -> measurement_mode [1 ] << 3 | cfg -> measurement_mode [0 ];
605
641
606
642
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." );
643
+ if (adltc2990_reg_write_byte_dt (dev , ADLTC2990_REG_CONTROL , ctrl_reg_setting )) {
609
644
return - EIO ;
610
645
}
611
646
0 commit comments