mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge branch 'akpm' (Andrew's patch-bomb)
Merge Andrew's first set of patches:
"Non-MM patches:
- lots of misc bits
- tree-wide have_clk() cleanups
- quite a lot of printk tweaks. I draw your attention to "printk:
convert the format for KERN_<LEVEL> to a 2 byte pattern" which
looks a bit scary. But afaict it's solid.
- backlight updates
- lib/ feature work (notably the addition and use of memweight())
- checkpatch updates
- rtc updates
- nilfs updates
- fatfs updates (partial, still waiting for acks)
- kdump, proc, fork, IPC, sysctl, taskstats, pps, etc
- new fault-injection feature work"
* Merge emailed patches from Andrew Morton <[email protected]>: (128 commits)
drivers/misc/lkdtm.c: fix missing allocation failure check
lib/scatterlist: do not re-write gfp_flags in __sg_alloc_table()
fault-injection: add tool to run command with failslab or fail_page_alloc
fault-injection: add selftests for cpu and memory hotplug
powerpc: pSeries reconfig notifier error injection module
memory: memory notifier error injection module
PM: PM notifier error injection module
cpu: rewrite cpu-notifier-error-inject module
fault-injection: notifier error injection
c/r: fcntl: add F_GETOWNER_UIDS option
resource: make sure requested range is included in the root range
include/linux/aio.h: cpp->C conversions
fs: cachefiles: add support for large files in filesystem caching
pps: return PTR_ERR on error in device_create
taskstats: check nla_reserve() return
sysctl: suppress kmemleak messages
ipc: use Kconfig options for __ARCH_WANT_[COMPAT_]IPC_PARSE_VERSION
ipc: compat: use signed size_t types for msgsnd and msgrcv
ipc: allow compat IPC version field parsing if !ARCH_WANT_OLD_COMPAT_IPC
ipc: add COMPAT_SHMLBA support
...
This commit is contained in:
commit
27c1ee3f92
185 changed files with 2662 additions and 1042 deletions
|
|
@ -704,6 +704,7 @@ config RTC_DRV_AB3100
|
|||
config RTC_DRV_AB8500
|
||||
tristate "ST-Ericsson AB8500 RTC"
|
||||
depends on AB8500_CORE
|
||||
select RTC_INTF_DEV_UIE_EMUL
|
||||
help
|
||||
Select this to enable the ST-Ericsson AB8500 power management IC RTC
|
||||
support. This chip contains a battery- and capacitor-backed RTC.
|
||||
|
|
|
|||
|
|
@ -89,22 +89,17 @@ static int ab8500_rtc_read_time(struct device *dev, struct rtc_time *tm)
|
|||
if (retval < 0)
|
||||
return retval;
|
||||
|
||||
/* Early AB8500 chips will not clear the rtc read request bit */
|
||||
if (abx500_get_chip_id(dev) == 0) {
|
||||
usleep_range(1000, 1000);
|
||||
} else {
|
||||
/* Wait for some cycles after enabling the rtc read in ab8500 */
|
||||
while (time_before(jiffies, timeout)) {
|
||||
retval = abx500_get_register_interruptible(dev,
|
||||
AB8500_RTC, AB8500_RTC_READ_REQ_REG, &value);
|
||||
if (retval < 0)
|
||||
return retval;
|
||||
/* Wait for some cycles after enabling the rtc read in ab8500 */
|
||||
while (time_before(jiffies, timeout)) {
|
||||
retval = abx500_get_register_interruptible(dev,
|
||||
AB8500_RTC, AB8500_RTC_READ_REQ_REG, &value);
|
||||
if (retval < 0)
|
||||
return retval;
|
||||
|
||||
if (!(value & RTC_READ_REQUEST))
|
||||
break;
|
||||
if (!(value & RTC_READ_REQUEST))
|
||||
break;
|
||||
|
||||
usleep_range(1000, 5000);
|
||||
}
|
||||
usleep_range(1000, 5000);
|
||||
}
|
||||
|
||||
/* Read the Watchtime registers */
|
||||
|
|
@ -225,7 +220,8 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
|
|||
{
|
||||
int retval, i;
|
||||
unsigned char buf[ARRAY_SIZE(ab8500_rtc_alarm_regs)];
|
||||
unsigned long mins, secs = 0;
|
||||
unsigned long mins, secs = 0, cursec = 0;
|
||||
struct rtc_time curtm;
|
||||
|
||||
if (alarm->time.tm_year < (AB8500_RTC_EPOCH - 1900)) {
|
||||
dev_dbg(dev, "year should be equal to or greater than %d\n",
|
||||
|
|
@ -236,6 +232,18 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
|
|||
/* Get the number of seconds since 1970 */
|
||||
rtc_tm_to_time(&alarm->time, &secs);
|
||||
|
||||
/*
|
||||
* Check whether alarm is set less than 1min.
|
||||
* Since our RTC doesn't support alarm resolution less than 1min,
|
||||
* return -EINVAL, so UIE EMUL can take it up, incase of UIE_ON
|
||||
*/
|
||||
ab8500_rtc_read_time(dev, &curtm); /* Read current time */
|
||||
rtc_tm_to_time(&curtm, &cursec);
|
||||
if ((secs - cursec) < 59) {
|
||||
dev_dbg(dev, "Alarm less than 1 minute not supported\r\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert it to the number of seconds since 01-01-2000 00:00:00, since
|
||||
* we only have a small counter in the RTC.
|
||||
|
|
|
|||
|
|
@ -155,13 +155,10 @@ static int __exit coh901331_remove(struct platform_device *pdev)
|
|||
struct coh901331_port *rtap = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
if (rtap) {
|
||||
free_irq(rtap->irq, rtap);
|
||||
rtc_device_unregister(rtap->rtc);
|
||||
clk_unprepare(rtap->clk);
|
||||
clk_put(rtap->clk);
|
||||
iounmap(rtap->virtbase);
|
||||
release_mem_region(rtap->phybase, rtap->physize);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
kfree(rtap);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -174,49 +171,43 @@ static int __init coh901331_probe(struct platform_device *pdev)
|
|||
struct coh901331_port *rtap;
|
||||
struct resource *res;
|
||||
|
||||
rtap = kzalloc(sizeof(struct coh901331_port), GFP_KERNEL);
|
||||
rtap = devm_kzalloc(&pdev->dev,
|
||||
sizeof(struct coh901331_port), GFP_KERNEL);
|
||||
if (!rtap)
|
||||
return -ENOMEM;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
ret = -ENOENT;
|
||||
goto out_no_resource;
|
||||
}
|
||||
if (!res)
|
||||
return -ENOENT;
|
||||
|
||||
rtap->phybase = res->start;
|
||||
rtap->physize = resource_size(res);
|
||||
|
||||
if (request_mem_region(rtap->phybase, rtap->physize,
|
||||
"rtc-coh901331") == NULL) {
|
||||
ret = -EBUSY;
|
||||
goto out_no_memregion;
|
||||
}
|
||||
if (devm_request_mem_region(&pdev->dev, rtap->phybase, rtap->physize,
|
||||
"rtc-coh901331") == NULL)
|
||||
return -EBUSY;
|
||||
|
||||
rtap->virtbase = ioremap(rtap->phybase, rtap->physize);
|
||||
if (!rtap->virtbase) {
|
||||
ret = -ENOMEM;
|
||||
goto out_no_remap;
|
||||
}
|
||||
rtap->virtbase = devm_ioremap(&pdev->dev, rtap->phybase, rtap->physize);
|
||||
if (!rtap->virtbase)
|
||||
return -ENOMEM;
|
||||
|
||||
rtap->irq = platform_get_irq(pdev, 0);
|
||||
if (request_irq(rtap->irq, coh901331_interrupt, 0,
|
||||
"RTC COH 901 331 Alarm", rtap)) {
|
||||
ret = -EIO;
|
||||
goto out_no_irq;
|
||||
}
|
||||
if (devm_request_irq(&pdev->dev, rtap->irq, coh901331_interrupt, 0,
|
||||
"RTC COH 901 331 Alarm", rtap))
|
||||
return -EIO;
|
||||
|
||||
rtap->clk = clk_get(&pdev->dev, NULL);
|
||||
if (IS_ERR(rtap->clk)) {
|
||||
ret = PTR_ERR(rtap->clk);
|
||||
dev_err(&pdev->dev, "could not get clock\n");
|
||||
goto out_no_clk;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* We enable/disable the clock only to assure it works */
|
||||
ret = clk_enable(rtap->clk);
|
||||
ret = clk_prepare_enable(rtap->clk);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "could not enable clock\n");
|
||||
goto out_no_clk_enable;
|
||||
goto out_no_clk_prepenable;
|
||||
}
|
||||
clk_disable(rtap->clk);
|
||||
|
||||
|
|
@ -232,18 +223,9 @@ static int __init coh901331_probe(struct platform_device *pdev)
|
|||
|
||||
out_no_rtc:
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
out_no_clk_enable:
|
||||
clk_unprepare(rtap->clk);
|
||||
out_no_clk_prepenable:
|
||||
clk_put(rtap->clk);
|
||||
out_no_clk:
|
||||
free_irq(rtap->irq, rtap);
|
||||
out_no_irq:
|
||||
iounmap(rtap->virtbase);
|
||||
out_no_remap:
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
out_no_memregion:
|
||||
release_mem_region(rtap->phybase, SZ_4K);
|
||||
out_no_resource:
|
||||
kfree(rtap);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -265,6 +247,7 @@ static int coh901331_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
writel(0, rtap->virtbase + COH901331_IRQ_MASK);
|
||||
clk_disable(rtap->clk);
|
||||
}
|
||||
clk_unprepare(rtap->clk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -272,6 +255,7 @@ static int coh901331_resume(struct platform_device *pdev)
|
|||
{
|
||||
struct coh901331_port *rtap = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
clk_prepare(rtap->clk);
|
||||
if (device_may_wakeup(&pdev->dev)) {
|
||||
disable_irq_wake(rtap->irq);
|
||||
} else {
|
||||
|
|
@ -293,6 +277,7 @@ static void coh901331_shutdown(struct platform_device *pdev)
|
|||
clk_enable(rtap->clk);
|
||||
writel(0, rtap->virtbase + COH901331_IRQ_MASK);
|
||||
clk_disable(rtap->clk);
|
||||
clk_unprepare(rtap->clk);
|
||||
}
|
||||
|
||||
static struct platform_driver coh901331_driver = {
|
||||
|
|
|
|||
|
|
@ -245,7 +245,7 @@ static int __devinit da9052_rtc_probe(struct platform_device *pdev)
|
|||
"ALM", rtc);
|
||||
if (ret != 0) {
|
||||
rtc_err(rtc->da9052, "irq registration failed: %d\n", ret);
|
||||
goto err_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
rtc->rtc = rtc_device_register(pdev->name, &pdev->dev,
|
||||
|
|
@ -259,8 +259,6 @@ static int __devinit da9052_rtc_probe(struct platform_device *pdev)
|
|||
|
||||
err_free_irq:
|
||||
free_irq(rtc->irq, rtc);
|
||||
err_mem:
|
||||
devm_kfree(&pdev->dev, rtc);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -271,7 +269,6 @@ static int __devexit da9052_rtc_remove(struct platform_device *pdev)
|
|||
rtc_device_unregister(rtc->rtc);
|
||||
free_irq(rtc->irq, rtc);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
devm_kfree(&pdev->dev, rtc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -404,9 +404,12 @@ static const struct platform_device_id mc13xxx_rtc_idtable[] = {
|
|||
.name = "mc13783-rtc",
|
||||
}, {
|
||||
.name = "mc13892-rtc",
|
||||
}, {
|
||||
.name = "mc34708-rtc",
|
||||
},
|
||||
{ }
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(platform, mc13xxx_rtc_idtable);
|
||||
|
||||
static struct platform_driver mc13xxx_rtc_driver = {
|
||||
.id_table = mc13xxx_rtc_idtable,
|
||||
|
|
@ -432,4 +435,3 @@ module_exit(mc13xxx_rtc_exit);
|
|||
MODULE_AUTHOR("Sascha Hauer <[email protected]>");
|
||||
MODULE_DESCRIPTION("RTC driver for Freescale MC13XXX PMIC");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_ALIAS("platform:" DRIVER_NAME);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include <linux/rtc.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#define DRV_VERSION "0.4.3"
|
||||
|
||||
|
|
@ -285,9 +286,19 @@ static const struct i2c_device_id pcf8563_id[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(i2c, pcf8563_id);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id pcf8563_of_match[] __devinitconst = {
|
||||
{ .compatible = "nxp,pcf8563" },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, pcf8563_of_match);
|
||||
#endif
|
||||
|
||||
static struct i2c_driver pcf8563_driver = {
|
||||
.driver = {
|
||||
.name = "rtc-pcf8563",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(pcf8563_of_match),
|
||||
},
|
||||
.probe = pcf8563_probe,
|
||||
.remove = pcf8563_remove,
|
||||
|
|
|
|||
|
|
@ -68,11 +68,26 @@
|
|||
|
||||
#define RTC_TIMER_FREQ 32768
|
||||
|
||||
/**
|
||||
* struct pl031_vendor_data - per-vendor variations
|
||||
* @ops: the vendor-specific operations used on this silicon version
|
||||
* @clockwatch: if this is an ST Microelectronics silicon version with a
|
||||
* clockwatch function
|
||||
* @st_weekday: if this is an ST Microelectronics silicon version that need
|
||||
* the weekday fix
|
||||
* @irqflags: special IRQ flags per variant
|
||||
*/
|
||||
struct pl031_vendor_data {
|
||||
struct rtc_class_ops ops;
|
||||
bool clockwatch;
|
||||
bool st_weekday;
|
||||
unsigned long irqflags;
|
||||
};
|
||||
|
||||
struct pl031_local {
|
||||
struct pl031_vendor_data *vendor;
|
||||
struct rtc_device *rtc;
|
||||
void __iomem *base;
|
||||
u8 hw_designer;
|
||||
u8 hw_revision:4;
|
||||
};
|
||||
|
||||
static int pl031_alarm_irq_enable(struct device *dev,
|
||||
|
|
@ -303,7 +318,8 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
{
|
||||
int ret;
|
||||
struct pl031_local *ldata;
|
||||
struct rtc_class_ops *ops = id->data;
|
||||
struct pl031_vendor_data *vendor = id->data;
|
||||
struct rtc_class_ops *ops = &vendor->ops;
|
||||
unsigned long time;
|
||||
|
||||
ret = amba_request_regions(adev, NULL);
|
||||
|
|
@ -315,6 +331,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
ldata->vendor = vendor;
|
||||
|
||||
ldata->base = ioremap(adev->res.start, resource_size(&adev->res));
|
||||
|
||||
|
|
@ -325,14 +342,11 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
|
||||
amba_set_drvdata(adev, ldata);
|
||||
|
||||
ldata->hw_designer = amba_manf(adev);
|
||||
ldata->hw_revision = amba_rev(adev);
|
||||
|
||||
dev_dbg(&adev->dev, "designer ID = 0x%02x\n", ldata->hw_designer);
|
||||
dev_dbg(&adev->dev, "revision = 0x%01x\n", ldata->hw_revision);
|
||||
dev_dbg(&adev->dev, "designer ID = 0x%02x\n", amba_manf(adev));
|
||||
dev_dbg(&adev->dev, "revision = 0x%01x\n", amba_rev(adev));
|
||||
|
||||
/* Enable the clockwatch on ST Variants */
|
||||
if (ldata->hw_designer == AMBA_VENDOR_ST)
|
||||
if (vendor->clockwatch)
|
||||
writel(readl(ldata->base + RTC_CR) | RTC_CR_CWEN,
|
||||
ldata->base + RTC_CR);
|
||||
|
||||
|
|
@ -340,7 +354,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
* On ST PL031 variants, the RTC reset value does not provide correct
|
||||
* weekday for 2000-01-01. Correct the erroneous sunday to saturday.
|
||||
*/
|
||||
if (ldata->hw_designer == AMBA_VENDOR_ST) {
|
||||
if (vendor->st_weekday) {
|
||||
if (readl(ldata->base + RTC_YDR) == 0x2000) {
|
||||
time = readl(ldata->base + RTC_DR);
|
||||
if ((time &
|
||||
|
|
@ -361,7 +375,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
}
|
||||
|
||||
if (request_irq(adev->irq[0], pl031_interrupt,
|
||||
0, "rtc-pl031", ldata)) {
|
||||
vendor->irqflags, "rtc-pl031", ldata)) {
|
||||
ret = -EIO;
|
||||
goto out_no_irq;
|
||||
}
|
||||
|
|
@ -383,48 +397,65 @@ err_req:
|
|||
}
|
||||
|
||||
/* Operations for the original ARM version */
|
||||
static struct rtc_class_ops arm_pl031_ops = {
|
||||
.read_time = pl031_read_time,
|
||||
.set_time = pl031_set_time,
|
||||
.read_alarm = pl031_read_alarm,
|
||||
.set_alarm = pl031_set_alarm,
|
||||
.alarm_irq_enable = pl031_alarm_irq_enable,
|
||||
static struct pl031_vendor_data arm_pl031 = {
|
||||
.ops = {
|
||||
.read_time = pl031_read_time,
|
||||
.set_time = pl031_set_time,
|
||||
.read_alarm = pl031_read_alarm,
|
||||
.set_alarm = pl031_set_alarm,
|
||||
.alarm_irq_enable = pl031_alarm_irq_enable,
|
||||
},
|
||||
.irqflags = IRQF_NO_SUSPEND,
|
||||
};
|
||||
|
||||
/* The First ST derivative */
|
||||
static struct rtc_class_ops stv1_pl031_ops = {
|
||||
.read_time = pl031_read_time,
|
||||
.set_time = pl031_set_time,
|
||||
.read_alarm = pl031_read_alarm,
|
||||
.set_alarm = pl031_set_alarm,
|
||||
.alarm_irq_enable = pl031_alarm_irq_enable,
|
||||
static struct pl031_vendor_data stv1_pl031 = {
|
||||
.ops = {
|
||||
.read_time = pl031_read_time,
|
||||
.set_time = pl031_set_time,
|
||||
.read_alarm = pl031_read_alarm,
|
||||
.set_alarm = pl031_set_alarm,
|
||||
.alarm_irq_enable = pl031_alarm_irq_enable,
|
||||
},
|
||||
.clockwatch = true,
|
||||
.st_weekday = true,
|
||||
.irqflags = IRQF_NO_SUSPEND,
|
||||
};
|
||||
|
||||
/* And the second ST derivative */
|
||||
static struct rtc_class_ops stv2_pl031_ops = {
|
||||
.read_time = pl031_stv2_read_time,
|
||||
.set_time = pl031_stv2_set_time,
|
||||
.read_alarm = pl031_stv2_read_alarm,
|
||||
.set_alarm = pl031_stv2_set_alarm,
|
||||
.alarm_irq_enable = pl031_alarm_irq_enable,
|
||||
static struct pl031_vendor_data stv2_pl031 = {
|
||||
.ops = {
|
||||
.read_time = pl031_stv2_read_time,
|
||||
.set_time = pl031_stv2_set_time,
|
||||
.read_alarm = pl031_stv2_read_alarm,
|
||||
.set_alarm = pl031_stv2_set_alarm,
|
||||
.alarm_irq_enable = pl031_alarm_irq_enable,
|
||||
},
|
||||
.clockwatch = true,
|
||||
.st_weekday = true,
|
||||
/*
|
||||
* This variant shares the IRQ with another block and must not
|
||||
* suspend that IRQ line.
|
||||
*/
|
||||
.irqflags = IRQF_SHARED | IRQF_NO_SUSPEND,
|
||||
};
|
||||
|
||||
static struct amba_id pl031_ids[] = {
|
||||
{
|
||||
.id = 0x00041031,
|
||||
.mask = 0x000fffff,
|
||||
.data = &arm_pl031_ops,
|
||||
.data = &arm_pl031,
|
||||
},
|
||||
/* ST Micro variants */
|
||||
{
|
||||
.id = 0x00180031,
|
||||
.mask = 0x00ffffff,
|
||||
.data = &stv1_pl031_ops,
|
||||
.data = &stv1_pl031,
|
||||
},
|
||||
{
|
||||
.id = 0x00280031,
|
||||
.mask = 0x00ffffff,
|
||||
.data = &stv2_pl031_ops,
|
||||
.data = &stv2_pl031,
|
||||
},
|
||||
{0, 0},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -138,8 +138,7 @@ static int __devinit r9701_probe(struct spi_device *spi)
|
|||
* contain invalid values. If so, try to write a default date:
|
||||
* 2000/1/1 00:00:00
|
||||
*/
|
||||
r9701_get_datetime(&spi->dev, &dt);
|
||||
if (rtc_valid_tm(&dt)) {
|
||||
if (r9701_get_datetime(&spi->dev, &dt)) {
|
||||
dev_info(&spi->dev, "trying to repair invalid date/time\n");
|
||||
dt.tm_sec = 0;
|
||||
dt.tm_min = 0;
|
||||
|
|
@ -148,7 +147,8 @@ static int __devinit r9701_probe(struct spi_device *spi)
|
|||
dt.tm_mon = 0;
|
||||
dt.tm_year = 100;
|
||||
|
||||
if (r9701_set_datetime(&spi->dev, &dt)) {
|
||||
if (r9701_set_datetime(&spi->dev, &dt) ||
|
||||
r9701_get_datetime(&spi->dev, &dt)) {
|
||||
dev_err(&spi->dev, "cannot repair RTC register\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,10 +26,10 @@
|
|||
#include <linux/log2.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
#include <plat/regs-rtc.h>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue