|
23 | 23 |
|
24 | 24 | #include <linux/acpi.h>
|
25 | 25 | #include <linux/clk.h>
|
| 26 | +#include <linux/cleanup.h> |
26 | 27 | #include <linux/completion.h>
|
27 | 28 | #include <linux/delay.h>
|
28 | 29 | #include <linux/dma-mapping.h>
|
@@ -891,13 +892,13 @@ static enum hrtimer_restart i2c_imx_slave_timeout(struct hrtimer *t)
|
891 | 892 | struct imx_i2c_struct *i2c_imx = container_of(t, struct imx_i2c_struct,
|
892 | 893 | slave_timer);
|
893 | 894 | unsigned int ctl, status;
|
894 |
| - unsigned long flags; |
895 | 895 |
|
896 |
| - spin_lock_irqsave(&i2c_imx->slave_lock, flags); |
| 896 | + guard(spinlock_irqsave)(&i2c_imx->slave_lock); |
| 897 | + |
897 | 898 | status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR);
|
898 | 899 | ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
|
899 | 900 | i2c_imx_slave_handle(i2c_imx, status, ctl);
|
900 |
| - spin_unlock_irqrestore(&i2c_imx->slave_lock, flags); |
| 901 | + |
901 | 902 | return HRTIMER_NORESTART;
|
902 | 903 | }
|
903 | 904 |
|
@@ -1126,32 +1127,26 @@ static irqreturn_t i2c_imx_isr(int irq, void *dev_id)
|
1126 | 1127 | {
|
1127 | 1128 | struct imx_i2c_struct *i2c_imx = dev_id;
|
1128 | 1129 | unsigned int ctl, status;
|
1129 |
| - unsigned long flags; |
1130 | 1130 |
|
1131 |
| - spin_lock_irqsave(&i2c_imx->slave_lock, flags); |
1132 |
| - status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); |
1133 |
| - ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); |
| 1131 | + scoped_guard(spinlock_irqsave, &i2c_imx->slave_lock) { |
| 1132 | + status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); |
| 1133 | + ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); |
| 1134 | + |
| 1135 | + if (!(status & I2SR_IIF)) |
| 1136 | + return IRQ_NONE; |
1134 | 1137 |
|
1135 |
| - if (status & I2SR_IIF) { |
1136 | 1138 | i2c_imx_clear_irq(i2c_imx, I2SR_IIF);
|
| 1139 | + |
1137 | 1140 | if (i2c_imx->slave) {
|
1138 |
| - if (!(ctl & I2CR_MSTA)) { |
1139 |
| - irqreturn_t ret; |
1140 |
| - |
1141 |
| - ret = i2c_imx_slave_handle(i2c_imx, |
1142 |
| - status, ctl); |
1143 |
| - spin_unlock_irqrestore(&i2c_imx->slave_lock, |
1144 |
| - flags); |
1145 |
| - return ret; |
1146 |
| - } |
| 1141 | + if (!(ctl & I2CR_MSTA)) |
| 1142 | + return i2c_imx_slave_handle(i2c_imx, |
| 1143 | + status, ctl); |
| 1144 | + |
1147 | 1145 | i2c_imx_slave_finish_op(i2c_imx);
|
1148 | 1146 | }
|
1149 |
| - spin_unlock_irqrestore(&i2c_imx->slave_lock, flags); |
1150 |
| - return i2c_imx_master_isr(i2c_imx, status); |
1151 | 1147 | }
|
1152 |
| - spin_unlock_irqrestore(&i2c_imx->slave_lock, flags); |
1153 | 1148 |
|
1154 |
| - return IRQ_NONE; |
| 1149 | + return i2c_imx_master_isr(i2c_imx, status); |
1155 | 1150 | }
|
1156 | 1151 |
|
1157 | 1152 | static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx,
|
|
0 commit comments