static int ak8963_mod_remove(struct i2c_client *client) { struct ak8963_mod_private_data *private_data = i2c_get_clientdata(client); dev_dbg(&client->adapter->dev, "%s\n", __func__); inv_mpu_unregister_slave(client, private_data->pdata, ak8963_get_slave_descr); kfree(private_data); return 0; }
static int mpu_remove(struct i2c_client *client) { struct mpu_private_data *mpu = i2c_get_clientdata(client); struct i2c_adapter *slave_adapter[EXT_SLAVE_NUM_TYPES]; struct mldl_cfg *mldl_cfg = &mpu->mldl_cfg; struct ext_slave_platform_data **pdata_slave = mldl_cfg->pdata_slave; int ii; for (ii = 0; ii < EXT_SLAVE_NUM_TYPES; ii++) { if (!pdata_slave[ii]) slave_adapter[ii] = NULL; else slave_adapter[ii] = i2c_get_adapter(pdata_slave[ii]->adapt_num); } slave_adapter[EXT_SLAVE_TYPE_GYROSCOPE] = client->adapter; dev_dbg(&client->adapter->dev, "%s\n", __func__); inv_mpu_close(mldl_cfg, slave_adapter[EXT_SLAVE_TYPE_GYROSCOPE], slave_adapter[EXT_SLAVE_TYPE_ACCEL], slave_adapter[EXT_SLAVE_TYPE_COMPASS], slave_adapter[EXT_SLAVE_TYPE_PRESSURE]); if (mldl_cfg->slave[EXT_SLAVE_TYPE_ACCEL] && (mldl_cfg->slave[EXT_SLAVE_TYPE_ACCEL]->id == ACCEL_ID_MPU6050)) { struct ext_slave_platform_data *slave_pdata = mldl_cfg->pdata_slave[EXT_SLAVE_TYPE_ACCEL]; inv_mpu_unregister_slave( client, mldl_cfg->pdata_slave[EXT_SLAVE_TYPE_ACCEL], mpu6050_get_slave_descr); kfree(slave_pdata); } if (client->irq) mpuirq_exit(); misc_deregister(&mpu->dev); unregister_pm_notifier(&mpu->nb); kfree(mpu->mldl_cfg.mpu_ram->ram); kfree(mpu); return 0; }