int falcon_probe_nic(struct efx_nic *efx)
 {
        struct falcon_nic_data *nic_data;
+       struct falcon_board *board;
        int rc;
 
        /* Allocate storage for hardware specific data */
                goto fail5;
 
        /* Initialise I2C adapter */
-       efx->i2c_adap.owner = THIS_MODULE;
-       nic_data->i2c_data = falcon_i2c_bit_operations;
-       nic_data->i2c_data.data = efx;
-       efx->i2c_adap.algo_data = &nic_data->i2c_data;
-       efx->i2c_adap.dev.parent = &efx->pci_dev->dev;
-       strlcpy(efx->i2c_adap.name, "SFC4000 GPIO", sizeof(efx->i2c_adap.name));
-       rc = i2c_bit_add_bus(&efx->i2c_adap);
+       board = falcon_board(efx);
+       board->i2c_adap.owner = THIS_MODULE;
+       board->i2c_data = falcon_i2c_bit_operations;
+       board->i2c_data.data = efx;
+       board->i2c_adap.algo_data = &board->i2c_data;
+       board->i2c_adap.dev.parent = &efx->pci_dev->dev;
+       strlcpy(board->i2c_adap.name, "SFC4000 GPIO",
+               sizeof(board->i2c_adap.name));
+       rc = i2c_bit_add_bus(&board->i2c_adap);
        if (rc)
                goto fail5;
 
        return 0;
 
  fail6:
-       BUG_ON(i2c_del_adapter(&efx->i2c_adap));
-       memset(&efx->i2c_adap, 0, sizeof(efx->i2c_adap));
+       BUG_ON(i2c_del_adapter(&board->i2c_adap));
+       memset(&board->i2c_adap, 0, sizeof(board->i2c_adap));
  fail5:
        falcon_remove_spi_devices(efx);
        falcon_free_buffer(efx, &efx->irq_status);
 void falcon_remove_nic(struct efx_nic *efx)
 {
        struct falcon_nic_data *nic_data = efx->nic_data;
+       struct falcon_board *board = falcon_board(efx);
        int rc;
 
        falcon_board(efx)->fini(efx);
 
        /* Remove I2C adapter and clear it in preparation for a retry */
-       rc = i2c_del_adapter(&efx->i2c_adap);
+       rc = i2c_del_adapter(&board->i2c_adap);
        BUG_ON(rc);
-       memset(&efx->i2c_adap, 0, sizeof(efx->i2c_adap));
+       memset(&board->i2c_adap, 0, sizeof(board->i2c_adap));
 
        falcon_remove_spi_devices(efx);
        falcon_free_buffer(efx, &efx->irq_status);
 
  * @set_id_led: Set state of identifying LED or revert to automatic function
  * @monitor: Board-specific health check function
  * @fini: Shut down hardware and free resources
+ * @i2c_adap: I2C adapter for on-board peripherals
+ * @i2c_data: Data for bit-banging algorithm
  * @hwmon_client: I2C client for hardware monitor
  * @ioexp_client: I2C client for power/port control
  */
        void (*set_id_led) (struct efx_nic *efx, enum efx_led_mode mode);
        int (*monitor) (struct efx_nic *nic);
        void (*fini) (struct efx_nic *nic);
+       struct i2c_adapter i2c_adap;
+       struct i2c_algo_bit_data i2c_data;
        struct i2c_client *hwmon_client, *ioexp_client;
 };
 
 /**
  * struct falcon_nic_data - Falcon NIC state
  * @pci_dev2: The secondary PCI device if present
- * @i2c_data: Operations and state for I2C bit-bashing algorithm
  * @board: Board state and functions
  */
 struct falcon_nic_data {
        struct pci_dev *pci_dev2;
-       struct i2c_algo_bit_data i2c_data;
        struct falcon_board board;
 };
 
 
 static int efx_init_lm87(struct efx_nic *efx, struct i2c_board_info *info,
                         const u8 *reg_values)
 {
-       struct i2c_client *client = i2c_new_device(&efx->i2c_adap, info);
+       struct falcon_board *board = falcon_board(efx);
+       struct i2c_client *client = i2c_new_device(&board->i2c_adap, info);
        int rc;
 
        if (!client)
                        goto err;
        }
 
-       falcon_board(efx)->hwmon_client = client;
+       board->hwmon_client = client;
        return 0;
 
 err:
 
 static int sfn4111t_reset(struct efx_nic *efx)
 {
+       struct falcon_board *board = falcon_board(efx);
        efx_oword_t reg;
 
        /* GPIO 3 and the GPIO register are shared with I2C, so block that */
-       i2c_lock_adapter(&efx->i2c_adap);
+       i2c_lock_adapter(&board->i2c_adap);
 
        /* Pull RST_N (GPIO 2) low then let it up again, setting the
         * FLASH_CFG_1 strap (GPIO 3) appropriately.  Only change the
        efx_writeo(efx, ®, FR_AB_GPIO_CTL);
        msleep(1);
 
-       i2c_unlock_adapter(&efx->i2c_adap);
+       i2c_unlock_adapter(&board->i2c_adap);
 
        ssleep(1);
        return 0;
 
 #if defined(CONFIG_SENSORS_LM90) || defined(CONFIG_SENSORS_LM90_MODULE)
        board->hwmon_client =
-               i2c_new_device(&efx->i2c_adap, &sfe4001_hwmon_info);
+               i2c_new_device(&board->i2c_adap, &sfe4001_hwmon_info);
 #else
        board->hwmon_client =
-               i2c_new_dummy(&efx->i2c_adap, sfe4001_hwmon_info.addr);
+               i2c_new_dummy(&board->i2c_adap, sfe4001_hwmon_info.addr);
 #endif
        if (!board->hwmon_client)
                return -EIO;
        if (rc)
                goto fail_hwmon;
 
-       board->ioexp_client = i2c_new_dummy(&efx->i2c_adap, PCA9539);
+       board->ioexp_client = i2c_new_dummy(&board->i2c_adap, PCA9539);
        if (!board->ioexp_client) {
                rc = -EIO;
                goto fail_hwmon;
        int rc;
 
        board->hwmon_client =
-               i2c_new_device(&efx->i2c_adap,
+               i2c_new_device(&board->i2c_adap,
                               (board->minor < 5) ?
                               &sfn4111t_a0_hwmon_info :
                               &sfn4111t_r5_hwmon_info);
 
  * @interrupt_mode: Interrupt mode
  * @irq_rx_adaptive: Adaptive IRQ moderation enabled for RX event queues
  * @irq_rx_moderation: IRQ moderation time for RX event queues
- * @i2c_adap: I2C adapter
  * @state: Device state flag. Serialised by the rtnl_lock.
  * @reset_pending: Pending reset method (normally RESET_TYPE_NONE)
  * @tx_queue: TX DMA queues
        bool irq_rx_adaptive;
        unsigned int irq_rx_moderation;
 
-       struct i2c_adapter i2c_adap;
-
        enum nic_state state;
        enum reset_type reset_pending;