@@ -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) */
@@ -84,7 +82,6 @@ static const struct key_entry wmi_keymap[] = {
84
82
* this key both sends an event and
85
83
* changes backlight level.
86
84
*/
87
- {KE_KEY , 0x80 , {KEY_RFKILL } },
88
85
{KE_END , 0 }
89
86
};
90
87
@@ -128,11 +125,10 @@ static int ggov(u32 arg0)
128
125
return res ;
129
126
}
130
127
131
- 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 )
132
129
{
133
130
union acpi_object args [3 ];
134
131
acpi_status status ;
135
- acpi_handle handle ;
136
132
struct acpi_object_list arg ;
137
133
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER , NULL };
138
134
@@ -143,29 +139,22 @@ static union acpi_object *lg_wmab(u32 method, u32 arg1, u32 arg2)
143
139
args [2 ].type = ACPI_TYPE_INTEGER ;
144
140
args [2 ].integer .value = arg2 ;
145
141
146
- status = acpi_get_handle (NULL , (acpi_string ) WMAB_METHOD , & handle );
147
- if (ACPI_FAILURE (status )) {
148
- pr_err ("Cannot get handle" );
149
- return NULL ;
150
- }
151
-
152
142
arg .count = 3 ;
153
143
arg .pointer = args ;
154
144
155
- status = acpi_evaluate_object (handle , NULL , & arg , & buffer );
145
+ status = acpi_evaluate_object (ACPI_HANDLE ( dev ), "WMAB" , & arg , & buffer );
156
146
if (ACPI_FAILURE (status )) {
157
- acpi_handle_err ( handle , "WMAB: call failed.\n" );
147
+ dev_err ( dev , "WMAB: call failed.\n" );
158
148
return NULL ;
159
149
}
160
150
161
151
return buffer .pointer ;
162
152
}
163
153
164
- 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 )
165
155
{
166
156
union acpi_object args [3 ];
167
157
acpi_status status ;
168
- acpi_handle handle ;
169
158
struct acpi_object_list arg ;
170
159
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER , NULL };
171
160
u8 buf [32 ];
@@ -181,18 +170,12 @@ static union acpi_object *lg_wmbb(u32 method_id, u32 arg1, u32 arg2)
181
170
args [2 ].buffer .length = 32 ;
182
171
args [2 ].buffer .pointer = buf ;
183
172
184
- status = acpi_get_handle (NULL , (acpi_string )WMBB_METHOD , & handle );
185
- if (ACPI_FAILURE (status )) {
186
- pr_err ("Cannot get handle" );
187
- return NULL ;
188
- }
189
-
190
173
arg .count = 3 ;
191
174
arg .pointer = args ;
192
175
193
- status = acpi_evaluate_object (handle , NULL , & arg , & buffer );
176
+ status = acpi_evaluate_object (ACPI_HANDLE ( dev ), "WMBB" , & arg , & buffer );
194
177
if (ACPI_FAILURE (status )) {
195
- acpi_handle_err ( handle , "WMAB : call failed.\n" );
178
+ dev_err ( dev , "WMBB : call failed.\n" );
196
179
return NULL ;
197
180
}
198
181
@@ -223,7 +206,7 @@ static void wmi_notify(u32 value, void *context)
223
206
224
207
if (eventcode == 0x10000000 ) {
225
208
led_classdev_notify_brightness_hw_changed (
226
- & kbd_backlight , get_kbd_backlight_level ());
209
+ & kbd_backlight , get_kbd_backlight_level (kbd_backlight . dev -> parent ));
227
210
} else {
228
211
key = sparse_keymap_entry_from_scancode (
229
212
wmi_input_dev , eventcode );
@@ -272,14 +255,7 @@ static void wmi_input_setup(void)
272
255
273
256
static void acpi_notify (struct acpi_device * device , u32 event )
274
257
{
275
- struct key_entry * key ;
276
-
277
258
acpi_handle_debug (device -> handle , "notify: %d\n" , event );
278
- if (inited & INIT_SPARSE_KEYMAP ) {
279
- key = sparse_keymap_entry_from_scancode (wmi_input_dev , 0x80 );
280
- if (key && key -> type == KE_KEY )
281
- sparse_keymap_report_entry (wmi_input_dev , key , 1 , true);
282
- }
283
259
}
284
260
285
261
static ssize_t fan_mode_store (struct device * dev ,
@@ -295,7 +271,7 @@ static ssize_t fan_mode_store(struct device *dev,
295
271
if (ret )
296
272
return ret ;
297
273
298
- r = lg_wmab (WM_FAN_MODE , WM_GET , 0 );
274
+ r = lg_wmab (dev , WM_FAN_MODE , WM_GET , 0 );
299
275
if (!r )
300
276
return - EIO ;
301
277
@@ -306,9 +282,9 @@ static ssize_t fan_mode_store(struct device *dev,
306
282
307
283
m = r -> integer .value ;
308
284
kfree (r );
309
- 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 ));
310
286
kfree (r );
311
- r = lg_wmab (WM_FAN_MODE , WM_SET , (m & 0xfffffff0 ) | value );
287
+ r = lg_wmab (dev , WM_FAN_MODE , WM_SET , (m & 0xfffffff0 ) | value );
312
288
kfree (r );
313
289
314
290
return count ;
@@ -320,7 +296,7 @@ static ssize_t fan_mode_show(struct device *dev,
320
296
unsigned int status ;
321
297
union acpi_object * r ;
322
298
323
- r = lg_wmab (WM_FAN_MODE , WM_GET , 0 );
299
+ r = lg_wmab (dev , WM_FAN_MODE , WM_GET , 0 );
324
300
if (!r )
325
301
return - EIO ;
326
302
@@ -347,7 +323,7 @@ static ssize_t usb_charge_store(struct device *dev,
347
323
if (ret )
348
324
return ret ;
349
325
350
- r = lg_wmbb (WMBB_USB_CHARGE , WM_SET , value );
326
+ r = lg_wmbb (dev , WMBB_USB_CHARGE , WM_SET , value );
351
327
if (!r )
352
328
return - EIO ;
353
329
@@ -361,7 +337,7 @@ static ssize_t usb_charge_show(struct device *dev,
361
337
unsigned int status ;
362
338
union acpi_object * r ;
363
339
364
- r = lg_wmbb (WMBB_USB_CHARGE , WM_GET , 0 );
340
+ r = lg_wmbb (dev , WMBB_USB_CHARGE , WM_GET , 0 );
365
341
if (!r )
366
342
return - EIO ;
367
343
@@ -389,7 +365,7 @@ static ssize_t reader_mode_store(struct device *dev,
389
365
if (ret )
390
366
return ret ;
391
367
392
- r = lg_wmab (WM_READER_MODE , WM_SET , value );
368
+ r = lg_wmab (dev , WM_READER_MODE , WM_SET , value );
393
369
if (!r )
394
370
return - EIO ;
395
371
@@ -403,7 +379,7 @@ static ssize_t reader_mode_show(struct device *dev,
403
379
unsigned int status ;
404
380
union acpi_object * r ;
405
381
406
- r = lg_wmab (WM_READER_MODE , WM_GET , 0 );
382
+ r = lg_wmab (dev , WM_READER_MODE , WM_GET , 0 );
407
383
if (!r )
408
384
return - EIO ;
409
385
@@ -431,7 +407,7 @@ static ssize_t fn_lock_store(struct device *dev,
431
407
if (ret )
432
408
return ret ;
433
409
434
- r = lg_wmab (WM_FN_LOCK , WM_SET , value );
410
+ r = lg_wmab (dev , WM_FN_LOCK , WM_SET , value );
435
411
if (!r )
436
412
return - EIO ;
437
413
@@ -445,7 +421,7 @@ static ssize_t fn_lock_show(struct device *dev,
445
421
unsigned int status ;
446
422
union acpi_object * r ;
447
423
448
- r = lg_wmab (WM_FN_LOCK , WM_GET , 0 );
424
+ r = lg_wmab (dev , WM_FN_LOCK , WM_GET , 0 );
449
425
if (!r )
450
426
return - EIO ;
451
427
@@ -475,9 +451,9 @@ static ssize_t charge_control_end_threshold_store(struct device *dev,
475
451
union acpi_object * r ;
476
452
477
453
if (battery_limit_use_wmbb )
478
- r = lg_wmbb (WMBB_BATT_LIMIT , WM_SET , value );
454
+ r = lg_wmbb (& pf_device -> dev , WMBB_BATT_LIMIT , WM_SET , value );
479
455
else
480
- r = lg_wmab (WM_BATT_LIMIT , WM_SET , value );
456
+ r = lg_wmab (& pf_device -> dev , WM_BATT_LIMIT , WM_SET , value );
481
457
if (!r )
482
458
return - EIO ;
483
459
@@ -496,7 +472,7 @@ static ssize_t charge_control_end_threshold_show(struct device *device,
496
472
union acpi_object * r ;
497
473
498
474
if (battery_limit_use_wmbb ) {
499
- r = lg_wmbb (WMBB_BATT_LIMIT , WM_GET , 0 );
475
+ r = lg_wmbb (& pf_device -> dev , WMBB_BATT_LIMIT , WM_GET , 0 );
500
476
if (!r )
501
477
return - EIO ;
502
478
@@ -507,7 +483,7 @@ static ssize_t charge_control_end_threshold_show(struct device *device,
507
483
508
484
status = r -> buffer .pointer [0x10 ];
509
485
} else {
510
- r = lg_wmab (WM_BATT_LIMIT , WM_GET , 0 );
486
+ r = lg_wmab (& pf_device -> dev , WM_BATT_LIMIT , WM_GET , 0 );
511
487
if (!r )
512
488
return - EIO ;
513
489
@@ -586,7 +562,7 @@ static void tpad_led_set(struct led_classdev *cdev,
586
562
{
587
563
union acpi_object * r ;
588
564
589
- r = lg_wmab (WM_TLED , WM_SET , brightness > LED_OFF );
565
+ r = lg_wmab (cdev -> dev -> parent , WM_TLED , WM_SET , brightness > LED_OFF );
590
566
kfree (r );
591
567
}
592
568
@@ -608,16 +584,16 @@ static void kbd_backlight_set(struct led_classdev *cdev,
608
584
val = 0 ;
609
585
if (brightness >= LED_FULL )
610
586
val = 0x24 ;
611
- r = lg_wmab (WM_KEY_LIGHT , WM_SET , val );
587
+ r = lg_wmab (cdev -> dev -> parent , WM_KEY_LIGHT , WM_SET , val );
612
588
kfree (r );
613
589
}
614
590
615
- static enum led_brightness get_kbd_backlight_level (void )
591
+ static enum led_brightness get_kbd_backlight_level (struct device * dev )
616
592
{
617
593
union acpi_object * r ;
618
594
int val ;
619
595
620
- r = lg_wmab (WM_KEY_LIGHT , WM_GET , 0 );
596
+ r = lg_wmab (dev , WM_KEY_LIGHT , WM_GET , 0 );
621
597
622
598
if (!r )
623
599
return LED_OFF ;
@@ -645,7 +621,7 @@ static enum led_brightness get_kbd_backlight_level(void)
645
621
646
622
static enum led_brightness kbd_backlight_get (struct led_classdev * cdev )
647
623
{
648
- return get_kbd_backlight_level ();
624
+ return get_kbd_backlight_level (cdev -> dev -> parent );
649
625
}
650
626
651
627
static LED_DEVICE (kbd_backlight , 255 , LED_BRIGHT_HW_CHANGED ) ;
@@ -672,6 +648,11 @@ static struct platform_driver pf_driver = {
672
648
673
649
static int acpi_add (struct acpi_device * device )
674
650
{
651
+ struct platform_device_info pdev_info = {
652
+ .fwnode = acpi_fwnode_handle (device ),
653
+ .name = PLATFORM_NAME ,
654
+ .id = PLATFORM_DEVID_NONE ,
655
+ };
675
656
int ret ;
676
657
const char * product ;
677
658
int year = 2017 ;
@@ -683,9 +664,7 @@ static int acpi_add(struct acpi_device *device)
683
664
if (ret )
684
665
return ret ;
685
666
686
- pf_device = platform_device_register_simple (PLATFORM_NAME ,
687
- PLATFORM_DEVID_NONE ,
688
- NULL , 0 );
667
+ pf_device = platform_device_register_full (& pdev_info );
689
668
if (IS_ERR (pf_device )) {
690
669
ret = PTR_ERR (pf_device );
691
670
pf_device = NULL ;
@@ -776,7 +755,7 @@ static void acpi_remove(struct acpi_device *device)
776
755
}
777
756
778
757
static const struct acpi_device_id device_ids [] = {
779
- {"LGEX0815 " , 0 },
758
+ {"LGEX0820 " , 0 },
780
759
{"" , 0 }
781
760
};
782
761
MODULE_DEVICE_TABLE (acpi , device_ids );
0 commit comments