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

Commit ee5d1b7f authored by Christian Krafft's avatar Christian Krafft Committed by Paul Mackerras
Browse files

[POWERPC] Fix PMI breakage in cbe_cbufreq driver



The recent change to cell_defconfig to enable cpufreq on Cell exposed
the fact that the cbe_cpufreq driver currently needs the PMI interface
code to compile, but Kconfig doesn't make sure that the PMI interface
code gets built if cbe_cpufreq is enabled.

In fact cbe_cpufreq can work without PMI, so this ifdefs out the code
that deals with PMI.  This is a minimal solution for 2.6.22; a more
comprehensive solution will be merged for 2.6.23.

Signed-off-by: default avatarChristian Krafft <krafft@de.ibm.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 86affd5a
Loading
Loading
Loading
Loading
+10 −5
Original line number Original line Diff line number Diff line
@@ -74,6 +74,7 @@ static unsigned int pmi_frequency_limit = 0;


static struct of_device *pmi_dev;
static struct of_device *pmi_dev;


#ifdef CONFIG_PPC_PMI
static int set_pmode_pmi(int cpu, unsigned int pmode)
static int set_pmode_pmi(int cpu, unsigned int pmode)
{
{
	int ret;
	int ret;
@@ -102,7 +103,7 @@ static int set_pmode_pmi(int cpu, unsigned int pmode)
#endif
#endif
	return ret;
	return ret;
}
}

#endif


static int get_pmode(int cpu)
static int get_pmode(int cpu)
{
{
@@ -157,9 +158,11 @@ static int set_pmode_reg(int cpu, unsigned int pmode)
}
}


static int set_pmode(int cpu, unsigned int slow_mode) {
static int set_pmode(int cpu, unsigned int slow_mode) {
#ifdef CONFIG_PPC_PMI
	if (pmi_dev)
	if (pmi_dev)
		return set_pmode_pmi(cpu, slow_mode);
		return set_pmode_pmi(cpu, slow_mode);
	else
	else
#endif
		return set_pmode_reg(cpu, slow_mode);
		return set_pmode_reg(cpu, slow_mode);
}
}


@@ -323,26 +326,28 @@ static struct cpufreq_driver cbe_cpufreq_driver = {


static int __init cbe_cpufreq_init(void)
static int __init cbe_cpufreq_init(void)
{
{
#ifdef CONFIG_PPC_PMI
	struct device_node *np;
	struct device_node *np;

#endif
	if (!machine_is(cell))
	if (!machine_is(cell))
		return -ENODEV;
		return -ENODEV;

#ifdef CONFIG_PPC_PMI
	np = of_find_node_by_type(NULL, "ibm,pmi");
	np = of_find_node_by_type(NULL, "ibm,pmi");


	pmi_dev = of_find_device_by_node(np);
	pmi_dev = of_find_device_by_node(np);


	if (pmi_dev)
	if (pmi_dev)
		pmi_register_handler(pmi_dev, &cbe_pmi_handler);
		pmi_register_handler(pmi_dev, &cbe_pmi_handler);

#endif
	return cpufreq_register_driver(&cbe_cpufreq_driver);
	return cpufreq_register_driver(&cbe_cpufreq_driver);
}
}


static void __exit cbe_cpufreq_exit(void)
static void __exit cbe_cpufreq_exit(void)
{
{
#ifdef CONFIG_PPC_PMI
	if (pmi_dev)
	if (pmi_dev)
		pmi_unregister_handler(pmi_dev, &cbe_pmi_handler);
		pmi_unregister_handler(pmi_dev, &cbe_pmi_handler);

#endif
	cpufreq_unregister_driver(&cbe_cpufreq_driver);
	cpufreq_unregister_driver(&cbe_cpufreq_driver);
}
}