lineage-pem.c (f0967eea80ec2a19a4fe1ad27e3ff1b22c79a3c7) | lineage-pem.c (07404aab52f5106ec436692474cf8f40978f5dac) |
---|---|
1/* 2 * Driver for Lineage Compact Power Line series of power entry modules. 3 * 4 * Copyright (C) 2010, 2011 Ericsson AB. 5 * 6 * Documentation: 7 * http://www.lineagepower.com/oem/pdf/CPLI2C.pdf 8 * --- 434 unchanged lines hidden (view full) --- 443 struct i2c_adapter *adapter = client->adapter; 444 struct pem_data *data; 445 int ret; 446 447 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BLOCK_DATA 448 | I2C_FUNC_SMBUS_WRITE_BYTE)) 449 return -ENODEV; 450 | 1/* 2 * Driver for Lineage Compact Power Line series of power entry modules. 3 * 4 * Copyright (C) 2010, 2011 Ericsson AB. 5 * 6 * Documentation: 7 * http://www.lineagepower.com/oem/pdf/CPLI2C.pdf 8 * --- 434 unchanged lines hidden (view full) --- 443 struct i2c_adapter *adapter = client->adapter; 444 struct pem_data *data; 445 int ret; 446 447 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BLOCK_DATA 448 | I2C_FUNC_SMBUS_WRITE_BYTE)) 449 return -ENODEV; 450 |
451 data = kzalloc(sizeof(*data), GFP_KERNEL); | 451 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); |
452 if (!data) 453 return -ENOMEM; 454 455 i2c_set_clientdata(client, data); 456 mutex_init(&data->update_lock); 457 458 /* 459 * We use the next two commands to determine if the device is really 460 * there. 461 */ 462 ret = pem_read_block(client, PEM_READ_FIRMWARE_REV, 463 data->firmware_rev, sizeof(data->firmware_rev)); 464 if (ret < 0) | 452 if (!data) 453 return -ENOMEM; 454 455 i2c_set_clientdata(client, data); 456 mutex_init(&data->update_lock); 457 458 /* 459 * We use the next two commands to determine if the device is really 460 * there. 461 */ 462 ret = pem_read_block(client, PEM_READ_FIRMWARE_REV, 463 data->firmware_rev, sizeof(data->firmware_rev)); 464 if (ret < 0) |
465 goto out_kfree; | 465 return ret; |
466 467 ret = i2c_smbus_write_byte(client, PEM_CLEAR_INFO_FLAGS); 468 if (ret < 0) | 466 467 ret = i2c_smbus_write_byte(client, PEM_CLEAR_INFO_FLAGS); 468 if (ret < 0) |
469 goto out_kfree; | 469 return ret; |
470 471 dev_info(&client->dev, "Firmware revision %d.%d.%d\n", 472 data->firmware_rev[0], data->firmware_rev[1], 473 data->firmware_rev[2]); 474 475 /* Register sysfs hooks */ 476 ret = sysfs_create_group(&client->dev.kobj, &pem_group); 477 if (ret) | 470 471 dev_info(&client->dev, "Firmware revision %d.%d.%d\n", 472 data->firmware_rev[0], data->firmware_rev[1], 473 data->firmware_rev[2]); 474 475 /* Register sysfs hooks */ 476 ret = sysfs_create_group(&client->dev.kobj, &pem_group); 477 if (ret) |
478 goto out_kfree; | 478 return ret; |
479 480 /* 481 * Check if input readings are supported. 482 * This is the case if we can read input data, 483 * and if the returned data is not all zeros. 484 * Note that input alarms are always supported. 485 */ 486 ret = pem_read_block(client, PEM_READ_INPUT_STRING, --- 42 unchanged lines hidden (view full) --- 529 } 530 531 return 0; 532 533out_remove_groups: 534 sysfs_remove_group(&client->dev.kobj, &pem_input_group); 535 sysfs_remove_group(&client->dev.kobj, &pem_fan_group); 536 sysfs_remove_group(&client->dev.kobj, &pem_group); | 479 480 /* 481 * Check if input readings are supported. 482 * This is the case if we can read input data, 483 * and if the returned data is not all zeros. 484 * Note that input alarms are always supported. 485 */ 486 ret = pem_read_block(client, PEM_READ_INPUT_STRING, --- 42 unchanged lines hidden (view full) --- 529 } 530 531 return 0; 532 533out_remove_groups: 534 sysfs_remove_group(&client->dev.kobj, &pem_input_group); 535 sysfs_remove_group(&client->dev.kobj, &pem_fan_group); 536 sysfs_remove_group(&client->dev.kobj, &pem_group); |
537out_kfree: 538 kfree(data); | |
539 return ret; 540} 541 542static int pem_remove(struct i2c_client *client) 543{ 544 struct pem_data *data = i2c_get_clientdata(client); 545 546 hwmon_device_unregister(data->hwmon_dev); 547 548 sysfs_remove_group(&client->dev.kobj, &pem_input_group); 549 sysfs_remove_group(&client->dev.kobj, &pem_fan_group); 550 sysfs_remove_group(&client->dev.kobj, &pem_group); 551 | 537 return ret; 538} 539 540static int pem_remove(struct i2c_client *client) 541{ 542 struct pem_data *data = i2c_get_clientdata(client); 543 544 hwmon_device_unregister(data->hwmon_dev); 545 546 sysfs_remove_group(&client->dev.kobj, &pem_input_group); 547 sysfs_remove_group(&client->dev.kobj, &pem_fan_group); 548 sysfs_remove_group(&client->dev.kobj, &pem_group); 549 |
552 kfree(data); | |
553 return 0; 554} 555 556static const struct i2c_device_id pem_id[] = { 557 {"lineage_pem", 0}, 558 {} 559}; 560MODULE_DEVICE_TABLE(i2c, pem_id); --- 15 unchanged lines hidden --- | 550 return 0; 551} 552 553static const struct i2c_device_id pem_id[] = { 554 {"lineage_pem", 0}, 555 {} 556}; 557MODULE_DEVICE_TABLE(i2c, pem_id); --- 15 unchanged lines hidden --- |