static int max8907c_i2c_remove(struct i2c_client *i2c) { struct max8907c *max8907c = i2c_get_clientdata(i2c); max8907c_remove_subdevs(max8907c); i2c_unregister_device(max8907c->i2c_rtc); mfd_remove_devices(max8907c->dev); max8907c_irq_free(max8907c); kfree(max8907c); return 0; }
static int max8097c_add_subdevs(struct max8907c *max8907c, struct max8907c_platform_data *pdata) { struct platform_device *pdev; int ret; int i; for (i = 0; i < pdata->num_subdevs; i++) { pdev = platform_device_alloc(pdata->subdevs[i]->name, pdata->subdevs[i]->id); pdev->dev.parent = max8907c->dev; pdev->dev.platform_data = pdata->subdevs[i]->dev.platform_data; ret = platform_device_add(pdev); if (ret) goto error; } return 0; error: max8907c_remove_subdevs(max8907c); return ret; }