mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (27 commits) x86: Clean up apic.c and apic.h x86: Remove superflous goal definition of tsc_sync x86: dt: Correct local apic documentation in device tree bindings x86: dt: Cleanup local apic setup x86: dt: Fix OLPC=y/INTEL_CE=n build rtc: cmos: Add OF bindings x86: ce4100: Use OF to setup devices x86: ioapic: Add OF bindings for IO_APIC x86: dtb: Add generic bus probe x86: dtb: Add support for PCI devices backed by dtb nodes x86: dtb: Add device tree support for HPET x86: dtb: Add early parsing of IO_APIC x86: dtb: Add irq domain abstraction x86: dtb: Add a device tree for CE4100 x86: Add device tree support x86: e820: Remove conditional early mapping in parse_e820_ext x86: OLPC: Make OLPC=n build again x86: OLPC: Remove extra OLPC_OPENFIRMWARE_DT indirection x86: OLPC: Cleanup config maze completely x86: OLPC: Hide OLPC_OPENFIRMWARE config switch ... Fix up conflicts in arch/x86/platform/ce4100/ce4100.c
This commit is contained in:
commit
d10902812c
56 changed files with 1478 additions and 417 deletions
|
|
@ -37,6 +37,8 @@
|
|||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_platform.h>
|
||||
|
||||
/* this is for "generic access to PC-style RTC" using CMOS_READ/CMOS_WRITE */
|
||||
#include <asm-generic/rtc.h>
|
||||
|
|
@ -1057,6 +1059,47 @@ static struct pnp_driver cmos_pnp_driver = {
|
|||
|
||||
#endif /* CONFIG_PNP */
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id of_cmos_match[] = {
|
||||
{
|
||||
.compatible = "motorola,mc146818",
|
||||
},
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, of_cmos_match);
|
||||
|
||||
static __init void cmos_of_init(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *node = pdev->dev.of_node;
|
||||
struct rtc_time time;
|
||||
int ret;
|
||||
const __be32 *val;
|
||||
|
||||
if (!node)
|
||||
return;
|
||||
|
||||
val = of_get_property(node, "ctrl-reg", NULL);
|
||||
if (val)
|
||||
CMOS_WRITE(be32_to_cpup(val), RTC_CONTROL);
|
||||
|
||||
val = of_get_property(node, "freq-reg", NULL);
|
||||
if (val)
|
||||
CMOS_WRITE(be32_to_cpup(val), RTC_FREQ_SELECT);
|
||||
|
||||
get_rtc_time(&time);
|
||||
ret = rtc_valid_tm(&time);
|
||||
if (ret) {
|
||||
struct rtc_time def_time = {
|
||||
.tm_year = 1,
|
||||
.tm_mday = 1,
|
||||
};
|
||||
set_rtc_time(&def_time);
|
||||
}
|
||||
}
|
||||
#else
|
||||
static inline void cmos_of_init(struct platform_device *pdev) {}
|
||||
#define of_cmos_match NULL
|
||||
#endif
|
||||
/*----------------------------------------------------------------*/
|
||||
|
||||
/* Platform setup should have set up an RTC device, when PNP is
|
||||
|
|
@ -1065,6 +1108,7 @@ static struct pnp_driver cmos_pnp_driver = {
|
|||
|
||||
static int __init cmos_platform_probe(struct platform_device *pdev)
|
||||
{
|
||||
cmos_of_init(pdev);
|
||||
cmos_wake_setup(&pdev->dev);
|
||||
return cmos_do_probe(&pdev->dev,
|
||||
platform_get_resource(pdev, IORESOURCE_IO, 0),
|
||||
|
|
@ -1096,6 +1140,7 @@ static struct platform_driver cmos_platform_driver = {
|
|||
#ifdef CONFIG_PM
|
||||
.pm = &cmos_pm_ops,
|
||||
#endif
|
||||
.of_match_table = of_cmos_match,
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -62,6 +62,17 @@ static inline int is_intr(u8 rtc_intr)
|
|||
return rtc_intr & RTC_IRQMASK;
|
||||
}
|
||||
|
||||
static inline unsigned char vrtc_is_updating(void)
|
||||
{
|
||||
unsigned char uip;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
uip = (vrtc_cmos_read(RTC_FREQ_SELECT) & RTC_UIP);
|
||||
spin_unlock_irqrestore(&rtc_lock, flags);
|
||||
return uip;
|
||||
}
|
||||
|
||||
/*
|
||||
* rtc_time's year contains the increment over 1900, but vRTC's YEAR
|
||||
* register can't be programmed to value larger than 0x64, so vRTC
|
||||
|
|
@ -76,7 +87,7 @@ static int mrst_read_time(struct device *dev, struct rtc_time *time)
|
|||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (rtc_is_updating())
|
||||
if (vrtc_is_updating())
|
||||
mdelay(20);
|
||||
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
|
|
|
|||
Loading…
Reference in a new issue