@@ -39,8 +39,6 @@ MODULE_LICENSE("GPL");
39
39
#define WMI_METHOD_WMBB "2B4F501A-BD3C-4394-8DCF-00A7D2BC8210"
40
40
#define WMI_EVENT_GUID WMI_EVENT_GUID0
41
41
42
- #define WMAB_METHOD "\\XINI.WMAB"
43
- #define WMBB_METHOD "\\XINI.WMBB"
44
42
#define SB_GGOV_METHOD "\\_SB.GGOV"
45
43
#define GOV_TLED 0x2020008
46
44
#define WM_GET 1
@@ -74,7 +72,7 @@ static u32 inited;
74
72
75
73
static int battery_limit_use_wmbb ;
76
74
static struct led_classdev kbd_backlight ;
77
- static enum led_brightness get_kbd_backlight_level (void );
75
+ static enum led_brightness get_kbd_backlight_level (struct device * dev );
78
76
79
77
static const struct key_entry wmi_keymap [] = {
80
78
{KE_KEY , 0x70 , {KEY_F15 } }, /* LG control panel (F1) */
@@ -127,11 +125,10 @@ static int ggov(u32 arg0)
127
125
return res ;
128
126
}
129
127
130
- static union acpi_object * lg_wmab (u32 method , u32 arg1 , u32 arg2 )
128
+ static union acpi_object * lg_wmab (struct device * dev , u32 method , u32 arg1 , u32 arg2 )
131
129
{
132
130
union acpi_object args [3 ];
133
131
acpi_status status ;
134
- acpi_handle handle ;
135
132
struct acpi_object_list arg ;
136
133
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER , NULL };
137
134
@@ -142,29 +139,22 @@ static union acpi_object *lg_wmab(u32 method, u32 arg1, u32 arg2)
142
139
args [2 ].type = ACPI_TYPE_INTEGER ;
143
140
args [2 ].integer .value = arg2 ;
144
141
145
- status = acpi_get_handle (NULL , (acpi_string ) WMAB_METHOD , & handle );
146
- if (ACPI_FAILURE (status )) {
147
- pr_err ("Cannot get handle" );
148
- return NULL ;
149
- }
150
-
151
142
arg .count = 3 ;
152
143
arg .pointer = args ;
153
144
154
- status = acpi_evaluate_object (handle , NULL , & arg , & buffer );
145
+ status = acpi_evaluate_object (ACPI_HANDLE ( dev ), "WMAB" , & arg , & buffer );
155
146
if (ACPI_FAILURE (status )) {
156
- acpi_handle_err ( handle , "WMAB: call failed.\n" );
147
+ dev_err ( dev , "WMAB: call failed.\n" );
157
148
return NULL ;
158
149
}
159
150
160
151
return buffer .pointer ;
161
152
}
162
153
163
- static union acpi_object * lg_wmbb (u32 method_id , u32 arg1 , u32 arg2 )
154
+ static union acpi_object * lg_wmbb (struct device * dev , u32 method_id , u32 arg1 , u32 arg2 )
164
155
{
165
156
union acpi_object args [3 ];
166
157
acpi_status status ;
167
- acpi_handle handle ;
168
158
struct acpi_object_list arg ;
169
159
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER , NULL };
170
160
u8 buf [32 ];
@@ -180,18 +170,12 @@ static union acpi_object *lg_wmbb(u32 method_id, u32 arg1, u32 arg2)
180
170
args [2 ].buffer .length = 32 ;
181
171
args [2 ].buffer .pointer = buf ;
182
172
183
- status = acpi_get_handle (NULL , (acpi_string )WMBB_METHOD , & handle );
184
- if (ACPI_FAILURE (status )) {
185
- pr_err ("Cannot get handle" );
186
- return NULL ;
187
- }
188
-
189
173
arg .count = 3 ;
190
174
arg .pointer = args ;
191
175
192
- status = acpi_evaluate_object (handle , NULL , & arg , & buffer );
176
+ status = acpi_evaluate_object (ACPI_HANDLE ( dev ), "WMBB" , & arg , & buffer );
193
177
if (ACPI_FAILURE (status )) {
194
- acpi_handle_err ( handle , "WMAB : call failed.\n" );
178
+ dev_err ( dev , "WMBB : call failed.\n" );
195
179
return NULL ;
196
180
}
197
181
@@ -222,7 +206,7 @@ static void wmi_notify(u32 value, void *context)
222
206
223
207
if (eventcode == 0x10000000 ) {
224
208
led_classdev_notify_brightness_hw_changed (
225
- & kbd_backlight , get_kbd_backlight_level ());
209
+ & kbd_backlight , get_kbd_backlight_level (kbd_backlight . dev -> parent ));
226
210
} else {
227
211
key = sparse_keymap_entry_from_scancode (
228
212
wmi_input_dev , eventcode );
@@ -287,7 +271,7 @@ static ssize_t fan_mode_store(struct device *dev,
287
271
if (ret )
288
272
return ret ;
289
273
290
- r = lg_wmab (WM_FAN_MODE , WM_GET , 0 );
274
+ r = lg_wmab (dev , WM_FAN_MODE , WM_GET , 0 );
291
275
if (!r )
292
276
return - EIO ;
293
277
@@ -298,9 +282,9 @@ static ssize_t fan_mode_store(struct device *dev,
298
282
299
283
m = r -> integer .value ;
300
284
kfree (r );
301
- r = lg_wmab (WM_FAN_MODE , WM_SET , (m & 0xffffff0f ) | (value << 4 ));
285
+ r = lg_wmab (dev , WM_FAN_MODE , WM_SET , (m & 0xffffff0f ) | (value << 4 ));
302
286
kfree (r );
303
- r = lg_wmab (WM_FAN_MODE , WM_SET , (m & 0xfffffff0 ) | value );
287
+ r = lg_wmab (dev , WM_FAN_MODE , WM_SET , (m & 0xfffffff0 ) | value );
304
288
kfree (r );
305
289
306
290
return count ;
@@ -312,7 +296,7 @@ static ssize_t fan_mode_show(struct device *dev,
312
296
unsigned int status ;
313
297
union acpi_object * r ;
314
298
315
- r = lg_wmab (WM_FAN_MODE , WM_GET , 0 );
299
+ r = lg_wmab (dev , WM_FAN_MODE , WM_GET , 0 );
316
300
if (!r )
317
301
return - EIO ;
318
302
@@ -339,7 +323,7 @@ static ssize_t usb_charge_store(struct device *dev,
339
323
if (ret )
340
324
return ret ;
341
325
342
- r = lg_wmbb (WMBB_USB_CHARGE , WM_SET , value );
326
+ r = lg_wmbb (dev , WMBB_USB_CHARGE , WM_SET , value );
343
327
if (!r )
344
328
return - EIO ;
345
329
@@ -353,7 +337,7 @@ static ssize_t usb_charge_show(struct device *dev,
353
337
unsigned int status ;
354
338
union acpi_object * r ;
355
339
356
- r = lg_wmbb (WMBB_USB_CHARGE , WM_GET , 0 );
340
+ r = lg_wmbb (dev , WMBB_USB_CHARGE , WM_GET , 0 );
357
341
if (!r )
358
342
return - EIO ;
359
343
@@ -381,7 +365,7 @@ static ssize_t reader_mode_store(struct device *dev,
381
365
if (ret )
382
366
return ret ;
383
367
384
- r = lg_wmab (WM_READER_MODE , WM_SET , value );
368
+ r = lg_wmab (dev , WM_READER_MODE , WM_SET , value );
385
369
if (!r )
386
370
return - EIO ;
387
371
@@ -395,7 +379,7 @@ static ssize_t reader_mode_show(struct device *dev,
395
379
unsigned int status ;
396
380
union acpi_object * r ;
397
381
398
- r = lg_wmab (WM_READER_MODE , WM_GET , 0 );
382
+ r = lg_wmab (dev , WM_READER_MODE , WM_GET , 0 );
399
383
if (!r )
400
384
return - EIO ;
401
385
@@ -423,7 +407,7 @@ static ssize_t fn_lock_store(struct device *dev,
423
407
if (ret )
424
408
return ret ;
425
409
426
- r = lg_wmab (WM_FN_LOCK , WM_SET , value );
410
+ r = lg_wmab (dev , WM_FN_LOCK , WM_SET , value );
427
411
if (!r )
428
412
return - EIO ;
429
413
@@ -437,7 +421,7 @@ static ssize_t fn_lock_show(struct device *dev,
437
421
unsigned int status ;
438
422
union acpi_object * r ;
439
423
440
- r = lg_wmab (WM_FN_LOCK , WM_GET , 0 );
424
+ r = lg_wmab (dev , WM_FN_LOCK , WM_GET , 0 );
441
425
if (!r )
442
426
return - EIO ;
443
427
@@ -467,9 +451,9 @@ static ssize_t charge_control_end_threshold_store(struct device *dev,
467
451
union acpi_object * r ;
468
452
469
453
if (battery_limit_use_wmbb )
470
- r = lg_wmbb (WMBB_BATT_LIMIT , WM_SET , value );
454
+ r = lg_wmbb (& pf_device -> dev , WMBB_BATT_LIMIT , WM_SET , value );
471
455
else
472
- r = lg_wmab (WM_BATT_LIMIT , WM_SET , value );
456
+ r = lg_wmab (& pf_device -> dev , WM_BATT_LIMIT , WM_SET , value );
473
457
if (!r )
474
458
return - EIO ;
475
459
@@ -488,7 +472,7 @@ static ssize_t charge_control_end_threshold_show(struct device *device,
488
472
union acpi_object * r ;
489
473
490
474
if (battery_limit_use_wmbb ) {
491
- r = lg_wmbb (WMBB_BATT_LIMIT , WM_GET , 0 );
475
+ r = lg_wmbb (& pf_device -> dev , WMBB_BATT_LIMIT , WM_GET , 0 );
492
476
if (!r )
493
477
return - EIO ;
494
478
@@ -499,7 +483,7 @@ static ssize_t charge_control_end_threshold_show(struct device *device,
499
483
500
484
status = r -> buffer .pointer [0x10 ];
501
485
} else {
502
- r = lg_wmab (WM_BATT_LIMIT , WM_GET , 0 );
486
+ r = lg_wmab (& pf_device -> dev , WM_BATT_LIMIT , WM_GET , 0 );
503
487
if (!r )
504
488
return - EIO ;
505
489
@@ -578,7 +562,7 @@ static void tpad_led_set(struct led_classdev *cdev,
578
562
{
579
563
union acpi_object * r ;
580
564
581
- r = lg_wmab (WM_TLED , WM_SET , brightness > LED_OFF );
565
+ r = lg_wmab (cdev -> dev -> parent , WM_TLED , WM_SET , brightness > LED_OFF );
582
566
kfree (r );
583
567
}
584
568
@@ -600,16 +584,16 @@ static void kbd_backlight_set(struct led_classdev *cdev,
600
584
val = 0 ;
601
585
if (brightness >= LED_FULL )
602
586
val = 0x24 ;
603
- r = lg_wmab (WM_KEY_LIGHT , WM_SET , val );
587
+ r = lg_wmab (cdev -> dev -> parent , WM_KEY_LIGHT , WM_SET , val );
604
588
kfree (r );
605
589
}
606
590
607
- static enum led_brightness get_kbd_backlight_level (void )
591
+ static enum led_brightness get_kbd_backlight_level (struct device * dev )
608
592
{
609
593
union acpi_object * r ;
610
594
int val ;
611
595
612
- r = lg_wmab (WM_KEY_LIGHT , WM_GET , 0 );
596
+ r = lg_wmab (dev , WM_KEY_LIGHT , WM_GET , 0 );
613
597
614
598
if (!r )
615
599
return LED_OFF ;
@@ -637,7 +621,7 @@ static enum led_brightness get_kbd_backlight_level(void)
637
621
638
622
static enum led_brightness kbd_backlight_get (struct led_classdev * cdev )
639
623
{
640
- return get_kbd_backlight_level ();
624
+ return get_kbd_backlight_level (cdev -> dev -> parent );
641
625
}
642
626
643
627
static LED_DEVICE (kbd_backlight , 255 , LED_BRIGHT_HW_CHANGED ) ;
@@ -664,6 +648,11 @@ static struct platform_driver pf_driver = {
664
648
665
649
static int acpi_add (struct acpi_device * device )
666
650
{
651
+ struct platform_device_info pdev_info = {
652
+ .fwnode = acpi_fwnode_handle (device ),
653
+ .name = PLATFORM_NAME ,
654
+ .id = PLATFORM_DEVID_NONE ,
655
+ };
667
656
int ret ;
668
657
const char * product ;
669
658
int year = 2017 ;
@@ -675,9 +664,7 @@ static int acpi_add(struct acpi_device *device)
675
664
if (ret )
676
665
return ret ;
677
666
678
- pf_device = platform_device_register_simple (PLATFORM_NAME ,
679
- PLATFORM_DEVID_NONE ,
680
- NULL , 0 );
667
+ pf_device = platform_device_register_full (& pdev_info );
681
668
if (IS_ERR (pf_device )) {
682
669
ret = PTR_ERR (pf_device );
683
670
pf_device = NULL ;
0 commit comments