mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
RTC for 4.10
Subsystem:
- non-modular drivers are now explicitly non-modular
New driver:
- Epson Toyocom rtc-7301sf/dg
Drivers:
- cmos: reject unsupported alarm values wrt the RTC capabilities
- ds1307: ACPI support
- jz4740: DT support, jz4780 handling, can now be used as a system power
controller
- mcp795: many fixes, in particular proper month handling
- twl: driver is now DT only
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEl0I5XWmUIrwBfFMm2KKDO9oT4sIFAlhXIxkACgkQ2KKDO9oT
4sKJIQ/+MxwjMs0CZ8744orSTkX5AJTOwGcwg+SEmp23Ht0nV0SCrAkkndC3HamM
9MwT0qVmL2rgiqyeSRAjdVVIt+UFJeGXMuBhc5UBqSomjXIqfN9nA0DXuddKx/at
ZwWtPIN4HyWS5Uetn/FTXC9scBa5+2bJEYdB3ocC/QNgcCErINzPBJZEsduaxajK
AUIOhHPWn9D2cDzIxPMplPyVSWXUI3WXiF2mvgi/VAB21StQoKY6KkJV+u6Q+56t
IdJeKaAP+bF535T66wl/yY1KNhkRwF6M0qFs+qR5htoxzS6zx6hW+aRibvrIAP3/
YiAQj2L7hOjW1ky0H1rEUpjTYFxWmOx2AWZJ3ubxzveF6pz0Qn1TTrzOHVkelaHB
iuuYrxXMmC84qmHrxIdrkZdH2eu2Fm12/D1VME6bjdD4BApkEHjKebGVS4F9XaMi
Pdbb4olEslZL+XEZXkuqmopl7g1/Wf34IrCskNDoUx7t+JsCjrA+hXMVeqwl3e8m
Edcv103l1Wkivv9kHZEgx8IwOeti5d77z+QUvQzHYKK28o8zQii/3zlvQzJ/6gnE
M20vRv7cptVL4GmZd4ebFB2GOUteSfnOJJAwKZ3ipbZaGtNSs1nhAqTpg9uw4OEr
rPlRJJw5Cov1ctV+dBuVhLmzStBg3PJj2fkZ4qjdYgeiu2wZAV0=
=z4SX
-----END PGP SIGNATURE-----
Merge tag 'rtc-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux
Pull RTC updates from Alexandre Belloni:
"Subsystem:
- non-modular drivers are now explicitly non-modular
New driver:
- Epson Toyocom rtc-7301sf/dg
Drivers:
- cmos: reject unsupported alarm values wrt the RTC capabilities
- ds1307: ACPI support
- jz4740: DT support, jz4780 handling, can now be used as a system
power controller
- mcp795: many fixes, in particular proper month handling
- twl: driver is now DT only"
* tag 'rtc-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux: (31 commits)
rtc: mcp795: Fix whitespace and indentation.
rtc: mcp795: Prefer using the BIT() macro.
rtc: mcp795: fix month write resetting date to 1.
rtc: mcp795: fix time range difference between linux and RTC chip.
rtc: mcp795: fix bitmask value for leap year (LP).
rtc: mcp795: use bcd2bin/bin2bcd.
rtc: add support for EPSON TOYOCOM RTC-7301SF/DG
rtc: ds1307: Add ACPI support
rtc: imxdi: (trivial) fix a typo
rtc: ds1374: Merge conditional + WARN_ON()
rtc: twl: make driver DT only
rtc: twl: kill static variables
rtc: fix typos in Kconfig
rtc: jz4740: make the driver builtin only
rtc: jz4740: remove unused EXPORT_SYMBOL
Documentation: bindings: fix twl-rtc documentation
rtc: Enable compile testing for Maxim and Samsung drivers
MIPS: jz4740: Remove obsolete code
MIPS: qi_lb60: Probe RTC driver from DT and use it as power controller
MIPS: jz4740: DTS: Probe the jz4740-rtc driver from devicetree
...
This commit is contained in:
commit
b0b3a37b90
24 changed files with 1055 additions and 257 deletions
|
|
@ -44,6 +44,17 @@
|
|||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
rtc_dev: rtc@10003000 {
|
||||
compatible = "ingenic,jz4740-rtc";
|
||||
reg = <0x10003000 0x40>;
|
||||
|
||||
interrupt-parent = <&intc>;
|
||||
interrupts = <15>;
|
||||
|
||||
clocks = <&cgu JZ4740_CLK_RTC>;
|
||||
clock-names = "rtc";
|
||||
};
|
||||
|
||||
uart0: serial@10030000 {
|
||||
compatible = "ingenic,jz4740-uart";
|
||||
reg = <0x10030000 0x100>;
|
||||
|
|
|
|||
|
|
@ -13,3 +13,7 @@
|
|||
&ext {
|
||||
clock-frequency = <12000000>;
|
||||
};
|
||||
|
||||
&rtc_dev {
|
||||
system-power-controller;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@
|
|||
extern struct platform_device jz4740_udc_device;
|
||||
extern struct platform_device jz4740_udc_xceiv_device;
|
||||
extern struct platform_device jz4740_mmc_device;
|
||||
extern struct platform_device jz4740_rtc_device;
|
||||
extern struct platform_device jz4740_i2c_device;
|
||||
extern struct platform_device jz4740_nand_device;
|
||||
extern struct platform_device jz4740_framebuffer_device;
|
||||
|
|
|
|||
|
|
@ -438,7 +438,6 @@ static struct platform_device *jz_platform_devices[] __initdata = {
|
|||
&jz4740_pcm_device,
|
||||
&jz4740_i2s_device,
|
||||
&jz4740_codec_device,
|
||||
&jz4740_rtc_device,
|
||||
&jz4740_adc_device,
|
||||
&jz4740_pwm_device,
|
||||
&jz4740_dma_device,
|
||||
|
|
|
|||
|
|
@ -88,27 +88,6 @@ struct platform_device jz4740_mmc_device = {
|
|||
.resource = jz4740_mmc_resources,
|
||||
};
|
||||
|
||||
/* RTC controller */
|
||||
static struct resource jz4740_rtc_resources[] = {
|
||||
{
|
||||
.start = JZ4740_RTC_BASE_ADDR,
|
||||
.end = JZ4740_RTC_BASE_ADDR + 0x38 - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = JZ4740_IRQ_RTC,
|
||||
.end = JZ4740_IRQ_RTC,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device jz4740_rtc_device = {
|
||||
.name = "jz4740-rtc",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(jz4740_rtc_resources),
|
||||
.resource = jz4740_rtc_resources,
|
||||
};
|
||||
|
||||
/* I2C controller */
|
||||
static struct resource jz4740_i2c_resources[] = {
|
||||
{
|
||||
|
|
|
|||
|
|
@ -57,71 +57,8 @@ static void jz4740_restart(char *command)
|
|||
jz4740_halt();
|
||||
}
|
||||
|
||||
#define JZ_REG_RTC_CTRL 0x00
|
||||
#define JZ_REG_RTC_HIBERNATE 0x20
|
||||
#define JZ_REG_RTC_WAKEUP_FILTER 0x24
|
||||
#define JZ_REG_RTC_RESET_COUNTER 0x28
|
||||
|
||||
#define JZ_RTC_CTRL_WRDY BIT(7)
|
||||
#define JZ_RTC_WAKEUP_FILTER_MASK 0x0000FFE0
|
||||
#define JZ_RTC_RESET_COUNTER_MASK 0x00000FE0
|
||||
|
||||
static inline void jz4740_rtc_wait_ready(void __iomem *rtc_base)
|
||||
{
|
||||
uint32_t ctrl;
|
||||
|
||||
do {
|
||||
ctrl = readl(rtc_base + JZ_REG_RTC_CTRL);
|
||||
} while (!(ctrl & JZ_RTC_CTRL_WRDY));
|
||||
}
|
||||
|
||||
static void jz4740_power_off(void)
|
||||
{
|
||||
void __iomem *rtc_base = ioremap(JZ4740_RTC_BASE_ADDR, 0x38);
|
||||
unsigned long wakeup_filter_ticks;
|
||||
unsigned long reset_counter_ticks;
|
||||
struct clk *rtc_clk;
|
||||
unsigned long rtc_rate;
|
||||
|
||||
rtc_clk = clk_get(NULL, "rtc");
|
||||
if (IS_ERR(rtc_clk))
|
||||
panic("unable to get RTC clock");
|
||||
rtc_rate = clk_get_rate(rtc_clk);
|
||||
clk_put(rtc_clk);
|
||||
|
||||
/*
|
||||
* Set minimum wakeup pin assertion time: 100 ms.
|
||||
* Range is 0 to 2 sec if RTC is clocked at 32 kHz.
|
||||
*/
|
||||
wakeup_filter_ticks = (100 * rtc_rate) / 1000;
|
||||
if (wakeup_filter_ticks < JZ_RTC_WAKEUP_FILTER_MASK)
|
||||
wakeup_filter_ticks &= JZ_RTC_WAKEUP_FILTER_MASK;
|
||||
else
|
||||
wakeup_filter_ticks = JZ_RTC_WAKEUP_FILTER_MASK;
|
||||
jz4740_rtc_wait_ready(rtc_base);
|
||||
writel(wakeup_filter_ticks, rtc_base + JZ_REG_RTC_WAKEUP_FILTER);
|
||||
|
||||
/*
|
||||
* Set reset pin low-level assertion time after wakeup: 60 ms.
|
||||
* Range is 0 to 125 ms if RTC is clocked at 32 kHz.
|
||||
*/
|
||||
reset_counter_ticks = (60 * rtc_rate) / 1000;
|
||||
if (reset_counter_ticks < JZ_RTC_RESET_COUNTER_MASK)
|
||||
reset_counter_ticks &= JZ_RTC_RESET_COUNTER_MASK;
|
||||
else
|
||||
reset_counter_ticks = JZ_RTC_RESET_COUNTER_MASK;
|
||||
jz4740_rtc_wait_ready(rtc_base);
|
||||
writel(reset_counter_ticks, rtc_base + JZ_REG_RTC_RESET_COUNTER);
|
||||
|
||||
jz4740_rtc_wait_ready(rtc_base);
|
||||
writel(1, rtc_base + JZ_REG_RTC_HIBERNATE);
|
||||
|
||||
jz4740_halt();
|
||||
}
|
||||
|
||||
void jz4740_reset_init(void)
|
||||
{
|
||||
_machine_restart = jz4740_restart;
|
||||
_machine_halt = jz4740_halt;
|
||||
pm_power_off = jz4740_power_off;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue