platform/surface: aggregator: Log critical errors during SAM probing

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>
This commit is contained in:
Weifeng Liu 2024-05-05 21:07:50 +08:00 committed by Hans de Goede
parent 76f09e2202
commit 7c4cd2afee

View 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);