On 10/03/2012 08:35:58 AM, Kumar Gala wrote:
On Oct 3, 2012, at 5:42 AM, Wang Dongsheng wrote:
> This is only for freescale powerpc platform. The driver provides a
way
> to wake up system. Proc
interface(/proc/powerpc/wakeup_timer_seconds).
>
> eg: "echo 5 > /proc/powerpc/wakeup_timer_seconds", 5 seconds
> after the system will be woken up. echo another time into proc
interface
> to update the time.
>
> Signed-off-by: Wang Dongsheng <dongsheng.w...@freescale.com>
> Signed-off-by: Li Yang <le...@freescale.com>
> ---
> arch/powerpc/platforms/Kconfig | 23 +++
> arch/powerpc/platforms/Makefile | 1 +
> arch/powerpc/platforms/fsl_timer_wakeup.c | 217
+++++++++++++++++++++++++++++
> 3 files changed, 241 insertions(+)
> create mode 100644 arch/powerpc/platforms/fsl_timer_wakeup.c
Adding the Linux PM list to see if there is some existing support for
this on other arch's in kernel.
I'm pretty sure /proc/ is NOT where we want this exposed.
Should probably go under the sysfs directory of the mpic device. Or
better, make a generic interface for timer-based suspend wakeup (if
there isn't one already). This current approach sits in an unpleasant
middle ground between generic and device-specific.
> diff --git a/arch/powerpc/platforms/Kconfig
b/arch/powerpc/platforms/Kconfig
> index b190a6e..7b9232a 100644
> --- a/arch/powerpc/platforms/Kconfig
> +++ b/arch/powerpc/platforms/Kconfig
> @@ -99,6 +99,29 @@ config MPIC_TIMER
> only tested on fsl chip, but it can potentially support
> other global timers complying to Open-PIC standard.
>
> +menuconfig FSL_WAKEUP_SOURCE
> + bool "Freescale wakeup source"
> + depends on FSL_SOC && SUSPEND
> + default n
> + help
> + This option enables wakeup source for wake up system
> + features. This is only for freescale powerpc platform.
> +
> +if FSL_WAKEUP_SOURCE
> +
> +config FSL_TIMER_WAKEUP
> + tristate "Freescale mpic global timer wakeup event"
> + default n
> + help
> + This is only for freescale powerpc platform. The driver
> + provides a way to wake up system.
> + Proc interface(/proc/powerpc/wakeup_timer_seconds).
> + eg: "echo 5 > /proc/powerpc/wakeup_timer_seconds",
> + 5 seconds after the system will be woken up. echo another
> + time into proc interface to update the time.
> +
> +endif
Use depends rather than if/else. Why do you need FSL_WAKEUP_SOURCE?
These names are overly broad -- this is only for FSL MPIC, not for
other FSL chips (e.g. mpc83xx has a different global timer
implementation, and there's FSL ARM chips, etc).
> +static ssize_t timer_wakeup_write(struct file *file, const char
__user *buf,
> + size_t count, loff_t *off)
> +{
> + struct fsl_timer_wakeup *priv;
> + struct inode *inode = file->f_path.dentry->d_inode;
> + struct proc_dir_entry *dp;
> + struct timeval time;
> + char *kbuf;
> +
> + dp = PDE(inode);
> + priv = dp->data;
> +
> + kbuf = kzalloc(count + 1, GFP_KERNEL);
> + if (!kbuf)
> + return -ENOMEM;
> +
> + if (copy_from_user(kbuf, buf, count)) {
> + kfree(kbuf);
> + return -EFAULT;
> + }
> +
> + kbuf[count] = '\0';
> +
> + if (kstrtol(kbuf, 0, &time.tv_sec)) {
> + kfree(kbuf);
> + return -EINVAL;
> + }
> +
> + kfree(kbuf);
> +
> + time.tv_usec = 0;
> +
> + mutex_lock(&priv->mutex);
> +
> + if (!time.tv_sec) {
> + if (priv->timer) {
> + mpic_free_timer(priv->timer);
> + priv->timer = NULL;
> + }
> + mutex_unlock(&priv->mutex);
> +
> + return count;
> + }
> +
> + if (priv->timer) {
> + mpic_free_timer(priv->timer);
> + priv->timer = NULL;
> + }
> +
> + priv->timer = mpic_request_timer(timer_event_interrupt, priv,
&time);
If the new time is zero, consider that a cancellation of the timer and
don't request a new one or return -EINVAL.
-Scott
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev