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