From patchwork Tue Aug 9 14:43:50 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: holt@sgi.com X-Patchwork-Id: 109236 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from ozlabs.org (localhost [IPv6:::1]) by ozlabs.org (Postfix) with ESMTP id BDE83B816D for ; Wed, 10 Aug 2011 00:45:08 +1000 (EST) Received: from relay.sgi.com (relay1.sgi.com [192.48.179.29]) by ozlabs.org (Postfix) with ESMTP id F2BFCB7271 for ; Wed, 10 Aug 2011 00:44:54 +1000 (EST) Received: from gulag1.americas.sgi.com (gulag1.americas.sgi.com [128.162.236.41]) by relay1.corp.sgi.com (Postfix) with ESMTP id BF0878F8066; Tue, 9 Aug 2011 07:44:50 -0700 (PDT) Received: by gulag1.americas.sgi.com (Postfix, from userid 1641) id 8F9E51039E641; Tue, 9 Aug 2011 09:44:50 -0500 (CDT) From: Robin Holt To: Robin Holt , Marc Kleine-Budde , Wolfgang Grandegger , U Bhaskar-B22300 Subject: [PATCH 4/5] [powerpc] Add flexcan device support for p1010rdb. Date: Tue, 9 Aug 2011 09:43:50 -0500 Message-Id: <1312901031-29887-5-git-send-email-holt@sgi.com> X-Mailer: git-send-email 1.7.2.1 In-Reply-To: <1312901031-29887-1-git-send-email-holt@sgi.com> References: <1312901031-29887-1-git-send-email-holt@sgi.com> Cc: , netdev@vger.kernel.org, socketcan-core@lists.berlios.de, Robin Holt , PPC list X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org I added a simple clock source for the p1010rdb so the flexcan driver could determine a clock frequency. The p1010 can device only has an oscillator of system bus frequency divided by 2. Signed-off-by: Robin Holt Acked-by: Marc Kleine-Budde , Acked-by: Wolfgang Grandegger , To: U Bhaskar-B22300 Cc: socketcan-core@lists.berlios.de, Cc: netdev@vger.kernel.org, Cc: PPC list Cc: Kumar Gala --- arch/powerpc/platforms/85xx/Kconfig | 2 + arch/powerpc/platforms/85xx/Makefile | 2 + arch/powerpc/platforms/85xx/clock.c | 53 ++++++++++++++++++++++++++++++++ arch/powerpc/platforms/85xx/p1010rdb.c | 8 +++++ 4 files changed, 65 insertions(+), 0 deletions(-) create mode 100644 arch/powerpc/platforms/85xx/clock.c diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig index 498534c..c4304ae 100644 --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig @@ -70,6 +70,8 @@ config MPC85xx_RDB config P1010_RDB bool "Freescale P1010RDB" select DEFAULT_UIMAGE + select HAVE_CAN_FLEXCAN if NET && CAN + select PPC_CLOCK if CAN_FLEXCAN help This option enables support for the MPC85xx RDB (P1010 RDB) board diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile index a971b32..cc7f381 100644 --- a/arch/powerpc/platforms/85xx/Makefile +++ b/arch/powerpc/platforms/85xx/Makefile @@ -3,6 +3,8 @@ # obj-$(CONFIG_SMP) += smp.o +obj-$(CONFIG_PPC_CLOCK) += clock.o + obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads.o obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o obj-$(CONFIG_MPC85xx_CDS) += mpc85xx_cds.o diff --git a/arch/powerpc/platforms/85xx/clock.c b/arch/powerpc/platforms/85xx/clock.c new file mode 100644 index 0000000..16fae04 --- /dev/null +++ b/arch/powerpc/platforms/85xx/clock.c @@ -0,0 +1,53 @@ +/* + * Copyright 2011 SGI, inc. + * + * This code is licensed for use under the GPL V2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include + +#include + +#include + +/* + * p1010 needs to provide a clock source for the flexcan driver. The + * oscillator for the p1010 processor is only ever the system clock / 2. + */ + +static struct clk *mpc85xx_clk_get(struct device *dev, const char *id) +{ + if (!dev) + return ERR_PTR(-ENOENT); + + if (!dev->of_node || + !of_device_is_compatible(dev->of_node, "fsl,flexcan")) + return ERR_PTR(-ENOENT); + + return NULL; +} + +static void mpc85xx_clk_put(struct clk *clk) +{ + return; +} + +static unsigned long mpc85xx_clk_get_rate(struct clk *clk) +{ + return fsl_get_sys_freq() / 2; +} + +static struct clk_interface mpc85xx_clk_functions = { + .clk_get = mpc85xx_clk_get, + .clk_get_rate = mpc85xx_clk_get_rate, + .clk_put = mpc85xx_clk_put, +}; + +void __init mpc85xx_clk_init(void) +{ + clk_functions = mpc85xx_clk_functions; +} + diff --git a/arch/powerpc/platforms/85xx/p1010rdb.c b/arch/powerpc/platforms/85xx/p1010rdb.c index d7387fa..5e52122 100644 --- a/arch/powerpc/platforms/85xx/p1010rdb.c +++ b/arch/powerpc/platforms/85xx/p1010rdb.c @@ -81,6 +81,13 @@ static void __init p1010_rdb_setup_arch(void) printk(KERN_INFO "P1010 RDB board from Freescale Semiconductor\n"); } +extern void mpc85xx_clk_init(void); + +static void __init p1010_rdb_init(void) +{ + mpc85xx_clk_init(); +} + static struct of_device_id __initdata p1010rdb_ids[] = { { .type = "soc", }, { .compatible = "soc", }, @@ -111,6 +118,7 @@ define_machine(p1010_rdb) { .name = "P1010 RDB", .probe = p1010_rdb_probe, .setup_arch = p1010_rdb_setup_arch, + .init = p1010_rdb_init, .init_IRQ = p1010_rdb_pic_init, #ifdef CONFIG_PCI .pcibios_fixup_bus = fsl_pcibios_fixup_bus,