Skip to content

Commit 5029a22

Browse files
soniczWolfram Sang
authored andcommitted
i2c: bfin-twi: remove unnecessary Blackfin SSYNC from the driver
Put necessary SSYNC code into blackfin twi arch header. The generic TWI driver should not contain any architecture specific code. Signed-off-by: Sonic Zhang <[email protected]> Signed-off-by: Wolfram Sang <[email protected]>
1 parent 45126da commit 5029a22

File tree

2 files changed

+21
-16
lines changed

2 files changed

+21
-16
lines changed

arch/blackfin/include/asm/bfin_twi.h

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ static inline void write_##reg_name(struct bfin_twi_iface *iface, u16 v) \
1818
{ bfin_write16(&iface->regs_base->reg, v); }
1919

2020
DEFINE_TWI_REG(CLKDIV, clkdiv)
21-
DEFINE_TWI_REG(CONTROL, control)
2221
DEFINE_TWI_REG(SLAVE_CTL, slave_ctl)
2322
DEFINE_TWI_REG(SLAVE_STAT, slave_stat)
2423
DEFINE_TWI_REG(SLAVE_ADDR, slave_addr)
@@ -27,7 +26,6 @@ DEFINE_TWI_REG(MASTER_STAT, master_stat)
2726
DEFINE_TWI_REG(MASTER_ADDR, master_addr)
2827
DEFINE_TWI_REG(INT_STAT, int_stat)
2928
DEFINE_TWI_REG(INT_MASK, int_mask)
30-
DEFINE_TWI_REG(FIFO_CTL, fifo_ctl)
3129
DEFINE_TWI_REG(FIFO_STAT, fifo_stat)
3230
DEFINE_TWI_REG(XMT_DATA8, xmt_data8)
3331
DEFINE_TWI_REG(XMT_DATA16, xmt_data16)
@@ -60,4 +58,25 @@ static inline u16 read_RCV_DATA16(struct bfin_twi_iface *iface)
6058
}
6159
#endif
6260

61+
static inline u16 read_FIFO_CTL(struct bfin_twi_iface *iface)
62+
{
63+
return bfin_read16(&iface->regs_base->fifo_ctl);
64+
}
65+
66+
static inline void write_FIFO_CTL(struct bfin_twi_iface *iface, u16 v)
67+
{
68+
bfin_write16(&iface->regs_base->fifo_ctl, v);
69+
SSYNC();
70+
}
71+
72+
static inline u16 read_CONTROL(struct bfin_twi_iface *iface)
73+
{
74+
return bfin_read16(&iface->regs_base->control);
75+
}
76+
77+
static inline void write_CONTROL(struct bfin_twi_iface *iface, u16 v)
78+
{
79+
SSYNC();
80+
bfin_write16(&iface->regs_base->control, v);
81+
}
6382
#endif

