hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/drivers/i2c/busses/i2c-bcm-iproc.c
....@@ -242,13 +242,14 @@
242242 u32 offset)
243243 {
244244 u32 val;
245
+ unsigned long flags;
245246
246247 if (iproc_i2c->idm_base) {
247
- spin_lock(&iproc_i2c->idm_lock);
248
+ spin_lock_irqsave(&iproc_i2c->idm_lock, flags);
248249 writel(iproc_i2c->ape_addr_mask,
249250 iproc_i2c->idm_base + IDM_CTRL_DIRECT_OFFSET);
250251 val = readl(iproc_i2c->base + offset);
251
- spin_unlock(&iproc_i2c->idm_lock);
252
+ spin_unlock_irqrestore(&iproc_i2c->idm_lock, flags);
252253 } else {
253254 val = readl(iproc_i2c->base + offset);
254255 }
....@@ -259,12 +260,14 @@
259260 static inline void iproc_i2c_wr_reg(struct bcm_iproc_i2c_dev *iproc_i2c,
260261 u32 offset, u32 val)
261262 {
263
+ unsigned long flags;
264
+
262265 if (iproc_i2c->idm_base) {
263
- spin_lock(&iproc_i2c->idm_lock);
266
+ spin_lock_irqsave(&iproc_i2c->idm_lock, flags);
264267 writel(iproc_i2c->ape_addr_mask,
265268 iproc_i2c->idm_base + IDM_CTRL_DIRECT_OFFSET);
266269 writel(val, iproc_i2c->base + offset);
267
- spin_unlock(&iproc_i2c->idm_lock);
270
+ spin_unlock_irqrestore(&iproc_i2c->idm_lock, flags);
268271 } else {
269272 writel(val, iproc_i2c->base + offset);
270273 }