Monday, March 22, 2010

linux.kernel - 26 new messages in 18 topics - digest

linux.kernel
http://groups.google.com/group/linux.kernel?hl=en

linux.kernel@googlegroups.com

Today's topics:

* atmel_serial: Atmel RS485 support - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/e37c40b9bf367826?hl=en
* S3C RTC driver: add support for S3C64xx - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/7d32e39c04d9973c?hl=en
* x86 apic: Ack all pending irqs when crashed/on kexec - V5 - 1 messages, 1
author
http://groups.google.com/group/linux.kernel/t/47666f59af53f24a?hl=en
* Unify KVM kernel-space and user-space code into a single project - 7
messages, 4 authors
http://groups.google.com/group/linux.kernel/t/728080d27436ebc6?hl=en
* CrystalHD driver safe on big endian systems? - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/c7cc0502d713413f?hl=en
* early_res: seperate common memmap func from e820.c to fw_memmap.c - 1
messages, 1 author
http://groups.google.com/group/linux.kernel/t/4688f1732cd17348?hl=en
* hid: new driver for PicoLCD device - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/a5bd2c1036257e53?hl=en
* [patch] mm, fs: warn on missing address space operations - 3 messages, 3
authors
http://groups.google.com/group/linux.kernel/t/5e7f33b45bf0d0e7?hl=en
* Hwmon: f71882fg: use strict_stro(l|ul) instead of simple_strto$1 - 1
messages, 1 author
http://groups.google.com/group/linux.kernel/t/b918f63cc5d327d4?hl=en
* mm/nommu.c:Dynamic alloc/free percpu area for nommu - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/83a8db92f1b52963?hl=en
* kcore: fix test for end of list - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/b36880f8a3424693?hl=en
* afs: potential null dereference - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/7ee577ef4e1bc972?hl=en
* dlm: cleanup remove unused code - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/e8fead27e93f32b7?hl=en
* sis: strcpy() => strlcpy() - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/e83217f9ab35b2e1?hl=en
* ewrk3: range checking problem - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/5ebd23386621a342?hl=en
* hdpuftrs: use resource_size() - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/ac01aa211283276c?hl=en
* pxa168fb: use resource_size() - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/e7e93e6689ba6a4b?hl=en
* stmmac: use resource_size() - 1 messages, 1 author
http://groups.google.com/group/linux.kernel/t/56fe0174fd071bae?hl=en

==============================================================================
TOPIC: atmel_serial: Atmel RS485 support
http://groups.google.com/group/linux.kernel/t/e37c40b9bf367826?hl=en
==============================================================================

== 1 of 1 ==
Date: Mon, Mar 22 2010 4:20 am
From: Claudio Scordino


Hi Ryan,

first of all, thank you for your feedback.

To me, all comments seem to be reasonable, except maybe the following one:

>>
>> +static void atmel_start_rx(struct uart_port *port);
>> +static void atmel_stop_rx(struct uart_port *port);
>
> Can you move these functions, so that these declarations are not needed?

Actually, atmel_stop_rx is already defined, and I prefer to not move it
(since I change it, people may get confused by the diff...).
I also think that atmel_start_rx (which is added by the patch) should be
near to atmel_stop_rx...

>> + UART_PUT_IDR(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT |
>> port->read_status_mask);
>
> This line, and a couple of others, extend over 80 characters. Could you
> please split them up.

Of course. I'm going to split them up and use a backslash at the end of
the original lines.


I will create a new patch according to your comments, test it and submit
again to the mailing list.

Many thanks again,

Claudio

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

==============================================================================
TOPIC: S3C RTC driver: add support for S3C64xx
http://groups.google.com/group/linux.kernel/t/7d32e39c04d9973c?hl=en
==============================================================================

== 1 of 1 ==
Date: Mon, Mar 22 2010 4:30 am
From: Maurus Cuelenaere


Add support for the S3C64xx SoC to the generic S3C RTC driver.

Signed-off-by: Maurus Cuelenaere <mcuelenaere@gmail.com>
Acked-By: Ben Dooks <ben-linux@fluff.org>
---

This was sent to rtc-linux before (12/01/2010), but no response was
received yet.
See http://groups.google.com/group/rtc-linux/browse_thread/thread/2a2dfc23a8042f3d/2812dcbafd9a0a85
for the full thread.

At 08/03/2010 I posted this to LKML, with no result.
On recommendation of Frans Pop, I resend this to LKML with Andrew Morton in CC.

The platform part of this patch has been included in 2.6.34-rc2.

