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

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.com


Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
parent 76f09e22
Loading
Loading
Loading
Loading
+28 −14
Original line number Diff line number Diff line
@@ -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);