|
@@ -125,3 +125,66 @@ static int ts78xx_ts_rtc_load(void)
|
|
|
unsigned char tmp_rtc0, tmp_rtc1;
|
|
|
|
|
|
tmp_rtc0 = ts78xx_ts_rtc_readbyte(126);
|
|
|
+ tmp_rtc1 = ts78xx_ts_rtc_readbyte(127);
|
|
|
+
|
|
|
+ ts78xx_ts_rtc_writebyte(0x00, 126);
|
|
|
+ ts78xx_ts_rtc_writebyte(0x55, 127);
|
|
|
+ if (ts78xx_ts_rtc_readbyte(127) == 0x55) {
|
|
|
+ ts78xx_ts_rtc_writebyte(0xaa, 127);
|
|
|
+ if (ts78xx_ts_rtc_readbyte(127) == 0xaa
|
|
|
+ && ts78xx_ts_rtc_readbyte(126) == 0x00) {
|
|
|
+ ts78xx_ts_rtc_writebyte(tmp_rtc0, 126);
|
|
|
+ ts78xx_ts_rtc_writebyte(tmp_rtc1, 127);
|
|
|
+
|
|
|
+ if (ts78xx_fpga.supports.ts_rtc.init == 0) {
|
|
|
+ rc = platform_device_register(&ts78xx_ts_rtc_device);
|
|
|
+ if (!rc)
|
|
|
+ ts78xx_fpga.supports.ts_rtc.init = 1;
|
|
|
+ } else
|
|
|
+ rc = platform_device_add(&ts78xx_ts_rtc_device);
|
|
|
+
|
|
|
+ if (rc)
|
|
|
+ pr_info("RTC could not be registered: %d\n",
|
|
|
+ rc);
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ pr_info("RTC not found\n");
|
|
|
+ return -ENODEV;
|
|
|
+};
|
|
|
+
|
|
|
+static void ts78xx_ts_rtc_unload(void)
|
|
|
+{
|
|
|
+ platform_device_del(&ts78xx_ts_rtc_device);
|
|
|
+}
|
|
|
+
|
|
|
+/*****************************************************************************
|
|
|
+ * NAND Flash
|
|
|
+ ****************************************************************************/
|
|
|
+#define TS_NAND_CTRL (TS78XX_FPGA_REGS_VIRT_BASE + 0x800) /* VIRT */
|
|
|
+#define TS_NAND_DATA (TS78XX_FPGA_REGS_PHYS_BASE + 0x804) /* PHYS */
|
|
|
+
|
|
|
+/*
|
|
|
+ * hardware specific access to control-lines
|
|
|
+ *
|
|
|
+ * ctrl:
|
|
|
+ * NAND_NCE: bit 0 -> bit 2
|
|
|
+ * NAND_CLE: bit 1 -> bit 1
|
|
|
+ * NAND_ALE: bit 2 -> bit 0
|
|
|
+ */
|
|
|
+static void ts78xx_ts_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
|
|
|
+ unsigned int ctrl)
|
|
|
+{
|
|
|
+ struct nand_chip *this = mtd->priv;
|
|
|
+
|
|
|
+ if (ctrl & NAND_CTRL_CHANGE) {
|
|
|
+ unsigned char bits;
|
|
|
+
|
|
|
+ bits = (ctrl & NAND_NCE) << 2;
|
|
|
+ bits |= ctrl & NAND_CLE;
|
|
|
+ bits |= (ctrl & NAND_ALE) >> 2;
|
|
|
+
|
|
|
+ writeb((readb(TS_NAND_CTRL) & ~0x7) | bits, TS_NAND_CTRL);
|
|
|
+ }
|
|
|
+
|