@@ -39,8 +39,6 @@ MODULE_LICENSE("GPL");
3939#define WMI_METHOD_WMBB "2B4F501A-BD3C-4394-8DCF-00A7D2BC8210"
4040#define WMI_EVENT_GUID WMI_EVENT_GUID0
4141
42- #define WMAB_METHOD "\\XINI.WMAB"
43- #define WMBB_METHOD "\\XINI.WMBB"
4442#define SB_GGOV_METHOD "\\_SB.GGOV"
4543#define GOV_TLED 0x2020008
4644#define WM_GET 1
@@ -74,7 +72,7 @@ static u32 inited;
7472
7573static int battery_limit_use_wmbb ;
7674static 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 );
7876
7977static const struct key_entry wmi_keymap [] = {
8078 {KE_KEY , 0x70 , {KEY_F15 } }, /* LG control panel (F1) */
@@ -127,11 +125,10 @@ static int ggov(u32 arg0)
127125 return res ;
128126}
129127
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 )
131129{
132130 union acpi_object args [3 ];
133131 acpi_status status ;
134- acpi_handle handle ;
135132 struct acpi_object_list arg ;
136133 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER , NULL };
137134
@@ -142,29 +139,22 @@ static union acpi_object *lg_wmab(u32 method, u32 arg1, u32 arg2)
142139 args [2 ].type = ACPI_TYPE_INTEGER ;
143140 args [2 ].integer .value = arg2 ;
144141
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-
151142 arg .count = 3 ;
152143 arg .pointer = args ;
153144
154- status = acpi_evaluate_object (handle , NULL , & arg , & buffer );
145+ status = acpi_evaluate_object (ACPI_HANDLE ( dev ), "WMAB" , & arg , & buffer );
155146 if (ACPI_FAILURE (status )) {
156- acpi_handle_err ( handle , "WMAB: call failed.\n" );
147+ dev_err ( dev , "WMAB: call failed.\n" );
157148 return NULL ;
158149 }
159150
160151 return buffer .pointer ;
161152}
162153
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 )
164155{
165156 union acpi_object args [3 ];
166157 acpi_status status ;
167- acpi_handle handle ;
168158 struct acpi_object_list arg ;
169159 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER , NULL };
170160 u8 buf [32 ];
@@ -180,18 +170,12 @@ static union acpi_object *lg_wmbb(u32 method_id, u32 arg1, u32 arg2)
180170 args [2 ].buffer .length = 32 ;
181171 args [2 ].buffer .pointer = buf ;
182172
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-
189173 arg .count = 3 ;
190174 arg .pointer = args ;
191175
192- status = acpi_evaluate_object (handle , NULL , & arg , & buffer );
176+ status = acpi_evaluate_object (ACPI_HANDLE ( dev ), "WMBB" , & arg , & buffer );
193177 if (ACPI_FAILURE (status )) {
194- acpi_handle_err ( handle , "WMAB : call failed.\n" );
178+ dev_err ( dev , "WMBB : call failed.\n" );
195179 return NULL ;
196180 }
197181
@@ -222,7 +206,7 @@ static void wmi_notify(u32 value, void *context)
222206
223207 if (eventcode == 0x10000000 ) {
224208 led_classdev_notify_brightness_hw_changed (
225- & kbd_backlight , get_kbd_backlight_level ());
209+ & kbd_backlight , get_kbd_backlight_level (kbd_backlight . dev -> parent ));
226210 } else {
227211 key = sparse_keymap_entry_from_scancode (
228212 wmi_input_dev , eventcode );
@@ -287,7 +271,7 @@ static ssize_t fan_mode_store(struct device *dev,
287271 if (ret )
288272 return ret ;
289273
290- r = lg_wmab (WM_FAN_MODE , WM_GET , 0 );
274+ r = lg_wmab (dev , WM_FAN_MODE , WM_GET , 0 );
291275 if (!r )
292276 return - EIO ;
293277
@@ -298,9 +282,9 @@ static ssize_t fan_mode_store(struct device *dev,
298282
299283 m = r -> integer .value ;
300284 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 ));
302286 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 );
304288 kfree (r );
305289
306290 return count ;
@@ -312,7 +296,7 @@ static ssize_t fan_mode_show(struct device *dev,
312296 unsigned int status ;
313297 union acpi_object * r ;
314298
315- r = lg_wmab (WM_FAN_MODE , WM_GET , 0 );
299+ r = lg_wmab (dev , WM_FAN_MODE , WM_GET , 0 );
316300 if (!r )
317301 return - EIO ;
318302
@@ -339,7 +323,7 @@ static ssize_t usb_charge_store(struct device *dev,
339323 if (ret )
340324 return ret ;
341325
342- r = lg_wmbb (WMBB_USB_CHARGE , WM_SET , value );
326+ r = lg_wmbb (dev , WMBB_USB_CHARGE , WM_SET , value );
343327 if (!r )
344328 return - EIO ;
345329
@@ -353,7 +337,7 @@ static ssize_t usb_charge_show(struct device *dev,
353337 unsigned int status ;
354338 union acpi_object * r ;
355339
356- r = lg_wmbb (WMBB_USB_CHARGE , WM_GET , 0 );
340+ r = lg_wmbb (dev , WMBB_USB_CHARGE , WM_GET , 0 );
357341 if (!r )
358342 return - EIO ;
359343
@@ -381,7 +365,7 @@ static ssize_t reader_mode_store(struct device *dev,
381365 if (ret )
382366 return ret ;
383367
384- r = lg_wmab (WM_READER_MODE , WM_SET , value );
368+ r = lg_wmab (dev , WM_READER_MODE , WM_SET , value );
385369 if (!r )
386370 return - EIO ;
387371
@@ -395,7 +379,7 @@ static ssize_t reader_mode_show(struct device *dev,
395379 unsigned int status ;
396380 union acpi_object * r ;
397381
398- r = lg_wmab (WM_READER_MODE , WM_GET , 0 );
382+ r = lg_wmab (dev , WM_READER_MODE , WM_GET , 0 );
399383 if (!r )
400384 return - EIO ;
401385
@@ -423,7 +407,7 @@ static ssize_t fn_lock_store(struct device *dev,
423407 if (ret )
424408 return ret ;
425409
426- r = lg_wmab (WM_FN_LOCK , WM_SET , value );
410+ r = lg_wmab (dev , WM_FN_LOCK , WM_SET , value );
427411 if (!r )
428412 return - EIO ;
429413
@@ -437,7 +421,7 @@ static ssize_t fn_lock_show(struct device *dev,
437421 unsigned int status ;
438422 union acpi_object * r ;
439423
440- r = lg_wmab (WM_FN_LOCK , WM_GET , 0 );
424+ r = lg_wmab (dev , WM_FN_LOCK , WM_GET , 0 );
441425 if (!r )
442426 return - EIO ;
443427
@@ -467,9 +451,9 @@ static ssize_t charge_control_end_threshold_store(struct device *dev,
467451 union acpi_object * r ;
468452
469453 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 );
471455 else
472- r = lg_wmab (WM_BATT_LIMIT , WM_SET , value );
456+ r = lg_wmab (& pf_device -> dev , WM_BATT_LIMIT , WM_SET , value );
473457 if (!r )
474458 return - EIO ;
475459
@@ -488,7 +472,7 @@ static ssize_t charge_control_end_threshold_show(struct device *device,
488472 union acpi_object * r ;
489473
490474 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 );
492476 if (!r )
493477 return - EIO ;
494478
@@ -499,7 +483,7 @@ static ssize_t charge_control_end_threshold_show(struct device *device,
499483
500484 status = r -> buffer .pointer [0x10 ];
501485 } else {
502- r = lg_wmab (WM_BATT_LIMIT , WM_GET , 0 );
486+ r = lg_wmab (& pf_device -> dev , WM_BATT_LIMIT , WM_GET , 0 );
503487 if (!r )
504488 return - EIO ;
505489
@@ -578,7 +562,7 @@ static void tpad_led_set(struct led_classdev *cdev,
578562{
579563 union acpi_object * r ;
580564
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 );
582566 kfree (r );
583567}
584568
@@ -600,16 +584,16 @@ static void kbd_backlight_set(struct led_classdev *cdev,
600584 val = 0 ;
601585 if (brightness >= LED_FULL )
602586 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 );
604588 kfree (r );
605589}
606590
607- static enum led_brightness get_kbd_backlight_level (void )
591+ static enum led_brightness get_kbd_backlight_level (struct device * dev )
608592{
609593 union acpi_object * r ;
610594 int val ;
611595
612- r = lg_wmab (WM_KEY_LIGHT , WM_GET , 0 );
596+ r = lg_wmab (dev , WM_KEY_LIGHT , WM_GET , 0 );
613597
614598 if (!r )
615599 return LED_OFF ;
@@ -637,7 +621,7 @@ static enum led_brightness get_kbd_backlight_level(void)
637621
638622static enum led_brightness kbd_backlight_get (struct led_classdev * cdev )
639623{
640- return get_kbd_backlight_level ();
624+ return get_kbd_backlight_level (cdev -> dev -> parent );
641625}
642626
643627static LED_DEVICE (kbd_backlight , 255 , LED_BRIGHT_HW_CHANGED ) ;
@@ -664,6 +648,11 @@ static struct platform_driver pf_driver = {
664648
665649static int acpi_add (struct acpi_device * device )
666650{
651+ struct platform_device_info pdev_info = {
652+ .fwnode = acpi_fwnode_handle (device ),
653+ .name = PLATFORM_NAME ,
654+ .id = PLATFORM_DEVID_NONE ,
655+ };
667656 int ret ;
668657 const char * product ;
669658 int year = 2017 ;
@@ -675,9 +664,7 @@ static int acpi_add(struct acpi_device *device)
675664 if (ret )
676665 return ret ;
677666
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 );
681668 if (IS_ERR (pf_device )) {
682669 ret = PTR_ERR (pf_device );
683670 pf_device = NULL ;
0 commit comments