diff options
Diffstat (limited to 'firmware/target/arm/s5l8700/ata-nand-s5l8700.c')
-rw-r--r-- | firmware/target/arm/s5l8700/ata-nand-s5l8700.c | 36 |
1 files changed, 4 insertions, 32 deletions
diff --git a/firmware/target/arm/s5l8700/ata-nand-s5l8700.c b/firmware/target/arm/s5l8700/ata-nand-s5l8700.c index 8507001415..ad87d9ea73 100644 --- a/firmware/target/arm/s5l8700/ata-nand-s5l8700.c +++ b/firmware/target/arm/s5l8700/ata-nand-s5l8700.c | |||
@@ -30,30 +30,20 @@ | |||
30 | #include "ftl-target.h" | 30 | #include "ftl-target.h" |
31 | #include "nand-target.h" | 31 | #include "nand-target.h" |
32 | 32 | ||
33 | /* for compatibility */ | ||
34 | long last_disk_activity = -1; | ||
35 | |||
36 | /** static, private data **/ | 33 | /** static, private data **/ |
37 | static bool initialized = false; | 34 | static bool initialized = false; |
38 | 35 | ||
39 | static long nand_stack[20]; | ||
40 | |||
41 | /* API Functions */ | 36 | /* API Functions */ |
42 | |||
43 | int nand_read_sectors(IF_MD2(int drive,) unsigned long start, int incount, | 37 | int nand_read_sectors(IF_MD2(int drive,) unsigned long start, int incount, |
44 | void* inbuf) | 38 | void* inbuf) |
45 | { | 39 | { |
46 | int rc = ftl_read(start, incount, inbuf); | 40 | return ftl_read(start, incount, inbuf); |
47 | last_disk_activity = current_tick; | ||
48 | return rc; | ||
49 | } | 41 | } |
50 | 42 | ||
51 | int nand_write_sectors(IF_MD2(int drive,) unsigned long start, int count, | 43 | int nand_write_sectors(IF_MD2(int drive,) unsigned long start, int count, |
52 | const void* outbuf) | 44 | const void* outbuf) |
53 | { | 45 | { |
54 | int rc = ftl_write(start, count, outbuf); | 46 | return ftl_write(start, count, outbuf); |
55 | last_disk_activity = current_tick; | ||
56 | return rc; | ||
57 | } | 47 | } |
58 | 48 | ||
59 | void nand_spindown(int seconds) | 49 | void nand_spindown(int seconds) |
@@ -73,7 +63,7 @@ void nand_sleepnow(void) | |||
73 | 63 | ||
74 | void nand_spin(void) | 64 | void nand_spin(void) |
75 | { | 65 | { |
76 | last_disk_activity = current_tick; | 66 | nand_set_active(); |
77 | } | 67 | } |
78 | 68 | ||
79 | void nand_enable(bool on) | 69 | void nand_enable(bool on) |
@@ -93,40 +83,22 @@ void nand_get_info(IF_MD2(int drive,) struct storage_info *info) | |||
93 | 83 | ||
94 | long nand_last_disk_activity(void) | 84 | long nand_last_disk_activity(void) |
95 | { | 85 | { |
96 | return last_disk_activity; | 86 | return nand_last_activity(); |
97 | } | 87 | } |
98 | 88 | ||
99 | #ifdef HAVE_STORAGE_FLUSH | 89 | #ifdef HAVE_STORAGE_FLUSH |
100 | int nand_flush(void) | 90 | int nand_flush(void) |
101 | { | 91 | { |
102 | last_disk_activity = current_tick; | ||
103 | int rc = ftl_sync(); | 92 | int rc = ftl_sync(); |
104 | if (rc != 0) panicf("Failed to unmount flash: %X", rc); | 93 | if (rc != 0) panicf("Failed to unmount flash: %X", rc); |
105 | return rc; | 94 | return rc; |
106 | } | 95 | } |
107 | #endif | 96 | #endif |
108 | 97 | ||
109 | static void nand_thread(void) | ||
110 | { | ||
111 | while (1) | ||
112 | { | ||
113 | if (TIME_AFTER(current_tick, last_disk_activity + HZ / 5)) | ||
114 | nand_power_down(); | ||
115 | sleep(HZ / 10); | ||
116 | } | ||
117 | } | ||
118 | |||
119 | int nand_init(void) | 98 | int nand_init(void) |
120 | { | 99 | { |
121 | if (ftl_init()) return 1; | 100 | if (ftl_init()) return 1; |
122 | 101 | ||
123 | last_disk_activity = current_tick; | ||
124 | |||
125 | create_thread(nand_thread, nand_stack, | ||
126 | sizeof(nand_stack), 0, "nand" | ||
127 | IF_PRIO(, PRIORITY_USER_INTERFACE) | ||
128 | IF_COP(, CPU)); | ||
129 | |||
130 | initialized = true; | 102 | initialized = true; |
131 | return 0; | 103 | return 0; |
132 | } | 104 | } |