Commit e05d6b65 authored by Vadim Pasternak's avatar Vadim Pasternak Committed by Hans de Goede
Browse files

platform/x86: mlx-platform: Make activation of some drivers conditional



Current assumption in driver that any system is capable of LED,
hotplug or watchdog support. It could be not true for some new coming
systems.
Add validation for LED, hotplug, watchdog configuration and skip
activation of relevant drivers if not configured.

Signed-off-by: default avatarVadim Pasternak <vadimp@nvidia.com>
Reviewed-by: default avatarOleksandr Shamray <oleksandrs@nvidia.com>
Link: https://lore.kernel.org/r/20220711084559.62447-2-vadimp@nvidia.com


Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
parent b644c955
Loading
Loading
Loading
Loading
+35 −27
Original line number Diff line number Diff line
@@ -4853,10 +4853,11 @@ static int __init mlxplat_init(void)
	}

	/* Add hotplug driver */
	if (mlxplat_hotplug) {
		mlxplat_hotplug->regmap = priv->regmap;
	priv->pdev_hotplug = platform_device_register_resndata(
				&mlxplat_dev->dev, "mlxreg-hotplug",
				PLATFORM_DEVID_NONE,
		priv->pdev_hotplug =
		platform_device_register_resndata(&mlxplat_dev->dev,
						  "mlxreg-hotplug", PLATFORM_DEVID_NONE,
						  mlxplat_mlxcpld_resources,
						  ARRAY_SIZE(mlxplat_mlxcpld_resources),
						  mlxplat_hotplug, sizeof(*mlxplat_hotplug));
@@ -4864,6 +4865,7 @@ static int __init mlxplat_init(void)
			err = PTR_ERR(priv->pdev_hotplug);
			goto fail_platform_mux_register;
		}
	}

	/* Set default registers. */
	for (j = 0; j <  mlxplat_regmap_config->num_reg_defaults; j++) {
@@ -4875,23 +4877,25 @@ static int __init mlxplat_init(void)
	}

	/* Add LED driver. */
	if (mlxplat_led) {
		mlxplat_led->regmap = priv->regmap;
	priv->pdev_led = platform_device_register_resndata(
				&mlxplat_dev->dev, "leds-mlxreg",
				PLATFORM_DEVID_NONE, NULL, 0,
				mlxplat_led, sizeof(*mlxplat_led));
		priv->pdev_led =
		platform_device_register_resndata(&mlxplat_dev->dev, "leds-mlxreg",
						  PLATFORM_DEVID_NONE, NULL, 0, mlxplat_led,
						  sizeof(*mlxplat_led));
		if (IS_ERR(priv->pdev_led)) {
			err = PTR_ERR(priv->pdev_led);
			goto fail_platform_hotplug_register;
		}
	}

	/* Add registers io access driver. */
	if (mlxplat_regs_io) {
		mlxplat_regs_io->regmap = priv->regmap;
		priv->pdev_io_regs = platform_device_register_resndata(
					&mlxplat_dev->dev, "mlxreg-io",
					PLATFORM_DEVID_NONE, NULL, 0,
					mlxplat_regs_io,
		priv->pdev_io_regs = platform_device_register_resndata(&mlxplat_dev->dev,
								       "mlxreg-io",
								       PLATFORM_DEVID_NONE, NULL,
								       0, mlxplat_regs_io,
								       sizeof(*mlxplat_regs_io));
		if (IS_ERR(priv->pdev_io_regs)) {
			err = PTR_ERR(priv->pdev_io_regs);
@@ -4949,8 +4953,10 @@ static int __init mlxplat_init(void)
	if (mlxplat_regs_io)
		platform_device_unregister(priv->pdev_io_regs);
fail_platform_led_register:
	if (mlxplat_led)
		platform_device_unregister(priv->pdev_led);
fail_platform_hotplug_register:
	if (mlxplat_hotplug)
		platform_device_unregister(priv->pdev_hotplug);
fail_platform_mux_register:
	while (--i >= 0)
@@ -4974,7 +4980,9 @@ static void __exit mlxplat_exit(void)
		platform_device_unregister(priv->pdev_fan);
	if (priv->pdev_io_regs)
		platform_device_unregister(priv->pdev_io_regs);
	if (priv->pdev_led)
		platform_device_unregister(priv->pdev_led);
	if (priv->pdev_hotplug)
		platform_device_unregister(priv->pdev_hotplug);

	for (i = mlxplat_mux_num - 1; i >= 0 ; i--)