#include <linux/platform_device.h>
 
 #include <asm/blackfin.h>
+#include <asm/portmux.h>
 #include <asm/irq.h>
 
 #define POLL_TIMEOUT       (2 * HZ)
 DEFINE_TWI_REG(RCV_DATA8, 0x88)
 DEFINE_TWI_REG(RCV_DATA16, 0x8C)
 
+static const u16 pin_req[2][3] = {
+       {P_TWI0_SCL, P_TWI0_SDA, 0},
+       {P_TWI1_SCL, P_TWI1_SDA, 0},
+};
+
 static void bfin_twi_handle_interrupt(struct bfin_twi_iface *iface)
 {
        unsigned short twi_int_status = read_INT_STAT(iface);
        p_adap->class = I2C_CLASS_ALL;
        p_adap->dev.parent = &pdev->dev;
 
+       rc = peripheral_request_list(pin_req[pdev->id], "i2c-bfin-twi");
+       if (rc) {
+               dev_err(&pdev->dev, "Can't setup pin mux!\n");
+               goto out_error_pin_mux;
+       }
+
        rc = request_irq(iface->irq, bfin_twi_interrupt_entry,
                IRQF_DISABLED, pdev->name, iface);
        if (rc) {
        free_irq(iface->irq, iface);
 out_error_req_irq:
 out_error_no_irq:
+       peripheral_free_list(pin_req[pdev->id]);
+out_error_pin_mux:
        iounmap(iface->regs_base);
 out_error_ioremap:
 out_error_get_res:
 
        i2c_del_adapter(&(iface->adap));
        free_irq(iface->irq, iface);
+       peripheral_free_list(pin_req[pdev->id]);
        iounmap(iface->regs_base);
        kfree(iface);