Thara Gopinath <thara@xxxxxx> writes: > Smartreflex Class3 implementation continuously monitors > silicon performance and instructs the Voltage Processors > to increase or decrease the voltage. > This patch adds smartreflex class 3 driver. This driver hooks > up with the generic smartreflex driver smartreflex.c to abstract > out class specific implementations out of the generic driver. > > Signed-off-by: Thara Gopinath <thara@xxxxxx> Some minor comments below... > --- > arch/arm/mach-omap2/Makefile | 1 + > arch/arm/mach-omap2/smartreflex-class3.c | 61 ++++++++++++++++++++++++++++++ > arch/arm/mach-omap2/smartreflex-class3.h | 23 +++++++++++ > arch/arm/plat-omap/Kconfig | 9 ++++ > 4 files changed, 94 insertions(+), 0 deletions(-) > create mode 100644 arch/arm/mach-omap2/smartreflex-class3.c > create mode 100644 arch/arm/mach-omap2/smartreflex-class3.h > > diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile > index abc377a..4f6139c 100644 > --- a/arch/arm/mach-omap2/Makefile > +++ b/arch/arm/mach-omap2/Makefile > @@ -57,6 +57,7 @@ obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o voltage.o \ > obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o pm_bus.o > obj-$(CONFIG_PM_DEBUG) += pm-debug.o > obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o > +obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o > > AFLAGS_sleep24xx.o :=-Wa,-march=armv6 > AFLAGS_sleep34xx.o :=-Wa,-march=armv7-a > diff --git a/arch/arm/mach-omap2/smartreflex-class3.c b/arch/arm/mach-omap2/smartreflex-class3.c > new file mode 100644 > index 0000000..f1ade08 > --- /dev/null > +++ b/arch/arm/mach-omap2/smartreflex-class3.c > @@ -0,0 +1,61 @@ > +/* > + * Smart reflex Class 3 specific implementations > + * > + * Author: Thara Gopinath <thara@xxxxxx> > + * > + * Copyright (C) 2010 Texas Instruments, Inc. > + * Thara Gopinath <thara@xxxxxx> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > + > +#include <plat/smartreflex.h> > + > +#include "smartreflex-class3.h" > + > +static int sr_class3_enable(struct voltagedomain *voltdm) > +{ > + unsigned long volt = 0; minor: '= 0' assignment not needed as it's immediately assigned in the next line. > + volt = omap_voltage_get_nom_volt(voltdm); > + if (!volt) { > + pr_warning("%s: Curr voltage unknown. Cannot enable sr_%s\n", > + __func__, voltdm->name); > + return -ENODATA; > + } > + > + omap_vp_enable(voltdm); > + return sr_enable(voltdm, volt); > +} > + > +static int sr_class3_disable(struct voltagedomain *voltdm, int is_volt_reset) > +{ > + omap_vp_disable(voltdm); > + sr_disable(voltdm); > + if (is_volt_reset) > + omap_voltage_reset(voltdm); > + > + return 0; > +} > + > +static int sr_class3_configure(struct voltagedomain *voltdm) > +{ > + return sr_configure_errgen(voltdm); > +} > + > +/* SR class3 structure */ > +static struct omap_smartreflex_class_data class3_data = { > + .enable = sr_class3_enable, > + .disable = sr_class3_disable, > + .configure = sr_class3_configure, > + .class_type = SR_CLASS3, > +}; > + > +/* Smartreflex CLASS3 init API to be called from board file */ s/CLASS3/Class 3/ > +int __init sr_class3_init(void) > +{ > + pr_info("SmartReflex CLASS3 initialized\n"); ditto > + return sr_register_class(&class3_data); > +} > diff --git a/arch/arm/mach-omap2/smartreflex-class3.h b/arch/arm/mach-omap2/smartreflex-class3.h > new file mode 100644 > index 0000000..4d86037 > --- /dev/null > +++ b/arch/arm/mach-omap2/smartreflex-class3.h > @@ -0,0 +1,23 @@ > +/* > + * Smartreflex Class 3 Routines > + * > + * Author: Thara Gopinath <thara@xxxxxx> > + * > + * Copyright (C) 2010 Texas Instruments, Inc. > + * Thara Gopinath <thara@xxxxxx> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > + > +#ifndef __ARCH_ARM_MACH_OMAP2_SMARTREFLEXCLASS3_H > +#define __ARCH_ARM_MACH_OMAP2_SMARTREFLEXCLASS3_H > + > +#ifdef CONFIG_OMAP_SMARTREFLEX_CLASS3 > +int sr_class3_init(void); > +#else > +static int sr_class3_init(void) { return 0; } > +#endif > + > +#endif > diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig > index 8056349..af7acc9 100644 > --- a/arch/arm/plat-omap/Kconfig > +++ b/arch/arm/plat-omap/Kconfig > @@ -67,6 +67,15 @@ config OMAP_SMARTREFLEX_TESTING > > WARNING: Enabling this option may cause your device to hang! > > +config OMAP_SMARTREFLEX_CLASS3 > + bool "Class 3 mode of Smartreflex Implementation" > + depends on OMAP_SMARTREFLEX && TWL4030_CORE > + help > + Say Y to enable Class 3 implementation of Smartreflex > + > + Class 3 implementation of Smartreflex employs continuous hardware > + voltage caliberation. calibration > + > config OMAP_RESET_CLOCKS > bool "Reset unused clocks during boot" > depends on ARCH_OMAP Kevin -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html