Add function qe_clock_source() which takes a string containing the name of a QE clock source (as is typically found in device trees) and returns the matching enum qe_clock value.
Signed-off-by: Timur Tabi <[EMAIL PROTECTED]> --- This patch applies to Kumar's for-2.6.24 branch. arch/powerpc/sysdev/qe_lib/qe.c | 65 +++++++++++++++++++++++++++++++++++++++ include/asm-powerpc/qe.h | 3 ++ 2 files changed, 68 insertions(+), 0 deletions(-) diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c index 3d57d38..da68534 100644 --- a/arch/powerpc/sysdev/qe_lib/qe.c +++ b/arch/powerpc/sysdev/qe_lib/qe.c @@ -199,6 +199,71 @@ void qe_setbrg(unsigned int brg, unsigned int rate, unsigned int multiplier) out_be32(&qe_immr->brg.brgc[brg - 1], tempval); } +/* Convert a string to a QE clock source enum + * + * This function takes a string, typically from a property in the device + * tree, and returns the corresponding "enum qe_clock" value. +*/ +enum qe_clock qe_clock_source(const char *source) +{ + /* This structure is designed so that it's 8 bytes in size */ + static struct { + const char name[6]; + u16 num; + } __attribute__((packed)) sources[QE_CLK_DUMMY] = + { + {"none", QE_CLK_NONE}, + {"brg1", QE_BRG1}, + {"brg2", QE_BRG2}, + {"brg3", QE_BRG3}, + {"brg4", QE_BRG4}, + {"brg5", QE_BRG5}, + {"brg6", QE_BRG6}, + {"brg7", QE_BRG7}, + {"brg8", QE_BRG8}, + {"brg9", QE_BRG9}, + {"brg10", QE_BRG10}, + {"brg11", QE_BRG11}, + {"brg12", QE_BRG12}, + {"brg13", QE_BRG13}, + {"brg14", QE_BRG14}, + {"brg15", QE_BRG15}, + {"brg16", QE_BRG16}, + {"clk1", QE_CLK1}, + {"clk2", QE_CLK2}, + {"clk3", QE_CLK3}, + {"clk4", QE_CLK4}, + {"clk5", QE_CLK5}, + {"clk6", QE_CLK6}, + {"clk7", QE_CLK7}, + {"clk8", QE_CLK8}, + {"clk9", QE_CLK9}, + {"clk10", QE_CLK10}, + {"clk11", QE_CLK11}, + {"clk12", QE_CLK12}, + {"clk13", QE_CLK13}, + {"clk14", QE_CLK14}, + {"clk15", QE_CLK15}, + {"clk16", QE_CLK16}, + {"clk17", QE_CLK17}, + {"clk18", QE_CLK18}, + {"clk19", QE_CLK19}, + {"clk20", QE_CLK20}, + {"clk21", QE_CLK21}, + {"clk22", QE_CLK22}, + {"clk23", QE_CLK23}, + {"clk24", QE_CLK24} + }; + unsigned int i; + + for (i = 0; i < QE_CLK_DUMMY; i++) + if (strcasecmp(source, sources[i].name) == 0) + return (enum qe_clock) sources[i].num; + + return QE_CLK_DUMMY; +} +EXPORT_SYMBOL(qe_clock_source); + /* Initialize SNUMs (thread serial numbers) according to * QE Module Control chapter, SNUM table */ diff --git a/include/asm-powerpc/qe.h b/include/asm-powerpc/qe.h index 0dabe46..d28bc85 100644 --- a/include/asm-powerpc/qe.h +++ b/include/asm-powerpc/qe.h @@ -175,6 +175,9 @@ enum qe_clock { QE_CLK_DUMMY, }; +/* Convert a string to a QE clock source enum */ +enum qe_clock qe_clock_source(const char *source); + /* QE CMXUCR Registers. * There are two UCCs represented in each of the four CMXUCR registers. * These values are for the UCC in the LSBs -- 1.5.2.4 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev