platform/surface: aggregator: Log critical errors during SAM probing
authorWeifeng Liu <weifeng.liu.z@gmail.com>
Sun, 5 May 2024 13:07:50 +0000 (21:07 +0800)
committerHans de Goede <hdegoede@redhat.com>
Tue, 14 May 2024 09:43:39 +0000 (11:43 +0200)
Emits messages upon errors during probing of SAM.  Hopefully this could
provide useful context to user for the purpose of diagnosis when
something miserable happen.

Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Weifeng Liu <weifeng.liu.z@gmail.com>
Link: https://lore.kernel.org/r/20240505130800.2546640-3-weifeng.liu.z@gmail.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/surface/aggregator/core.c

index ba550eaa06fcf594e2b6d3c0d8128b38813daf25..797d0645bd77fa24e532f7de90c5aa6ed68b411d 100644 (file)
@@ -618,15 +618,17 @@ static const struct acpi_gpio_mapping ssam_acpi_gpios[] = {
 
 static int ssam_serial_hub_probe(struct serdev_device *serdev)
 {
-       struct acpi_device *ssh = ACPI_COMPANION(&serdev->dev);
+       struct device *dev = &serdev->dev;
+       struct acpi_device *ssh = ACPI_COMPANION(dev);
        struct ssam_controller *ctrl;
        acpi_status astatus;
        int status;
 
-       if (gpiod_count(&serdev->dev, NULL) < 0)
-               return -ENODEV;
+       status = gpiod_count(dev, NULL);
+       if (status < 0)
+               return dev_err_probe(dev, status, "no GPIO found\n");
 
-       status = devm_acpi_dev_add_driver_gpios(&serdev->dev, ssam_acpi_gpios);
+       status = devm_acpi_dev_add_driver_gpios(dev, ssam_acpi_gpios);
        if (status)
                return status;
 
@@ -637,8 +639,10 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
 
        /* Initialize controller. */
        status = ssam_controller_init(ctrl, serdev);
-       if (status)
+       if (status) {
+               dev_err_probe(dev, status, "failed to initialize ssam controller\n");
                goto err_ctrl_init;
+       }
 
        ssam_controller_lock(ctrl);
 
@@ -646,12 +650,14 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
        serdev_device_set_drvdata(serdev, ctrl);
        serdev_device_set_client_ops(serdev, &ssam_serdev_ops);
        status = serdev_device_open(serdev);
-       if (status)
+       if (status) {
+               dev_err_probe(dev, status, "failed to open serdev device\n");
                goto err_devopen;
+       }
 
        astatus = ssam_serdev_setup_via_acpi(ssh->handle, serdev);
        if (ACPI_FAILURE(astatus)) {
-               status = -ENXIO;
+               status = dev_err_probe(dev, -ENXIO, "failed to setup serdev\n");
                goto err_devinit;
        }
 
@@ -667,25 +673,33 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
         * states.
         */
        status = ssam_log_firmware_version(ctrl);
-       if (status)
+       if (status) {
+               dev_err_probe(dev, status, "failed to get firmware version\n");
                goto err_initrq;
+       }
 
        status = ssam_ctrl_notif_d0_entry(ctrl);
-       if (status)
+       if (status) {
+               dev_err_probe(dev, status, "D0-entry notification failed\n");
                goto err_initrq;
+       }
 
        status = ssam_ctrl_notif_display_on(ctrl);
-       if (status)
+       if (status) {
+               dev_err_probe(dev, status, "display-on notification failed\n");
                goto err_initrq;
+       }
 
-       status = sysfs_create_group(&serdev->dev.kobj, &ssam_sam_group);
+       status = sysfs_create_group(&dev->kobj, &ssam_sam_group);
        if (status)
                goto err_initrq;
 
        /* Set up IRQ. */
        status = ssam_irq_setup(ctrl);
-       if (status)
+       if (status) {
+               dev_err_probe(dev, status, "failed to setup IRQ\n");
                goto err_irq;
+       }
 
        /* Finally, set main controller reference. */
        status = ssam_try_set_controller(ctrl);
@@ -702,7 +716,7 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
         *       resumed. In short, this causes some spurious unwanted wake-ups.
         *       For now let's thus default power/wakeup to false.
         */
-       device_set_wakeup_capable(&serdev->dev, true);
+       device_set_wakeup_capable(dev, true);
        acpi_dev_clear_dependencies(ssh);
 
        return 0;
@@ -710,7 +724,7 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
 err_mainref:
        ssam_irq_free(ctrl);
 err_irq:
-       sysfs_remove_group(&serdev->dev.kobj, &ssam_sam_group);
+       sysfs_remove_group(&dev->kobj, &ssam_sam_group);
 err_initrq:
        ssam_controller_lock(ctrl);
        ssam_controller_shutdown(ctrl);