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