Commit 7c4cd2af authored by Weifeng Liu's avatar Weifeng Liu Committed by Hans de Goede

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: default avatarMaximilian Luz <luzmaximilian@gmail.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarWeifeng Liu <weifeng.liu.z@gmail.com>
Link: https://lore.kernel.org/r/20240505130800.2546640-3-weifeng.liu.z@gmail.comReviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
parent 76f09e22
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment