static int max8907c_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id) { struct max8907c *max8907c; struct max8907c_platform_data *pdata = i2c->dev.platform_data; int ret; int i; max8907c = kzalloc(sizeof(struct max8907c), GFP_KERNEL); if (max8907c == NULL) return -ENOMEM; max8907c->dev = &i2c->dev; dev_set_drvdata(max8907c->dev, max8907c); max8907c->i2c_power = i2c; i2c_set_clientdata(i2c, max8907c); max8907c->i2c_rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR); i2c_set_clientdata(max8907c->i2c_rtc, max8907c); mutex_init(&max8907c->io_lock); for (i = 0; i < ARRAY_SIZE(cells); i++) { cells[i].platform_data = max8907c; cells[i].pdata_size = sizeof(*max8907c); } ret = mfd_add_devices(max8907c->dev, -1, cells, ARRAY_SIZE(cells), NULL, 0); if (ret != 0) { i2c_unregister_device(max8907c->i2c_rtc); kfree(max8907c); pr_debug("max8907c: failed to add MFD devices %X\n", ret); return ret; } max8907c_client = i2c; max8907c_irq_init(max8907c, i2c->irq, pdata->irq_base); ret = max8097c_add_subdevs(max8907c, pdata); if (pdata->use_power_off && !pm_power_off) pm_power_off = max8907c_power_off; if (pdata->max8907c_setup) return pdata->max8907c_setup(); return ret; }
static int max8907c_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *id) { printk(KERN_WARNING "[MAX8907C] probe called."); struct max8907c *max8907c; struct max8907c_platform_data *pdata = i2c->dev.platform_data; int ret; int i; max8907c = kzalloc(sizeof(struct max8907c), GFP_KERNEL); if (max8907c == NULL) return -ENOMEM; max8907c->dev = &i2c->dev; dev_set_drvdata(max8907c->dev, max8907c); max8907c->i2c_power = i2c; i2c_set_clientdata(i2c, max8907c); max8907c->i2c_rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR); i2c_set_clientdata(max8907c->i2c_rtc, max8907c); // max8907c->i2c_adc = i2c_new_dummy(i2c->adapter, ADC_I2C_ADDR); i2c_set_clientdata(max8907c->i2c_adc, max8907c); // mutex_init(&max8907c->io_lock); for (i = 0; i < ARRAY_SIZE(cells); i++) cells[i].mfd_data = max8907c; ret = mfd_add_devices(max8907c->dev, -1, cells, ARRAY_SIZE(cells), NULL, 0); if (ret != 0) { i2c_unregister_device(max8907c->i2c_rtc); kfree(max8907c); pr_debug("max8907c: failed to add MFD devices %X\n", ret); return ret; } max8907c_client = i2c; max8907c_irq_init(max8907c, i2c->irq, pdata->irq_base); ret = max8097c_add_subdevs(max8907c, pdata); if (pdata->max8907c_setup) return pdata->max8907c_setup(); // else{ int ret; ret = max8907c_set_bits(max8907c_client, MAX8907C_REG_RESET_CNFG, MAX8907C_MASK_PWR_EN, MAX8907C_PWR_EN); if (ret != 0) return ret; } // return ret; }