Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

i2c: scmi: Convert to be a platform driver

ACPI core in conjunction with platform driver core provides
an infrastructure to enumerate ACPI devices. Use it in order
to remove a lot of boilerplate code.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Josef Johansson <josef@oderland.se>
Signed-off-by: Wolfram Sang <wsa@kernel.org>

authored by

Andy Shevchenko and committed by
Wolfram Sang
03d4287a d819524d

+19 -29
+19 -29
drivers/i2c/busses/i2c-scmi.c
··· 6 6 */ 7 7 8 8 #include <linux/module.h> 9 + #include <linux/platform_device.h> 9 10 #include <linux/slab.h> 10 11 #include <linux/kernel.h> 11 12 #include <linux/stddef.h> 12 13 #include <linux/i2c.h> 13 14 #include <linux/acpi.h> 14 - 15 - #define ACPI_SMBUS_HC_CLASS "smbus" 16 - #define ACPI_SMBUS_HC_DEVICE_NAME "cmi" 17 15 18 16 /* SMBUS HID definition as supported by Microsoft Windows */ 19 17 #define ACPI_SMBUS_MS_HID "SMB0001" ··· 28 30 u8 cap_info:1; 29 31 u8 cap_read:1; 30 32 u8 cap_write:1; 31 - struct smbus_methods_t *methods; 33 + const struct smbus_methods_t *methods; 32 34 }; 33 35 34 36 static const struct smbus_methods_t smbus_methods = { ··· 356 358 return AE_OK; 357 359 } 358 360 359 - static int acpi_smbus_cmi_add(struct acpi_device *device) 361 + static int smbus_cmi_probe(struct platform_device *device) 360 362 { 363 + struct device *dev = &device->dev; 361 364 struct acpi_smbus_cmi *smbus_cmi; 362 - const struct acpi_device_id *id; 363 365 int ret; 364 366 365 367 smbus_cmi = kzalloc(sizeof(struct acpi_smbus_cmi), GFP_KERNEL); 366 368 if (!smbus_cmi) 367 369 return -ENOMEM; 368 370 369 - smbus_cmi->handle = device->handle; 370 - strcpy(acpi_device_name(device), ACPI_SMBUS_HC_DEVICE_NAME); 371 - strcpy(acpi_device_class(device), ACPI_SMBUS_HC_CLASS); 372 - device->driver_data = smbus_cmi; 371 + smbus_cmi->handle = ACPI_HANDLE(dev); 372 + smbus_cmi->methods = device_get_match_data(dev); 373 + 374 + platform_set_drvdata(device, smbus_cmi); 375 + 373 376 smbus_cmi->cap_info = 0; 374 377 smbus_cmi->cap_read = 0; 375 378 smbus_cmi->cap_write = 0; 376 - 377 - for (id = acpi_smbus_cmi_ids; id->id[0]; id++) 378 - if (!strcmp(id->id, acpi_device_hid(device))) 379 - smbus_cmi->methods = 380 - (struct smbus_methods_t *) id->driver_data; 381 379 382 380 acpi_walk_namespace(ACPI_TYPE_METHOD, smbus_cmi->handle, 1, 383 381 acpi_smbus_cmi_query_methods, NULL, smbus_cmi, NULL); ··· 384 390 } 385 391 386 392 snprintf(smbus_cmi->adapter.name, sizeof(smbus_cmi->adapter.name), 387 - "SMBus CMI adapter %s", 388 - acpi_device_name(device)); 393 + "SMBus CMI adapter %s", dev_name(dev)); 389 394 smbus_cmi->adapter.owner = THIS_MODULE; 390 395 smbus_cmi->adapter.algo = &acpi_smbus_cmi_algorithm; 391 396 smbus_cmi->adapter.algo_data = smbus_cmi; ··· 401 408 402 409 err: 403 410 kfree(smbus_cmi); 404 - device->driver_data = NULL; 405 411 return ret; 406 412 } 407 413 408 - static int acpi_smbus_cmi_remove(struct acpi_device *device) 414 + static int smbus_cmi_remove(struct platform_device *device) 409 415 { 410 - struct acpi_smbus_cmi *smbus_cmi = acpi_driver_data(device); 416 + struct acpi_smbus_cmi *smbus_cmi = platform_get_drvdata(device); 411 417 412 418 i2c_del_adapter(&smbus_cmi->adapter); 413 419 kfree(smbus_cmi); 414 - device->driver_data = NULL; 415 420 416 421 return 0; 417 422 } 418 423 419 - static struct acpi_driver acpi_smbus_cmi_driver = { 420 - .name = ACPI_SMBUS_HC_DEVICE_NAME, 421 - .class = ACPI_SMBUS_HC_CLASS, 422 - .ids = acpi_smbus_cmi_ids, 423 - .ops = { 424 - .add = acpi_smbus_cmi_add, 425 - .remove = acpi_smbus_cmi_remove, 424 + static struct platform_driver smbus_cmi_driver = { 425 + .probe = smbus_cmi_probe, 426 + .remove = smbus_cmi_remove, 427 + .driver = { 428 + .name = "smbus_cmi", 429 + .acpi_match_table = acpi_smbus_cmi_ids, 426 430 }, 427 431 }; 428 - module_acpi_driver(acpi_smbus_cmi_driver); 432 + module_platform_driver(smbus_cmi_driver); 429 433 430 434 MODULE_LICENSE("GPL"); 431 435 MODULE_AUTHOR("Crane Cai <crane.cai@amd.com>");