Skip to content

Commit f516970

Browse files
PeterBerendiCalcProgrammer1
authored andcommitted
Remove i2c_smbus_thread as mutex already prevents concurrent access
1 parent b0a08c7 commit f516970

2 files changed

Lines changed: 2 additions & 92 deletions

File tree

i2c_smbus/i2c_smbus.cpp

Lines changed: 2 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,16 @@
2121

2222
i2c_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

3632
i2c_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

4536
s32 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-
}

i2c_smbus/i2c_smbus.h

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,6 @@ class i2c_smbus_interface
8989
i2c_smbus_interface();
9090
virtual ~i2c_smbus_interface();
9191

92-
void i2c_smbus_thread_function();
93-
9492
//Functions derived from i2c-core.c
9593
s32 i2c_smbus_write_quick(u8 addr, u8 value);
9694
s32 i2c_smbus_read_byte(u8 addr);
@@ -116,28 +114,8 @@ class i2c_smbus_interface
116114
virtual s32 i2c_xfer(u8 addr, char read_write, int* size, u8* data) = 0;
117115

118116
private:
119-
std::thread * i2c_smbus_thread;
120-
std::atomic<bool> i2c_smbus_thread_running;
121-
122-
std::atomic<bool> i2c_smbus_start;
123-
std::condition_variable i2c_smbus_start_cv;
124-
std::mutex i2c_smbus_start_mutex;
125-
126-
std::atomic<bool> i2c_smbus_done;
127-
std::condition_variable i2c_smbus_done_cv;
128-
std::mutex i2c_smbus_done_mutex;
129-
130117
std::mutex i2c_smbus_xfer_mutex;
131118

132-
u8 i2c_addr;
133-
char i2c_read_write;
134-
u8 i2c_command;
135-
int i2c_size_smbus;
136-
int* i2c_size;
137-
i2c_smbus_data* i2c_data_smbus;
138-
u8* i2c_data;
139-
s32 i2c_ret;
140-
bool smbus_xfer;
141119
};
142120

143121
#endif /* I2C_SMBUS_H */

0 commit comments

Comments
 (0)