Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10270613 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Paul Mackerras
Browse files

[POWERPC] Fix windfarm platform device usage



The windfarm code uses a struct device_driver instead of
platform_driver, which can cause crashes if any of the callbacks are
called (like on module removal). This fixes it.

Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 9f2545c1
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -650,24 +650,26 @@ static struct notifier_block pm112_events = {
	.notifier_call = pm112_wf_notify,
};

static int wf_pm112_probe(struct device *dev)
static int wf_pm112_probe(struct platform_device *dev)
{
	wf_register_client(&pm112_events);
	return 0;
}

static int wf_pm112_remove(struct device *dev)
static int __devexit wf_pm112_remove(struct platform_device *dev)
{
	wf_unregister_client(&pm112_events);
	/* should release all sensors and controls */
	return 0;
}

static struct device_driver wf_pm112_driver = {
static struct platform_driver wf_pm112_driver = {
	.probe = wf_pm112_probe,
	.remove = __devexit_p(wf_pm112_remove),
	.driver = {
		.name = "windfarm",
		.bus = &platform_bus_type,
	.probe = wf_pm112_probe,
	.remove = wf_pm112_remove,
	},
};

static int __init wf_pm112_init(void)
@@ -683,13 +685,13 @@ static int __init wf_pm112_init(void)
		++nr_cores;

	printk(KERN_INFO "windfarm: initializing for dual-core desktop G5\n");
	driver_register(&wf_pm112_driver);
	platform_driver_register(&wf_pm112_driver);
	return 0;
}

static void __exit wf_pm112_exit(void)
{
	driver_unregister(&wf_pm112_driver);
	platform_driver_unregister(&wf_pm112_driver);
}

module_init(wf_pm112_init);
+10 −14
Original line number Diff line number Diff line
@@ -131,8 +131,6 @@

static int wf_smu_mach_model;	/* machine model id */

static struct device *wf_smu_dev;

/* Controls & sensors */
static struct wf_sensor	*sensor_cpu_power;
static struct wf_sensor	*sensor_cpu_temp;
@@ -717,16 +715,14 @@ static int wf_init_pm(void)
	return 0;
}

static int wf_smu_probe(struct device *ddev)
static int wf_smu_probe(struct platform_device *ddev)
{
	wf_smu_dev = ddev;

	wf_register_client(&wf_smu_events);

	return 0;
}

static int wf_smu_remove(struct device *ddev)
static int __devexit wf_smu_remove(struct platform_device *ddev)
{
	wf_unregister_client(&wf_smu_events);

@@ -766,16 +762,16 @@ static int wf_smu_remove(struct device *ddev)
	if (wf_smu_cpu_fans)
		kfree(wf_smu_cpu_fans);

	wf_smu_dev = NULL;

	return 0;
}

static struct device_driver wf_smu_driver = {
static struct platform_driver wf_smu_driver = {
        .probe = wf_smu_probe,
        .remove = __devexit_p(wf_smu_remove),
	.driver = {
		.name = "windfarm",
		.bus = &platform_bus_type,
        .probe = wf_smu_probe,
        .remove = wf_smu_remove,
	},
};


@@ -794,7 +790,7 @@ static int __init wf_smu_init(void)
		request_module("windfarm_lm75_sensor");

#endif /* MODULE */
		driver_register(&wf_smu_driver);
		platform_driver_register(&wf_smu_driver);
	}

	return rc;
@@ -803,7 +799,7 @@ static int __init wf_smu_init(void)
static void __exit wf_smu_exit(void)
{

	driver_unregister(&wf_smu_driver);
	platform_driver_unregister(&wf_smu_driver);
}


+10 −14
Original line number Diff line number Diff line
@@ -63,8 +63,6 @@
 */
#undef HACKED_OVERTEMP

static struct device *wf_smu_dev;

/* Controls & sensors */
static struct wf_sensor	*sensor_cpu_power;
static struct wf_sensor	*sensor_cpu_temp;
@@ -641,16 +639,14 @@ static int wf_init_pm(void)
	return 0;
}

static int wf_smu_probe(struct device *ddev)
static int wf_smu_probe(struct platform_device *ddev)
{
	wf_smu_dev = ddev;

	wf_register_client(&wf_smu_events);

	return 0;
}

static int wf_smu_remove(struct device *ddev)
static int __devexit wf_smu_remove(struct platform_device *ddev)
{
	wf_unregister_client(&wf_smu_events);

@@ -698,16 +694,16 @@ static int wf_smu_remove(struct device *ddev)
	if (wf_smu_cpu_fans)
		kfree(wf_smu_cpu_fans);

	wf_smu_dev = NULL;

	return 0;
}

static struct device_driver wf_smu_driver = {
static struct platform_driver wf_smu_driver = {
        .probe = wf_smu_probe,
        .remove = __devexit_p(wf_smu_remove),
	.driver = {
		.name = "windfarm",
		.bus = &platform_bus_type,
        .probe = wf_smu_probe,
        .remove = wf_smu_remove,
	},
};


@@ -725,7 +721,7 @@ static int __init wf_smu_init(void)
		request_module("windfarm_lm75_sensor");

#endif /* MODULE */
		driver_register(&wf_smu_driver);
		platform_driver_register(&wf_smu_driver);
	}

	return rc;
@@ -734,7 +730,7 @@ static int __init wf_smu_init(void)
static void __exit wf_smu_exit(void)
{

	driver_unregister(&wf_smu_driver);
	platform_driver_unregister(&wf_smu_driver);
}