arch/arm/plat-s3c/include/plat/regs-rtc.h | 4 +
drivers/rtc/Kconfig | 2 +-
drivers/rtc/rtc-s3c.c | 107 +++++++++++++++++++++++------
3 files changed, 92 insertions(+), 21 deletions(-)

diff --git a/arch/arm/plat-s3c/include/plat/regs-rtc.h
b/arch/arm/plat-s3c/include/plat/regs-rtc.h
index d5837cf..65c190d 100644
--- a/arch/arm/plat-s3c/include/plat/regs-rtc.h
+++ b/arch/arm/plat-s3c/include/plat/regs-rtc.h
@@ -20,6 +20,10 @@
#define S3C2410_RTCCON_CLKSEL (1<<1)
#define S3C2410_RTCCON_CNTSEL (1<<2)
#define S3C2410_RTCCON_CLKRST (1<<3)
+#define S3C64XX_RTCCON_TICEN (1<<8)
+
+#define S3C64XX_RTCCON_TICMSK (0xF<<7)
+#define S3C64XX_RTCCON_TICSHT (7)

#define S3C2410_TICNT S3C2410_RTCREG(0x44)
#define S3C2410_TICNT_ENABLE (1<<7)
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 8167e9e..b44db44 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -620,7 +620,7 @@ config RTC_DRV_OMAP

config RTC_DRV_S3C
tristate "Samsung S3C series SoC RTC"
- depends on ARCH_S3C2410
+ depends on ARCH_S3C2410 || ARCH_S3C64XX
help
RTC (Realtime Clock) driver for the clock inbuilt into the
Samsung S3C24XX series of SoCs. This can provide periodic
diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
index e0d7b99..798d2dd 100644
--- a/drivers/rtc/rtc-s3c.c
+++ b/drivers/rtc/rtc-s3c.c
@@ -28,6 +28,11 @@
#include <asm/irq.h>
#include <plat/regs-rtc.h>

+enum s3c_cpu_type {
+ TYPE_S3C2410,
+ TYPE_S3C64XX,
+};
+
/* I have yet to find an S3C implementation with more than one
* of these rtc blocks in */

@@ -36,6 +41,7 @@ static struct resource *s3c_rtc_mem;
static void __iomem *s3c_rtc_base;
static int s3c_rtc_alarmno = NO_IRQ;
static int s3c_rtc_tickno = NO_IRQ;
+static enum s3c_cpu_type s3c_rtc_cpu_type;

static DEFINE_SPINLOCK(s3c_rtc_pie_lock);

@@ -79,12 +85,25 @@ static int s3c_rtc_setpie(struct device *dev, int enabled)
pr_debug("%s: pie=%d\n", __func__, enabled);

spin_lock_irq(&s3c_rtc_pie_lock);
- tmp = readb(s3c_rtc_base + S3C2410_TICNT) & ~S3C2410_TICNT_ENABLE;

- if (enabled)
- tmp |= S3C2410_TICNT_ENABLE;
+ if (s3c_rtc_cpu_type == TYPE_S3C64XX) {
+ tmp = readb(s3c_rtc_base + S3C2410_RTCCON);
+ tmp &= ~S3C64XX_RTCCON_TICEN;
+
+ if (enabled)
+ tmp |= S3C64XX_RTCCON_TICEN;
+
+ writeb(tmp, s3c_rtc_base + S3C2410_RTCCON);
+ } else {
+ tmp = readb(s3c_rtc_base + S3C2410_TICNT);
+ tmp &= ~S3C2410_TICNT_ENABLE;
+
+ if (enabled)
+ tmp |= S3C2410_TICNT_ENABLE;
+
+ writeb(tmp, s3c_rtc_base + S3C2410_TICNT);
+ }

- writeb(tmp, s3c_rtc_base + S3C2410_TICNT);
spin_unlock_irq(&s3c_rtc_pie_lock);

return 0;
@@ -92,15 +111,21 @@ static int s3c_rtc_setpie(struct device *dev, int enabled)

