2121
2222i2c_smbus_interface::i2c_smbus_interface ()
2323{
24- i2c_smbus_start = false ;
25- i2c_smbus_done = false ;
2624 this ->port_id = -1 ;
2725 this ->pci_device = -1 ;
2826 this ->pci_vendor = -1 ;
2927 this ->pci_subsystem_device = -1 ;
3028 this ->pci_subsystem_vendor = -1 ;
3129 this ->bus_id = -1 ;
32- i2c_smbus_thread_running = true ;
33- i2c_smbus_thread = new std::thread (&i2c_smbus_interface::i2c_smbus_thread_function, this );
3430}
3531
3632i2c_smbus_interface::~i2c_smbus_interface ()
3733{
38- i2c_smbus_thread_running = false ;
39- i2c_smbus_start = true ;
40- i2c_smbus_start_cv.notify_all ();
41- i2c_smbus_thread->join ();
42- delete i2c_smbus_thread;
4334}
4435
4536s32 i2c_smbus_interface::i2c_smbus_write_quick (u8 addr, u8 value)
@@ -166,22 +157,7 @@ s32 i2c_smbus_interface::i2c_smbus_xfer_call(u8 addr, char read_write, u8 comman
166157{
167158 i2c_smbus_xfer_mutex.lock ();
168159
169- i2c_addr = addr;
170- i2c_read_write = read_write;
171- i2c_command = command;
172- i2c_size_smbus = size;
173- i2c_data_smbus = data;
174- smbus_xfer = true ;
175-
176- std::unique_lock<std::mutex> start_lock (i2c_smbus_start_mutex);
177- i2c_smbus_start = true ;
178- i2c_smbus_start_cv.notify_all ();
179- start_lock.unlock ();
180-
181- std::unique_lock<std::mutex> done_lock (i2c_smbus_done_mutex);
182-
183- i2c_smbus_done_cv.wait (done_lock, [this ]{ return i2c_smbus_done.load (); });
184- i2c_smbus_done = false ;
160+ s32 i2c_ret = i2c_smbus_xfer (addr, read_write, command, size, data);
185161
186162 i2c_smbus_xfer_mutex.unlock ();
187163
@@ -192,21 +168,7 @@ s32 i2c_smbus_interface::i2c_xfer_call(u8 addr, char read_write, int* size, u8 *
192168{
193169 i2c_smbus_xfer_mutex.lock ();
194170
195- i2c_addr = addr;
196- i2c_read_write = read_write;
197- i2c_size = size;
198- i2c_data = data;
199- smbus_xfer = false ;
200-
201- std::unique_lock<std::mutex> start_lock (i2c_smbus_start_mutex);
202- i2c_smbus_start = true ;
203- i2c_smbus_start_cv.notify_all ();
204- start_lock.unlock ();
205-
206- std::unique_lock<std::mutex> done_lock (i2c_smbus_done_mutex);
207-
208- i2c_smbus_done_cv.wait (done_lock, [this ]{ return i2c_smbus_done.load (); });
209- i2c_smbus_done = false ;
171+ s32 i2c_ret = i2c_xfer (addr, read_write, size, data);
210172
211173 i2c_smbus_xfer_mutex.unlock ();
212174
@@ -222,33 +184,3 @@ s32 i2c_smbus_interface::i2c_write_block(u8 addr, int size, u8 *data)
222184{
223185 return i2c_xfer_call (addr, I2C_SMBUS_WRITE, &size, data);
224186}
225-
226- void i2c_smbus_interface::i2c_smbus_thread_function ()
227- {
228- while (1 )
229- {
230- std::unique_lock<std::mutex> start_lock (i2c_smbus_start_mutex);
231-
232- i2c_smbus_start_cv.wait (start_lock, [this ]{ return i2c_smbus_start.load (); });
233- i2c_smbus_start = false ;
234-
235- if (!i2c_smbus_thread_running.load ())
236- {
237- break ;
238- }
239-
240- if (smbus_xfer)
241- {
242- i2c_ret = i2c_smbus_xfer (i2c_addr, i2c_read_write, i2c_command, i2c_size_smbus, i2c_data_smbus);
243- }
244- else
245- {
246- i2c_ret = i2c_xfer (i2c_addr, i2c_read_write, i2c_size, i2c_data);
247- }
248-
249- std::unique_lock<std::mutex> done_lock (i2c_smbus_done_mutex);
250- i2c_smbus_done = true ;
251- i2c_smbus_done_cv.notify_all ();
252- done_lock.unlock ();
253- }
254- }
0 commit comments