2  * Blackfin On-Chip Two Wire Interface Driver
 
   4  * Copyright 2005-2007 Analog Devices Inc.
 
   6  * Enter bugs at http://blackfin.uclinux.org/
 
   8  * Licensed under the GPL-2 or later.
 
  11 #include <linux/module.h>
 
  12 #include <linux/kernel.h>
 
  13 #include <linux/init.h>
 
  14 #include <linux/i2c.h>
 
  16 #include <linux/timer.h>
 
  17 #include <linux/spinlock.h>
 
  18 #include <linux/completion.h>
 
  19 #include <linux/interrupt.h>
 
  20 #include <linux/platform_device.h>
 
  22 #include <asm/blackfin.h>
 
  23 #include <asm/portmux.h>
 
  26 #define POLL_TIMEOUT       (2 * HZ)
 
  29 #define TWI_I2C_MODE_STANDARD           1
 
  30 #define TWI_I2C_MODE_STANDARDSUB        2
 
  31 #define TWI_I2C_MODE_COMBINED           3
 
  32 #define TWI_I2C_MODE_REPEAT             4
 
  34 struct bfin_twi_iface {
 
  46         struct timer_list       timeout_timer;
 
  47         struct i2c_adapter      adap;
 
  48         struct completion       complete;
 
  54         void __iomem            *regs_base;
 
  58 #define DEFINE_TWI_REG(reg, off) \
 
  59 static inline u16 read_##reg(struct bfin_twi_iface *iface) \
 
  60         { return bfin_read16(iface->regs_base + (off)); } \
 
  61 static inline void write_##reg(struct bfin_twi_iface *iface, u16 v) \
 
  62         { bfin_write16(iface->regs_base + (off), v); }
 
  64 DEFINE_TWI_REG(CLKDIV, 0x00)
 
  65 DEFINE_TWI_REG(CONTROL, 0x04)
 
  66 DEFINE_TWI_REG(SLAVE_CTL, 0x08)
 
  67 DEFINE_TWI_REG(SLAVE_STAT, 0x0C)
 
  68 DEFINE_TWI_REG(SLAVE_ADDR, 0x10)
 
  69 DEFINE_TWI_REG(MASTER_CTL, 0x14)
 
  70 DEFINE_TWI_REG(MASTER_STAT, 0x18)
 
  71 DEFINE_TWI_REG(MASTER_ADDR, 0x1C)
 
  72 DEFINE_TWI_REG(INT_STAT, 0x20)
 
  73 DEFINE_TWI_REG(INT_MASK, 0x24)
 
  74 DEFINE_TWI_REG(FIFO_CTL, 0x28)
 
  75 DEFINE_TWI_REG(FIFO_STAT, 0x2C)
 
  76 DEFINE_TWI_REG(XMT_DATA8, 0x80)
 
  77 DEFINE_TWI_REG(XMT_DATA16, 0x84)
 
  78 DEFINE_TWI_REG(RCV_DATA8, 0x88)
 
  79 DEFINE_TWI_REG(RCV_DATA16, 0x8C)
 
  81 static const u16 pin_req[2][3] = {
 
  82         {P_TWI0_SCL, P_TWI0_SDA, 0},
 
  83         {P_TWI1_SCL, P_TWI1_SDA, 0},
 
  86 static void bfin_twi_handle_interrupt(struct bfin_twi_iface *iface)
 
  88         unsigned short twi_int_status = read_INT_STAT(iface);
 
  89         unsigned short mast_stat = read_MASTER_STAT(iface);
 
  91         if (twi_int_status & XMTSERV) {
 
  92                 /* Transmit next data */
 
  93                 if (iface->writeNum > 0) {
 
  94                         write_XMT_DATA8(iface, *(iface->transPtr++));
 
  97                 /* start receive immediately after complete sending in
 
 100                 else if (iface->cur_mode == TWI_I2C_MODE_COMBINED)
 
 101                         write_MASTER_CTL(iface,
 
 102                                 read_MASTER_CTL(iface) | MDIR | RSTART);
 
 103                 else if (iface->manual_stop)
 
 104                         write_MASTER_CTL(iface,
 
 105                                 read_MASTER_CTL(iface) | STOP);
 
 106                 else if (iface->cur_mode == TWI_I2C_MODE_REPEAT &&
 
 107                                 iface->cur_msg+1 < iface->msg_num)
 
 108                         write_MASTER_CTL(iface,
 
 109                                 read_MASTER_CTL(iface) | RSTART);
 
 112                 write_INT_STAT(iface, XMTSERV);
 
 115         if (twi_int_status & RCVSERV) {
 
 116                 if (iface->readNum > 0) {
 
 117                         /* Receive next data */
 
 118                         *(iface->transPtr) = read_RCV_DATA8(iface);
 
 119                         if (iface->cur_mode == TWI_I2C_MODE_COMBINED) {
 
 120                                 /* Change combine mode into sub mode after
 
 123                                 iface->cur_mode = TWI_I2C_MODE_STANDARDSUB;
 
 124                                 /* Get read number from first byte in block
 
 127                                 if (iface->readNum == 1 && iface->manual_stop)
 
 128                                         iface->readNum = *iface->transPtr + 1;
 
 132                 } else if (iface->manual_stop) {
 
 133                         write_MASTER_CTL(iface,
 
 134                                 read_MASTER_CTL(iface) | STOP);
 
 136                 } else if (iface->cur_mode == TWI_I2C_MODE_REPEAT &&
 
 137                                 iface->cur_msg+1 < iface->msg_num) {
 
 138                         write_MASTER_CTL(iface,
 
 139                                 read_MASTER_CTL(iface) | RSTART);
 
 142                 /* Clear interrupt source */
 
 143                 write_INT_STAT(iface, RCVSERV);
 
 146         if (twi_int_status & MERR) {
 
 147                 write_INT_STAT(iface, MERR);
 
 148                 write_INT_MASK(iface, 0);
 
 149                 write_MASTER_STAT(iface, 0x3e);
 
 150                 write_MASTER_CTL(iface, 0);
 
 152                 iface->result = -EIO;
 
 153                 /* if both err and complete int stats are set, return proper
 
 156                 if (twi_int_status & MCOMP) {
 
 157                         write_INT_STAT(iface, MCOMP);
 
 158                         write_INT_MASK(iface, 0);
 
 159                         write_MASTER_CTL(iface, 0);
 
 161                         /* If it is a quick transfer, only address bug no data,
 
 162                          * not an err, return 1.
 
 164                         if (iface->writeNum == 0 && (mast_stat & BUFRDERR))
 
 166                         /* If address not acknowledged return -1,
 
 169                         else if (!(mast_stat & ANAK))
 
 172                 complete(&iface->complete);
 
 175         if (twi_int_status & MCOMP) {
 
 176                 write_INT_STAT(iface, MCOMP);
 
 178                 if (iface->cur_mode == TWI_I2C_MODE_COMBINED) {
 
 179                         if (iface->readNum == 0) {
 
 180                                 /* set the read number to 1 and ask for manual
 
 181                                  * stop in block combine mode
 
 184                                 iface->manual_stop = 1;
 
 185                                 write_MASTER_CTL(iface,
 
 186                                         read_MASTER_CTL(iface) | (0xff << 6));
 
 188                                 /* set the readd number in other
 
 191                                 write_MASTER_CTL(iface,
 
 192                                         (read_MASTER_CTL(iface) &
 
 194                                         (iface->readNum << 6));
 
 196                         /* remove restart bit and enable master receive */
 
 197                         write_MASTER_CTL(iface,
 
 198                                 read_MASTER_CTL(iface) & ~RSTART);
 
 199                         write_MASTER_CTL(iface,
 
 200                                 read_MASTER_CTL(iface) | MEN | MDIR);
 
 202                 } else if (iface->cur_mode == TWI_I2C_MODE_REPEAT &&
 
 203                                 iface->cur_msg+1 < iface->msg_num) {
 
 205                         iface->transPtr = iface->pmsg[iface->cur_msg].buf;
 
 206                         iface->writeNum = iface->readNum =
 
 207                                 iface->pmsg[iface->cur_msg].len;
 
 208                         /* Set Transmit device address */
 
 209                         write_MASTER_ADDR(iface,
 
 210                                 iface->pmsg[iface->cur_msg].addr);
 
 211                         if (iface->pmsg[iface->cur_msg].flags & I2C_M_RD)
 
 212                                 iface->read_write = I2C_SMBUS_READ;
 
 214                                 iface->read_write = I2C_SMBUS_WRITE;
 
 215                                 /* Transmit first data */
 
 216                                 if (iface->writeNum > 0) {
 
 217                                         write_XMT_DATA8(iface,
 
 218                                                 *(iface->transPtr++));
 
 224                         if (iface->pmsg[iface->cur_msg].len <= 255)
 
 225                                 write_MASTER_CTL(iface,
 
 226                                 iface->pmsg[iface->cur_msg].len << 6);
 
 228                                 write_MASTER_CTL(iface, 0xff << 6);
 
 229                                 iface->manual_stop = 1;
 
 231                         /* remove restart bit and enable master receive */
 
 232                         write_MASTER_CTL(iface,
 
 233                                 read_MASTER_CTL(iface) & ~RSTART);
 
 234                         write_MASTER_CTL(iface, read_MASTER_CTL(iface) |
 
 235                                 MEN | ((iface->read_write == I2C_SMBUS_READ) ?
 
 240                         write_INT_MASK(iface, 0);
 
 241                         write_MASTER_CTL(iface, 0);
 
 243                         complete(&iface->complete);
 
 248 /* Interrupt handler */
 
 249 static irqreturn_t bfin_twi_interrupt_entry(int irq, void *dev_id)
 
 251         struct bfin_twi_iface *iface = dev_id;
 
 254         spin_lock_irqsave(&iface->lock, flags);
 
 255         del_timer(&iface->timeout_timer);
 
 256         bfin_twi_handle_interrupt(iface);
 
 257         spin_unlock_irqrestore(&iface->lock, flags);
 
 261 static void bfin_twi_timeout(unsigned long data)
 
 263         struct bfin_twi_iface *iface = (struct bfin_twi_iface *)data;
 
 266         spin_lock_irqsave(&iface->lock, flags);
 
 267         bfin_twi_handle_interrupt(iface);
 
 268         if (iface->result == 0) {
 
 269                 iface->timeout_count--;
 
 270                 if (iface->timeout_count > 0) {
 
 271                         iface->timeout_timer.expires = jiffies + POLL_TIMEOUT;
 
 272                         add_timer(&iface->timeout_timer);
 
 275                         complete(&iface->complete);
 
 278         spin_unlock_irqrestore(&iface->lock, flags);
 
 282  * Generic i2c master transfer entrypoint
 
 284 static int bfin_twi_master_xfer(struct i2c_adapter *adap,
 
 285                                 struct i2c_msg *msgs, int num)
 
 287         struct bfin_twi_iface *iface = adap->algo_data;
 
 288         struct i2c_msg *pmsg;
 
 291         if (!(read_CONTROL(iface) & TWI_ENA))
 
 294         while (read_MASTER_STAT(iface) & BUSBUSY)
 
 298         iface->msg_num = num;
 
 302         if (pmsg->flags & I2C_M_TEN) {
 
 303                 dev_err(&adap->dev, "10 bits addr not supported!\n");
 
 307         iface->cur_mode = TWI_I2C_MODE_REPEAT;
 
 308         iface->manual_stop = 0;
 
 309         iface->transPtr = pmsg->buf;
 
 310         iface->writeNum = iface->readNum = pmsg->len;
 
 312         iface->timeout_count = 10;
 
 313         init_completion(&(iface->complete));
 
 314         /* Set Transmit device address */
 
 315         write_MASTER_ADDR(iface, pmsg->addr);
 
 317         /* FIFO Initiation. Data in FIFO should be
 
 318          *  discarded before start a new operation.
 
 320         write_FIFO_CTL(iface, 0x3);
 
 322         write_FIFO_CTL(iface, 0);
 
 325         if (pmsg->flags & I2C_M_RD)
 
 326                 iface->read_write = I2C_SMBUS_READ;
 
 328                 iface->read_write = I2C_SMBUS_WRITE;
 
 329                 /* Transmit first data */
 
 330                 if (iface->writeNum > 0) {
 
 331                         write_XMT_DATA8(iface, *(iface->transPtr++));
 
 338         write_INT_STAT(iface, MERR | MCOMP | XMTSERV | RCVSERV);
 
 340         /* Interrupt mask . Enable XMT, RCV interrupt */
 
 341         write_INT_MASK(iface, MCOMP | MERR | RCVSERV | XMTSERV);
 
 344         if (pmsg->len <= 255)
 
 345                 write_MASTER_CTL(iface, pmsg->len << 6);
 
 347                 write_MASTER_CTL(iface, 0xff << 6);
 
 348                 iface->manual_stop = 1;
 
 351         iface->timeout_timer.expires = jiffies + POLL_TIMEOUT;
 
 352         add_timer(&iface->timeout_timer);
 
 355         write_MASTER_CTL(iface, read_MASTER_CTL(iface) | MEN |
 
 356                 ((iface->read_write == I2C_SMBUS_READ) ? MDIR : 0) |
 
 357                 ((CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ > 100) ? FAST : 0));
 
 360         wait_for_completion(&iface->complete);
 
 371  * SMBus type transfer entrypoint
 
 374 int bfin_twi_smbus_xfer(struct i2c_adapter *adap, u16 addr,
 
 375                         unsigned short flags, char read_write,
 
 376                         u8 command, int size, union i2c_smbus_data *data)
 
 378         struct bfin_twi_iface *iface = adap->algo_data;
 
 381         if (!(read_CONTROL(iface) & TWI_ENA))
 
 384         while (read_MASTER_STAT(iface) & BUSBUSY)
 
 390         /* Prepare datas & select mode */
 
 392         case I2C_SMBUS_QUICK:
 
 393                 iface->transPtr = NULL;
 
 394                 iface->cur_mode = TWI_I2C_MODE_STANDARD;
 
 398                         iface->transPtr = NULL;
 
 400                         if (read_write == I2C_SMBUS_READ)
 
 404                         iface->transPtr = &data->byte;
 
 406                 iface->cur_mode = TWI_I2C_MODE_STANDARD;
 
 408         case I2C_SMBUS_BYTE_DATA:
 
 409                 if (read_write == I2C_SMBUS_READ) {
 
 411                         iface->cur_mode = TWI_I2C_MODE_COMBINED;
 
 414                         iface->cur_mode = TWI_I2C_MODE_STANDARDSUB;
 
 416                 iface->transPtr = &data->byte;
 
 418         case I2C_SMBUS_WORD_DATA:
 
 419                 if (read_write == I2C_SMBUS_READ) {
 
 421                         iface->cur_mode = TWI_I2C_MODE_COMBINED;
 
 424                         iface->cur_mode = TWI_I2C_MODE_STANDARDSUB;
 
 426                 iface->transPtr = (u8 *)&data->word;
 
 428         case I2C_SMBUS_PROC_CALL:
 
 431                 iface->cur_mode = TWI_I2C_MODE_COMBINED;
 
 432                 iface->transPtr = (u8 *)&data->word;
 
 434         case I2C_SMBUS_BLOCK_DATA:
 
 435                 if (read_write == I2C_SMBUS_READ) {
 
 437                         iface->cur_mode = TWI_I2C_MODE_COMBINED;
 
 439                         iface->writeNum = data->block[0] + 1;
 
 440                         iface->cur_mode = TWI_I2C_MODE_STANDARDSUB;
 
 442                 iface->transPtr = data->block;
 
 449         iface->manual_stop = 0;
 
 450         iface->read_write = read_write;
 
 451         iface->command = command;
 
 452         iface->timeout_count = 10;
 
 453         init_completion(&(iface->complete));
 
 455         /* FIFO Initiation. Data in FIFO should be discarded before
 
 456          * start a new operation.
 
 458         write_FIFO_CTL(iface, 0x3);
 
 460         write_FIFO_CTL(iface, 0);
 
 463         write_INT_STAT(iface, MERR | MCOMP | XMTSERV | RCVSERV);
 
 465         /* Set Transmit device address */
 
 466         write_MASTER_ADDR(iface, addr);
 
 469         iface->timeout_timer.expires = jiffies + POLL_TIMEOUT;
 
 470         add_timer(&iface->timeout_timer);
 
 472         switch (iface->cur_mode) {
 
 473         case TWI_I2C_MODE_STANDARDSUB:
 
 474                 write_XMT_DATA8(iface, iface->command);
 
 475                 write_INT_MASK(iface, MCOMP | MERR |
 
 476                         ((iface->read_write == I2C_SMBUS_READ) ?
 
 480                 if (iface->writeNum + 1 <= 255)
 
 481                         write_MASTER_CTL(iface, (iface->writeNum + 1) << 6);
 
 483                         write_MASTER_CTL(iface, 0xff << 6);
 
 484                         iface->manual_stop = 1;
 
 487                 write_MASTER_CTL(iface, read_MASTER_CTL(iface) | MEN |
 
 488                         ((CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ>100) ? FAST : 0));
 
 490         case TWI_I2C_MODE_COMBINED:
 
 491                 write_XMT_DATA8(iface, iface->command);
 
 492                 write_INT_MASK(iface, MCOMP | MERR | RCVSERV | XMTSERV);
 
 495                 if (iface->writeNum > 0)
 
 496                         write_MASTER_CTL(iface, (iface->writeNum + 1) << 6);
 
 498                         write_MASTER_CTL(iface, 0x1 << 6);
 
 500                 write_MASTER_CTL(iface, read_MASTER_CTL(iface) | MEN |
 
 501                         ((CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ>100) ? FAST : 0));
 
 504                 write_MASTER_CTL(iface, 0);
 
 505                 if (size != I2C_SMBUS_QUICK) {
 
 506                         /* Don't access xmit data register when this is a
 
 509                         if (iface->read_write != I2C_SMBUS_READ) {
 
 510                                 if (iface->writeNum > 0) {
 
 511                                         write_XMT_DATA8(iface,
 
 512                                                 *(iface->transPtr++));
 
 513                                         if (iface->writeNum <= 255)
 
 514                                                 write_MASTER_CTL(iface,
 
 515                                                         iface->writeNum << 6);
 
 517                                                 write_MASTER_CTL(iface,
 
 519                                                 iface->manual_stop = 1;
 
 523                                         write_XMT_DATA8(iface, iface->command);
 
 524                                         write_MASTER_CTL(iface, 1 << 6);
 
 527                                 if (iface->readNum > 0 && iface->readNum <= 255)
 
 528                                         write_MASTER_CTL(iface,
 
 529                                                 iface->readNum << 6);
 
 530                                 else if (iface->readNum > 255) {
 
 531                                         write_MASTER_CTL(iface, 0xff << 6);
 
 532                                         iface->manual_stop = 1;
 
 534                                         del_timer(&iface->timeout_timer);
 
 539                 write_INT_MASK(iface, MCOMP | MERR |
 
 540                         ((iface->read_write == I2C_SMBUS_READ) ?
 
 545                 write_MASTER_CTL(iface, read_MASTER_CTL(iface) | MEN |
 
 546                         ((iface->read_write == I2C_SMBUS_READ) ? MDIR : 0) |
 
 547                         ((CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ > 100) ? FAST : 0));
 
 552         wait_for_completion(&iface->complete);
 
 554         rc = (iface->result >= 0) ? 0 : -1;
 
 560  * Return what the adapter supports
 
 562 static u32 bfin_twi_functionality(struct i2c_adapter *adap)
 
 564         return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
 
 565                I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
 
 566                I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_PROC_CALL |
 
 570 static struct i2c_algorithm bfin_twi_algorithm = {
 
 571         .master_xfer   = bfin_twi_master_xfer,
 
 572         .smbus_xfer    = bfin_twi_smbus_xfer,
 
 573         .functionality = bfin_twi_functionality,
 
 576 static int i2c_bfin_twi_suspend(struct platform_device *pdev, pm_message_t state)
 
 578         struct bfin_twi_iface *iface = platform_get_drvdata(pdev);
 
 580         iface->saved_clkdiv = read_CLKDIV(iface);
 
 581         iface->saved_control = read_CONTROL(iface);
 
 583         free_irq(iface->irq, iface);
 
 586         write_CONTROL(iface, iface->saved_control & ~TWI_ENA);
 
 591 static int i2c_bfin_twi_resume(struct platform_device *pdev)
 
 593         struct bfin_twi_iface *iface = platform_get_drvdata(pdev);
 
 595         int rc = request_irq(iface->irq, bfin_twi_interrupt_entry,
 
 596                 IRQF_DISABLED, pdev->name, iface);
 
 598                 dev_err(&pdev->dev, "Can't get IRQ %d !\n", iface->irq);
 
 602         /* Resume TWI interface clock as specified */
 
 603         write_CLKDIV(iface, iface->saved_clkdiv);
 
 606         write_CONTROL(iface, iface->saved_control);
 
 611 static int i2c_bfin_twi_probe(struct platform_device *pdev)
 
 613         struct bfin_twi_iface *iface;
 
 614         struct i2c_adapter *p_adap;
 
 615         struct resource *res;
 
 618         iface = kzalloc(sizeof(struct bfin_twi_iface), GFP_KERNEL);
 
 620                 dev_err(&pdev->dev, "Cannot allocate memory\n");
 
 622                 goto out_error_nomem;
 
 625         spin_lock_init(&(iface->lock));
 
 627         /* Find and map our resources */
 
 628         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 
 630                 dev_err(&pdev->dev, "Cannot get IORESOURCE_MEM\n");
 
 632                 goto out_error_get_res;
 
 635         iface->regs_base = ioremap(res->start, res->end - res->start + 1);
 
 636         if (iface->regs_base == NULL) {
 
 637                 dev_err(&pdev->dev, "Cannot map IO\n");
 
 639                 goto out_error_ioremap;
 
 642         iface->irq = platform_get_irq(pdev, 0);
 
 643         if (iface->irq < 0) {
 
 644                 dev_err(&pdev->dev, "No IRQ specified\n");
 
 646                 goto out_error_no_irq;
 
 649         init_timer(&(iface->timeout_timer));
 
 650         iface->timeout_timer.function = bfin_twi_timeout;
 
 651         iface->timeout_timer.data = (unsigned long)iface;
 
 653         p_adap = &iface->adap;
 
 654         p_adap->id = I2C_HW_BLACKFIN;
 
 655         p_adap->nr = pdev->id;
 
 656         strlcpy(p_adap->name, pdev->name, sizeof(p_adap->name));
 
 657         p_adap->algo = &bfin_twi_algorithm;
 
 658         p_adap->algo_data = iface;
 
 659         p_adap->class = I2C_CLASS_ALL;
 
 660         p_adap->dev.parent = &pdev->dev;
 
 662         rc = peripheral_request_list(pin_req[pdev->id], "i2c-bfin-twi");
 
 664                 dev_err(&pdev->dev, "Can't setup pin mux!\n");
 
 665                 goto out_error_pin_mux;
 
 668         rc = request_irq(iface->irq, bfin_twi_interrupt_entry,
 
 669                 IRQF_DISABLED, pdev->name, iface);
 
 671                 dev_err(&pdev->dev, "Can't get IRQ %d !\n", iface->irq);
 
 673                 goto out_error_req_irq;
 
 676         /* Set TWI internal clock as 10MHz */
 
 677         write_CONTROL(iface, ((get_sclk() / 1024 / 1024 + 5) / 10) & 0x7F);
 
 679         /* Set Twi interface clock as specified */
 
 680         write_CLKDIV(iface, ((5*1024 / CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ)
 
 681                         << 8) | ((5*1024 / CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ)
 
 685         write_CONTROL(iface, read_CONTROL(iface) | TWI_ENA);
 
 688         rc = i2c_add_numbered_adapter(p_adap);
 
 690                 dev_err(&pdev->dev, "Can't add i2c adapter!\n");
 
 691                 goto out_error_add_adapter;
 
 694         platform_set_drvdata(pdev, iface);
 
 696         dev_info(&pdev->dev, "Blackfin BF5xx on-chip I2C TWI Contoller, "
 
 697                 "regs_base@%p\n", iface->regs_base);
 
 701 out_error_add_adapter:
 
 702         free_irq(iface->irq, iface);
 
 705         peripheral_free_list(pin_req[pdev->id]);
 
 707         iounmap(iface->regs_base);
 
 715 static int i2c_bfin_twi_remove(struct platform_device *pdev)
 
 717         struct bfin_twi_iface *iface = platform_get_drvdata(pdev);
 
 719         platform_set_drvdata(pdev, NULL);
 
 721         i2c_del_adapter(&(iface->adap));
 
 722         free_irq(iface->irq, iface);
 
 723         peripheral_free_list(pin_req[pdev->id]);
 
 724         iounmap(iface->regs_base);
 
 730 static struct platform_driver i2c_bfin_twi_driver = {
 
 731         .probe          = i2c_bfin_twi_probe,
 
 732         .remove         = i2c_bfin_twi_remove,
 
 733         .suspend        = i2c_bfin_twi_suspend,
 
 734         .resume         = i2c_bfin_twi_resume,
 
 736                 .name   = "i2c-bfin-twi",
 
 737                 .owner  = THIS_MODULE,
 
 741 static int __init i2c_bfin_twi_init(void)
 
 743         return platform_driver_register(&i2c_bfin_twi_driver);
 
 746 static void __exit i2c_bfin_twi_exit(void)
 
 748         platform_driver_unregister(&i2c_bfin_twi_driver);
 
 751 module_init(i2c_bfin_twi_init);
 
 752 module_exit(i2c_bfin_twi_exit);
 
 754 MODULE_AUTHOR("Bryan Wu, Sonic Zhang");
 
 755 MODULE_DESCRIPTION("Blackfin BF5xx on-chip I2C TWI Contoller Driver");
 
 756 MODULE_LICENSE("GPL");
 
 757 MODULE_ALIAS("platform:i2c-bfin-twi");