static int s3c_rtc_setfreq(struct device *dev, int freq)
{
- unsigned int tmp;
+ struct platform_device *pdev = to_platform_device(dev);
+ struct rtc_device *rtc_dev = platform_get_drvdata(pdev);
+ unsigned int tmp = 0;

if (!is_power_of_2(freq))
return -EINVAL;

spin_lock_irq(&s3c_rtc_pie_lock);

- tmp = readb(s3c_rtc_base + S3C2410_TICNT) & S3C2410_TICNT_ENABLE;
- tmp |= (128 / freq)-1;
+ if (s3c_rtc_cpu_type == TYPE_S3C2410) {
+ tmp = readb(s3c_rtc_base + S3C2410_TICNT);
+ tmp &= S3C2410_TICNT_ENABLE;
+ }
+
+ tmp |= (rtc_dev->max_user_freq / freq)-1;

writeb(tmp, s3c_rtc_base + S3C2410_TICNT);
spin_unlock_irq(&s3c_rtc_pie_lock);
@@ -282,10 +307,17 @@ static int s3c_rtc_setalarm(struct device *dev,
struct rtc_wkalrm *alrm)

static int s3c_rtc_proc(struct device *dev, struct seq_file *seq)
{
- unsigned int ticnt = readb(s3c_rtc_base + S3C2410_TICNT);
+ unsigned int ticnt;

- seq_printf(seq, "periodic_IRQ\t: %s\n",
- (ticnt & S3C2410_TICNT_ENABLE) ? "yes" : "no" );
+ if (s3c_rtc_cpu_type == TYPE_S3C64XX) {
+ ticnt = readb(s3c_rtc_base + S3C2410_RTCCON);
+ ticnt &= S3C64XX_RTCCON_TICEN;
+ } else {
+ ticnt = readb(s3c_rtc_base + S3C2410_TICNT);
+ ticnt &= S3C2410_TICNT_ENABLE;
+ }
+
+ seq_printf(seq, "periodic_IRQ\t: %s\n", ticnt ? "yes" : "no");
return 0;
}

@@ -352,10 +384,16 @@ static void s3c_rtc_enable(struct
platform_device *pdev, int en)

if (!en) {
tmp = readb(base + S3C2410_RTCCON);
- writeb(tmp & ~S3C2410_RTCCON_RTCEN, base + S3C2410_RTCCON);
-
- tmp = readb(base + S3C2410_TICNT);
- writeb(tmp & ~S3C2410_TICNT_ENABLE, base + S3C2410_TICNT);
+ if (s3c_rtc_cpu_type == TYPE_S3C64XX)
+ tmp &= ~S3C64XX_RTCCON_TICEN;
+ tmp &= ~S3C2410_RTCCON_RTCEN;
+ writeb(tmp, base + S3C2410_RTCCON);
+
+ if (s3c_rtc_cpu_type == TYPE_S3C2410) {
+ tmp = readb(base + S3C2410_TICNT);
+ tmp &= ~S3C2410_TICNT_ENABLE;
+ writeb(tmp, base + S3C2410_TICNT);
+ }
} else {
/* re-enable the device, and check it is ok */

@@ -471,7 +509,12 @@ static int __devinit s3c_rtc_probe(struct
platform_device *pdev)
goto err_nortc;
}

- rtc->max_user_freq = 128;
+ if (s3c_rtc_cpu_type == TYPE_S3C64XX)
+ rtc->max_user_freq = 32768;
+ else
+ rtc->max_user_freq = 128;
+
+ s3c_rtc_cpu_type = platform_get_device_id(pdev)->driver_data;

platform_set_drvdata(pdev, rtc);
return 0;
@@ -491,20 +534,30 @@ static int __devinit s3c_rtc_probe(struct
platform_device *pdev)

/* RTC Power management control */

-static int ticnt_save;
+static int ticnt_save, ticnt_en_save;

static int s3c_rtc_suspend(struct platform_device *pdev, pm_message_t state)
{
/* save TICNT for anyone using periodic interrupts */
ticnt_save = readb(s3c_rtc_base + S3C2410_TICNT);
+ if (s3c_rtc_cpu_type == TYPE_S3C64XX) {
+ ticnt_en_save = readb(s3c_rtc_base + S3C2410_RTCCON);
+ ticnt_en_save &= S3C64XX_RTCCON_TICEN;
+ }
s3c_rtc_enable(pdev, 0);
return 0;
}

static int s3c_rtc_resume(struct platform_device *pdev)
{
+ unsigned int tmp;
+
s3c_rtc_enable(pdev, 1);
writeb(ticnt_save, s3c_rtc_base + S3C2410_TICNT);
+ if (s3c_rtc_cpu_type == TYPE_S3C64XX && ticnt_en_save) {
+ tmp = readb(s3c_rtc_base + S3C2410_RTCCON);
+ writeb(tmp | ticnt_en_save, s3c_rtc_base + S3C2410_RTCCON);
+ }
return 0;
}
#else
@@ -512,13 +565,27 @@ static int s3c_rtc_resume(struct platform_device *pdev)
#define s3c_rtc_resume NULL

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate