linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Olof Johansson <olof@lixom.net>
To: Kumar Gala <galak@kernel.crashing.org>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: [PATCH] powerpc: consolidate mpc83xx platform files
Date: Fri, 15 Dec 2006 11:59:02 -0600	[thread overview]
Message-ID: <20061215115902.688f1a34@pb15> (raw)
In-Reply-To: <B38E3DDE-A18F-4319-A968-B0C22C001391@kernel.crashing.org>

On Fri, 15 Dec 2006 10:09:09 -0600 Kumar Gala <galak@kernel.crashing.org> wrote:

> > +#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1374)
> > +extern ulong ds1374_get_rtc_time(void);
> > +extern int ds1374_set_rtc_time(ulong);
> > +
> > +static int __init mpc83xx_rtc_hookup(void)
> > +{
> > +	struct timespec tv;
> > +
> > +	ppc_md.get_rtc_time = ds1374_get_rtc_time;
> > +	ppc_md.set_rtc_time = ds1374_set_rtc_time;
> > +
> > +	tv.tv_nsec = 0;
> > +	tv.tv_sec = (ppc_md.get_rtc_time) ();
> > +	do_settimeofday(&tv);
> > +
> > +	return 0;
> > +}
> > +
> > +late_initcall(mpc83xx_rtc_hookup);
> > +#endif  
> 
> This is sort of evil and we need to clean it up, but we have some  
> time for 2.6.21.  Does the MPC832x MDS have the DS1374?

s/sort of/pure/

Something like this should work just as well. Seems to work fine on my
system here (that has a DS1338, i.e. ds1307 driver).

Let me know if it works on 83xx and I'll post it with a signed-off-line.



-Olof




Index: linux-2.6/arch/powerpc/Kconfig
===================================================================
--- linux-2.6.orig/arch/powerpc/Kconfig
+++ linux-2.6/arch/powerpc/Kconfig
@@ -600,6 +600,12 @@ config PPC_TODC
 	---help---
 	  This adds support for many TODC/RTC chips.
 
+config PPC_GENRTC
+	bool "Generic RTC support"
+	help
+	  This adds support for using regular RTC registered with the RTC
+	  framework as the main clock on powerpc.
+
 endmenu
 
 source arch/powerpc/platforms/embedded6xx/Kconfig
Index: linux-2.6/arch/powerpc/sysdev/Makefile
===================================================================
--- linux-2.6.orig/arch/powerpc/sysdev/Makefile
+++ linux-2.6/arch/powerpc/sysdev/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_40x)		+= dcr.o
 obj-$(CONFIG_U3_DART)		+= dart_iommu.o
 obj-$(CONFIG_MMIO_NVRAM)	+= mmio_nvram.o
 obj-$(CONFIG_FSL_SOC)		+= fsl_soc.o
+obj-$(CONFIG_PPC_GENRTC)	+= genrtc.o
 obj-$(CONFIG_PPC_TODC)		+= todc.o
 obj-$(CONFIG_TSI108_BRIDGE)	+= tsi108_pci.o tsi108_dev.o
 obj-$(CONFIG_QUICC_ENGINE)	+= qe_lib/
Index: linux-2.6/arch/powerpc/sysdev/genrtc.c
===================================================================
--- /dev/null
+++ linux-2.6/arch/powerpc/sysdev/genrtc.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) Olof Johansson <olof@lixom.net>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ */
+
+#include <linux/time.h>
+#include <linux/device.h>
+#include <linux/rtc.h>
+
+#include <asm/machdep.h>
+#include <asm/time.h>
+
+static struct class_device *rtc_dev;
+
+static void genrtc_set_rtc_time_work(void *arg);
+
+static struct rtc_time delayed_tm;
+static struct workqueue_struct *rtc_workqueue;
+static DECLARE_WORK(rtc_work, genrtc_set_rtc_time_work, &delayed_tm);
+
+static void genrtc_set_rtc_time_work(void *arg)
+{
+	struct rtc_time *tm = arg;
+	rtc_set_time(rtc_dev, tm);
+}
+
+static int genrtc_set_rtc_time(struct rtc_time *tm)
+{
+	if (in_interrupt()) {
+		/* Can't access RTC with interrupts off, since some of
+		 * the drivers might sleep. Delay the setting with a
+		 * work queue.
+		 */
+		memcpy(&delayed_tm, tm, sizeof(struct rtc_time));
+		queue_work(rtc_workqueue, &rtc_work);
+		return 0;
+	} else
+		return rtc_set_time(rtc_dev, tm);
+}
+
+static void genrtc_get_rtc_time(struct rtc_time *tm)
+{
+	rtc_read_time(rtc_dev, tm);
+}
+
+static int __init genrtc_rtc_hookup(void)
+{
+	/* Don't init if the platform has already set up rtc functions. */
+	if (ppc_md.get_rtc_time || ppc_md.set_rtc_time)
+		return -1;
+
+	rtc_dev = rtc_class_open("rtc0");
+
+	if (!rtc_dev) {
+		printk("genrtc_rtc_hookup: Failed to open rtc0\n");
+		return -1;
+	}
+
+	ppc_md.get_rtc_time = genrtc_get_rtc_time;
+	ppc_md.set_rtc_time = genrtc_set_rtc_time;
+
+	return 0;
+}
+late_initcall(genrtc_rtc_hookup);
+

  parent reply	other threads:[~2006-12-15 17:59 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-14  1:04 [PATCH] powerpc: consolidate mpc83xx platform files Kim Phillips
2006-12-15 16:09 ` Kumar Gala
2006-12-15 17:23   ` Dan Malek
2006-12-18 21:22     ` Benjamin Herrenschmidt
2006-12-15 17:59   ` Olof Johansson [this message]
2006-12-16  1:31     ` Stephen Rothwell
2006-12-18 21:23     ` Benjamin Herrenschmidt
2006-12-18 21:19   ` Benjamin Herrenschmidt
  -- strict thread matches above, loose matches on Subject: below --
2006-12-19 21:30 Kim Phillips
2006-12-19 22:19 ` Ben Warren
2006-12-18 14:44 Joakim Tjernlund
2006-12-18 16:51 ` Olof Johansson
2006-12-12 17:36 Kim Phillips
2006-12-12 18:03 ` Kumar Gala
2006-12-09  1:07 Kim Phillips
2006-12-09  7:14 ` Benjamin Herrenschmidt
2006-12-11  3:41   ` Kumar Gala
2006-12-11 21:51     ` Kim Phillips
2006-12-11 22:08       ` Kumar Gala
2006-12-12  2:10         ` Kim Phillips
2006-12-12  2:29           ` Benjamin Herrenschmidt
2006-12-12  2:31             ` Kumar Gala
2006-12-12 21:30             ` Scott Wood
2006-12-12 21:47               ` Benjamin Herrenschmidt
2006-12-12 22:06                 ` Kumar Gala
2006-12-12 22:24                   ` Kim Phillips
2006-12-12 22:28                     ` Kumar Gala
2006-12-12 22:38                       ` Kim Phillips
2006-12-12 22:44                         ` Benjamin Herrenschmidt
2006-12-12 22:51                           ` Kim Phillips
2006-12-12 22:40                       ` Scott Wood
2006-12-13  0:23                         ` Kumar Gala
2006-12-13  5:25                           ` Geoff Thorpe
2006-12-13  6:07                             ` Kumar Gala
2006-12-13 17:48                               ` Geoff Thorpe
2006-12-13 18:21                               ` Kim Phillips
2006-12-13 21:13                               ` Dan Malek
2006-12-12 22:03               ` Kumar Gala
2006-12-12 22:41                 ` Scott Wood
2006-12-12 22:46                   ` Benjamin Herrenschmidt
2006-12-13  0:20                   ` Kumar Gala
2006-12-18  5:17       ` Paul Mackerras
2006-12-18 17:04         ` Kumar Gala

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20061215115902.688f1a34@pb15 \
    --to=olof@lixom.net \
    --cc=galak@kernel.crashing.org \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).