drivers/i2c/busses/i2c-bfin-twi.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ static void bfin_twi_handle_interrupt(struct bfin_twi_iface *iface,
6565
/* Transmit next data */
6666
while (iface->writeNum > 0 &&
6767
(read_FIFO_STAT(iface) & XMTSTAT) != XMT_FULL) {
68-
SSYNC();
6968
write_XMT_DATA8(iface, *(iface->transPtr++));
7069
iface->writeNum--;
7170
}
@@ -248,7 +247,6 @@ static irqreturn_t bfin_twi_interrupt_entry(int irq, void *dev_id)
248247
/* Clear interrupt status */
249248
write_INT_STAT(iface, twi_int_status);
250249
bfin_twi_handle_interrupt(iface, twi_int_status);
251-
SSYNC();
252250
}
253251
spin_unlock_irqrestore(&iface->lock, flags);
254252
return IRQ_HANDLED;
@@ -294,9 +292,7 @@ static int bfin_twi_do_master_xfer(struct i2c_adapter *adap,
294292
* discarded before start a new operation.
295293
*/
296294
write_FIFO_CTL(iface, 0x3);
297-
SSYNC();
298295
write_FIFO_CTL(iface, 0);
299-
SSYNC();
300296

301297
if (pmsg->flags & I2C_M_RD)
302298
iface->read_write = I2C_SMBUS_READ;
@@ -306,7 +302,6 @@ static int bfin_twi_do_master_xfer(struct i2c_adapter *adap,
306302
if (iface->writeNum > 0) {
307303
write_XMT_DATA8(iface, *(iface->transPtr++));
308304
iface->writeNum--;
309-
SSYNC();
310305
}
311306
}
312307

@@ -315,7 +310,6 @@ static int bfin_twi_do_master_xfer(struct i2c_adapter *adap,
315310

316311
/* Interrupt mask . Enable XMT, RCV interrupt */
317312
write_INT_MASK(iface, MCOMP | MERR | RCVSERV | XMTSERV);
318-
SSYNC();
319313

320314
if (pmsg->len <= 255)
321315
write_MASTER_CTL(iface, pmsg->len << 6);
@@ -329,7 +323,6 @@ static int bfin_twi_do_master_xfer(struct i2c_adapter *adap,
329323
(iface->msg_num > 1 ? RSTART : 0) |
330324
((iface->read_write == I2C_SMBUS_READ) ? MDIR : 0) |
331325
((CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ > 100) ? FAST : 0));
332-
SSYNC();
333326

334327
while (!iface->result) {
335328
if (!wait_for_completion_timeout(&iface->complete,
@@ -453,23 +446,20 @@ int bfin_twi_do_smbus_xfer(struct i2c_adapter *adap, u16 addr,
453446
* start a new operation.
454447
*/
455448
write_FIFO_CTL(iface, 0x3);
456-
SSYNC();
457449
write_FIFO_CTL(iface, 0);
458450

459451
/* clear int stat */
460452
write_INT_STAT(iface, MERR | MCOMP | XMTSERV | RCVSERV);
461453

462454
/* Set Transmit device address */
463455
write_MASTER_ADDR(iface, addr);
464-
SSYNC();
465456

466457
switch (iface->cur_mode) {
467458
case TWI_I2C_MODE_STANDARDSUB:
468459
write_XMT_DATA8(iface, iface->command);
469460
write_INT_MASK(iface, MCOMP | MERR |
470461
((iface->read_write == I2C_SMBUS_READ) ?
471462
RCVSERV : XMTSERV));
472-
SSYNC();
473463

474464
if (iface->writeNum + 1 <= 255)
475465
write_MASTER_CTL(iface, (iface->writeNum + 1) << 6);
@@ -484,7 +474,6 @@ int bfin_twi_do_smbus_xfer(struct i2c_adapter *adap, u16 addr,
484474
case TWI_I2C_MODE_COMBINED:
485475
write_XMT_DATA8(iface, iface->command);
486476
write_INT_MASK(iface, MCOMP | MERR | RCVSERV | XMTSERV);
487-
SSYNC();
488477

489478
if (iface->writeNum > 0)
490479
write_MASTER_CTL(iface, (iface->writeNum + 1) << 6);
@@ -531,15 +520,13 @@ int bfin_twi_do_smbus_xfer(struct i2c_adapter *adap, u16 addr,
531520
write_INT_MASK(iface, MCOMP | MERR |
532521
((iface->read_write == I2C_SMBUS_READ) ?
533522
RCVSERV : XMTSERV));
534-
SSYNC();
535523

536524
/* Master enable */
537525
write_MASTER_CTL(iface, read_MASTER_CTL(iface) | MEN |
538526
((iface->read_write == I2C_SMBUS_READ) ? MDIR : 0) |
539527
((CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ > 100) ? FAST : 0));
540528
break;
541529
}
542-
SSYNC();
543530

544531
while (!iface->result) {
545532
if (!wait_for_completion_timeout(&iface->complete,
@@ -704,7 +691,6 @@ static int i2c_bfin_twi_probe(struct platform_device *pdev)
704691

705692
/* Enable TWI */
706693
write_CONTROL(iface, read_CONTROL(iface) | TWI_ENA);
707-
SSYNC();
708694

709695
rc = i2c_add_numbered_adapter(p_adap);
710696
if (rc < 0) {

0 commit comments

Comments
 (0)