diff --git a/src/ap-led.c b/src/ap-led.c index 8cb5c54..d62171c 100644 --- a/src/ap-led.c +++ b/src/ap-led.c @@ -98,12 +98,13 @@ static int __init ap_led_init(struct device *dev) { int err; - err = led_classdev_register(dev, &ap_led); - if (unlikely(err)) { + err = devm_led_classdev_register(dev, &ap_led); + if (err < 0) { return err; } - if (device_create_file(ap_led.dev, &ap_led_invert_dev_attr) != 0) { + err = device_create_file(ap_led.dev, &ap_led_invert_dev_attr); + if (err < 0) { pr_err("failed to create ap_led_invert\n"); } @@ -115,8 +116,4 @@ static int __init ap_led_init(struct device *dev) static void __exit ap_led_exit(void) { device_remove_file(ap_led.dev, &ap_led_invert_dev_attr); - - if (!IS_ERR_OR_NULL(ap_led.dev)) { - led_classdev_unregister(&ap_led); - } } diff --git a/src/hwmon.c b/src/hwmon.c index 4426890..f189681 100644 --- a/src/hwmon.c +++ b/src/hwmon.c @@ -234,20 +234,16 @@ static struct notifier_block s76_hwmon_reboot_notifier = { static int s76_hwmon_init(struct device *dev) { - int ret; - - s76_hwmon = kzalloc(sizeof(*s76_hwmon), GFP_KERNEL); + s76_hwmon = devm_kzalloc(dev, sizeof(*s76_hwmon), GFP_KERNEL); if (!s76_hwmon) return -ENOMEM; - s76_hwmon->dev = hwmon_device_register_with_groups(dev, S76_DRIVER_NAME, NULL, hwmon_default_groups); + s76_hwmon->dev = devm_hwmon_device_register_with_groups(dev, S76_DRIVER_NAME, NULL, hwmon_default_groups); if (IS_ERR(s76_hwmon->dev)) { - ret = PTR_ERR(s76_hwmon->dev); - s76_hwmon->dev = NULL; - return ret; + return PTR_ERR(s76_hwmon->dev); } - register_reboot_notifier(&s76_hwmon_reboot_notifier); + (void)devm_register_reboot_notifier(dev, &s76_hwmon_reboot_notifier); s76_write_pwm_auto(0); #ifdef EXPERIMENTAL s76_write_pwm_auto(1); @@ -257,15 +253,13 @@ static int s76_hwmon_init(struct device *dev) static int s76_hwmon_fini(struct device *dev) { - if (!s76_hwmon || !s76_hwmon->dev) + if (!s76_hwmon || IS_ERR_OR_NULL(s76_hwmon->dev)) return 0; + s76_write_pwm_auto(0); #ifdef EXPERIMENTAL s76_write_pwm_auto(1); #endif - unregister_reboot_notifier(&s76_hwmon_reboot_notifier); - hwmon_device_unregister(s76_hwmon->dev); - kfree(s76_hwmon); return 0; } diff --git a/src/input.c b/src/input.c index 82abf8c..236b85a 100644 --- a/src/input.c +++ b/src/input.c @@ -131,11 +131,10 @@ static void s76_input_close(struct input_dev *dev) static int __init s76_input_init(struct device *dev) { - int err; u8 byte; - s76_input_device = input_allocate_device(); - if (unlikely(!s76_input_device)) { + s76_input_device = devm_input_allocate_device(dev); + if (!s76_input_device) { pr_err("Error allocating input device\n"); return -ENOMEM; } @@ -143,8 +142,8 @@ static int __init s76_input_init(struct device *dev) s76_input_device->name = "System76 Hotkeys"; s76_input_device->phys = "system76/input0"; s76_input_device->id.bustype = BUS_HOST; - s76_input_device->dev.parent = dev; set_bit(EV_KEY, s76_input_device->evbit); + if (driver_flags & DRIVER_AP_KEY) { set_bit(AIRPLANE_KEY, s76_input_device->keybit); ec_read(0xDB, &byte); @@ -157,26 +156,5 @@ static int __init s76_input_init(struct device *dev) s76_input_device->open = s76_input_open; s76_input_device->close = s76_input_close; - err = input_register_device(s76_input_device); - if (unlikely(err)) { - pr_err("Error registering input device\n"); - goto err_free_input_device; - } - - return 0; - -err_free_input_device: - input_free_device(s76_input_device); - - return err; -} - -static void __exit s76_input_exit(void) -{ - if (unlikely(!s76_input_device)) { - return; - } - - input_unregister_device(s76_input_device); - s76_input_device = NULL; + return input_register_device(s76_input_device); } diff --git a/src/kb-led.c b/src/kb-led.c index 6bbc46e..91cdf8a 100644 --- a/src/kb-led.c +++ b/src/kb-led.c @@ -316,7 +316,7 @@ static int __init kb_led_init(struct device *dev) { int err; - err = led_classdev_register(dev, &kb_led); + err = devm_led_classdev_register(dev, &kb_led); if (unlikely(err)) { return err; } @@ -348,10 +348,6 @@ static void __exit kb_led_exit(void) device_remove_file(kb_led.dev, &kb_led_color_right_dev_attr); device_remove_file(kb_led.dev, &kb_led_color_center_dev_attr); device_remove_file(kb_led.dev, &kb_led_color_left_dev_attr); - - if (!IS_ERR_OR_NULL(kb_led.dev)) { - led_classdev_unregister(&kb_led); - } } static void kb_wmi_brightness(enum led_brightness value) diff --git a/src/system76.c b/src/system76.c index c22cf6d..77d4c37 100644 --- a/src/system76.c +++ b/src/system76.c @@ -234,9 +234,6 @@ static int s76_remove(struct platform_device *dev) s76_hwmon_fini(&dev->dev); } #endif - if (driver_flags & DRIVER_INPUT) { - s76_input_exit(); - } if (driver_flags & (DRIVER_KB_LED_WMI | DRIVER_KB_LED)) { kb_led_exit(); }